# githinji96/neon_noir_casino architecture

> Architecture diagram of the GitHub repository githinji96/neon_noir_casino, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/githinji96/neon_noir_casino
- Repository: https://github.com/githinji96/neon_noir_casino

## Overview

Neon Noir Casino is a browser casino with public discovery, authenticated slot play, progressive jackpots, live-table games, and role-gated administration. Players enter through the lobby, authenticate when needed, and play slots or live tables; game state and jackpot logic resolve play, while Supabase supports identity and persistence. Admins use a separate guarded portal for operational and analytics tasks. The README and route excerpt establish the main product areas; several storage and payment integrations are identified by documentation and filenames, but their runtime wiring was not sampled.

Main entry points: [`src/App.tsx`](https://github.com/githinji96/neon_noir_casino/blob/main/src/App.tsx) (Route shell), [`src/store/gameStore.ts`](https://github.com/githinji96/neon_noir_casino/blob/main/src/store/gameStore.ts) (Game state), [`src/store/authStore.ts`](https://github.com/githinji96/neon_noir_casino/blob/main/src/store/authStore.ts) (Auth state), [`src/lib/supabase.ts`](https://github.com/githinji96/neon_noir_casino/blob/main/src/lib/supabase.ts) (Supabase client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and access"]
  node_app["Route shell<br/>[App.tsx]"]
  node_auth_pages["Auth pages"]
  node_auth_store["Auth state<br/>[authStore.ts]"]
end

subgraph group_player["Casino experience"]
  node_lobby["Casino lobby<br/>[CasinoLobby.tsx]"]
  node_slot_page["Slot game<br/>[SlotMachine.tsx]"]
  node_live_pages["Live tables<br/>[LiveTablesPage.tsx]"]
  node_live_room["Live table room<br/>[LiveTableRoom.tsx]"]
  node_jackpot_page["Jackpot experience<br/>[JackpotsPage.tsx]"]
  node_vip_page["VIP experience<br/>[VIPPage.tsx]"]
end

subgraph group_games["Gameplay engines"]
  node_game_store["Game state<br/>[gameStore.ts]"]
  node_slot_logic["Slot resolution"]
  node_rtp["Slot RTP control<br/>[rtpController.ts]"]
  node_jackpot_engine["Jackpot engine<br/>[jackpotEngine.ts]"]
  node_outcome_engine["Table outcomes<br/>[outcomeEngine.ts]"]
end

subgraph group_data["State and services"]
  node_jackpot_store["Jackpot state<br/>[jackpotStore.ts]"]
  node_supabase_client["Supabase client<br/>[supabase.ts]"]
  node_mpesa_function["M-Pesa functions<br/>[index.ts]"]
end

subgraph group_admin["Administration"]
  node_admin_guard["Admin access guard<br/>[AdminAuthGuard.tsx]"]
  node_admin_pages["Admin portal"]
  node_admin_store["Admin state<br/>[adminStore.ts]"]
end

node_player_actor(("Player"))
node_admin_actor(("Administrator"))
node_supabase[("Supabase")]

node_player_actor -->|"opens"| node_app
node_admin_actor -->|"opens"| node_app
node_app -->|"routes to"| node_lobby
node_app -->|"routes to"| node_auth_pages
node_app -->|"protects route"| node_slot_page
node_app -->|"routes to"| node_live_pages
node_app -->|"routes to"| node_live_room
node_app -->|"routes to"| node_jackpot_page
node_app -->|"routes to"| node_vip_page
node_app -->|"guards routes"| node_admin_guard
node_admin_guard -->|"authorizes"| node_admin_pages
node_app -->|"initializes"| node_auth_store
node_auth_pages -->|"uses auth"| node_auth_store
node_auth_store -->|"uses client"| node_supabase_client
node_supabase_client -->|"connects"| node_supabase
node_slot_page -->|"uses state"| node_game_store
node_game_store -->|"resolves spins"| node_slot_logic
node_game_store -->|"records spins"| node_rtp
node_game_store -->|"processes spins"| node_jackpot_engine
node_jackpot_page -->|"uses state"| node_jackpot_store
node_live_room -->|"resolves rounds"| node_outcome_engine
node_admin_pages -->|"uses state"| node_admin_store
node_admin_store -->|"uses client"| node_supabase_client

click node_app "https://github.com/githinji96/neon_noir_casino/blob/main/src/App.tsx"
click node_auth_pages "https://github.com/githinji96/neon_noir_casino/tree/main/src/pages/auth"
click node_auth_store "https://github.com/githinji96/neon_noir_casino/blob/main/src/store/authStore.ts"
click node_lobby "https://github.com/githinji96/neon_noir_casino/blob/main/src/pages/CasinoLobby.tsx"
click node_slot_page "https://github.com/githinji96/neon_noir_casino/blob/main/src/pages/SlotMachine.tsx"
click node_live_pages "https://github.com/githinji96/neon_noir_casino/blob/main/src/pages/LiveTablesPage.tsx"
click node_live_room "https://github.com/githinji96/neon_noir_casino/blob/main/src/pages/LiveTableRoom.tsx"
click node_jackpot_page "https://github.com/githinji96/neon_noir_casino/blob/main/src/pages/JackpotsPage.tsx"
click node_vip_page "https://github.com/githinji96/neon_noir_casino/blob/main/src/pages/VIPPage.tsx"
click node_game_store "https://github.com/githinji96/neon_noir_casino/blob/main/src/store/gameStore.ts"
click node_slot_logic "https://github.com/githinji96/neon_noir_casino/tree/main/src/logic"
click node_rtp "https://github.com/githinji96/neon_noir_casino/blob/main/src/logic/rtpController.ts"
click node_jackpot_engine "https://github.com/githinji96/neon_noir_casino/blob/main/src/logic/jackpot/jackpotEngine.ts"
click node_jackpot_store "https://github.com/githinji96/neon_noir_casino/blob/main/src/store/jackpotStore.ts"
click node_outcome_engine "https://github.com/githinji96/neon_noir_casino/blob/main/src/logic/outcomeEngine/outcomeEngine.ts"
click node_supabase_client "https://github.com/githinji96/neon_noir_casino/blob/main/src/lib/supabase.ts"
click node_admin_guard "https://github.com/githinji96/neon_noir_casino/blob/main/src/components/admin/AdminAuthGuard.tsx"
click node_admin_pages "https://github.com/githinji96/neon_noir_casino/tree/main/src/pages/admin"
click node_admin_store "https://github.com/githinji96/neon_noir_casino/blob/main/src/store/adminStore.ts"
click node_mpesa_function "https://github.com/githinji96/neon_noir_casino/blob/main/supabase/functions/mpesa-stk/index.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_auth_pages,node_auth_store toneBlue
class node_lobby,node_slot_page,node_live_pages,node_live_room,node_jackpot_page,node_vip_page,node_supabase toneAmber
class node_game_store,node_slot_logic,node_rtp,node_jackpot_engine,node_outcome_engine toneMint
class node_jackpot_store,node_supabase_client,node_mpesa_function toneRose
class node_admin_guard,node_admin_pages,node_admin_store,node_player_actor,node_admin_actor toneIndigo
```

## Components

### App and access

- [Route shell](https://github.com/githinji96/neon_noir_casino/blob/main/src/App.tsx): `src/App.tsx`
- [Auth pages](https://github.com/githinji96/neon_noir_casino/tree/main/src/pages/auth): `src/pages/auth`
- [Auth state](https://github.com/githinji96/neon_noir_casino/blob/main/src/store/authStore.ts): `src/store/authStore.ts`

### Casino experience

- [Casino lobby](https://github.com/githinji96/neon_noir_casino/blob/main/src/pages/CasinoLobby.tsx): `src/pages/CasinoLobby.tsx`
- [Slot game](https://github.com/githinji96/neon_noir_casino/blob/main/src/pages/SlotMachine.tsx): `src/pages/SlotMachine.tsx`
- [Live tables](https://github.com/githinji96/neon_noir_casino/blob/main/src/pages/LiveTablesPage.tsx): `src/pages/LiveTablesPage.tsx`
- [Live table room](https://github.com/githinji96/neon_noir_casino/blob/main/src/pages/LiveTableRoom.tsx): `src/pages/LiveTableRoom.tsx`
- [Jackpot experience](https://github.com/githinji96/neon_noir_casino/blob/main/src/pages/JackpotsPage.tsx): `src/pages/JackpotsPage.tsx`
- [VIP experience](https://github.com/githinji96/neon_noir_casino/blob/main/src/pages/VIPPage.tsx): `src/pages/VIPPage.tsx`

### Gameplay engines

- [Game state](https://github.com/githinji96/neon_noir_casino/blob/main/src/store/gameStore.ts): `src/store/gameStore.ts`
- [Slot resolution](https://github.com/githinji96/neon_noir_casino/tree/main/src/logic): `src/logic`
- [Slot RTP control](https://github.com/githinji96/neon_noir_casino/blob/main/src/logic/rtpController.ts): `src/logic/rtpController.ts`
- [Jackpot engine](https://github.com/githinji96/neon_noir_casino/blob/main/src/logic/jackpot/jackpotEngine.ts): `src/logic/jackpot/jackpotEngine.ts`
- [Table outcomes](https://github.com/githinji96/neon_noir_casino/blob/main/src/logic/outcomeEngine/outcomeEngine.ts): `src/logic/outcomeEngine/outcomeEngine.ts`

### State and services

- [Jackpot state](https://github.com/githinji96/neon_noir_casino/blob/main/src/store/jackpotStore.ts): `src/store/jackpotStore.ts`
- [Supabase client](https://github.com/githinji96/neon_noir_casino/blob/main/src/lib/supabase.ts): `src/lib/supabase.ts`
- [M-Pesa functions](https://github.com/githinji96/neon_noir_casino/blob/main/supabase/functions/mpesa-stk/index.ts): `supabase/functions/mpesa-stk/index.ts`

### Administration

- [Admin access guard](https://github.com/githinji96/neon_noir_casino/blob/main/src/components/admin/AdminAuthGuard.tsx): `src/components/admin/AdminAuthGuard.tsx`
- [Admin portal](https://github.com/githinji96/neon_noir_casino/tree/main/src/pages/admin): `src/pages/admin`
- [Admin state](https://github.com/githinji96/neon_noir_casino/blob/main/src/store/adminStore.ts): `src/store/adminStore.ts`

### Other components

- **Player**
- **Administrator**
- **Supabase**

## Connections

- Player → Route shell: opens
- Administrator → Route shell: opens
- Route shell → Casino lobby: routes to
- Route shell → Auth pages: routes to
- Route shell → Slot game: protects route
- Route shell → Live tables: routes to
- Route shell → Live table room: routes to
- Route shell → Jackpot experience: routes to
- Route shell → VIP experience: routes to
- Route shell → Admin access guard: guards routes
- Admin access guard → Admin portal: authorizes
- Route shell → Auth state: initializes
- Auth pages → Auth state: uses auth
- Auth state → Supabase client: uses client
- Supabase client → Supabase: connects
- Slot game → Game state: uses state
- Game state → Slot resolution: resolves spins
- Game state → Slot RTP control: records spins
- Game state → Jackpot engine: processes spins
- Jackpot experience → Jackpot state: uses state
- Live table room → Table outcomes: resolves rounds
- Admin portal → Admin state: uses state
- Admin state → Supabase client: uses client
