# alicyribeiro/engcomp-ufc-planner architecture

> Architecture diagram of the GitHub repository alicyribeiro/engcomp-ufc-planner, 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/alicyribeiro/engcomp-ufc-planner
- Repository: https://github.com/alicyribeiro/engcomp-ufc-planner

## Overview

Fluxo Engenharia UFC is a client-side academic planner for Computer Engineering students. Students record or import course progress, then use the curriculum workspace to inspect eligibility and metrics, explore prerequisite relationships in the interactive flowchart, and plan future semesters; they can also export a personalized academic report. The graph includes the documented import and planning capabilities, but excerpts do not show all of their implementation or App-level wiring, so uncertain connections are omitted. Academic progress is persisted in browser local storage.

Main entry points: [`src/pages/Workspace.tsx`](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/pages/Workspace.tsx) (Curriculum Workspace), [`src/services/curriculumService.ts`](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/services/curriculumService.ts) (Curriculum Service), [`src/App.tsx`](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/App.tsx) (App Shell), [`src/components/AcademicReportModal.tsx`](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/AcademicReportModal.tsx) (Report Export)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_app["App Shell<br/>[App.tsx]"]
end

subgraph group_academic["Academic Data"]
  node_academicstate["Academic State Hook"]
  node_localstorage[("Browser Storage")]
  node_curriculum["Curriculum Service"]
  node_curriculumdata["Curriculum Dataset<br/>[disciplinas.json]"]
  node_types["Academic Types<br/>[index.ts]"]
  node_importmodal["Transcript Import"]
end

subgraph group_planning["Planning Views"]
  node_workspace["Curriculum Workspace<br/>[Workspace.tsx]"]
  node_flowchart["Prerequisite Flowchart<br/>[Fluxograma.tsx]"]
  node_search["Subject Search<br/>[SubjectSearch.tsx]"]
  node_subjectcard["Subject Cards<br/>[SubjectCard.tsx]"]
  node_availablecard["Available Subjects"]
  node_sidebar["Subject Details<br/>[SidebarDetail.tsx]"]
  node_statscard["Metric Cards<br/>[StatCard.tsx]"]
end

subgraph group_reporting["Reporting"]
  node_reportmodal["Report Export"]
  node_reportfile["PDF or PNG"]
  node_browserprint(("Browser Printing"))
end

node_student(("Student"))
node_sigaa(("SIGAA History"))

node_student -->|"uses"| node_app
node_app -->|"shows"| node_workspace
node_app -->|"shows"| node_flowchart
node_workspace -->|"renders"| node_search
node_workspace -->|"renders"| node_statscard
node_workspace -->|"renders"| node_subjectcard
node_workspace -->|"renders"| node_availablecard
node_workspace -->|"shows details"| node_sidebar
node_workspace -->|"uses eligibility"| node_curriculum
node_flowchart -->|"gets status"| node_curriculum
node_search -->|"checks status"| node_curriculum
node_curriculum -->|"reads"| node_curriculumdata
node_academicstate -->|"reads and writes"| node_localstorage
node_academicstate -->|"calculates stats"| node_curriculum
node_student -->|"provides history"| node_importmodal
node_sigaa -.->|"supplies transcript"| node_importmodal
node_student -->|"requests report"| node_reportmodal
node_reportmodal -->|"exports"| node_reportfile
node_reportmodal -->|"prints"| node_browserprint

click node_app "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/App.tsx"
click node_workspace "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/pages/Workspace.tsx"
click node_flowchart "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/pages/Fluxograma.tsx"
click node_search "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/SubjectSearch.tsx"
click node_subjectcard "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/SubjectCard.tsx"
click node_availablecard "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/AvailableSubjectCard.tsx"
click node_sidebar "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/SidebarDetail.tsx"
click node_statscard "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/StatCard.tsx"
click node_academicstate "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/hooks/useAcademicState.ts"
click node_curriculum "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/services/curriculumService.ts"
click node_curriculumdata "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/data/disciplinas.json"
click node_types "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/types/index.ts"
click node_importmodal "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/ImportTranscriptModal.tsx"
click node_reportmodal "https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/AcademicReportModal.tsx"

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 toneBlue
class node_academicstate,node_localstorage,node_curriculum,node_curriculumdata,node_types,node_importmodal toneAmber
class node_workspace,node_flowchart,node_search,node_subjectcard,node_availablecard,node_sidebar,node_statscard toneMint
class node_reportmodal,node_reportfile,node_browserprint toneRose
class node_student,node_sigaa toneIndigo
```

## Components

### Application

- [App Shell](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/App.tsx): `src/App.tsx`

### Academic Data

- [Academic State Hook](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/hooks/useAcademicState.ts): `src/hooks/useAcademicState.ts`
- **Browser Storage**
- [Curriculum Service](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/services/curriculumService.ts): `src/services/curriculumService.ts`
- [Curriculum Dataset](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/data/disciplinas.json): `src/data/disciplinas.json`
- [Academic Types](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/types/index.ts): `src/types/index.ts`
- [Transcript Import](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/ImportTranscriptModal.tsx): `src/components/ImportTranscriptModal.tsx`

### Planning Views

- [Curriculum Workspace](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/pages/Workspace.tsx): `src/pages/Workspace.tsx`
- [Prerequisite Flowchart](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/pages/Fluxograma.tsx): `src/pages/Fluxograma.tsx`
- [Subject Search](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/SubjectSearch.tsx): `src/components/SubjectSearch.tsx`
- [Subject Cards](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/SubjectCard.tsx): `src/components/SubjectCard.tsx`
- [Available Subjects](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/AvailableSubjectCard.tsx): `src/components/AvailableSubjectCard.tsx`
- [Subject Details](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/SidebarDetail.tsx): `src/components/SidebarDetail.tsx`
- [Metric Cards](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/StatCard.tsx): `src/components/StatCard.tsx`

### Reporting

- [Report Export](https://github.com/alicyribeiro/engcomp-ufc-planner/blob/main/src/components/AcademicReportModal.tsx): `src/components/AcademicReportModal.tsx`
- **PDF or PNG**
- **Browser Printing**

### Other components

- **Student**
- **SIGAA History**

## Connections

- Student → App Shell: uses
- App Shell → Curriculum Workspace: shows
- App Shell → Prerequisite Flowchart: shows
- Curriculum Workspace → Subject Search: renders
- Curriculum Workspace → Metric Cards: renders
- Curriculum Workspace → Subject Cards: renders
- Curriculum Workspace → Available Subjects: renders
- Curriculum Workspace → Subject Details: shows details
- Curriculum Workspace → Curriculum Service: uses eligibility
- Prerequisite Flowchart → Curriculum Service: gets status
- Subject Search → Curriculum Service: checks status
- Curriculum Service → Curriculum Dataset: reads
- Academic State Hook → Browser Storage: reads and writes
- Academic State Hook → Curriculum Service: calculates stats
- Student → Transcript Import: provides history
- SIGAA History → Transcript Import: supplies transcript
- Student → Report Export: requests report
- Report Export → PDF or PNG: exports
- Report Export → Browser Printing: prints
