Back to portfolio

Digital garden

Working notes from the lab — published while they grow, not once they're perfect.

  • Git worktrees + hoisted pnpm: where did my binaries go?

    A git worktree is a fresh checkout — it has your files, not your node_modules. With pnpm's hoisted linker every tool binary lives at the original repo root, so eslint/vitest/next simply don't exist in the worktree.

    SeedlingPlanted Jun 26, 2026Last tended Jul 19, 2026pnpmgitmonorepotooling
  • Never throw at module load in Next.js

    next build imports your modules with production NODE_ENV but none of your runtime env. A top-level throw on a missing env var kills the whole build. Degrade instead.

    BuddingPlanted Jun 26, 2026Last tended Jul 19, 2026nextjspatternstil
  • Next.js 16: middleware.ts is now proxy.ts

    Next 16 renamed the middleware file convention to proxy.ts. Same API, better name — and a reminder that it should stay a cheap presence check, never your only auth gate.

    BuddingPlanted Jun 26, 2026Last tended Jul 19, 2026nextjsfrontend
  • An Obsidian vault as a cross-tool AI external brain

    One markdown vault as the shared memory for every AI I work with — coding agents read and write it natively, web chats bridge in via a paste ritual. The rules that keep it from rotting.

    SeedlingPlanted Jun 25, 2026Last tended Jul 19, 2026aiobsidianworkflowmeta
  • Two apps, one Neon database

    Sharing one Postgres between two apps works fine — if you prefix your tables and treat drizzle db:push as a loaded gun. Versioned migrations only.

    BuddingPlanted Jun 26, 2026Last tended Jul 19, 2026postgresneondrizzlemonorepo
  • Why this garden exists

    Working notes, published while they grow. What this section is and why it exists.

    SeedlingPlanted Jul 13, 2026metawriting
  • TIL: Postgres websearch_to_tsquery

    Postgres ships a full-text query parser that understands Google-like syntax out of the box — quoted phrases, OR, and -exclusions — no hand-rolled parser required:

    BuddingPlanted Jun 29, 2026Last tended Jul 8, 2026postgressearchtil
  • React 19: use() is not a hook

    use() looks like a hook but deliberately breaks the rules of hooks: you can call it inside conditionals and loops. It does two unrelated-looking things with one API:

    BuddingPlanted Jun 21, 2026Last tended Jul 2, 2026reactfrontend