Skip to content

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