How javilonte/rpg works
D&D Virtual Tabletop is a browser-based multiplayer D&D 5e platform. Players authenticate, browse or join campaigns, and use a campaign play area for character sheets, maps, chat, dice, and turn-based combat. The shared rules engine supplies dice, character, combat, item, bestiary, map, and dungeon behavior; Supabase provides authentication, persistence, realtime capabilities, and server-side Edge Functions. The README documents several product capabilities whose implementation was not sampled, so those branches are shown at the documented subsystem level rather than with inferred call paths.
Main entry points: src/index.ts Rules engine exports · play-layout.tsx Play layout · combat/index.ts Combat rules · page.tsx Next.js app
Components 29
Web experience
- Next.js app
apps/web/src/app/page.tsx - Magic-link auth
apps/web/src/app/actions/auth.ts - Auth callback
apps/web/src/app/auth/callback/route.ts - Campaign dashboard
apps/web/src/app/campaigns/page.tsx - Campaign play area
apps/web/src/app/play/[campaignId]/page.tsx - Play layout
apps/web/src/components/play/play-layout.tsx - Character sheet
apps/web/src/components/character/character-sheet.tsx - Map interface
apps/web/src/components/map/map-view.tsx - Combat tracker
apps/web/src/components/combat/combat-tracker.tsx - Dice roller
apps/web/src/components/dice/dice-roller.tsx - Realtime chat
apps/web/src/components/chat/chat-panel.tsx
Supabase platform
- Browser client
apps/web/src/lib/supabase/client.ts - Server client
apps/web/src/lib/supabase/server.ts - Supabase services
- Postgres database
- Roll dice function
supabase/functions/roll-dice/index.ts - Start combat function
supabase/functions/start-combat/index.ts - Advance turn function
supabase/functions/advance-turn/index.ts - Apply damage function
supabase/functions/apply-damage/index.ts
Rules engine
- Rules engine exports
packages/engine/src/index.ts - Dice rules
packages/engine/src/dice/parser.ts - Character rules
packages/engine/src/character/index.ts - Combat rules
packages/engine/src/combat/index.ts - Monster bestiary
packages/engine/src/bestiary/index.ts - Items and loot
packages/engine/src/items/index.ts - Map rules
packages/engine/src/map/index.ts - Dungeon generator
packages/engine/src/dungeon/index.ts
Shared contracts
- Shared schemas
packages/shared/src/index.ts
Other components
- Player
Connections 31
- Player → Next.js app: uses
- Next.js app → Magic-link auth: offers sign-in
- Magic-link auth → Server client: creates client
- Auth callback → Server client: creates client
- Auth callback → Supabase services: exchanges session
- Next.js app → Campaign dashboard: opens dashboard
- Campaign dashboard → Campaign play area: opens campaign
- Campaign play area → Play layout: renders
- Play layout → Character sheet: renders
- Play layout → Map interface: renders
- Play layout → Combat tracker: renders
- Play layout → Dice roller: renders
- Play layout → Realtime chat: renders
- Browser client → Supabase services: connects
- Server client → Supabase services: connects
- Supabase services → Postgres database: persists data
- Roll dice function → Dice rules: parses and rolls
- Roll dice function → Shared schemas: validates formula
- Start combat function → Postgres database: creates combat
- Start combat function → Combat rules: rolls initiative
- Advance turn function → Postgres database: reads and updates
- Advance turn function → Combat rules: advances turn
- Apply damage function → Postgres database: reads and updates
- Apply damage function → Combat rules: calculates damage
- Rules engine exports → Dice rules: exports
- Rules engine exports → Character rules: exports
- Rules engine exports → Combat rules: exports
- Rules engine exports → Monster bestiary: exports
- Rules engine exports → Items and loot: exports
- Rules engine exports → Map rules: exports
- Rules engine exports → Dungeon generator: exports