Recreating my favorite text-based internet game from the 90s

Recreating my favorite text-based internet game from the 90s

In the late nineties I used to play an online game that I’ve never really forgotten. Text-based, you played as a province inside a kingdom of up to 25 players, waging war with military, thievery, and magic. Build efficiently, defend, attack. I was obsessed with it.

It still exists, but it’s been handed between owners and it’s a bit of a mess. So as an exercise in everything I’ve learned over the last 10 years, I built my own version. It’s live at game.bakkerlabs.com.

What started as a nostalgia project turned into a proper full-stack strategy game. It’s tick-based. Think a simplified version of what Utopia or Earth would look like rebuilt on modern infrastructure. You explore land, construct buildings, train armies, cast spells, form alliances, and attack other players. All the systems you’d expect from a game like this exist behind an API: combat with returning armies, magic with attack/intel/buff spells, an economy driven by population and buildings, and an alliance layer with internal messaging and visibility controls.

On the backend it’s Hono running on Node.js with Drizzle ORM talking to a Neon Postgres database. I picked Hono because it’s fast and its middleware model is clean. Auth, game state, and admin layers compose cleanly without getting tangled. All business logic lives in pure service functions, which made testing the combat formulas and validation with Vitest straightforward.

The frontend is a React SPA built with Vite and TanStack Router with file-based routing, no global state manager, all server state through TanStack Query. The router’s type-safe navigation and the way it handles nested layouts (authenticated routes, land-specific views) made a game with lots of different screens feel manageable. Types are shared between backend and frontend so the combat formulas run the same code on both sides.

The whole thing runs on my own VPS behind a Dockerfile, with Kinde handling OAuth for authentication.

I’m still adding to it. Stances for strategic specialization, deeper alliance mechanics, and eventually opening it up for real rounds. But it’s playable now. If you remember this genre of browser games, it’ll feel familiar.