Simple Metro
in development · 2026
A fast, real-time arrivals board for the Washington DC Metro, served from a single cached snapshot at Cloudflare’s edge.
A React 19 + Vite SPA on Firebase Hosting, backed by a Cloudflare Worker that proxies WMATA’s APIs. A Durable Object pinned to the US East coast holds one strongly-consistent data snapshot, pre-warmed by cron triggers, so a single upstream fetch serves every user and WMATA load stays constant regardless of traffic. Predictions come from WMATA’s GTFS-Realtime protobuf feeds — decoded by a small dependency-free protobuf reader — giving real arrival times and car counts up to ~45 minutes out, with a fallback to the legacy JSON endpoint so the board never goes blank. Each station gets a clean URL and an info tab with hours, first/last trains, and live elevator/escalator outages.
reacttypescriptcloudflare-workersdurable-objectsgtfs-realtimefirebase
live →github →
This site. Statically generated, multi-cloud, with keyless CI/CD across GCP, Cloudflare, and GitHub.
A multi-page Astro 5 site with content collections for writing and journal entries, deployed on Firebase Hosting with automated deploys via GitHub Actions. Auth between CI and GCP uses Workload Identity Federation (no service account JSON keys ever exist). DNS and cookieless analytics live on Cloudflare; email is on Google Workspace. The local dev environment runs fully containerized via Docker Compose. As much an exercise in deliberate infrastructure choices as a portfolio — every piece of the stack was picked to either work well for this use case or to teach a transferable skill.
astrotypescriptfirebasegcpcloudflaregithub-actions
live →github →