# rjafallah/blazing-8s architecture

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

- Interactive diagram: https://gitdiagram.com/rjafallah/blazing-8s
- Repository: https://github.com/rjafallah/blazing-8s

## Overview

Blazing 8s is a browser-based multiplayer card game. Players register or log in, create or join a waiting lobby, then start and play a synchronized game; chat and rankings are additional user-facing capabilities. The backend separates REST controllers, domain services, and persistence, with WebSockets for live game and chat updates. The README documents MySQL persistence and reconnect-safe chat. Some endpoint and frontend-service internals were not sampled, so those links reflect documented responsibilities rather than inspected call details.

Main entry points: [`frontend/src/services/api.js`](https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/services/api.js) (REST client), [`backend/src/main/java/blazing/jeux/repositories`](https://github.com/rjafallah/blazing-8s/tree/main/backend/src/main/java/blazing/jeux/repositories) (JPA repositories), [`frontend/src/App.jsx`](https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/App.jsx) (App navigation), [`frontend/src/services/websocket.js`](https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/services/websocket.js) (WebSocket client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web client"]
  node_app["App navigation<br/>[App.jsx]"]
  node_login["Login page<br/>[LoginPage.jsx]"]
  node_lobby["Lobby page<br/>[LobbyPage.jsx]"]
  node_gamepage["Game page<br/>[GamePage.jsx]"]
  node_rankingpage["Ranking page<br/>[RankingPage.jsx]"]
  node_chatui["Chat UI<br/>[Chat.jsx]"]
  node_apis["REST client<br/>[api.js]"]
  node_wsc["WebSocket client<br/>[websocket.js]"]
end

subgraph group_api["REST backend"]
  node_authc["Auth controller"]
  node_lobbyc["Lobby controller"]
  node_gamec["Game controller"]
  node_rankingc["Ranking controller"]
  node_auths["Authentication<br/>[AuthService.java]"]
  node_games["Game rules<br/>[GameService.java]"]
  node_decks["Deck operations<br/>[DeckService.java]"]
  node_rankings["Ranking service"]
end

subgraph group_realtime["Live game"]
  node_gamews["Game endpoint<br/>[GameEndpoint.java]"]
  node_chatws["Chat endpoint<br/>[ChatEndpoint.java]"]
end

subgraph group_persistence["Persistence"]
  node_repos["JPA repositories"]
  node_mysql[("MySQL")]
end

node_player(("Player"))

node_player -->|"uses"| node_app
node_app -->|"shows"| node_login
node_app -->|"shows"| node_lobby
node_app -->|"shows"| node_gamepage
node_app -->|"shows"| node_rankingpage
node_login -->|"requests auth"| node_apis
node_lobby -->|"requests lobby"| node_apis
node_gamepage -->|"requests game"| node_apis
node_rankingpage -->|"requests ranking"| node_apis
node_gamepage -->|"sends actions"| node_wsc
node_gamepage -->|"renders"| node_chatui
node_chatui -->|"sends messages"| node_wsc
node_apis -->|"REST calls"| node_authc
node_apis -->|"REST calls"| node_lobbyc
node_apis -->|"REST calls"| node_gamec
node_apis -->|"REST calls"| node_rankingc
node_authc -->|"delegates auth"| node_auths
node_lobbyc -->|"manages games"| node_games
node_gamec -->|"runs game"| node_games
node_rankingc -->|"fetches ranking"| node_rankings
node_games -->|"creates and draws"| node_decks
node_auths -->|"reads and writes"| node_repos
node_games -->|"reads and writes"| node_repos
node_decks -->|"reads and writes"| node_repos
node_rankings -->|"reads and writes"| node_repos
node_repos -->|"persists"| node_mysql
node_wsc -->|"sends actions"| node_gamews
node_gamews -->|"updates game"| node_games
node_gamews -->|"broadcasts state"| node_wsc
node_wsc -->|"sends chat"| node_chatws
node_chatws -->|"persists messages"| node_repos

click node_app "https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/App.jsx"
click node_login "https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/pages/LoginPage.jsx"
click node_lobby "https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/pages/LobbyPage.jsx"
click node_gamepage "https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/pages/GamePage.jsx"
click node_rankingpage "https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/pages/RankingPage.jsx"
click node_chatui "https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/components/Chat.jsx"
click node_apis "https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/services/api.js"
click node_wsc "https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/services/websocket.js"
click node_authc "https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/controller/AuthController.java"
click node_lobbyc "https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/controller/LobbyController.java"
click node_gamec "https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/controller/GameController.java"
click node_rankingc "https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/controller/RankingController.java"
click node_auths "https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/service/AuthService.java"
click node_games "https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/service/GameService.java"
click node_decks "https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/service/DeckService.java"
click node_rankings "https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/service/RankingService.java"
click node_gamews "https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/websocket/GameEndpoint.java"
click node_chatws "https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/websocket/ChatEndpoint.java"
click node_repos "https://github.com/rjafallah/blazing-8s/tree/main/backend/src/main/java/blazing/jeux/repositories"

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_login,node_lobby,node_gamepage,node_rankingpage,node_chatui,node_apis,node_wsc toneBlue
class node_authc,node_lobbyc,node_gamec,node_rankingc,node_auths,node_games,node_decks,node_rankings toneAmber
class node_gamews,node_chatws toneMint
class node_repos,node_mysql toneRose
class node_player toneIndigo
```

## Components

### Web client

- [App navigation](https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Login page](https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/pages/LoginPage.jsx): `frontend/src/pages/LoginPage.jsx`
- [Lobby page](https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/pages/LobbyPage.jsx): `frontend/src/pages/LobbyPage.jsx`
- [Game page](https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/pages/GamePage.jsx): `frontend/src/pages/GamePage.jsx`
- [Ranking page](https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/pages/RankingPage.jsx): `frontend/src/pages/RankingPage.jsx`
- [Chat UI](https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/components/Chat.jsx): `frontend/src/components/Chat.jsx`
- [REST client](https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/services/api.js): `frontend/src/services/api.js`
- [WebSocket client](https://github.com/rjafallah/blazing-8s/blob/main/frontend/src/services/websocket.js): `frontend/src/services/websocket.js`

### REST backend

- [Auth controller](https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/controller/AuthController.java): `backend/src/main/java/blazing/jeux/controller/AuthController.java`
- [Lobby controller](https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/controller/LobbyController.java): `backend/src/main/java/blazing/jeux/controller/LobbyController.java`
- [Game controller](https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/controller/GameController.java): `backend/src/main/java/blazing/jeux/controller/GameController.java`
- [Ranking controller](https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/controller/RankingController.java): `backend/src/main/java/blazing/jeux/controller/RankingController.java`
- [Authentication](https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/service/AuthService.java): `backend/src/main/java/blazing/jeux/service/AuthService.java`
- [Game rules](https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/service/GameService.java): `backend/src/main/java/blazing/jeux/service/GameService.java`
- [Deck operations](https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/service/DeckService.java): `backend/src/main/java/blazing/jeux/service/DeckService.java`
- [Ranking service](https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/service/RankingService.java): `backend/src/main/java/blazing/jeux/service/RankingService.java`

### Live game

- [Game endpoint](https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/websocket/GameEndpoint.java): `backend/src/main/java/blazing/jeux/websocket/GameEndpoint.java`
- [Chat endpoint](https://github.com/rjafallah/blazing-8s/blob/main/backend/src/main/java/blazing/jeux/websocket/ChatEndpoint.java): `backend/src/main/java/blazing/jeux/websocket/ChatEndpoint.java`

### Persistence

- [JPA repositories](https://github.com/rjafallah/blazing-8s/tree/main/backend/src/main/java/blazing/jeux/repositories): `backend/src/main/java/blazing/jeux/repositories`
- **MySQL**

### Other components

- **Player**

## Connections

- Player → App navigation: uses
- App navigation → Login page: shows
- App navigation → Lobby page: shows
- App navigation → Game page: shows
- App navigation → Ranking page: shows
- Login page → REST client: requests auth
- Lobby page → REST client: requests lobby
- Game page → REST client: requests game
- Ranking page → REST client: requests ranking
- Game page → WebSocket client: sends actions
- Game page → Chat UI: renders
- Chat UI → WebSocket client: sends messages
- REST client → Auth controller: REST calls
- REST client → Lobby controller: REST calls
- REST client → Game controller: REST calls
- REST client → Ranking controller: REST calls
- Auth controller → Authentication: delegates auth
- Lobby controller → Game rules: manages games
- Game controller → Game rules: runs game
- Ranking controller → Ranking service: fetches ranking
- Game rules → Deck operations: creates and draws
- Authentication → JPA repositories: reads and writes
- Game rules → JPA repositories: reads and writes
- Deck operations → JPA repositories: reads and writes
- Ranking service → JPA repositories: reads and writes
- JPA repositories → MySQL: persists
- WebSocket client → Game endpoint: sends actions
- Game endpoint → Game rules: updates game
- Game endpoint → WebSocket client: broadcasts state
- WebSocket client → Chat endpoint: sends chat
- Chat endpoint → JPA repositories: persists messages
