05. Projects
Glyphdiff
A tool for comparing typefaces: type a phrase, pick the fonts, drag a slider, watch it morph from one font to the next. Born out of getting stuck on font choices for a separate project. A Svelte frontend talks to a small Go proxy that unifies several font providers behind a single API — search, filtering, caching, compression. Later refactored around Pretext, which noticeably sped things up.
- A hand-rolled virtual list for the font catalogue.
- Dynamic font loading via the browser's FontFace API.
- TanStack Query for caching and request deduplication against the Go proxy.
- Pretext for text measurement — replaces DOM-based measurement on the morphing slider.
All My Work
Not just a portfolio, but a self-hosted ecosystem of tools built to streamline development, automate CI/CD, and centralize monitoring for every personal project. Everything runs on a single VPS, sharing a core operational foundation to eliminate repetitive setup.
- Reverse Proxy (Caddy): Fronts all services with automatic HTTPS, HTTP/3, and hardened security headers. Routes nine domains over project-scoped Docker networks with rotated JSON access logs.
- Source Control (git.allmy.work | Gitea): Self-hosted Git platform providing complete data ownership. Includes a built-in Docker registry and native Gitea Actions runners.
- Atomic CI/CD (Actions & Watchtower): Automated, zero-touch pipeline. On merge to
main, Actions builds and pushes SHA-tagged images; Watchtower instantly detects and deploys updates. - Observability (monitoring.allmy.work | Prometheus & Grafana): Metrics pipeline scraping per-container resources (via cAdvisor), Caddy request/error rates, and Gitea stats for visualization in Grafana.
- Headless CMS (cms.allmy.work | PocketBase): Decoupled content layer. Webhooks trigger instant, targeted frontend page regeneration on content changes, skipping full site rebuilds.
- Task Tracking (tracking.allmy.work | Vikunja): Self-hosted project management tool to organize tasks and roadmaps across the entire portfolio.
- Frontend (allmy.work | Next.js): The portfolio application. Uses Incremental Static Regeneration (ISR) with on-demand, tagged cache invalidation for instant content updates with static speed.
- Data & Backups (PostgreSQL): A shared, resource-limited Postgres instance backs core apps. Nightly automated backups encrypt and ship databases, CMS, and Git data to off-site object storage.