Hobby Projects
A running list of side projects I tinker with outside of work.
Seat Share
seatshare.site is a season-ticket-sharing app for groups who split an NBA package across multiple households. Each household rates games, opponents, days, and times on a 1–20 scale, and an envy-free draft algorithm hands out games so that — when it’s done — no household would rather have anyone else’s schedule. There’s also a calendar view, in-app swap proposals for games you can’t make, and a one-click random distribution mode if your group just wants to skip the preferences step.
Why I built it: my family shares an NBA season package, and every year the “who gets which games” conversation turned into a spreadsheet-and-text-thread negotiation. Seat Share replaces that with a token-budget draft: every household starts with the same shared currency, preferences add weight to specific games, and the algorithm cycles through households picking each household’s highest-value game first. It scratched a personal itch and also gave me an excuse to dig into fair-division algorithms.
It’s also the first real consumer of Just-Deliver.dev — all magic-link login emails for Seat Share flow through that service.
| Language | TypeScript (Node.js 22) |
| Frontend | React 19 + Vite + Tailwind CSS |
| Backend | Hono on AWS Lambda |
| Database | Neon PostgreSQL + Drizzle ORM |
| Cloud | AWS |
| Services | API Gateway · Lambda · CloudFront · S3 · ACM |
| Infra-as-code | AWS CDK |
| Auth | Passwordless magic links (HTTP-only cookies) |
| Just-Deliver.dev | |
| External data | balldontlie.io (NBA schedule import) |
| Domain | seatshare.site (Namecheap DNS, ACM-issued certs) |
| Repo layout | pnpm workspace |
Just-Deliver.dev

A serverless transactional email microservice on AWS. It wraps Amazon SES behind a simple HTTP API so multiple apps can share one SES setup, each authenticating with their own API key. A small React admin console (deployed on CloudFront + S3) handles key management, per-key from-address allowlists, and send/bounce/complaint history.
Why I built it: I had a few hobby sites that needed to send email from custom domains, and the entry-level paid plan from resend.com was $20/month for capabilities I knew I could get from SES for pennies. Just-Deliver.dev gives me the same ergonomics — one API endpoint, multiple sender domains, an admin UI — without the recurring bill.
| Language | TypeScript (Node.js 20) |
| Frontend | React + Vite (admin SPA) |
| Cloud | AWS |
| Services | API Gateway · Lambda · SQS · DynamoDB · SES · CloudFront · S3 · SNS |
| Infra-as-code | AWS CDK |
| Auth | Per-app API keys (callers) · Clerk JWT (admin) |
| Domain | just-deliver.dev (Namecheap DNS, ACM-issued certs) |
| Repo layout | pnpm workspace — packages/api (CDK + Lambdas + CLI), packages/admin (React console) |
Box Pool
boxpool.io is a football-squares pool app: pick your squares, draw the digits, and the app scores and pays out automatically as each game progresses. Live scores come from an NFL data feed, magic-link login replaces passwords, and the whole thing is designed for the kind of casual office/family pool that usually runs on a printed grid taped to a fridge.
Why I keep building it: Box Pool is the side project I’ve reinvented more than any other. Earlier incarnations have been a Google App Engine app, a Slackbot, and a few in-between experiments — each one driven less by needing a new app and more by wanting an excuse to learn a new language, framework, or platform. This latest version is the AWS rewrite: React + Hono on Lambda, Postgres on Neon, magic-link auth through Just-Deliver.dev. At this point it’s less a product and more my “hello, world” for whatever stack I’m curious about.
| Language | TypeScript (Node.js 20) |
| Frontend | React + Vite |
| Backend | Hono on AWS Lambda |
| Database | Neon PostgreSQL |
| Cloud | AWS |
| Services | API Gateway · Lambda · CloudFront · S3 · ACM |
| Infra-as-code | AWS CDK |
| Auth | Passwordless magic links |
| Just-Deliver.dev | |
| External data | api-sports.io (NFL scores) |
| Domain | boxpool.io (ACM-issued certs) |
| Repo layout | pnpm workspace — packages/web, packages/api, packages/infra |
| Previous lives | Google App Engine app · Slackbot · assorted experiments |
e95compiler.com
e95compiler.com is a compiler for the subset of C used in Harvard Extension School’s CSCI E-95: Compiler Design. It runs the full pipeline — lexing, parsing, semantic analysis, intermediate representation, and MIPS 32 code generation — and the web app on top adds a small step-by-step IR emulator (registers, memory, output) so you can watch a program execute one IR instruction at a time.
Why I built it: I took E-95 years ago and the project — building your own compiler from scratch over a semester — has stuck with me ever since. The first version of mine was the assignment itself: C with Flex for the lexer, Bison for the parser, and hand-written C for the rest, emitting MIPS 32 assembly. In late 2020 I rewrote the whole thing in Go as a way to learn the language. There was no comparable Flex for Go, so I wrote the lexer from scratch; for parsing I switched from Bison to goyacc, which kept the grammar definition familiar.
Today I’m a Graduate Teaching Assistant for the course, and both pieces have a real job: the React web app is what I use to walk through examples with students (with the IR emulator making each phase tangible), and the Go CLI is what runs in the autograder — student submissions are exercised against a suite of unit tests through the same binary.
| Language | Go 1.22 (CLI + Lambda) · TypeScript (web) |
| Frontend | React + Vite |
| Backend | Go on AWS Lambda |
| Cloud | AWS |
| Services | API Gateway · Lambda · CloudFront · S3 · DynamoDB · ACM · Cloudwatch for metrics |
| Infra-as-code | AWS CDK |
| Auth | Clerk (GitHub SSO) · DynamoDB allowlist |
| Compiler stages | Lexer (hand-written) · Parser (goyacc) · Semantic analysis · IR · MIPS 32 codegen · IR emulator |
| Roles | React web app for TA-led example walk-throughs · Go CLI for the autograder |
| Previous lives | C with Flex + Bison, emitting MIPS 32 assembly |
| Domain | e95compiler.com |

