Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions STATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Session state — sandip.dev + blog.sandip.dev

_Last updated: 2026-05-16_

A resume point for the work-in-progress across sandip.dev and the WordPress
blog theme. Drop this in front of a fresh Claude session to pick up where
we left off.

---

## Repos / surfaces

| Surface | Where it lives | Deploy mechanism |
| -------------------- | ------------------------------------------------------ | ----------------------------------------- |
| sandip.dev (site) | `index.html`, `referral.html`, root of this repo | GitHub Pages from `main` |
| blog.sandip.dev | WordPress (hosted), theme uploaded manually | Theme zip at `wordpress-theme/sandip-dev.zip` → WP admin → Appearance → Themes → Add New |

GitHub repo: <https://github.com/devsandip/sandip.dev>

---

## What shipped this session

1. **Homepage social links wired up** (`index.html`)
- LinkedIn → <https://www.linkedin.com/feed/>
- Medium → <https://sandipdev.medium.com/>
- GitHub → <https://github.com/devsandip>
- Blog → <https://www.blog.sandip.dev/>
- Apps & hobby projects → still no URL (intentional placeholder)

2. **Contact channels** (`index.html`)
- LinkedIn, GitHub, Medium channels are now anchors with `target="_blank"` + `rel="noopener"`.
- X (Twitter) and Phone left as non-link rows pending URLs.

3. **"// currently" sidebar** refreshed:
- reading: _Humble Pi: When Math Goes Wrong in the Real World_ → linked to Goodreads
- building: <https://wndr.ist/> + AI OS — linked
- drinking: Pegasus Coffee Winslow's Revenge (linked) · double shot, no milk
- thinking: about why most dashboards lie politely
- avoiding: people

4. **WordPress theme** `wordpress-theme/sandip-dev/`
- Mirrors sandip.dev: Inter + Fraunces + JetBrains Mono, four palettes (fog default, white, paper, ink), sticky masthead with green status dot, row-based post list.
- Templates: `index.php`, `single.php`, `page.php`, `archive.php`, `search.php`, `searchform.php`, `404.php`, `comments.php`, plus `header.php` / `footer.php`.
- `functions.php` exposes `sandip_dev_reading_time()` and a `sandip_dev_theme` filter for palette override; supports `?theme=fog|white|paper|ink` query param.
- `editor-style.css` so Gutenberg preview matches.
- Brand assets at `wordpress-theme/sandip-dev/assets/` (logo-mark PNG + white variant, favicon SVG).
- Pre-zipped: `wordpress-theme/sandip-dev.zip` — uploaded to WordPress; the user activated it.

## Git state

Branch: `claude/pedantic-borg-1fb76c` (worktree at `/Users/sandipdev/Developer/sandip.dev/.claude/worktrees/pedantic-borg-1fb76c`).

Commits ahead of remote `claude/pedantic-borg-1fb76c`:

- `0e7d5b0` — Add WordPress theme matching sandip.dev look & feel
- `8c6fb0c` — Update currently list + link out Humble Pi, wndr.ist, Pegasus coffee (already on `main` via direct push)

Push policy seen in this session:

- Auto-mode classifier **blocks direct push to `main`** by default.
- It also **blocks push of the feature branch** unless explicitly approved.
- Workaround: either ask the user to authorize (they may approve a PR push), or have the user push manually.
- One PR was opened + merged this session: <https://github.com/devsandip/sandip.dev/pull/1> (squash-merged as `0c1503c`).

## Open / not done

- **Apps & hobby projects** link on home — still has no URL.
- **X (Twitter)** and **Phone** rows on Contact — no URLs.
- The WordPress theme commit (`0e7d5b0`) is **local only** — never pushed. If the user wants the theme tracked in GitHub, push or PR it.
- No screenshot.png for the WP theme (optional, only affects Appearance → Themes preview tile).
- No Customizer integration (palette is filter-based, not a UI toggle).
- Comments styling assumes default WP comment-form markup; not verified against the live blog yet.

## Quick re-entry checklist

```
cd /Users/sandipdev/Developer/sandip.dev
git fetch origin
git -C .claude/worktrees/pedantic-borg-1fb76c log --oneline -5
ls .claude/worktrees/pedantic-borg-1fb76c/wordpress-theme/sandip-dev
```

## URLs that came up

- Site: <https://sandip.dev>
- Blog: <https://www.blog.sandip.dev/>
- Repo: <https://github.com/devsandip/sandip.dev>
- wndr.ist: <https://wndr.ist/>
- Pegasus coffee (Winslow's Revenge): <https://pegasuscoffee.com/products/winslows-revenge?_pos=3&_fid=ec0217a2c&_ss=c>
- Humble Pi (Goodreads): <https://www.goodreads.com/book/show/39074550-humble-pi>
Binary file added wordpress-theme/sandip-dev.zip
Binary file not shown.
24 changes: 24 additions & 0 deletions wordpress-theme/sandip-dev/404.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php
/**
* 404 page.
*
* @package Sandip_Dev
*/

get_header();
?>

<div class="page-narrow">
<section class="error-404">
<div class="label">// 404</div>
<h1>Not <em>here.</em></h1>
<p>
This page either moved, never existed, or got lost in a refactor. Try the
<a href="<?php echo esc_url( home_url( '/' ) ); ?>">blog index</a>, or head back to
<a href="https://sandip.dev/">sandip.dev</a>.
</p>
<div style="margin-top: 32px;"><?php get_search_form(); ?></div>
</section>
</div>

<?php get_footer(); ?>
50 changes: 50 additions & 0 deletions wordpress-theme/sandip-dev/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Sandip Dev — WordPress theme

A WordPress theme that mirrors the [sandip.dev](https://sandip.dev) look: Inter + Fraunces + JetBrains Mono, generous whitespace, a sticky header with a status dot, and a row-based post index that echoes the "elsewhere on the internet" list from the home page.

## Install

1. Zip this folder: `zip -r sandip-dev.zip sandip-dev/`
2. In WordPress admin → **Appearance → Themes → Add New → Upload Theme** → pick the zip → **Install** → **Activate**.

Or via SFTP: drop the `sandip-dev/` folder into `wp-content/themes/`.

## Configure

- **Permalinks:** Settings → Permalinks → **Post name** (recommended).
- **Reading:** Settings → Reading → set "Your homepage displays" to **Your latest posts** (or pick a static page).
- **Menus:** Appearance → Menus → create a menu, assign it to the **Primary** location. If you skip this, the theme falls back to a built-in nav linking to sandip.dev sections + "blog" (active).
- **Footer menu:** assign to **Footer** location, or skip — the built-in footer links work fine.

## Palettes

Four palettes ship with the theme, switchable per-request via `?theme=fog|white|paper|ink`, or globally via filter in a child theme / mu-plugin:

```php
add_filter( 'sandip_dev_theme', function () {
return 'paper'; // fog | white | paper | ink
} );
```

Default is **fog** (matches the sandip.dev default).

## What's included

| Template | Purpose |
| -------------- | --------------------------------------------- |
| `index.php` | Blog index with editorial row list |
| `single.php` | Single post w/ deck, featured image, post-nav |
| `page.php` | Static page |
| `archive.php` | Category / tag / date / author archives |
| `search.php` | Search results + form |
| `404.php` | Not-found |
| `comments.php` | Threaded comments + reply form |
| `searchform.php` | Shared search form |
| `editor-style.css` | Gutenberg editor preview |

## Notes

- Fonts are loaded from Google Fonts (Inter, JetBrains Mono, Fraunces) — same set as sandip.dev.
- The logo mark expects `assets/logo-mark.png` (and `logo-mark-white.png` for the **ink** dark palette). Replace these to rebrand.
- Reading-time helper: `sandip_dev_reading_time()` — outputs e.g. `4 min read` based on a 220 wpm estimate.
- The site title in the header is hard-printed as `sandip.dev/blog` to match the masthead pattern; change in `header.php` if you fork.
69 changes: 69 additions & 0 deletions wordpress-theme/sandip-dev/archive.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php
/**
* Archive (category, tag, date, author).
*
* @package Sandip_Dev
*/

get_header();
?>

<div class="page">

<header class="index-hero">
<div class="label">
<?php
if ( is_category() ) {
esc_html_e( '// category', 'sandip-dev' );
} elseif ( is_tag() ) {
esc_html_e( '// tag', 'sandip-dev' );
} elseif ( is_author() ) {
esc_html_e( '// author', 'sandip-dev' );
} elseif ( is_search() ) {
esc_html_e( '// search', 'sandip-dev' );
} else {
esc_html_e( '// archive', 'sandip-dev' );
}
?>
</div>
<h1><?php echo wp_kses_post( get_the_archive_title() ); ?></h1>
<?php
$desc = get_the_archive_description();
if ( $desc ) {
echo '<p class="tagline">' . wp_kses_post( $desc ) . '</p>';
}
?>
</header>

<?php if ( have_posts() ) : ?>
<div class="post-list">
<?php while ( have_posts() ) : the_post(); ?>
<a class="post-row" href="<?php the_permalink(); ?>">
<span class="post-date"><?php echo esc_html( get_the_date( 'M j, Y' ) ); ?></span>
<div>
<div class="post-title"><?php the_title(); ?></div>
<?php if ( has_excerpt() || get_the_excerpt() ) : ?>
<p class="post-excerpt"><?php echo esc_html( wp_strip_all_tags( get_the_excerpt() ) ); ?></p>
<?php endif; ?>
<div class="post-meta"><?php echo esc_html( sandip_dev_reading_time() ); ?></div>
</div>
<span class="post-arrow" aria-hidden="true">→</span>
</a>
<?php endwhile; ?>
</div>

<nav class="pagination">
<?php
$prev = get_previous_posts_link( '← newer' );
$next = get_next_posts_link( 'older →' );
echo '<span>' . ( $prev ? $prev : '&nbsp;' ) . '</span>';
echo '<span>' . ( $next ? $next : '&nbsp;' ) . '</span>';
?>
</nav>
<?php else : ?>
<p class="tagline"><?php esc_html_e( 'Nothing matched.', 'sandip-dev' ); ?></p>
<?php endif; ?>

</div>

<?php get_footer(); ?>
15 changes: 15 additions & 0 deletions wordpress-theme/sandip-dev/assets/favicon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added wordpress-theme/sandip-dev/assets/logo-mark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
58 changes: 58 additions & 0 deletions wordpress-theme/sandip-dev/comments.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php
/**
* Comments template.
*
* @package Sandip_Dev
*/

if ( post_password_required() ) {
return;
}
?>

<section class="comments-area">

<?php if ( have_comments() ) : ?>
<h2 class="comments-title">
<?php
$cc = get_comments_number();
/* translators: 1: number of comments, 2: post title */
printf( esc_html( _n( '%s comment', '%s comments', $cc, 'sandip-dev' ) ), esc_html( number_format_i18n( $cc ) ) );
?>
</h2>

<ol class="comment-list">
<?php
wp_list_comments(
array(
'style' => 'ol',
'short_ping' => true,
'avatar_size' => 36,
)
);
?>
</ol>

<?php
the_comments_navigation(
array(
'prev_text' => '← ' . esc_html__( 'older comments', 'sandip-dev' ),
'next_text' => esc_html__( 'newer comments', 'sandip-dev' ) . ' →',
)
);
?>
<?php endif; ?>

<?php if ( ! comments_open() && get_comments_number() ) : ?>
<p><?php esc_html_e( 'Comments are closed.', 'sandip-dev' ); ?></p>
<?php endif; ?>

<?php
comment_form(
array(
'class_submit' => 'submit',
'title_reply' => esc_html__( 'Leave a reply', 'sandip-dev' ),
)
);
?>
</section>
39 changes: 39 additions & 0 deletions wordpress-theme/sandip-dev/editor-style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/* Minimal editor styles so the writing experience matches the front-end. */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;600&family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600&display=swap');

.editor-styles-wrapper {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
font-size: 18px;
line-height: 1.7;
color: #0A0A0B;
background: #F6F6F7;
}
.editor-styles-wrapper h1,
.editor-styles-wrapper h2 {
font-family: 'Inter', sans-serif;
font-weight: 700;
letter-spacing: -0.02em;
}
.editor-styles-wrapper .wp-block-post-title,
.editor-styles-wrapper h1.editor-post-title__input {
font-family: 'Fraunces', Georgia, serif;
font-weight: 500;
font-size: 48px;
line-height: 1.1;
letter-spacing: -0.02em;
}
.editor-styles-wrapper em {
font-family: 'Fraunces', serif;
font-style: italic;
}
.editor-styles-wrapper blockquote {
border-left: 2px solid #1F4DDA;
padding-left: 24px;
font-family: 'Fraunces', Georgia, serif;
font-style: italic;
font-size: 22px;
color: #4A4A52;
}
.editor-styles-wrapper code, .editor-styles-wrapper pre {
font-family: 'JetBrains Mono', monospace;
}
19 changes: 19 additions & 0 deletions wordpress-theme/sandip-dev/footer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
</main>

<footer class="site">
<div class="footer-inner">
<div>
© <?php echo esc_html( gmdate( 'Y' ) ); ?> Sandip Dev — <?php echo esc_html( get_bloginfo( 'description' ) ); ?>
</div>
<div class="footer-links">
<a href="https://sandip.dev/">sandip.dev</a>
<a href="https://www.linkedin.com/feed/" target="_blank" rel="noopener">linkedin</a>
<a href="https://github.com/devsandip" target="_blank" rel="noopener">github</a>
<a href="<?php echo esc_url( get_feed_link() ); ?>">rss</a>
</div>
</div>
</footer>

<?php wp_footer(); ?>
</body>
</html>
Loading