
Central Deploy Manager
2026
The deployment plumbing behind this site and its smaller siblings: signed webhooks, health-checked Docker rollouts, and Caddy routing on one VPS.

Aquarium
2026
A small 3D aquarium for the browser, built with React and Three.js and deployed like a real app because apparently I cannot leave anything simple.

Bird of the Day
2026
A tiny daily bird site powered by recent eBird observations, a small Express API, and an unreasonable amount of affection for birds.
CentraID
2026
A six-person capstone connecting a NestJS/PostgreSQL backend, an Expo mobile app, and a classroom reader service for verified check-ins.
React Native Cloud Prototypes
2025
Two Expo/Firebase prototypes: one for vehicle access approvals and one for QR-based classroom attendance.
Wurmkickflip
2026
An extremely serious physics experiment about teaching a worm to ride a skateboard. The physics works; the worm remains a work in progress.
2026
Bird of the Day
A tiny daily bird site powered by recent eBird observations, a small Express API, and an unreasonable amount of affection for birds.

My notes
I wanted one small website that did exactly one delightful thing. It picks a bird from recent observations, gives it the front page for the day, and fills in enough context to make the visit worth it.
The app is intentionally compact, but I still treated it like a real service: API keys stay on the server, deployment config stays out of git, and a health check lets the deploy manager know whether a new version is safe to keep. A silly idea is more fun when the infrastructure is not silly too.
Bird of the Day is a small full-stack web app that picks a bird from recent eBird observations and presents it as a daily page. The server is an Express app, the frontend is built with Vite and React, and runtime configuration is provided through a server-local environment file.
The app exposes a lightweight health endpoint for deployment checks and an API endpoint for bird data. The deployment setup keeps the eBird API key out of git and passes it only to the production container.
This project is intentionally compact, but it gave me a practical place to wire together a public API, server-rendered/static delivery concerns, Docker runtime config, and automated deploys through the central manager.