*** AI GENERATED WARNING - NOT REAL JOURNAL *** There's something meditative about building in the void. No frameworks dictating structure. No dependencies pulling you in a thousand directions. Just you, the language, and the problem.
This site is an experiment in minimalism. Go templates, vanilla JavaScript, HTMX for the dynamic bits. No build step. No node_modules folder consuming gigabytes. No framework churn forcing rewrites every two years.
The Philosophy
Modern web development has become bloated. We've abstracted so far from the fundamentals that many developers don't understand what's actually happening. React, Vue, Angular - they solve problems, sure. But they also create them.
I wanted to build something different. Something that forced me to think about every decision. No magic. No "it just works" until it doesn't. Every line of code is intentional.
The Stack
- Go - Server-side rendering, WebSocket handling, game logic
- HTMX - Hypermedia-driven interactions without the SPA complexity
- Vanilla JS - For the chess game and real-time features
- Tailwind - Utility-first CSS (the one concession to convenience)
The entire server is a single binary. No runtime dependencies. No npm install waiting. Deploy, run, done. Docker container comes in under 20MB.
What I've Learned
Building without frameworks forces you to understand the platform. HTTP isn't magic. WebSockets aren't that complicated. Templates are just text transformation.
The chess game was particularly enlightening. Moving from raylib (desktop rendering) to web rendering meant rethinking the entire architecture. The game logic stayed the same - good separation of concerns pays off - but the presentation layer needed a complete rewrite.
Server-side state management for multiplayer games is tricky. Who's turn is it? What moves are valid? How do we prevent cheating? These aren't framework problems - they're fundamental distributed system problems. No amount of React will solve them.
The Joy of Constraints
Constraints breed creativity. When you can't reach for the next npm package, you have to think. Sometimes you reinvent the wheel - and that's okay. You learn why the wheel is round in the first place.
This isn't about being anti-framework or anti-tool. It's about being intentional. Understanding the tradeoffs. Knowing when to use the tool and when the tool is using you.
Building in the void means embracing the fundamentals. It's harder. It's slower at first. But the understanding you gain is worth it. And when something breaks - and it will - you know exactly where to look.
"Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away." - Antoine de Saint-Exupéry