# pablogarciavacas/overloadseries architecture

> Architecture diagram of the GitHub repository pablogarciavacas/overloadseries, 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/pablogarciavacas/overloadseries
- Repository: https://github.com/pablogarciavacas/overloadseries

## Overview

This repository appears to implement a football-league web app: users browse league information and match records, while administrators manage competition structure, matches, events, ratings, awards, and historical records. Separate Fantasy and Arcade experiences provide league games and collectible-card mechanics. The sampled routes show API handlers reading and writing Cloudflare-backed database state; Fantasy and Arcade also use imported match-event data. The UI and several routes were not sampled, and the README is empty, so links between screens and unsampled subsystems are shown only where their wiring is supported.

Main entry points: [`db/index.ts`](https://github.com/pablogarciavacas/overloadseries/blob/main/db/index.ts) (Database access), [`app/chatgpt-auth.ts`](https://github.com/pablogarciavacas/overloadseries/blob/main/app/chatgpt-auth.ts) (ChatGPT auth), [`app/api/fantasy/route.ts`](https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/fantasy/route.ts) (Fantasy service), [`app/api/arcade/route.ts`](https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/arcade/route.ts) (Arcade service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Web experiences"]
  node_page["App entry<br/>[page.tsx]"]
  node_leagueapp["League app<br/>[league-app.tsx]"]
  node_arcadeui["Arcade hub<br/>[ArcadeHub.tsx]"]
  node_fantasyui["Fantasy hub<br/>[FantasyHub.tsx]"]
  node_matchview["Match momentum<br/>[MatchMomentum.tsx]"]
end

subgraph group_league["League administration"]
  node_structureapi["League structure<br/>[route.ts]"]
  node_matchesapi["Matches<br/>[route.ts]"]
  node_eventsapi["Match events<br/>[route.ts]"]
  node_analysisapi["Match analysis<br/>[route.ts]"]
  node_ratingsapi["Match ratings<br/>[route.ts]"]
  node_playersapi["Player overrides<br/>[route.ts]"]
  node_awardsapi["Individual awards<br/>[route.ts]"]
  node_trophiesapi["Trophies<br/>[route.ts]"]
  node_timelineapi["League timeline<br/>[route.ts]"]
end

subgraph group_games["Games"]
  node_fantasyapi["Fantasy service<br/>[route.ts]"]
  node_arcadeapi["Arcade service<br/>[route.ts]"]
end

subgraph group_data["Data and persistence"]
  node_league_model["League model<br/>[league-data.ts]"]
  node_narration["Narration analysis"]
  node_teamkeys["Team keys<br/>[team-key.ts]"]
  node_auth["ChatGPT auth<br/>[chatgpt-auth.ts]"]
  node_dbaccess["Database access<br/>[index.ts]"]
  node_schema["League schema<br/>[schema.ts]"]
  node_database[("League database")]
  node_eventdata["Imported events"]
end

node_visitor(("Visitor"))

node_visitor -->|"opens"| node_page
node_fantasyapi -->|"authenticates"| node_auth
node_arcadeapi -->|"authenticates"| node_auth
node_structureapi -->|"checks admin"| node_auth
node_matchesapi -->|"checks admin"| node_auth
node_eventsapi -->|"checks admin"| node_auth
node_analysisapi -->|"checks admin"| node_auth
node_ratingsapi -->|"checks admin"| node_auth
node_playersapi -->|"checks admin"| node_auth
node_awardsapi -->|"checks admin"| node_auth
node_trophiesapi -->|"checks admin"| node_auth
node_timelineapi -->|"checks admin"| node_auth
node_fantasyapi -->|"uses"| node_league_model
node_fantasyapi -->|"normalizes teams"| node_teamkeys
node_fantasyapi -->|"analyzes"| node_narration
node_fantasyapi -->|"reads"| node_eventdata
node_arcadeapi -->|"uses"| node_league_model
node_arcadeapi -->|"reads"| node_eventdata
node_structureapi -->|"normalizes teams"| node_teamkeys
node_structureapi -->|"queries"| node_dbaccess
node_matchesapi -->|"queries"| node_dbaccess
node_eventsapi -->|"queries"| node_dbaccess
node_analysisapi -->|"queries"| node_dbaccess
node_ratingsapi -->|"queries"| node_dbaccess
node_playersapi -->|"queries"| node_dbaccess
node_awardsapi -->|"queries"| node_dbaccess
node_trophiesapi -->|"queries"| node_dbaccess
node_timelineapi -->|"queries"| node_dbaccess
node_fantasyapi -->|"reads/writes"| node_database
node_arcadeapi -->|"reads/writes"| node_database
node_dbaccess -->|"uses"| node_schema
node_dbaccess -->|"connects"| node_database
node_leagueapp --> node_fantasyui
node_leagueapp --> node_arcadeui
node_leagueapp --> node_matchview

click node_page "https://github.com/pablogarciavacas/overloadseries/blob/main/app/page.tsx"
click node_leagueapp "https://github.com/pablogarciavacas/overloadseries/blob/main/app/league-app.tsx"
click node_arcadeui "https://github.com/pablogarciavacas/overloadseries/blob/main/app/components/ArcadeHub.tsx"
click node_fantasyui "https://github.com/pablogarciavacas/overloadseries/blob/main/app/components/FantasyHub.tsx"
click node_matchview "https://github.com/pablogarciavacas/overloadseries/blob/main/app/components/MatchMomentum.tsx"
click node_structureapi "https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/league-structure/route.ts"
click node_matchesapi "https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/matches/route.ts"
click node_eventsapi "https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/match-events/route.ts"
click node_analysisapi "https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/match-analysis/route.ts"
click node_ratingsapi "https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/match-ratings/route.ts"
click node_playersapi "https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/players/route.ts"
click node_awardsapi "https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/individual-awards/route.ts"
click node_trophiesapi "https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/trophies/route.ts"
click node_timelineapi "https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/timeline/route.ts"
click node_fantasyapi "https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/fantasy/route.ts"
click node_arcadeapi "https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/arcade/route.ts"
click node_league_model "https://github.com/pablogarciavacas/overloadseries/blob/main/lib/league-data.ts"
click node_narration "https://github.com/pablogarciavacas/overloadseries/blob/main/lib/narration-analysis.ts"
click node_teamkeys "https://github.com/pablogarciavacas/overloadseries/blob/main/lib/team-key.ts"
click node_auth "https://github.com/pablogarciavacas/overloadseries/blob/main/app/chatgpt-auth.ts"
click node_dbaccess "https://github.com/pablogarciavacas/overloadseries/blob/main/db/index.ts"
click node_schema "https://github.com/pablogarciavacas/overloadseries/blob/main/db/schema.ts"
click node_eventdata "https://github.com/pablogarciavacas/overloadseries/blob/main/data/imported-match-events.json"

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_page,node_leagueapp,node_arcadeui,node_fantasyui,node_matchview toneBlue
class node_structureapi,node_matchesapi,node_eventsapi,node_analysisapi,node_ratingsapi,node_playersapi,node_awardsapi,node_trophiesapi,node_timelineapi toneAmber
class node_fantasyapi,node_arcadeapi toneMint
class node_league_model,node_narration,node_teamkeys,node_auth,node_dbaccess,node_schema,node_database,node_eventdata toneRose
class node_visitor toneIndigo
```

## Components

### Web experiences

- [App entry](https://github.com/pablogarciavacas/overloadseries/blob/main/app/page.tsx): `app/page.tsx`
- [League app](https://github.com/pablogarciavacas/overloadseries/blob/main/app/league-app.tsx): `app/league-app.tsx`
- [Arcade hub](https://github.com/pablogarciavacas/overloadseries/blob/main/app/components/ArcadeHub.tsx): `app/components/ArcadeHub.tsx`
- [Fantasy hub](https://github.com/pablogarciavacas/overloadseries/blob/main/app/components/FantasyHub.tsx): `app/components/FantasyHub.tsx`
- [Match momentum](https://github.com/pablogarciavacas/overloadseries/blob/main/app/components/MatchMomentum.tsx): `app/components/MatchMomentum.tsx`

### League administration

- [League structure](https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/league-structure/route.ts): `app/api/league-structure/route.ts`
- [Matches](https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/matches/route.ts): `app/api/matches/route.ts`
- [Match events](https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/match-events/route.ts): `app/api/match-events/route.ts`
- [Match analysis](https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/match-analysis/route.ts): `app/api/match-analysis/route.ts`
- [Match ratings](https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/match-ratings/route.ts): `app/api/match-ratings/route.ts`
- [Player overrides](https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/players/route.ts): `app/api/players/route.ts`
- [Individual awards](https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/individual-awards/route.ts): `app/api/individual-awards/route.ts`
- [Trophies](https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/trophies/route.ts): `app/api/trophies/route.ts`
- [League timeline](https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/timeline/route.ts): `app/api/timeline/route.ts`

### Games

- [Fantasy service](https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/fantasy/route.ts): `app/api/fantasy/route.ts`
- [Arcade service](https://github.com/pablogarciavacas/overloadseries/blob/main/app/api/arcade/route.ts): `app/api/arcade/route.ts`

### Data and persistence

- [League model](https://github.com/pablogarciavacas/overloadseries/blob/main/lib/league-data.ts): `lib/league-data.ts`
- [Narration analysis](https://github.com/pablogarciavacas/overloadseries/blob/main/lib/narration-analysis.ts): `lib/narration-analysis.ts`
- [Team keys](https://github.com/pablogarciavacas/overloadseries/blob/main/lib/team-key.ts): `lib/team-key.ts`
- [ChatGPT auth](https://github.com/pablogarciavacas/overloadseries/blob/main/app/chatgpt-auth.ts): `app/chatgpt-auth.ts`
- [Database access](https://github.com/pablogarciavacas/overloadseries/blob/main/db/index.ts): `db/index.ts`
- [League schema](https://github.com/pablogarciavacas/overloadseries/blob/main/db/schema.ts): `db/schema.ts`
- **League database**
- [Imported events](https://github.com/pablogarciavacas/overloadseries/blob/main/data/imported-match-events.json): `data/imported-match-events.json`

### Other components

- **Visitor**

## Connections

- Visitor → App entry: opens
- Fantasy service → ChatGPT auth: authenticates
- Arcade service → ChatGPT auth: authenticates
- League structure → ChatGPT auth: checks admin
- Matches → ChatGPT auth: checks admin
- Match events → ChatGPT auth: checks admin
- Match analysis → ChatGPT auth: checks admin
- Match ratings → ChatGPT auth: checks admin
- Player overrides → ChatGPT auth: checks admin
- Individual awards → ChatGPT auth: checks admin
- Trophies → ChatGPT auth: checks admin
- League timeline → ChatGPT auth: checks admin
- Fantasy service → League model: uses
- Fantasy service → Team keys: normalizes teams
- Fantasy service → Narration analysis: analyzes
- Fantasy service → Imported events: reads
- Arcade service → League model: uses
- Arcade service → Imported events: reads
- League structure → Team keys: normalizes teams
- League structure → Database access: queries
- Matches → Database access: queries
- Match events → Database access: queries
- Match analysis → Database access: queries
- Match ratings → Database access: queries
- Player overrides → Database access: queries
- Individual awards → Database access: queries
- Trophies → Database access: queries
- League timeline → Database access: queries
- Fantasy service → League database: reads/writes
- Arcade service → League database: reads/writes
- Database access → League schema: uses
- Database access → League database: connects
- League app → Fantasy hub
- League app → Arcade hub
- League app → Match momentum
