Selected work
Projects shaped by product thinking and hands-on engineering.
Full-stack sites, offline-first apps, and a published browser extension. The through-line is practical: choose a useful constraint, build the thing, learn from it, and make the next version clearer.
Full-stack site
The Her Family
A server-rendered memorial hub with multi-memorial routing, a lightbox gallery, and a custom video player.
Designed and built the site, admin panel, and data layer end to end.
- Built multi-memorial routing, an image carousel with lightbox, and a custom video player.
- Backed it with SQLite/Turso and a secure admin panel for inline editing, drag-and-drop CDN uploads, and moderated comments.
- Shipped a mobile-first experience with keyboard- and touch-navigable media, static-first for fast loads.
- Astro
- Astro DB
- Turso
- Tailwind CSS
- Cloudinary
- Vercel
Finance PWA
Nya
A mobile-first finance app that aggregates balances, transactions, and holdings across banks, brokerages, and credit cards.
Built the full stack, from account linking to the net-worth engine.
- Aggregated accounts across institutions through a single account-linking API.
- Added category budgets with severity thresholds, recurring-bill detection, and a daily net-worth engine with estimated backfill for gapless charts.
- Secured tokens with AES-256-GCM, signed session cookies, and IP-based login rate limiting, with Redis-cached reads.
- Next.js
- React
- TypeScript
- Bun
- Plaid API
- Upstash Redis
Offline-first PWA
Cast Guidance
An installable tabletop character builder that derives every stat on read and works entirely offline.
Architected the derivation engine, local persistence, and test pipeline.
- Wrote a pure derivation engine that recomputes proficiencies, AC, HP, initiative, attacks, and spell slots on every read, with per-field manual overrides.
- Persisted only user choices and play state to IndexedDB behind repository interfaces, gated by CI running lint, strict types, and tests.
- Added live session tracking, a dice-expression parser and roller, full-text ruleset search, and user-authored content import.
- React 19
- TypeScript
- Vite
- Zustand
- Dexie/IndexedDB
- Vitest
Browser extension
TabbyNotes
A tabbed Markdown notebook extension for Chrome and Firefox, published on Firefox Add-ons, with a live preview editor and zero network requests.
Built the extension end to end and shipped the store listing.
- Built a live preview editor on CodeMirror 6 and React 19.
- Designed it privacy-first: zero browser permissions, zero network requests, notes stored as portable Markdown with import and export.
- Shipped keyboard tab navigation, drag reordering, switchable tab layouts, and light and dark themes.
- TypeScript
- React
- WXT
- CodeMirror
- Tailwind CSS
- Bun
Personal site
Astro Portfolio
A fast, responsive portfolio built with Astro, Tailwind CSS, and Vercel previews, shipping no framework JavaScript.
Designed, built, and maintained the site end to end.
- Migrated the stack to Astro 7 and Tailwind 4.
- Replaced React islands with small inline scripts, so pages ship no framework runtime.
- Added deployment previews through the Vercel GitHub flow.
- Astro
- TypeScript
- Tailwind CSS
- Vercel