A multi-tenant CRM front-end built for speed - real-time pipelines, bulk actions and a keyboard-first UX.
I build the whole product - interface, API and the server it runs on.
Full-stack engineer. TypeScript and Next.js on the front, Go and PostgreSQL behind it, Docker and GitHub Actions to ship it. This site is one of those builds: three services on a VPS I run myself.
Featured projects
A selection of things I’ve designed and shipped.
A Telegram bot that watches the stack it runs next to: grouped errors, outages, deploys, certificates and missing backups - built so that it stays quiet enough to be believed.
This very site - a bilingual portfolio and blog backed by a Go API, a PostgreSQL database and an admin CMS.
Latest writing
Notes on engineering, design and building products.
The monitoring I wrote and never switched on
A nightly backup, a watchdog and an uptime ping sat in the repository for three weeks without running once. What I found when I finally set them up - and the restore I should have tested first.
Three services, one VPS: six things the deploy plan left out
A Next.js site, an admin and a Go API on a single server with Docker, Caddy and GitHub Actions - and the six failures that taught me what "deployed" actually means.
Request waterfalls: how sequential awaits slow your page down
Why sequential awaits in Server Components slow a page down, and how to fix it with Promise.all and Suspense.