Shared 3D Table
Live — andrewwigman-001-site6.htempurl.com ↗Online tabletop tools make you choose: a rules-enforced implementation of one specific game, or a virtual tabletop where everything is a flat sprite you slide around. Neither lets a group just sit at a table and mess with objects. And when physics runs on each client, everyone's dice land differently — so most tools fake the throw rather than simulate it.
A shared 3D table joined with a name and a four-letter code. One server-side rigid-body simulation drives everything — dice tumble, tokens shove, thrown objects land in the same place for every player — with cards, hidden hands, boards and a growing set of games layered on top of the same table rather than built as separate apps.
- Physics
- hand-rolled C# rigid-body engine, server-authoritative at 60 Hz — one simulation for everyone
- Network model
- 20 Hz snapshots over the Blazor SignalR circuit; clients interpolate ~120 ms behind
- Rendering
- raw WebGPU with hand-written WGSL — no Three.js, no JS dependencies, no NuGet
- Games on the table
- 10 — chess, checkers, backgammon, shuffleboard, bowling, curling, pool, snooker, air hockey, beystadium
- Hidden information
- hand contents filtered server-side — your card faces never reach another browser
- Test suites
- 839 xUnit across the physics engine and the room model
- Codebase
- ~39k lines of C# and ~18k lines of JS/WGSL, all first-party
.NET 10 Blazor Server with a 60 Hz room ticker over a transport-agnostic core; built in numbered waves against a module map that gives each agent its own file, so the renderer, physics and room model advance in parallel — every wave verified in-browser with two real players before the next one starts.