Skip to content
// writing

Thoughts on code,
craft & exploration.

A mix of technical deep-dives, career reflections, and dispatches from the road.

Obsidian as Your Default Markdown App: Opening Files Outside the Vault thumbnail
obsidianNov 10, 2026· 4 min
Obsidian as Your Default Markdown App: Opening Files Outside the Vault
Obsidian 1.14 can finally open a Markdown file that isn't in a vault. Here's how to make it your default .md app, what works on stray files, and what doesn't.
read more →
Laravel 13 Vector Search: Semantic Queries Without a Search Service thumbnail
developmentNov 9, 2026· 4 min
Laravel 13 Vector Search: Semantic Queries Without a Search Service
Laravel 13 adds whereVectorSimilarTo, vector columns, and an AsVector cast, so meaning-based search can live in the Postgres or MariaDB database you run.
read more →
React's browser() API: Opt Out of SSR Without the Mounted-State Hack thumbnail
developmentNov 8, 2026· 4 min
React's browser() API: Opt Out of SSR Without the Mounted-State Hack
React 19.3 adds use(browser()), a first-class way to mark a component browser-only during SSR, replacing typeof window checks and useEffect mounted flags.
read more →
Proof of Reserves: What an Exchange's Merkle Tree Can and Can't Prove thumbnail
financeNov 8, 2026· 4 min
Proof of Reserves: What an Exchange's Merkle Tree Can and Can't Prove
Exchanges publish proof of reserves to show customer funds are backed. Here's how the Merkle sum tree works, and the liabilities it was never built to see.
read more →
LLM Rate Limits: Your Retry Loop Is the Easy Part thumbnail
AINov 8, 2026· 4 min
LLM Rate Limits: Your Retry Loop Is the Easy Part
Not every 429 is worth retrying. How to handle LLM API rate limits without stacking retries, burning budget on spend-cap errors, or finding limits by failing.
read more →
Writing an MCP Server: The Tool Description Is the Whole API thumbnail
AINov 6, 2026· 4 min
Writing an MCP Server: The Tool Description Is the Whole API
A walkthrough of building an MCP server with the v2 TypeScript SDK, and why your schemas, descriptions, and error messages matter more than protocol plumbing.
read more →
Oxlint JS Plugins: Your Custom ESLint Rules No Longer Keep You on ESLint thumbnail
developmentNov 5, 2026· 4 min
Oxlint JS Plugins: Your Custom ESLint Rules No Longer Keep You on ESLint
Oxlint now runs ESLint plugins and your own custom rules, so the last excuse for a slow lint step is gone. Here's how JS plugins work and where the gaps are.
read more →
Your Bitcoin Wallet Has No Balance: UTXOs, Change, and Why Fees Ignore the Amount thumbnail
financeNov 4, 2026· 4 min
Your Bitcoin Wallet Has No Balance: UTXOs, Change, and Why Fees Ignore the Amount
Bitcoin tracks unspent outputs, not balances. Here's how the UTXO model works, where change goes, and why sending $50 can cost more than sending $50,000.
read more →
Obsidian Maps: Put Your Place Notes on a Map With Bases thumbnail
obsidianNov 3, 2026· 4 min
Obsidian Maps: Put Your Place Notes on a Map With Bases
The official Maps plugin turns any Base into an interactive map. Here's how to structure coordinates, drive marker icons from properties, and avoid setup traps.
read more →
GraphQL @defer: Stop Letting Your Slowest Field Set Your Load Time thumbnail
developmentNov 2, 2026· 4 min
GraphQL @defer: Stop Letting Your Slowest Field Set Your Load Time
One slow resolver can hold a whole GraphQL response hostage. Here's how @defer and @stream split a query into an initial payload and patches, and what to check.
read more →
// the newsletter
Don't miss the next one