Hobby Projects

A running list of side projects I tinker with outside of work.

Seat Share

Seat Share hero — "Draft the season. Skip the drama." — with a stylized stadium-seats logo and a sign-up card.

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)
Email 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 paper airplane streaking over a cloud holding an envelope — the Just-Deliver.dev logo.

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

The Box Pool logo.

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
Email 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

Screenshot of the e95compiler web app showing source code on the left, the generated IR listing, and an IR Emulator panel with registers, memory, and step controls.

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
 Date: May 17, 2026
 Tags: 

Previous
⏪ Revisiting the jaxb-visitor