← Back to the workshop
How and why I built it
This site
One home for everything I build, stitched together at the edge and refreshed by itself every 15 minutes.
You're on itCloudFront · S3 · Lambda · DynamoDB · CDKAbout $1–2 a month
The itch
Every tool I built lived at its own random CloudFront address that nobody could remember. I wanted one place for all of it: somewhere I could send a friend or a recruiter, that also shows what I've been up to without me having to keep it updated.
What it does
- The workshop: every project with the story behind it, and a way to open the real thing.
- Other projects, one domain: Citi Bike Tides and Volo Drop-in Alerts are deployed from their own repos, but show up here under my header, always on their latest version.
- The Live page: my latest run, my latest flag football game, Citi Bike right now, what I'm reading, what I'm coding, and how many Volo drop-ins my alert has caught.
- Light and dark mode that follows your system, with a toggle that remembers your choice.
How a page gets to you
The pages are plain HTML files in a private S3 bucket. CloudFront serves them over HTTPS from edge locations close to you, and a tiny function runs on every request before anything is fetched.
Stitching projects together. When you open /citibike/app/, the router strips the prefix and forwards the request to Citi Bike Tides' own CloudFront distribution. The map loads its data with relative paths, so it works here without any changes, and every deploy of that project shows up here immediately.
How the Live page stays fresh
A small Python Lambda runs every 15 minutes, gathers the latest from each source, and writes a single live.json file. The page reads that file and fills in the tiles. If one source is down, its tile simply stays hidden.
Privacy on the maps. Run maps drop everything within 400 meters of the start and finish, so they never show where I live. Flag football games are drawn in full, since the whole game happens on one field. Only slow, on-the-field activities count as games, which keeps a ride home I once mislabeled "Flag Football" off the map.
Secrets stay in AWS. Strava credentials live encrypted in SSM Parameter Store, and the Lambda saves Strava's rotating refresh token back there on its own.
Built with
Everything, from the certificate and DNS to the schedule and permissions, is defined in AWS CDK, so the whole site can be rebuilt from the repo with one command. It costs about a dollar or two a month, mostly the domain's DNS.
What's next
A "now playing" tile from Spotify on the Live page, and more tools on the workbench.