# atcasanova/copa2026 architecture

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

- Interactive diagram: https://gitdiagram.com/atcasanova/copa2026
- Repository: https://github.com/atcasanova/copa2026

## Overview

Bolão Copa do Mundo 2026 é um sistema de palpites: participantes entram pela interface, registram palpites para partidas e acompanham tabelas e classificações; administradores também gerenciam resultados, pagamentos e sincronizações. O backend concentra as rotas de domínio, enquanto PostgreSQL mantém os dados. Sincronização de partidas e resultados, notificações e auditoria são capacidades documentadas. Excertos de implementação são parciais; por isso, relações entre páginas e rotas não amostradas foram omitidas.

Main entry points: [`backend/app/main.py`](https://github.com/atcasanova/copa2026/blob/main/backend/app/main.py) (FastAPI), [`backend/app/sync.py`](https://github.com/atcasanova/copa2026/blob/main/backend/app/sync.py) (Sincronização), [`frontend/src/App.jsx`](https://github.com/atcasanova/copa2026/blob/main/frontend/src/App.jsx) (Aplicação web), [`backend/app/routers/auth.py`](https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/auth.py) (Autenticação)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Interface do bolão"]
  node_app["Aplicação web<br/>[App.jsx]"]
  node_layout["Navegação<br/>[Layout.jsx]"]
  node_predictions_ui["Palpites<br/>[Predictions.jsx]"]
  node_rankings_ui["Rankings e tabelas<br/>[Rankings.jsx]"]
  node_groups_ui["Grupos<br/>[Groups.jsx]"]
  node_champion_ui["Caminho do campeão<br/>[CaminhoCampeao.jsx]"]
  node_profile_ui["Perfil<br/>[Profile.jsx]"]
  node_admin_ui["Administração<br/>[AdminPanel.jsx]"]
  node_audit_ui["Auditoria<br/>[Auditoria.jsx]"]
end

subgraph group_api["API e domínio"]
  node_api["FastAPI<br/>[main.py]"]
  node_auth_routes["Autenticação<br/>[auth.py]"]
  node_match_routes["Partidas<br/>[matches.py]"]
  node_prediction_routes["Palpites<br/>[predictions.py]"]
  node_ranking_routes["Classificações<br/>[rankings.py]"]
  node_group_routes["Grupos<br/>[groups.py]"]
  node_payment_routes["Pagamentos<br/>[payments.py]"]
  node_admin_routes["Administração<br/>[admin.py]"]
  node_audit_routes["Auditoria<br/>[audit.py]"]
  node_scoring["Pontuação<br/>[scoring.py]"]
end

subgraph group_data["Persistência"]
  node_database[("PostgreSQL<br/>[db.py]")]
  node_models["Modelos de domínio<br/>[models.py]"]
end

subgraph group_integrations["Integrações e tarefas"]
  node_scheduler["Agendador<br/>[scheduler.py]"]
  node_sync["Sincronização<br/>[sync.py]"]
  node_notifications["Notificações<br/>[notifications.py]"]
  node_github_audit["Publicação GitHub<br/>[github_audit.py]"]
end

node_participant(("Participante"))
node_admin(("Administrador"))
node_football_data["Football-data.org"]
node_openfootball["OpenFootball"]
node_whatsapp["API WhatsApp"]
node_github["GitHub"]

node_participant -->|"usa"| node_app
node_admin -->|"administra"| node_app
node_app -->|"mostra"| node_layout
node_app -->|"consulta usuário"| node_api
node_api -->|"registra rota"| node_auth_routes
node_api -->|"registra rota"| node_match_routes
node_api -->|"registra rota"| node_prediction_routes
node_api -->|"registra rota"| node_ranking_routes
node_api -->|"registra rota"| node_group_routes
node_api -->|"registra rota"| node_payment_routes
node_api -->|"registra rota"| node_admin_routes
node_api -->|"registra rota"| node_audit_routes
node_auth_routes -->|"consulta usuários"| node_database
node_prediction_routes -->|"recalcula pontos"| node_scoring
node_ranking_routes -->|"usa pontuação"| node_scoring
node_api -->|"inicia tarefas"| node_scheduler
node_scheduler -->|"agenda sincronização"| node_sync
node_sync -->|"importa dados"| node_openfootball
node_sync -.->|"consulta placares"| node_football_data
node_sync -->|"atualiza partidas"| node_database
node_sync -->|"solicita recálculo"| node_scoring
node_admin_routes -->|"aciona carga"| node_sync
node_notifications -.->|"envia mensagens"| node_whatsapp
node_github_audit -.->|"publica auditoria"| node_github
node_auth_routes -.->|"notifica cadastro"| node_notifications
node_database -->|"mapeia entidades"| node_models

click node_app "https://github.com/atcasanova/copa2026/blob/main/frontend/src/App.jsx"
click node_layout "https://github.com/atcasanova/copa2026/blob/main/frontend/src/components/Layout.jsx"
click node_predictions_ui "https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/Predictions.jsx"
click node_rankings_ui "https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/Rankings.jsx"
click node_groups_ui "https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/Groups.jsx"
click node_champion_ui "https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/CaminhoCampeao.jsx"
click node_profile_ui "https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/Profile.jsx"
click node_admin_ui "https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/AdminPanel.jsx"
click node_audit_ui "https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/Auditoria.jsx"
click node_api "https://github.com/atcasanova/copa2026/blob/main/backend/app/main.py"
click node_auth_routes "https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/auth.py"
click node_match_routes "https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/matches.py"
click node_prediction_routes "https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/predictions.py"
click node_ranking_routes "https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/rankings.py"
click node_group_routes "https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/groups.py"
click node_payment_routes "https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/payments.py"
click node_admin_routes "https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/admin.py"
click node_audit_routes "https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/audit.py"
click node_scoring "https://github.com/atcasanova/copa2026/blob/main/backend/app/scoring.py"
click node_scheduler "https://github.com/atcasanova/copa2026/blob/main/backend/app/scheduler.py"
click node_sync "https://github.com/atcasanova/copa2026/blob/main/backend/app/sync.py"
click node_notifications "https://github.com/atcasanova/copa2026/blob/main/backend/app/notifications.py"
click node_github_audit "https://github.com/atcasanova/copa2026/blob/main/backend/app/github_audit.py"
click node_database "https://github.com/atcasanova/copa2026/blob/main/backend/app/db.py"
click node_models "https://github.com/atcasanova/copa2026/blob/main/backend/app/models.py"

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_layout,node_predictions_ui,node_rankings_ui,node_groups_ui,node_champion_ui,node_profile_ui,node_admin_ui,node_audit_ui toneBlue
class node_api,node_auth_routes,node_match_routes,node_prediction_routes,node_ranking_routes,node_group_routes,node_payment_routes,node_admin_routes,node_audit_routes,node_scoring toneAmber
class node_database,node_models,node_whatsapp toneMint
class node_scheduler,node_sync,node_notifications,node_github_audit toneRose
class node_participant,node_admin,node_football_data,node_openfootball,node_github toneIndigo
```

## Components

### Interface do bolão

- [Aplicação web](https://github.com/atcasanova/copa2026/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Navegação](https://github.com/atcasanova/copa2026/blob/main/frontend/src/components/Layout.jsx): `frontend/src/components/Layout.jsx`
- [Palpites](https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/Predictions.jsx): `frontend/src/pages/Predictions.jsx`
- [Rankings e tabelas](https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/Rankings.jsx): `frontend/src/pages/Rankings.jsx`
- [Grupos](https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/Groups.jsx): `frontend/src/pages/Groups.jsx`
- [Caminho do campeão](https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/CaminhoCampeao.jsx): `frontend/src/pages/CaminhoCampeao.jsx`
- [Perfil](https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/Profile.jsx): `frontend/src/pages/Profile.jsx`
- [Administração](https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/AdminPanel.jsx): `frontend/src/pages/AdminPanel.jsx`
- [Auditoria](https://github.com/atcasanova/copa2026/blob/main/frontend/src/pages/Auditoria.jsx): `frontend/src/pages/Auditoria.jsx`

### API e domínio

- [FastAPI](https://github.com/atcasanova/copa2026/blob/main/backend/app/main.py): `backend/app/main.py`
- [Autenticação](https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/auth.py): `backend/app/routers/auth.py`
- [Partidas](https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/matches.py): `backend/app/routers/matches.py`
- [Palpites](https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/predictions.py): `backend/app/routers/predictions.py`
- [Classificações](https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/rankings.py): `backend/app/routers/rankings.py`
- [Grupos](https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/groups.py): `backend/app/routers/groups.py`
- [Pagamentos](https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/payments.py): `backend/app/routers/payments.py`
- [Administração](https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/admin.py): `backend/app/routers/admin.py`
- [Auditoria](https://github.com/atcasanova/copa2026/blob/main/backend/app/routers/audit.py): `backend/app/routers/audit.py`
- [Pontuação](https://github.com/atcasanova/copa2026/blob/main/backend/app/scoring.py): `backend/app/scoring.py`

### Persistência

- [PostgreSQL](https://github.com/atcasanova/copa2026/blob/main/backend/app/db.py): `backend/app/db.py`
- [Modelos de domínio](https://github.com/atcasanova/copa2026/blob/main/backend/app/models.py): `backend/app/models.py`

### Integrações e tarefas

- [Agendador](https://github.com/atcasanova/copa2026/blob/main/backend/app/scheduler.py): `backend/app/scheduler.py`
- [Sincronização](https://github.com/atcasanova/copa2026/blob/main/backend/app/sync.py): `backend/app/sync.py`
- [Notificações](https://github.com/atcasanova/copa2026/blob/main/backend/app/notifications.py): `backend/app/notifications.py`
- [Publicação GitHub](https://github.com/atcasanova/copa2026/blob/main/backend/app/github_audit.py): `backend/app/github_audit.py`

### Other components

- **Participante**
- **Administrador**
- **Football-data.org**
- **OpenFootball**
- **API WhatsApp**
- **GitHub**

## Connections

- Participante → Aplicação web: usa
- Administrador → Aplicação web: administra
- Aplicação web → Navegação: mostra
- Aplicação web → FastAPI: consulta usuário
- FastAPI → Autenticação: registra rota
- FastAPI → Partidas: registra rota
- FastAPI → Palpites: registra rota
- FastAPI → Classificações: registra rota
- FastAPI → Grupos: registra rota
- FastAPI → Pagamentos: registra rota
- FastAPI → Administração: registra rota
- FastAPI → Auditoria: registra rota
- Autenticação → PostgreSQL: consulta usuários
- Palpites → Pontuação: recalcula pontos
- Classificações → Pontuação: usa pontuação
- FastAPI → Agendador: inicia tarefas
- Agendador → Sincronização: agenda sincronização
- Sincronização → OpenFootball: importa dados
- Sincronização → Football-data.org: consulta placares
- Sincronização → PostgreSQL: atualiza partidas
- Sincronização → Pontuação: solicita recálculo
- Administração → Sincronização: aciona carga
- Notificações → API WhatsApp: envia mensagens
- Publicação GitHub → GitHub: publica auditoria
- Autenticação → Notificações: notifica cadastro
- PostgreSQL → Modelos de domínio: mapeia entidades
