
Bitepals
A web and mobile product from one monorepo
Next.js web app and Expo mobile app sharing design tokens, Zod schemas and Clerk authentication in a single pnpm workspace.
Built by hand
Seventeen live sites across seven domains, a few npm packages, a grove of Chrome extensions and the odd game. Most of it open source, all of it maintained by one pair of hands. The four at the top are the ones that pushed hardest.

A web and mobile product from one monorepo
Next.js web app and Expo mobile app sharing design tokens, Zod schemas and Clerk authentication in a single pnpm workspace.

A grove of hand-grown Chrome extensions
Four Manifest V3 extensions in one workspace: CookieJar, HeaderForge, HopChase and Focaccia. Header rewriting on the wire, redirect tracing with HAR export, cookie editing with JWT decoding.

Accessible, stackable modals for React
Portal rendered, focus trapped, addressable by id from anywhere in the tree, and styled entirely through CSS variables. Published on npm with a documentation site.

The Cerdanya's restaurants, ordered by altitude
A guide to 44 restaurants in 17 villages on both sides of the French border. The valley's cross-section is drawn from measured terrain, and every entry sits at its real height.

This site: two blogs, resources, and the tooling behind them

The résumé as a single-page app

A one-page homage to the Soms family and the Garrotxa

A marine reserve and its 69 fish

A trilingual corporate site for an advisory firm

A bilingual brochure site for a training studio

Depth on scroll with nothing but CSS

A toddler who will not stop, and a house you can rearrange

A football management game in the idiom of PC Fútbol

Eloquent JavaScript's Dark Blue, in TypeScript
Snake on a canvas, from a book for kids
Two classics in plain JavaScript
A browser game built only from Observables
The bowling-score kata as a web app
Arabic to Roman and back
A plain-text script becomes a narrated MP3
Post covers and social cards from Claude Code
One cookieless tracker for seventeen sites