← Lab
This website
A portfolio that runs like production. Live request tracing, synthetic monitoring, CI quality gates, and a photo pipeline, on a $0/month serverless stack.
- role
- Design, build, operate
- duration
- Ongoing
- status
- live
- shipped
- 27 Sept 2026
- Next.js
- Vercel
- Upstash Redis
- GitHub Actions
- Lighthouse
$0 / monthHosting cost
96Uptime checks per day
5Quality gates per PR
- CI passing
- pushed 22d ago
- ★ 0
- 0 forks
- 0 open issues
- JavaScript 74%
- CSS 25%
- HCL 1%
GitHub
Every change, including a new blog post or photo, is a commit. Pull requests are the only way in.
Why
A portfolio usually describes skills. I wanted this one to demonstrate them: the site itself is the proof. It's built, deployed, monitored and costed the same way I'd run a production service.
What's running
- Live request trace. The home page calls
/api/trace, which reads Vercel's routing headers to show which edge location served you and how long each hop took. - Synthetic monitoring. A GitHub Actions cron job checks the site every 15 minutes and writes results to a capped Redis list. The status page computes uptime windows, p50/p95 latency and incidents from it.
- Quality gates. Every pull request runs a design-token lint, a photo metadata check, a production build, Lighthouse with a score budget, and a crawler that fails on broken internal links. The latest scores are published to the site.
- Photo pipeline. Pushed photos are automatically stripped of GPS and camera metadata, resized, and given blurred placeholders.
- Security. A strict Content-Security-Policy (hash-based, no inline scripts), HSTS, and locked-down permissions.
- Infrastructure as code. Redis, the Vercel project, its environment variables and the CI secrets are Terraform. The infra page draws the dependency graph straight from the code.
- Chaos demo. The home page's Simulate an outage button walks through detection, alerting and failover to the nearest region.
- Post from anywhere. A GitHub issue form turns into a pull request with the post and cleaned photos, so publishing works from a phone.
Decisions
- Serverless over a VM. Traffic is spiky and tiny, so scale-to-zero means no idle cost.
- Redis over a database. Every stored value is a counter, a sorted set or a capped list. Upstash's HTTP API needs no connection pooling from serverless functions.
- GitHub Actions for monitoring. An outside-in check from a different provider than the host is more honest than a site checking itself.
- Content as files. Markdown and a manifest in the repo mean every change is reviewed, versioned and reversible.