# learn-beast12/nit-manipur-football-beast architecture

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

- Interactive diagram: https://gitdiagram.com/learn-beast12/nit-manipur-football-beast
- Repository: https://github.com/learn-beast12/nit-manipur-football-beast

## Overview

This is a React web application for following and administering the NIT Manipur Inter-Year Football Tournament. Visitors browse tournament information, teams, players, fixtures, results, standings, knockout matches, champions, and rules; match cards lead to detailed score and event views. Administrators sign in and manage tournament data, match events, announcements, and settings. React Query hooks fetch tournament data from Supabase and refresh it on realtime changes; standings apply a head-to-head tie-breaker. The README documents capabilities beyond the sampled excerpts, so those relationships are shown only where routing or documentation supports them.

Main entry points: [`src/features/tournament/hooks.ts`](https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/features/tournament/hooks.ts) (Tournament Queries), [`src/App.tsx`](https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/App.tsx) (App Router), [`src/pages`](https://github.com/learn-beast12/nit-manipur-football-beast/tree/main/src/pages) (Public Pages), [`src/pages/admin`](https://github.com/learn-beast12/nit-manipur-football-beast/tree/main/src/pages/admin) (Admin Pages)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public Tournament"]
  node_router["App Router<br/>[App.tsx]"]
  node_public_pages["Public Pages"]
  node_match_detail["Match Detail<br/>[MatchDetail.tsx]"]
  node_match_card["Match Card<br/>[MatchCard.tsx]"]
end

subgraph group_admin["Admin Management"]
  node_admin_routes["Admin Pages"]
  node_admin_auth["Admin Auth"]
  node_admin_layout["Admin Layout<br/>[AdminLayout.tsx]"]
end

subgraph group_domain["Tournament Services"]
  node_tournament_hooks["Tournament Queries<br/>[hooks.ts]"]
  node_tie_breaker["Standings Tie-breaker<br/>[tieBreaker.ts]"]
  node_fixture_generator["Fixture Generator"]
  node_formatting["Match Formatting<br/>[format.ts]"]
end

subgraph group_backend["Data Access"]
  node_auth_service["Auth Service<br/>[auth.ts]"]
  node_supabase_client["Supabase Client<br/>[supabase.ts]"]
end

node_visitor(("Visitor"))
node_administrator(("Administrator"))
node_supabase[("Supabase")]

node_visitor -->|"opens"| node_router
node_administrator -->|"opens"| node_router
node_router -->|"routes to"| node_public_pages
node_router -->|"routes to"| node_match_detail
node_router -->|"routes to"| node_admin_routes
node_router -->|"protects"| node_admin_auth
node_router -->|"routes to"| node_admin_layout
node_public_pages -->|"loads data"| node_tournament_hooks
node_public_pages -->|"renders"| node_match_card
node_public_pages -->|"loads data"| node_tournament_hooks
node_public_pages -->|"loads data"| node_tournament_hooks
node_public_pages -->|"loads data"| node_tournament_hooks
node_match_detail -->|"loads matches"| node_tournament_hooks
node_match_detail -->|"queries events"| node_supabase_client
node_match_detail -->|"formats dates"| node_formatting
node_match_card -->|"formats dates"| node_formatting
node_admin_routes -->|"loads data"| node_tournament_hooks
node_admin_routes -->|"manages records"| node_supabase_client
node_admin_routes -->|"generates fixtures"| node_fixture_generator
node_admin_routes -->|"signs in"| node_auth_service
node_admin_auth -->|"checks admin"| node_auth_service
node_tournament_hooks -->|"queries data"| node_supabase_client
node_tournament_hooks -->|"sorts standings"| node_tie_breaker
node_auth_service -->|"authenticates"| node_supabase_client
node_supabase_client -->|"connects to"| node_supabase
node_tournament_hooks -->|"subscribes to changes"| node_supabase

click node_router "https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/App.tsx"
click node_public_pages "https://github.com/learn-beast12/nit-manipur-football-beast/tree/main/src/pages"
click node_match_detail "https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/pages/MatchDetail.tsx"
click node_match_card "https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/features/matches/MatchCard.tsx"
click node_admin_routes "https://github.com/learn-beast12/nit-manipur-football-beast/tree/main/src/pages/admin"
click node_admin_auth "https://github.com/learn-beast12/nit-manipur-football-beast/tree/main/src/features/admin/auth"
click node_admin_layout "https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/layouts/AdminLayout.tsx"
click node_tournament_hooks "https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/features/tournament/hooks.ts"
click node_tie_breaker "https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/features/standings/tieBreaker.ts"
click node_fixture_generator "https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/features/matches/fixtureGenerator.ts"
click node_formatting "https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/lib/format.ts"
click node_auth_service "https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/lib/auth.ts"
click node_supabase_client "https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/lib/supabase.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_router,node_public_pages,node_match_detail,node_match_card toneBlue
class node_admin_routes,node_admin_auth,node_admin_layout,node_supabase toneAmber
class node_tournament_hooks,node_tie_breaker,node_fixture_generator,node_formatting toneMint
class node_auth_service,node_supabase_client toneRose
class node_visitor,node_administrator toneIndigo
```

## Components

### Public Tournament

- [App Router](https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/App.tsx): `src/App.tsx`
- [Public Pages](https://github.com/learn-beast12/nit-manipur-football-beast/tree/main/src/pages): `src/pages`
- [Match Detail](https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/pages/MatchDetail.tsx): `src/pages/MatchDetail.tsx`
- [Match Card](https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/features/matches/MatchCard.tsx): `src/features/matches/MatchCard.tsx`

### Admin Management

- [Admin Pages](https://github.com/learn-beast12/nit-manipur-football-beast/tree/main/src/pages/admin): `src/pages/admin`
- [Admin Auth](https://github.com/learn-beast12/nit-manipur-football-beast/tree/main/src/features/admin/auth): `src/features/admin/auth`
- [Admin Layout](https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/layouts/AdminLayout.tsx): `src/layouts/AdminLayout.tsx`

### Tournament Services

- [Tournament Queries](https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/features/tournament/hooks.ts): `src/features/tournament/hooks.ts`
- [Standings Tie-breaker](https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/features/standings/tieBreaker.ts): `src/features/standings/tieBreaker.ts`
- [Fixture Generator](https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/features/matches/fixtureGenerator.ts): `src/features/matches/fixtureGenerator.ts`
- [Match Formatting](https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/lib/format.ts): `src/lib/format.ts`

### Data Access

- [Auth Service](https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/lib/auth.ts): `src/lib/auth.ts`
- [Supabase Client](https://github.com/learn-beast12/nit-manipur-football-beast/blob/main/src/lib/supabase.ts): `src/lib/supabase.ts`

### Other components

- **Visitor**
- **Administrator**
- **Supabase**

## Connections

- Visitor → App Router: opens (evidence: `src/App.tsx`)
- Administrator → App Router: opens (evidence: `src/App.tsx`)
- App Router → Public Pages: routes to (evidence: `src/App.tsx`)
- App Router → Match Detail: routes to (evidence: `src/App.tsx`)
- App Router → Admin Pages: routes to (evidence: `src/App.tsx`)
- App Router → Admin Auth: protects (evidence: `src/App.tsx`)
- App Router → Admin Layout: routes to (evidence: `src/App.tsx`)
- Public Pages → Tournament Queries: loads data (evidence: `src/pages/index.tsx`)
- Public Pages → Match Card: renders (evidence: `src/pages/index.tsx`)
- Public Pages → Tournament Queries: loads data (evidence: `src/pages/Standings.tsx`)
- Public Pages → Tournament Queries: loads data (evidence: `src/pages/Knockout.tsx`)
- Public Pages → Tournament Queries: loads data (evidence: `src/pages/Rules.tsx`)
- Match Detail → Tournament Queries: loads matches (evidence: `src/pages/MatchDetail.tsx`)
- Match Detail → Supabase Client: queries events (evidence: `src/pages/MatchDetail.tsx`)
- Match Detail → Match Formatting: formats dates (evidence: `src/pages/MatchDetail.tsx`)
- Match Card → Match Formatting: formats dates (evidence: `src/features/matches/MatchCard.tsx`)
- Admin Pages → Tournament Queries: loads data (evidence: `src/pages/admin/AdminOverview.tsx`)
- Admin Pages → Supabase Client: manages records (evidence: `src/pages/admin/AdminTeams.tsx`)
- Admin Pages → Fixture Generator: generates fixtures (evidence: `src/pages/admin/AdminMatches.tsx`)
- Admin Pages → Auth Service: signs in (evidence: `src/pages/admin/AdminLogin.tsx`)
- Admin Auth → Auth Service: checks admin (evidence: `src/features/admin/auth/useAuth.ts`)
- Tournament Queries → Supabase Client: queries data (evidence: `src/features/tournament/hooks.ts`)
- Tournament Queries → Standings Tie-breaker: sorts standings (evidence: `src/features/tournament/hooks.ts`)
- Auth Service → Supabase Client: authenticates (evidence: `src/lib/auth.ts`)
- Supabase Client → Supabase: connects to (evidence: `src/lib/supabase.ts`)
- Tournament Queries → Supabase: subscribes to changes (evidence: `src/features/tournament/hooks.ts`)
