Benoît HERVIER

Go + PocketBase + Templ + HTMX: a real SaaS without a JavaScript framework

For the last year and a half I have been building and operating a club-management SaaS, members, licenses, grades, competitions, payments, PDF attestations, federation CSV imports. A real application with real users, forms everywhere, and lists that need filtering, sorting and bulk editing. It contains no JavaScript framework at all: no React, no Vue, no build pipeline for a SPA, no JSON API layer. This is what the stack looks like, and what I learned.

The stack, and what each piece actually does

One language, one process, one binary to deploy, one SQLite file to back up.

What "HTMX at scale" actually looks like

People sometimes picture HTMX as a toy for a search box. As I write this, the codebase contains 671 hx-* attributes. Their distribution says a lot about how the pattern scales:

171  hx-target      128  hx-swap       90  hx-get
 77  hx-push-url     49  hx-post       34  hx-trigger
 29  hx-include      19  hx-confirm    18  hx-delete
 14  hx-patch        12  hx-on          7  hx-indicator

The pattern that surprised me most in practice: context preservation. The same member edit form is reachable from a member sheet, a competition page, or an award list, and after submit or cancel, the user must return where they came from. With hypermedia this is just a parameter carried in the fragment URLs, rendered server-side into the form's hx-post target. No client router, no state store, the state is the HTML.

What it removes

The honest pitch for this stack is not what it adds but what it deletes:

What hurts (honesty section)

Verdict

For the vast category of software that is actually built in the world, admin tools, B2B SaaS, dashboards, back-offices, this stack is a quiet superpower for a solo developer or a small team. The entire application is one Go program you can hold in your head; the frontend cannot drift from the backend because there is no frontend in the SPA sense; and the user experience, thanks to HTMX's targeted swaps, feels every bit as responsive as the React equivalent that would have taken three times as long to build.

The hypermedia approach is not a nostalgia trip. It is what removing accidental complexity looks like.

Let's Connect

Have a project in mind? I'd love to hear from you!

Email Me