01. Introduction
02. Bio
03. Skills
04. Experience

05. Projects

2025

TypescriptSvelteViteStorybookLefthookOxlintDprintPretextTanstack QueryTailwindVitestPlaywright
View Project

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.

2026

DockerCaddyGiteaGrafanaPrometheusPocketbasePostgresNext.jsTailwindViteBiomeStorybookPlaywrightLefthook
View Project

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.