
DND Suite · Fight through the campaign
DND War
The shared deck becomes a battlefield.
Put campaign cards onto switchable 2D and 3D battlefields with full standees and minis, movement, facing, combat effects, and cinematic dice. Rules read from the same grimoire used during prep.
- Web app
- Live now
- Shared campaign

Interactive digipak for DND War. Drag to rotate when pointer input is available.
Its job in the party
The shared deck becomes a battlefield.
Put campaign cards onto switchable 2D and 3D battlefields with full standees and minis, movement, facing, combat effects, and cinematic dice. Rules read from the same grimoire used during prep. The family page supplies the shared context. This page earns its keep by showing the product itself, how it works, and where it fits into the session.
Inside the product
Show the interface at useful size.
Each subproduct gets its own screenshot sequence and captions. Small galleries can stay short without collapsing into a generic two-image grid.


01 / 02
What it does
Features with a reason to exist.
The production copy can expand each item with a real workflow, screenshot, or proof point. The product page keeps that shared family visible while giving this tool room to explain its own job.
- 01
2D and 3D virtual tabletop
Switchable 2D and 3D virtual tabletops
- 02
Full standees and 3D minis
Full 2D standees and 3D minis for combatants
- 03
Routed movement and flanking
Tokens that glide instead of teleport
- 04
Combat automation and FX
Facing, flanking cues, and opportunity attacks on routed walks
Build anatomy
The stack behind this instrument.
Current repository technology is shown here instead of the older Netlify-era stack. The shared packages explain why the products behave like one family.
- 01Next.js 16
- 02React 19
- 03PixiJS
- 04Three.js
- 05Supabase
- 06Cloudflare
Shared across the suite
One campaign spine
- Supabase auth and campaigns
- Shared Grimoire card UI
- Dice, Oracle, billing, and chrome packages
- Next.js 16 and OpenNext on Cloudflare


