Show HN: I rebuilt a 2000s browser strategy game on Cloudflare's edge

kampfinsel.com

18 points by parzivalt 4 days ago

I grew up in Germany in the early 2000s playing a browser game called Inselkampf. You built up an island, mined gold and stone, cut down trees for wood, raised armies, sent fleets across an ocean grid, joined alliances and got betrayed by them. Same genre as OGame or Travian. It shut down in 2014 and I never found anything that replaced that feeling of checking in before school to see if your fleet had arrived and your alliance was still alive.

I finally built the version I wanted to play. Kampfinsel is live at kampfinsel.com right now with real players on it. It's not a straight copy of the old game. I gave it its own world. No magic, no gunpowder – just ballistas, fire pots, and slow ships crossing huge distances. Three resources: gold, stone, wood. Travel between islands takes hours, not seconds. It's slow on purpose.

The whole thing runs on Cloudflare's edge. Workers for the game logic and API, D1 for the database, KV for sessions and caching, R2 for assets and Durable Objects for per-island state and the tick system (fleet arrivals, combat, resource generation). There's no origin server at all. Making a stateful multiplayer game work inside Workers' CPU limits and D1's consistency model meant some non-obvious choices: resources are calculated on-read from timestamps instead of being ticked into the database, fleet movements live in Durable Object alarms and combat writes are batched. This helped me a lot!

The look is intentionally rough and text-heavy (Hi HN!): server-rendered HTML, tables, a parchment color palette, Unicode icons, no frontend framework, no build step. The only JavaScript is for countdown timers and auto-refresh. I wanted it to feel the way I remember these games looking, not how they actually looked. Honestly, it looks a lot like HN itself - tables, monospace, no chrome. If you like how this site looks, you'll probably feel at home.

No signup wall, no premium currency, no pay-to-win. Feedback very welcome, especially from anyone who played this kind of game back in the day or has opinions on running stateful stuff on Workers + D1 + Durable Objects. I'll be around for the next few hours.

avdelazeri 23 minutes ago

OGame and Travian are two names that really take me back. Those and Tribal Wars, I played them a lot back when I was a teenager.

nickandbro 20 minutes ago

Very cool, though wouldn't using durable objects for a MMO type game become prohibitively expensive vs using websockets with a stateful server? I assume your game is not sending that many requests so its not too bad.

  • parzivalt 11 minutes ago

    good question. it's not real-time - actions resolve over hours.... request rate per active player is single digits per minute, often zero. DO alarms handle the time-based stuff (fleet arrivals, combat resolution, resource ticks) so there's no persistent connection cost. so far costs have been negligible compared to running an always-on origin.

    websockets + stateful server would be the right call for anything realtime. for tick-based strategy with hour-long timers, DOs feel like the cleanest fit - i get per-island isolation, alarms, and storage in one primitive without managing a connection pool.

  • sophacles 10 minutes ago

    Durable objects do websockets

parzivalt 4 days ago

Did anyone here actually played Inselkampf, OGame or Travian back then? If you have recommendation or the one and only feature you still remember.

  • sebastiansm7 34 minutes ago

    I played ogame, travian and a mexican pokemon rpg online

stavros 21 minutes ago

Oh no, I remember those browser games, I will stay well away from them because they're the kind of thing that I will play for a month straight otherwise.

slater 43 minutes ago

It keeps asking me to accept the privacy policy when registering, but there's no privacy policy checkbox...? Firefox, macOS

  • bakugo 40 minutes ago

    Looks like OP forgot to remind Claude not to make any mistakes.

  • Rohansi 37 minutes ago

    Got the same thing. If you switch to German the page is entirely different and has the missing checkbox.

    • parzivalt 5 minutes ago

      fixed and deployed. missing translation key on the english locale was hiding the checkbox label. thanks both for narrowing it down so fast.

  • parzivalt 25 minutes ago

    Oh well, that should not be the case! Thanks for highlighting that! On it to fix it.