# joaoptoaldo/cadernoatlas architecture

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

- Interactive diagram: https://gitdiagram.com/joaoptoaldo/cadernoatlas
- Repository: https://github.com/joaoptoaldo/cadernoatlas

## Overview

CadernoAtlas is a study-organization application with a React client and an ASP.NET Core API backed by EF Core/PostgreSQL. The main workflow is to manage academic demands and their tasks, record study availability, preview a deterministic weekly plan, then confirm it as study sessions. Separate capabilities cover session lifecycle, explainable demand prioritization, and contest-notice/caderno organization. The graph reflects documented capabilities; unsampled controller internals are represented at their existing directory paths, and links without direct evidence are omitted.

Main entry points: [`src/CadernoAtlas.Api/Data/AppDbContext.cs`](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Data/AppDbContext.cs) (EF Core database), [`src/CadernoAtlas.Web/src/apiClient.ts`](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/apiClient.ts) (API client), [`src/CadernoAtlas.Api/Controllers/PlanejamentoSemanalController.cs`](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/PlanejamentoSemanalController.cs) (Weekly plan endpoints), [`src/CadernoAtlas.Web/src/App.tsx`](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/App.tsx) (Study workspace)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["Study workspace<br/>[App.tsx]"]
  node_http["API client<br/>[apiClient.ts]"]
  node_demand_ui["Demand management"]
  node_task_ui["Demand tasks"]
  node_availability_ui["Study availability"]
  node_planning_ui["Planning workflow"]
  node_session_ui["Session management"]
end

subgraph group_api["API workflows"]
  node_demand_api["Academic demands"]
  node_task_api["Demand tasks"]
  node_availability_api["Availability endpoints"]
  node_session_api["Study sessions"]
end

subgraph group_planning["Weekly planning"]
  node_weekly_api["Weekly plan endpoints"]
  node_planner["Weekly allocator"]
  node_proposal_id["Proposal identity"]
  node_fingerprint["Plan data fingerprint"]
end

subgraph group_domain["Domain and persistence"]
  node_prioritizer["Demand prioritization"]
  node_models["Study domain models"]
  node_session_model["Session lifecycle model<br/>[SessaoEstudo.cs]"]
  node_database[("EF Core database<br/>[AppDbContext.cs]")]
end

subgraph group_exam["Contest study"]
  node_exam_api["Contest and edital management"]
  node_notices_api["Subjects and topic trees"]
  node_topics_api["Topic management"]
  node_notebooks_api["Study notebooks"]
end

node_student(("Student"))

node_student -->|"uses"| node_app
node_app -->|"requests through"| node_http
node_app -->|"shows preview"| node_planning_ui
node_demand_ui -->|"mutates via"| node_http
node_task_ui -->|"renders in"| node_demand_ui
node_planning_ui -->|"requests through"| node_http
node_session_ui -->|"requests through"| node_http
node_http -.->|"calls API"| node_demand_api
node_http -.->|"calls API"| node_weekly_api
node_http -.->|"calls API"| node_session_api
node_demand_api -->|"prioritizes with"| node_prioritizer
node_demand_api -->|"queries and saves"| node_database
node_task_api -->|"queries and saves"| node_database
node_session_api -->|"queries and saves"| node_database
node_weekly_api -->|"loads and persists"| node_database
node_weekly_api -->|"calculates with"| node_planner
node_weekly_api -->|"checks snapshot"| node_fingerprint
node_weekly_api -->|"identifies proposal"| node_proposal_id
node_planner -.->|"orders activities"| node_prioritizer
node_models -->|"mapped by"| node_database
node_session_model -->|"mapped by"| node_database
node_exam_api -.->|"persists records"| node_database
node_notices_api -.->|"persists subjects"| node_database
node_topics_api -->|"persists topic tree"| node_database
node_notebooks_api -.->|"persists notebooks"| node_database

click node_app "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/App.tsx"
click node_http "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/apiClient.ts"
click node_demand_ui "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/features/demands/ManageDemandsPanel.tsx"
click node_task_ui "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/features/demands/ManageDemandTasks.tsx"
click node_availability_ui "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/features/availability/AvailabilityPanel.tsx"
click node_planning_ui "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/features/planning/usePlanningWorkflow.ts"
click node_session_ui "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/features/study-sessions/useStudySessionMutations.ts"
click node_demand_api "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/DemandasAcademicasController.cs"
click node_task_api "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/TarefasDemandaController.cs"
click node_availability_api "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/DisponibilidadesEstudoController.cs"
click node_session_api "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/SessoesEstudoController.cs"
click node_weekly_api "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/PlanejamentoSemanalController.cs"
click node_planner "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Services/PlanejadorSemanal.cs"
click node_proposal_id "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Services/PlanejamentoSemanalPropostaIdService.cs"
click node_fingerprint "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Services/PlanejamentoSemanalDadosFingerprintService.cs"
click node_prioritizer "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Services/PriorizadorDemandasAcademicas.cs"
click node_models "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Models/DemandaAcademica.cs"
click node_session_model "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Models/SessaoEstudo.cs"
click node_database "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Data/AppDbContext.cs"
click node_exam_api "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/ConcursosController.cs"
click node_notices_api "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/DisciplinasEditalController.cs"
click node_topics_api "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/TopicosEditalController.cs"
click node_notebooks_api "https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/CadernosController.cs"

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_http,node_demand_ui,node_task_ui,node_availability_ui,node_planning_ui,node_session_ui toneBlue
class node_demand_api,node_task_api,node_availability_api,node_session_api toneAmber
class node_weekly_api,node_planner,node_proposal_id,node_fingerprint toneMint
class node_prioritizer,node_models,node_session_model,node_database toneRose
class node_exam_api,node_notices_api,node_topics_api,node_notebooks_api,node_student toneIndigo
```

## Components

### Web client

- [Study workspace](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/App.tsx): `src/CadernoAtlas.Web/src/App.tsx`
- [API client](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/apiClient.ts): `src/CadernoAtlas.Web/src/apiClient.ts`
- [Demand management](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/features/demands/ManageDemandsPanel.tsx): `src/CadernoAtlas.Web/src/features/demands/ManageDemandsPanel.tsx`
- [Demand tasks](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/features/demands/ManageDemandTasks.tsx): `src/CadernoAtlas.Web/src/features/demands/ManageDemandTasks.tsx`
- [Study availability](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/features/availability/AvailabilityPanel.tsx): `src/CadernoAtlas.Web/src/features/availability/AvailabilityPanel.tsx`
- [Planning workflow](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/features/planning/usePlanningWorkflow.ts): `src/CadernoAtlas.Web/src/features/planning/usePlanningWorkflow.ts`
- [Session management](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Web/src/features/study-sessions/useStudySessionMutations.ts): `src/CadernoAtlas.Web/src/features/study-sessions/useStudySessionMutations.ts`

### API workflows

- [Academic demands](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/DemandasAcademicasController.cs): `src/CadernoAtlas.Api/Controllers/DemandasAcademicasController.cs`
- [Demand tasks](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/TarefasDemandaController.cs): `src/CadernoAtlas.Api/Controllers/TarefasDemandaController.cs`
- [Availability endpoints](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/DisponibilidadesEstudoController.cs): `src/CadernoAtlas.Api/Controllers/DisponibilidadesEstudoController.cs`
- [Study sessions](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/SessoesEstudoController.cs): `src/CadernoAtlas.Api/Controllers/SessoesEstudoController.cs`

### Weekly planning

- [Weekly plan endpoints](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/PlanejamentoSemanalController.cs): `src/CadernoAtlas.Api/Controllers/PlanejamentoSemanalController.cs`
- [Weekly allocator](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Services/PlanejadorSemanal.cs): `src/CadernoAtlas.Api/Services/PlanejadorSemanal.cs`
- [Proposal identity](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Services/PlanejamentoSemanalPropostaIdService.cs): `src/CadernoAtlas.Api/Services/PlanejamentoSemanalPropostaIdService.cs`
- [Plan data fingerprint](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Services/PlanejamentoSemanalDadosFingerprintService.cs): `src/CadernoAtlas.Api/Services/PlanejamentoSemanalDadosFingerprintService.cs`

### Domain and persistence

- [Demand prioritization](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Services/PriorizadorDemandasAcademicas.cs): `src/CadernoAtlas.Api/Services/PriorizadorDemandasAcademicas.cs`
- [Study domain models](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Models/DemandaAcademica.cs): `src/CadernoAtlas.Api/Models/DemandaAcademica.cs`
- [Session lifecycle model](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Models/SessaoEstudo.cs): `src/CadernoAtlas.Api/Models/SessaoEstudo.cs`
- [EF Core database](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Data/AppDbContext.cs): `src/CadernoAtlas.Api/Data/AppDbContext.cs`

### Contest study

- [Contest and edital management](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/ConcursosController.cs): `src/CadernoAtlas.Api/Controllers/ConcursosController.cs`
- [Subjects and topic trees](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/DisciplinasEditalController.cs): `src/CadernoAtlas.Api/Controllers/DisciplinasEditalController.cs`
- [Topic management](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/TopicosEditalController.cs): `src/CadernoAtlas.Api/Controllers/TopicosEditalController.cs`
- [Study notebooks](https://github.com/joaoptoaldo/cadernoatlas/blob/main/src/CadernoAtlas.Api/Controllers/CadernosController.cs): `src/CadernoAtlas.Api/Controllers/CadernosController.cs`

### Other components

- **Student**

## Connections

- Student → Study workspace: uses
- Study workspace → API client: requests through (evidence: `src/CadernoAtlas.Web/src/App.tsx`)
- Study workspace → Planning workflow: shows preview (evidence: `src/CadernoAtlas.Web/src/App.tsx`)
- Demand management → API client: mutates via (evidence: `src/CadernoAtlas.Web/src/features/demands/useDemandMutations.ts`)
- Demand tasks → Demand management: renders in (evidence: `src/CadernoAtlas.Web/src/features/demands/ManageDemandsPanel.tsx`)
- Planning workflow → API client: requests through (evidence: `src/CadernoAtlas.Web/src/features/planning/usePlanningWorkflow.ts`)
- Session management → API client: requests through (evidence: `src/CadernoAtlas.Web/src/features/study-sessions/useStudySessionMutations.ts`)
- API client → Academic demands: calls API
- API client → Weekly plan endpoints: calls API
- API client → Study sessions: calls API
- Academic demands → Demand prioritization: prioritizes with (evidence: `src/CadernoAtlas.Api/Controllers/DemandasAcademicasController.cs`)
- Academic demands → EF Core database: queries and saves (evidence: `src/CadernoAtlas.Api/Controllers/DemandasAcademicasController.cs`)
- Demand tasks → EF Core database: queries and saves (evidence: `src/CadernoAtlas.Api/Controllers/TarefasDemandaController.cs`)
- Study sessions → EF Core database: queries and saves (evidence: `src/CadernoAtlas.Api/Controllers/SessoesEstudoController.cs`)
- Weekly plan endpoints → EF Core database: loads and persists (evidence: `src/CadernoAtlas.Api/Controllers/PlanejamentoSemanalController.cs`)
- Weekly plan endpoints → Weekly allocator: calculates with (evidence: `src/CadernoAtlas.Api/Controllers/PlanejamentoSemanalController.cs`)
- Weekly plan endpoints → Plan data fingerprint: checks snapshot (evidence: `src/CadernoAtlas.Api/Controllers/PlanejamentoSemanalController.cs`)
- Weekly plan endpoints → Proposal identity: identifies proposal (evidence: `src/CadernoAtlas.Api/Controllers/PlanejamentoSemanalController.cs`)
- Weekly allocator → Demand prioritization: orders activities
- Study domain models → EF Core database: mapped by (evidence: `src/CadernoAtlas.Api/Data/AppDbContext.cs`)
- Session lifecycle model → EF Core database: mapped by (evidence: `src/CadernoAtlas.Api/Data/AppDbContext.cs`)
- Contest and edital management → EF Core database: persists records (evidence: `src/CadernoAtlas.Api/Controllers/ConcursosController.cs`)
- Subjects and topic trees → EF Core database: persists subjects (evidence: `src/CadernoAtlas.Api/Controllers/DisciplinasEditalController.cs`)
- Topic management → EF Core database: persists topic tree (evidence: `src/CadernoAtlas.Api/Controllers/TopicosEditalController.cs`)
- Study notebooks → EF Core database: persists notebooks
