I wanted a place to play the board games I grew up with — Ludo, Carrom, Snakes & Ladders — with friends, without everyone installing yet another app. So I built one: Diceonaut.
It's a free, browser-based portal for classic board and skill games. No download, no install, no sign-up to start.
What's in it
-
Ludo — the classic 4-player race, online
-
Carrom — flick, pot, win, with real board physics
-
9-Ball Pool — turn-by-turn pool with a proper physics engine
- Quoridor — race across the board while walling your opponent off
- Connect 4, Gomoku, Snakes & Ladders, Tic-Tac-Toe, Duel Deck
Every game runs three ways: online against real players, against AI, or pass-and-play on a single device. You can challenge a friend with a private-room link, climb per-game and global leaderboards, and earn a shared currency across every game.
The tech (briefly)
- Backend: Go, with authoritative match state held in memory (goroutine-per-match) — the server is the source of truth for every roll and move, so online play can't be cheated.
- Frontend: React for the portal/lobby (SEO-friendly, prerendered) + Phaser for each game canvas.
- Realtime: a message-bus transport with a binary fast path for the hot loop.
- Infra: self-hosted on a single box (Podman), fronted by Nginx + Cloudflare.
Server-authoritative dice were the fun part — the roll is generated and validated server-side, broadcast to every client, so there's no trusting the browser.
Try it
It's live and free: diceonaut.com. Feedback very welcome — especially on the physics games.
Top comments (2)
Nice collection. One thing that gets surprisingly important with games like Ludo is making the dice feel trustworthy, especially once people start blaming the rolls 😅. I ended up using Web Crypto for the Olivez Dice Roller for that reason rather than relying on Math.random().
How did you handle real-time updates and latency in the browser, was it using WebSockets or WebRTC? I'd love to swap ideas on this, following for more content on multiplayer dev.