# benjamarit/multirole architecture

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

- Interactive diagram: https://gitdiagram.com/benjamarit/multirole
- Repository: https://github.com/benjamarit/multirole

## Overview

MultiRole is a competition-management and judging application: project owners configure competitions, teams, groups, criteria, and judge assignments; judges submit weighted evaluations; owners monitor results and rankings. The React frontend routes role-specific workflows and loads server-backed workspace data through the API client. Spring services enforce access and evaluation rules, with MySQL as the persistent store. The README also documents deadline history, notifications, and email reminders. Several controllers and subsystems are unsampled, so their internal call paths are not asserted.

Main entry points: [`src/api/client.js`](https://github.com/benjamarit/multirole/blob/main/src/api/client.js) (API client), [`src/App.jsx`](https://github.com/benjamarit/multirole/blob/main/src/App.jsx) (Role-based routes), [`backend/src/main/java/org/cesystem/multirole/model`](https://github.com/benjamarit/multirole/tree/main/backend/src/main/java/org/cesystem/multirole/model) (Competition records), [`backend/src/main/java/org/cesystem/multirole/controller/CompetitionController.java`](https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/controller/CompetitionController.java) (Competition API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_routes["Role-based routes<br/>[App.jsx]"]
  node_authui["Session context<br/>[AuthContext.jsx]"]
  node_apiclient["API client<br/>[client.js]"]
  node_workspace["Workspace loader<br/>[workspace.js]"]
  node_projectstore["Project operations<br/>[ProjectStore.js]"]
  node_projectpages["Owner workflows"]
  node_judgepages["Judge workflows"]
  node_adminpages["Administration"]
end

subgraph group_backend["Backend API"]
  node_authcontroller["Authentication API"]
  node_competitioncontroller["Competition API"]
  node_teamcontroller["Teams and groups API"]
  node_access["Access control<br/>[AccessService.java]"]
  node_domainmodels["Competition records"]
end

subgraph group_judging["Judging domain"]
  node_evaluations["Evaluation rules"]
  node_batch["Batch evaluation"]
  node_leaderboard["Leaderboard"]
end

subgraph group_integrations["Identity and messaging"]
  node_authservice["Authentication service<br/>[AuthService.java]"]
  node_verification["Email verification"]
  node_reminders["Evaluation reminders"]
  node_emaildelivery["Email delivery"]
end

node_user(("User"))
node_mysql[("MySQL")]
node_mailservice["Brevo email"]

node_user -->|"uses"| node_routes
node_routes -->|"routes to"| node_projectpages
node_routes -->|"routes to"| node_judgepages
node_routes -->|"routes to"| node_adminpages
node_authui -->|"requests"| node_apiclient
node_authui -->|"loads session data"| node_workspace
node_workspace -->|"fetches workspace"| node_apiclient
node_projectstore -->|"updates projects"| node_apiclient
node_apiclient -.->|"calls API"| node_authcontroller
node_apiclient -.->|"calls API"| node_competitioncontroller
node_competitioncontroller -->|"checks access"| node_access
node_competitioncontroller -->|"reads and updates"| node_domainmodels
node_teamcontroller -->|"checks access"| node_access
node_authservice -->|"requests verification"| node_verification
node_authservice -->|"creates user"| node_domainmodels
node_evaluations -->|"records scores"| node_domainmodels
node_evaluations -.->|"feeds results"| node_leaderboard
node_reminders -->|"queues reminders"| node_emaildelivery
node_emaildelivery -.->|"sends mail"| node_mailservice
node_domainmodels -->|"persists records"| node_mysql

click node_routes "https://github.com/benjamarit/multirole/blob/main/src/App.jsx"
click node_authui "https://github.com/benjamarit/multirole/blob/main/src/context/AuthContext.jsx"
click node_apiclient "https://github.com/benjamarit/multirole/blob/main/src/api/client.js"
click node_workspace "https://github.com/benjamarit/multirole/blob/main/src/api/workspace.js"
click node_projectstore "https://github.com/benjamarit/multirole/blob/main/src/data/projects/ProjectStore.js"
click node_projectpages "https://github.com/benjamarit/multirole/tree/main/src/pages"
click node_judgepages "https://github.com/benjamarit/multirole/tree/main/src/pages"
click node_adminpages "https://github.com/benjamarit/multirole/tree/main/src/pages"
click node_authcontroller "https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/controller/AuthController.java"
click node_competitioncontroller "https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/controller/CompetitionController.java"
click node_teamcontroller "https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/controller/TeamGroupController.java"
click node_authservice "https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/AuthService.java"
click node_access "https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/AccessService.java"
click node_verification "https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/EmailVerificationService.java"
click node_evaluations "https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/EvaluationService.java"
click node_batch "https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/BatchEvaluationService.java"
click node_leaderboard "https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/LeaderboardService.java"
click node_reminders "https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/EvaluationReminderService.java"
click node_emaildelivery "https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/EmailDeliveryService.java"
click node_domainmodels "https://github.com/benjamarit/multirole/tree/main/backend/src/main/java/org/cesystem/multirole/model"

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_routes,node_authui,node_apiclient,node_workspace,node_projectstore,node_projectpages,node_judgepages,node_adminpages,node_user toneBlue
class node_authcontroller,node_competitioncontroller,node_teamcontroller,node_access,node_domainmodels,node_mysql toneAmber
class node_evaluations,node_batch,node_leaderboard toneMint
class node_authservice,node_verification,node_reminders,node_emaildelivery toneRose
class node_mailservice toneIndigo
```

## Components

### Web application

- [Role-based routes](https://github.com/benjamarit/multirole/blob/main/src/App.jsx): `src/App.jsx`
- [Session context](https://github.com/benjamarit/multirole/blob/main/src/context/AuthContext.jsx): `src/context/AuthContext.jsx`
- [API client](https://github.com/benjamarit/multirole/blob/main/src/api/client.js): `src/api/client.js`
- [Workspace loader](https://github.com/benjamarit/multirole/blob/main/src/api/workspace.js): `src/api/workspace.js`
- [Project operations](https://github.com/benjamarit/multirole/blob/main/src/data/projects/ProjectStore.js): `src/data/projects/ProjectStore.js`
- [Owner workflows](https://github.com/benjamarit/multirole/tree/main/src/pages): `src/pages`
- [Judge workflows](https://github.com/benjamarit/multirole/tree/main/src/pages): `src/pages`
- [Administration](https://github.com/benjamarit/multirole/tree/main/src/pages): `src/pages`

### Backend API

- [Authentication API](https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/controller/AuthController.java): `backend/src/main/java/org/cesystem/multirole/controller/AuthController.java`
- [Competition API](https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/controller/CompetitionController.java): `backend/src/main/java/org/cesystem/multirole/controller/CompetitionController.java`
- [Teams and groups API](https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/controller/TeamGroupController.java): `backend/src/main/java/org/cesystem/multirole/controller/TeamGroupController.java`
- [Access control](https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/AccessService.java): `backend/src/main/java/org/cesystem/multirole/service/AccessService.java`
- [Competition records](https://github.com/benjamarit/multirole/tree/main/backend/src/main/java/org/cesystem/multirole/model): `backend/src/main/java/org/cesystem/multirole/model`

### Judging domain

- [Evaluation rules](https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/EvaluationService.java): `backend/src/main/java/org/cesystem/multirole/service/EvaluationService.java`
- [Batch evaluation](https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/BatchEvaluationService.java): `backend/src/main/java/org/cesystem/multirole/service/BatchEvaluationService.java`
- [Leaderboard](https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/LeaderboardService.java): `backend/src/main/java/org/cesystem/multirole/service/LeaderboardService.java`

### Identity and messaging

- [Authentication service](https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/AuthService.java): `backend/src/main/java/org/cesystem/multirole/service/AuthService.java`
- [Email verification](https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/EmailVerificationService.java): `backend/src/main/java/org/cesystem/multirole/service/EmailVerificationService.java`
- [Evaluation reminders](https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/EvaluationReminderService.java): `backend/src/main/java/org/cesystem/multirole/service/EvaluationReminderService.java`
- [Email delivery](https://github.com/benjamarit/multirole/blob/main/backend/src/main/java/org/cesystem/multirole/service/EmailDeliveryService.java): `backend/src/main/java/org/cesystem/multirole/service/EmailDeliveryService.java`

### Other components

- **User**
- **MySQL**
- **Brevo email**

## Connections

- User → Role-based routes: uses (evidence: `src/App.jsx`)
- Role-based routes → Owner workflows: routes to (evidence: `src/App.jsx`)
- Role-based routes → Judge workflows: routes to (evidence: `src/App.jsx`)
- Role-based routes → Administration: routes to (evidence: `src/App.jsx`)
- Session context → API client: requests (evidence: `src/context/AuthContext.jsx`)
- Session context → Workspace loader: loads session data (evidence: `src/context/AuthContext.jsx`)
- Workspace loader → API client: fetches workspace (evidence: `src/api/workspace.js`)
- Project operations → API client: updates projects (evidence: `src/data/projects/ProjectStore.js`)
- API client → Authentication API: calls API
- API client → Competition API: calls API
- Competition API → Access control: checks access (evidence: `backend/src/main/java/org/cesystem/multirole/controller/CompetitionController.java`)
- Competition API → Competition records: reads and updates (evidence: `backend/src/main/java/org/cesystem/multirole/controller/CompetitionController.java`)
- Teams and groups API → Access control: checks access (evidence: `backend/src/main/java/org/cesystem/multirole/controller/TeamGroupController.java`)
- Authentication service → Email verification: requests verification (evidence: `backend/src/main/java/org/cesystem/multirole/service/AuthService.java`)
- Authentication service → Competition records: creates user (evidence: `backend/src/main/java/org/cesystem/multirole/service/AuthService.java`)
- Evaluation rules → Competition records: records scores (evidence: `backend/src/main/java/org/cesystem/multirole/service/EvaluationService.java`)
- Evaluation rules → Leaderboard: feeds results
- Evaluation reminders → Email delivery: queues reminders (evidence: `backend/src/main/java/org/cesystem/multirole/service/EvaluationReminderService.java`)
- Email delivery → Brevo email: sends mail
- Competition records → MySQL: persists records (evidence: `README.md`)
