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.