
The Stack Behind Hamlogs: Coolify, NestJS, Next.js, and a Few Late Nights
When I started Hamlogs, I didn’t sit down with a whiteboard and architect the perfect tech stack. I started building — then slowly replaced the parts that annoyed me. The result? A stack that’s fast, maintainable, and easy to self-host. And more importantly: one I actually enjoy working with.
Here’s what’s under the hood of Hamlogs.com, and why I chose each piece.
🧱 The Core Stack
NestJS gave me structure without slowing me down. It’s built on Express under the hood but adds TypeScript-first patterns, decorators, and a rock-solid module system. With Hamlogs needing API endpoints for logbook CRUD, ADIF exports, WSJT-X integrations, and eventually LoTW syncing — NestJS makes it easy to scale features cleanly.
-
DTOs and validation with class-validator
-
Swagger auto-docs
-
Prisma integration for PostgreSQL
-
Guard-based auth
Nest feels like building with strong scaffolding and a thoughtful API-first mindset. When you’re working alone on a growing codebase, that’s gold. Next.js (Frontend)
I’ve used a lot of frontends. Next.js still wins for me.
It handles routing, SSR (which is great for SEO once Hamlogs starts showing callsigns publicly), and static optimizations out of the box. I pair it with Tailwind CSS for fast, responsive UI building.
Also:
-
Server actions for simple async operations
-
App directory structure for sanity
-
No client-side router headaches
Next.js lets me build dashboards, log tables, upload tools, and award visualizations quickly — and they’re fast. It just works.
🐳 The Infrastructure
Docker Everywhere
Every service in Hamlogs runs in a container: backend, frontend, Postgres, queue workers, and background jobs. That means the stack can run anywhere — local, cloud, or self-hosted.
No “it works on my machine” nonsense. Traefik (Reverse Proxy + SSL)
I use Traefik to handle:
-
HTTPS with Let’s Encrypt
-
Routing frontend and backend by domain/subdomain
-
Redirects and headers
Its Docker integration is magic. Just add a few labels, and your container gets routed with TLS. Simple and powerful. Coolify (PaaS for Self-Hosting)
I run all of this on a Coolify instance. It’s like Heroku for people who don’t mind rolling up their sleeves. With Coolify:
-
I deploy updates from GitHub with one click
-
I can monitor logs, environment vars, and backups
-
Everything’s containerized, restartable, and exportable
It’s not perfect (and I’ve ranted about its quirks before), but it’s the fastest way I’ve found to deploy real apps without paying Heroku’s prices.
🛠 Bonus: Tooling I Lean On
-
Prisma – Type-safe DB access with migrations
-
Zod – For schema validation on both sides
-
BullMQ + Redis – For background jobs (ADIF parsing, export processing)
-
Tailwind UI – Speeds up clean UI layouts
-
PostgreSQL – Because I like relational schemas that won’t betray me
Why This Stack Works (for Me)
I’m not chasing buzzwords. I’m chasing simplicity — and this stack gives me that. It lets me build quickly, test locally, and deploy confidently. I can jump between front and back end without changing mental models. And if someone wants to self-host this someday? They’ll be able to with minimal effort.
This stack doesn’t just power Hamlogs. It makes working on Hamlogs enjoyable.
If you’re building a side project — especially something solo — and looking for a stack that won’t burn you out at 2 a.m., this combo might just be it.
And if you're curious how it all ties together behind the scenes, drop me a message or reach out via Facebook. Happy to share more.