# cynthiaklora/ctrl-study-se architecture

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

- Interactive diagram: https://gitdiagram.com/cynthiaklora/ctrl-study-se
- Repository: https://github.com/cynthiaklora/ctrl-study-se

## Overview

CTRL+STUDY is a Flask app for authoring, previewing, and practicing template-based questions. The main workflow runs from a browser request through Flask routes, question retrieval and template generation, then renders a quiz or preview; quiz forms collect answers for interactive practice. Admins can manage saved questions and hand-pick test questions, while accounts support authentication and saved quizzes. The graph reflects documented and excerpted calls; several route and persistence details are only partially sampled, so unsupported links are omitted.

Main entry points: [`ctrl.py`](https://github.com/cynthiaklora/ctrl-study-se/blob/main/ctrl.py) (Flask routes), [`Frontend/QuestionFetch.py`](https://github.com/cynthiaklora/ctrl-study-se/blob/main/Frontend/QuestionFetch.py) (Quiz assembly), [`supabase_client.py`](https://github.com/cynthiaklora/ctrl-study-se/blob/main/supabase_client.py) (Data access), [`template_builder.py`](https://github.com/cynthiaklora/ctrl-study-se/blob/main/template_builder.py) (Template editor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web and authoring"]
  node_flask["Flask routes<br/>[ctrl.py]"]
  node_builder["Template editor"]
  node_forms["Web forms<br/>[forms.py]"]
  node_views["HTML views"]
end

subgraph group_quiz["Quiz workflow"]
  node_question_fetch["Quiz assembly<br/>[QuestionFetch.py]"]
  node_quiz_state["Quiz sessions<br/>[ctrl.py]"]
end

subgraph group_generation["Question generation"]
  node_parser["Template parser<br/>[parser_engine.py]"]
  node_library["Generation helpers"]
end

subgraph group_data["Persistence and identity"]
  node_db_access["Data access<br/>[supabase_client.py]"]
end

node_browser(("Browser user"))
node_supabase[("Supabase")]

node_browser -->|"requests"| node_flask
node_flask -->|"routes to"| node_builder
node_flask -->|"invokes"| node_question_fetch
node_flask -->|"uses"| node_forms
node_flask -->|"queries"| node_db_access
node_flask -->|"renders"| node_views
node_builder -->|"generates previews"| node_parser
node_builder -->|"loads and saves"| node_db_access
node_question_fetch -->|"fetches questions"| node_db_access
node_question_fetch -->|"generates questions"| node_parser
node_question_fetch -->|"builds answer forms"| node_forms
node_parser -->|"dispatches functions"| node_library
node_library -->|"fetches names"| node_db_access
node_db_access -->|"reads and writes"| node_supabase
node_quiz_state -->|"builds quiz questions"| node_question_fetch
node_quiz_state -->|"collects answers"| node_forms
node_quiz_state -->|"renders quiz pages"| node_views

click node_flask "https://github.com/cynthiaklora/ctrl-study-se/blob/main/ctrl.py"
click node_builder "https://github.com/cynthiaklora/ctrl-study-se/blob/main/template_builder.py"
click node_forms "https://github.com/cynthiaklora/ctrl-study-se/blob/main/Frontend/forms.py"
click node_views "https://github.com/cynthiaklora/ctrl-study-se/tree/main/templates"
click node_question_fetch "https://github.com/cynthiaklora/ctrl-study-se/blob/main/Frontend/QuestionFetch.py"
click node_quiz_state "https://github.com/cynthiaklora/ctrl-study-se/blob/main/ctrl.py"
click node_parser "https://github.com/cynthiaklora/ctrl-study-se/blob/main/parser_engine.py"
click node_library "https://github.com/cynthiaklora/ctrl-study-se/blob/main/question_library.py"
click node_db_access "https://github.com/cynthiaklora/ctrl-study-se/blob/main/supabase_client.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_flask,node_builder,node_forms,node_views,node_browser toneBlue
class node_question_fetch,node_quiz_state,node_supabase toneAmber
class node_parser,node_library toneMint
class node_db_access toneRose
```

## Components

### Web and authoring

- [Flask routes](https://github.com/cynthiaklora/ctrl-study-se/blob/main/ctrl.py): `ctrl.py`
- [Template editor](https://github.com/cynthiaklora/ctrl-study-se/blob/main/template_builder.py): `template_builder.py`
- [Web forms](https://github.com/cynthiaklora/ctrl-study-se/blob/main/Frontend/forms.py): `Frontend/forms.py`
- [HTML views](https://github.com/cynthiaklora/ctrl-study-se/tree/main/templates): `templates`

### Quiz workflow

- [Quiz assembly](https://github.com/cynthiaklora/ctrl-study-se/blob/main/Frontend/QuestionFetch.py): `Frontend/QuestionFetch.py`
- [Quiz sessions](https://github.com/cynthiaklora/ctrl-study-se/blob/main/ctrl.py): `ctrl.py`

### Question generation

- [Template parser](https://github.com/cynthiaklora/ctrl-study-se/blob/main/parser_engine.py): `parser_engine.py`
- [Generation helpers](https://github.com/cynthiaklora/ctrl-study-se/blob/main/question_library.py): `question_library.py`

### Persistence and identity

- [Data access](https://github.com/cynthiaklora/ctrl-study-se/blob/main/supabase_client.py): `supabase_client.py`

### Other components

- **Browser user**
- **Supabase**

## Connections

- Browser user → Flask routes: requests (evidence: `README.md`)
- Flask routes → Template editor: routes to (evidence: `ctrl.py`)
- Flask routes → Quiz assembly: invokes (evidence: `ctrl.py`)
- Flask routes → Web forms: uses (evidence: `ctrl.py`)
- Flask routes → Data access: queries (evidence: `ctrl.py`)
- Flask routes → HTML views: renders (evidence: `ctrl.py`)
- Template editor → Template parser: generates previews (evidence: `template_builder.py`)
- Template editor → Data access: loads and saves (evidence: `template_builder.py`)
- Quiz assembly → Data access: fetches questions (evidence: `Frontend/QuestionFetch.py`)
- Quiz assembly → Template parser: generates questions (evidence: `Frontend/QuestionFetch.py`)
- Quiz assembly → Web forms: builds answer forms (evidence: `Frontend/QuestionFetch.py`)
- Template parser → Generation helpers: dispatches functions (evidence: `parser_engine.py`)
- Generation helpers → Data access: fetches names (evidence: `question_library.py`)
- Data access → Supabase: reads and writes (evidence: `supabase_client.py`)
- Quiz sessions → Quiz assembly: builds quiz questions (evidence: `ctrl.py`)
- Quiz sessions → Web forms: collects answers (evidence: `ctrl.py`)
- Quiz sessions → HTML views: renders quiz pages (evidence: `ctrl.py`)
