# navadon/termflow architecture

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

- Interactive diagram: https://gitdiagram.com/navadon/termflow
- Repository: https://github.com/navadon/termflow

## Overview

TermFlow is a browser-based academic study-plan builder. Students and advisors choose a curriculum, arrange courses across semester slots, inspect prerequisite and elective constraints, track completion, and save or restore plans. The main implementation is concentrated in `src/App.jsx`; the curriculum JSON files supply the program structures and options. The excerpts confirm app startup, curriculum references, autosave access, and plan export logic. Other feature relationships are documented in the README; implementation details beyond the excerpts are not independently verified.

Main entry points: [`src/App.jsx`](https://github.com/navadon/termflow/blob/main/src/App.jsx) (Planner application), [`src/main.jsx`](https://github.com/navadon/termflow/blob/main/src/main.jsx) (React bootstrap), [`src/data`](https://github.com/navadon/termflow/tree/main/src/data) (Curriculum structures), [`src/data/courses.json`](https://github.com/navadon/termflow/blob/main/src/data/courses.json) (Course catalog)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Application entry"]
  node_bootstrap["React bootstrap<br/>[main.jsx]"]
end

subgraph group_planning["Plan building"]
  node_planner["Planner application<br/>[App.jsx]"]
  node_curriculum["Curriculum selection<br/>[App.jsx]"]
  node_curriculum_data["Curriculum structures"]
  node_course_catalog["Course catalog<br/>[courses.json]"]
  node_semester_board["Semester board<br/>[App.jsx]"]
  node_course_cards["Course cards<br/>[App.jsx]"]
  node_electives["Elective choices<br/>[App.jsx]"]
end

subgraph group_progress["Requirements and progress"]
  node_prerequisites["Prerequisite checks<br/>[App.jsx]"]
  node_completion["Completion tracking<br/>[App.jsx]"]
  node_credit_summary["Credit summaries<br/>[App.jsx]"]
end

subgraph group_persistence["Plan persistence"]
  node_plan_actions["Plan actions<br/>[App.jsx]"]
  node_browser_storage[("Browser localStorage")]
  node_plan_file["Plan JSON file"]
end

node_student(("Student or advisor"))

node_student -->|"opens app"| node_bootstrap
node_bootstrap -->|"renders"| node_planner
node_planner -->|"provides"| node_curriculum
node_curriculum -->|"selects"| node_curriculum_data
node_curriculum -->|"uses"| node_course_catalog
node_planner -->|"renders"| node_semester_board
node_semester_board -->|"displays"| node_course_cards
node_student -->|"arranges courses"| node_semester_board
node_student -->|"chooses options"| node_electives
node_planner -->|"checks"| node_prerequisites
node_student -->|"marks complete"| node_completion
node_planner -->|"calculates"| node_credit_summary
node_planner -->|"autosaves and restores"| node_browser_storage
node_student -->|"saves or opens"| node_plan_actions
node_plan_actions -->|"downloads or reads"| node_plan_file

click node_bootstrap "https://github.com/navadon/termflow/blob/main/src/main.jsx"
click node_planner "https://github.com/navadon/termflow/blob/main/src/App.jsx"
click node_curriculum "https://github.com/navadon/termflow/blob/main/src/App.jsx"
click node_curriculum_data "https://github.com/navadon/termflow/tree/main/src/data"
click node_course_catalog "https://github.com/navadon/termflow/blob/main/src/data/courses.json"
click node_semester_board "https://github.com/navadon/termflow/blob/main/src/App.jsx"
click node_course_cards "https://github.com/navadon/termflow/blob/main/src/App.jsx"
click node_electives "https://github.com/navadon/termflow/blob/main/src/App.jsx"
click node_prerequisites "https://github.com/navadon/termflow/blob/main/src/App.jsx"
click node_completion "https://github.com/navadon/termflow/blob/main/src/App.jsx"
click node_credit_summary "https://github.com/navadon/termflow/blob/main/src/App.jsx"
click node_plan_actions "https://github.com/navadon/termflow/blob/main/src/App.jsx"

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_bootstrap toneBlue
class node_planner,node_curriculum,node_curriculum_data,node_course_catalog,node_semester_board,node_course_cards,node_electives toneAmber
class node_prerequisites,node_completion,node_credit_summary toneMint
class node_plan_actions,node_browser_storage,node_plan_file toneRose
class node_student toneIndigo
```

## Components

### Application entry

- [React bootstrap](https://github.com/navadon/termflow/blob/main/src/main.jsx): `src/main.jsx`

### Plan building

- [Planner application](https://github.com/navadon/termflow/blob/main/src/App.jsx): `src/App.jsx`
- [Curriculum selection](https://github.com/navadon/termflow/blob/main/src/App.jsx): `src/App.jsx`
- [Curriculum structures](https://github.com/navadon/termflow/tree/main/src/data): `src/data`
- [Course catalog](https://github.com/navadon/termflow/blob/main/src/data/courses.json): `src/data/courses.json`
- [Semester board](https://github.com/navadon/termflow/blob/main/src/App.jsx): `src/App.jsx`
- [Course cards](https://github.com/navadon/termflow/blob/main/src/App.jsx): `src/App.jsx`
- [Elective choices](https://github.com/navadon/termflow/blob/main/src/App.jsx): `src/App.jsx`

### Requirements and progress

- [Prerequisite checks](https://github.com/navadon/termflow/blob/main/src/App.jsx): `src/App.jsx`
- [Completion tracking](https://github.com/navadon/termflow/blob/main/src/App.jsx): `src/App.jsx`
- [Credit summaries](https://github.com/navadon/termflow/blob/main/src/App.jsx): `src/App.jsx`

### Plan persistence

- [Plan actions](https://github.com/navadon/termflow/blob/main/src/App.jsx): `src/App.jsx`
- **Browser localStorage**
- **Plan JSON file**

### Other components

- **Student or advisor**

## Connections

- Student or advisor → React bootstrap: opens app (evidence: `README.md`)
- React bootstrap → Planner application: renders (evidence: `src/main.jsx`)
- Planner application → Curriculum selection: provides (evidence: `README.md`)
- Curriculum selection → Curriculum structures: selects (evidence: `src/App.jsx`)
- Curriculum selection → Course catalog: uses (evidence: `src/App.jsx`)
- Planner application → Semester board: renders (evidence: `README.md`)
- Semester board → Course cards: displays (evidence: `README.md`)
- Student or advisor → Semester board: arranges courses (evidence: `README.md`)
- Student or advisor → Elective choices: chooses options (evidence: `README.md`)
- Planner application → Prerequisite checks: checks (evidence: `README.md`)
- Student or advisor → Completion tracking: marks complete (evidence: `README.md`)
- Planner application → Credit summaries: calculates (evidence: `src/App.jsx`)
- Planner application → Browser localStorage: autosaves and restores (evidence: `src/App.jsx`)
- Student or advisor → Plan actions: saves or opens (evidence: `README.md`)
- Plan actions → Plan JSON file: downloads or reads (evidence: `README.md`)
