| DB tables (Minigame, MinigameContact, MinigamePlay) | packages/database/src/schema/minigame{,-contact,-play}.ts |
| Relations | packages/database/src/relations/minigame{,-contact,-play}.ts, wired into relations/index.ts |
| Zod partials (single source for all 6 jsonb settings columns) | packages/database/src/partials/minigame.ts |
| CRUD + prize-quantity reconciliation | packages/business/src/minigame/service.ts (minigameService) |
| Prize draw math | packages/business/src/minigame/resolve-prize.ts (resolveMinigamePrize) |
| Play state, draw, dispatch (concurrency-critical) | packages/business/src/minigame/minigame-contact-service.ts (minigameContactService) |
| Play token sign/verify (24h TTL) | packages/encryption/src/minigame-play-token.ts |
{{minigame_play_token}} system variable | packages/variables/src/utils.ts (systemFieldTypes.enum.minigame_play_token), enum in packages/database/src/partials/contact.ts |
| Builder feature (admin CRUD, form, dialogs) | apps/builder/src/features/minigames/ |
| Type picker dialog | apps/builder/src/features/minigames/components/create-minigame-type-dialog.tsx |
| Public play page (auth-bypassed) | apps/builder/src/app/minigames/page.tsx, registered in apps/builder/src/proxy.ts (publicRoutes) |
| Public play action | apps/builder/src/features/minigames/actions/play-minigame.action.ts (actionClient, NOT workspace-scoped) |
| Jackpot play screen (client, slot animation) | apps/builder/src/features/minigames/components/play/jackpot-play-screen.tsx |
| Jackpot SVG art + start button | packages/minigame-ui/ (JackpotMachineArt, JackpotStartButton) |
| Admin/type-picker previews | apps/builder/src/features/minigames/components/preview/ (MinigamePreview dispatches jackpot → JackpotPreview, else GenericMinigamePreview) |
| Default settings + type config | apps/builder/src/features/minigames/constants.ts |
| Tests | packages/business/__tests__/{minigame-service-update,resolve-minigame-prize}.test.ts, packages/encryption/__tests__/minigame-play-token.test.ts |