Portfolio · Writing

Notes from the build.

Stack calls, dead ends, and the reasoning behind both. No hot takes I haven't shipped behind.

Laptop displaying code beside a smartphone and notebook on a sunlit desk.
Featured

TypeScript or nothing

One language from the phone to the database. Here's why every project I take on is TypeScript end to end, and why I stopped apologising for it.

·5 min read
Read the post
Two concrete paths diverging around a modern building in afternoon light.
·6 min read

Next.js or TanStack Start

Two React full-stack frameworks, one decision. Here's how I actually choose between Next.js and TanStack Start, and the projects where each one wins.

Two smartphones displaying matching blue and cream app interfaces beside a laptop.
·6 min read

One codebase, both app stores

One Expo codebase ships to iOS and Android without a Mac maze or two separate builds. Here's the pipeline I use, and the one feature that lets me fix a bug without waiting on Apple.

Laptop with a checklist beside a label printer and packed parcels in a fulfilment workshop.
·7 min read

AI that ships, not AI that demos

Every founder wants AI in the product. Most AI features are demos that die in a sprint. Here's how I build the kind that survives contact with real users.

Tablet displaying a full-screen sales interface on a ceramics shop counter.
·10 min read

Build the web app like an appliance

Offline-first PWA architecture, from the service worker outward. Why you design for the network dropping instead of the network being slow, and the caching, cache-warming, and background-sync patterns that make a web app behave like a native one.