Inspiration
Back in the early 2000s there was an old browser game about running a gladiator school - spend hours managing fighters, training them up, watching them duke it out in the arena. That genre basically disappeared. I wanted to bring that same feeling back.
What it does
Ludus Gladiator is a gladiator school management sim that runs entirely inside a Reddit post.
- Hire and train five distinct gladiator classes (Hoplomachus, Murmillo, Dimachaerus, Thraex, Veles), each with their own stats, animations, and class match-ups.
- Build up your ludus: Farm for income, Forge for gear, Temple for luck buffs, Training Yard, Market for one-use and daily boosts.
- Send fighters into Quick Fights with wager-based betting or register for the Colosseum's Grand Games a full tournament bracket you can watch play out and replay.
- Every gladiator levels up independently - combat skills, HP, morale and win/loss record are tracked per fighter not just per account.
- A daily tick handles upkeep, wages, and farm income, so there's a reason to come back each day.
How we built it
The client is Phaser 4 running inside a Devvit Web post, talking to a Hono server over a typed API with Redis as the only datastore (per-player, per-gladiator-class state, roster, ludus buildings, tournament brackets, PvP snapshots). Everything is TypeScript end to end, sharing types between client and server through a shared/ package. Combat is a deterministic seeded simulation so fights can be replayed exactly from a stored event log - that's what powers the tournament bracket replays.
Challenges we ran into
- Per-gladiator progression - the game originally tracked level/skills on a single account-wide record. Moving that to per-class Redis keys (so each hired gladiator has its own independent progress) touched almost every server service and required careful sequencing so switching your active fighter doesn't silently wipe someone else's stats.
- Mobile layout - Devvit posts render at very different aspect ratios on phone vs. desktop. Nearly every panel needed a second hand-tuned mobile layout pass: full-width HUD, bigger touch targets, dimmed backgrounds during onboarding so new players can't tap the wrong thing and a tutorial highlight that has to track a panning/zooming camera. ## Accomplishments that we're proud of In a short amount of time, we managed to build a working system - economy, combat, progression and tournaments all tied together and holding up end to end.
- One deterministic combat engine powers Quick Fights, tournament brackets, and replays alike.
- Five gladiator classes with full animation sets and class match-ups that actually affect outcomes.
- Caught and fixed a real architecture gap mid-hackathon: reworked progression from account-wide to per-gladiator without losing anyone's progress.
## What we learned
Deterministic, seeded combat sims pay for themselves fast - once fights are just a
(seed) => events[]function, replays, tournament brackets, and PvP snapshots basically fall out for free. We also relearned that "it works on desktop" and "it works on mobile inside a Reddit webview" are two different QA passes, especially around Phaser input handling and camera transforms.
What's next for Ludus Gladiator
Gladiator customization - equippable/removable weapons and armor you can mix and match per fighter - plus a stable/horse system, injuries, a deeper morale mechanic beyond the current market buff, Retiarius as a sixth class and a fuller PvP/social layer building on the snapshot system already in place.
Built With
- devvit
- devvit-web
- node.js
- phaser.js
- typescript
- vite


Log in or sign up for Devpost to join the conversation.