# sanhik-hub/novamerged architecture

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

- Interactive diagram: https://gitdiagram.com/sanhik-hub/novamerged
- Repository: https://github.com/sanhik-hub/novamerged

## Overview

This is a math-learning and computational-thinking platform with a student client, an admin console, and a Flask backend. The student workflow covers account access, learning and workspace activity, and workspace-question computation; the backend also exposes question, history, scoring, and administration capabilities. Computation uses language parsing and routing before execution. The excerpts support several backend service calls, but do not show the full client/server or provider wiring; those links are marked unverified rather than inferred as direct calls.

Main entry points: [`Computational_Thinking_2025-26/Server/routes/routes.py`](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/routes/routes.py) (HTTP routes), [`Computational_Thinking_2025-26/Server/database/models.py`](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/database/models.py) (Domain models), [`Computational_Thinking_2025-26/client/src/App.tsx`](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/client/src/App.tsx) (Student app), [`Computational_Thinking_2025-26/Server/app.py`](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/app.py) (Flask application)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_student["Student experience"]
  node_student["Student app<br/>[App.tsx]"]
  node_client_api["Client API<br/>[api.ts]"]
  node_math_render["Math rendering<br/>[MathText.tsx]"]
  node_workspace_render["Workspace rendering"]
  node_voice_hook["Voice tutor hook<br/>[useVoiceTutor.ts]"]
  node_voice_ui["Voice tutor UI<br/>[VoiceTutor.tsx]"]
end

subgraph group_admin["Administration"]
  node_admin_app["Admin console<br/>[App.tsx]"]
  node_admin_api["Admin API<br/>[api.ts]"]
end

subgraph group_backend["Backend services"]
  node_flask["Flask application<br/>[app.py]"]
  node_routes["HTTP routes<br/>[routes.py]"]
  node_auth["Authentication<br/>[auth_services.py]"]
  node_workspace["Workspace services"]
  node_workspace_compute["Workspace computation"]
  node_workspace_solution["Workspace solutions"]
  node_questions["Question service<br/>[questionAPI.py]"]
  node_history["History service"]
  node_scoring["Scoring service<br/>[score_services.py]"]
  node_models["Domain models<br/>[models.py]"]
  node_db[("SQLAlchemy store<br/>[db.py]")]
  node_voice_service["Voice service"]
end

subgraph group_compute["Computation"]
  node_parser["Query parser<br/>[parser.py]"]
  node_language_router["Intent router<br/>[router.py]"]
  node_query_entities["Parsed query<br/>[entities.py]"]
  node_context["Conversation context<br/>[context.py]"]
  node_execution["Execution service"]
  node_providers["Computation providers"]
end

node_learner(("Learner"))
node_administrator(("Administrator"))
node_database[("Database")]
node_voice_client(("Browser audio"))

node_learner -.->|"uses"| node_student
node_student -->|"calls"| node_client_api
node_student -->|"renders with"| node_math_render
node_student -->|"renders with"| node_workspace_render
node_student -->|"renders"| node_voice_ui
node_voice_ui -.->|"uses"| node_voice_hook
node_client_api -.->|"HTTP requests"| node_routes
node_admin_app -->|"calls"| node_admin_api
node_administrator -.->|"uses"| node_admin_app
node_admin_api -.->|"HTTP requests"| node_routes
node_flask -->|"initializes"| node_db
node_flask -->|"creates tables"| node_models
node_flask -->|"registers"| node_routes
node_routes -->|"calls"| node_workspace
node_routes -->|"calls"| node_workspace_compute
node_routes -->|"calls"| node_workspace_solution
node_routes -->|"calls"| node_auth
node_routes -->|"calls"| node_questions
node_routes -->|"calls"| node_history
node_routes -->|"calls"| node_scoring
node_workspace_solution -->|"calls"| node_execution
node_execution -->|"uses"| node_language_router
node_execution -->|"dispatches to"| node_providers
node_parser -->|"creates"| node_query_entities
node_language_router -->|"reads"| node_query_entities
node_language_router -->|"reads"| node_context
node_workspace -->|"reads and writes"| node_models
node_auth -->|"queries"| node_models
node_questions -->|"uses"| node_models
node_history -->|"uses"| node_models
node_models -->|"defines tables"| node_db
node_db -.->|"persists"| node_database
node_voice_client -->|"streams audio"| node_voice_hook
node_voice_hook -.->|"WebSocket"| node_voice_service

click node_student "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/client/src/App.tsx"
click node_client_api "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/client/src/services/api.ts"
click node_math_render "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/client/src/components/MathText.tsx"
click node_workspace_render "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/client/src/components/WorkspaceSolutionText.tsx"
click node_voice_hook "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/client/src/hooks/useVoiceTutor.ts"
click node_voice_ui "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/client/src/components/VoiceTutor.tsx"
click node_admin_app "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Admin/src/App.tsx"
click node_admin_api "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Admin/src/api.ts"
click node_flask "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/app.py"
click node_routes "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/routes/routes.py"
click node_auth "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/auth_services.py"
click node_workspace "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/workspace_services.py"
click node_workspace_compute "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/workspace_computation_service.py"
click node_workspace_solution "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/workspace_solution_services.py"
click node_questions "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/questionAPI.py"
click node_history "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/history_services.py"
click node_scoring "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/score_services.py"
click node_models "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/database/models.py"
click node_db "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/database/db.py"
click node_parser "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/language/parser.py"
click node_language_router "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/language/router.py"
click node_query_entities "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/language/entities.py"
click node_context "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/language/context.py"
click node_execution "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/execution_service.py"
click node_providers "https://github.com/sanhik-hub/novamerged/tree/main/Computational_Thinking_2025-26/Server/providers"
click node_voice_service "https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/voice_microservice.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_student,node_client_api,node_math_render,node_workspace_render,node_voice_hook,node_voice_ui,node_voice_client toneBlue
class node_admin_app,node_admin_api,node_database toneAmber
class node_flask,node_routes,node_auth,node_workspace,node_workspace_compute,node_workspace_solution,node_questions,node_history,node_scoring,node_models,node_db,node_voice_service toneMint
class node_parser,node_language_router,node_query_entities,node_context,node_execution,node_providers toneRose
class node_learner,node_administrator toneIndigo
```

## Components

### Student experience

- [Student app](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/client/src/App.tsx): `Computational_Thinking_2025-26/client/src/App.tsx`
- [Client API](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/client/src/services/api.ts): `Computational_Thinking_2025-26/client/src/services/api.ts`
- [Math rendering](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/client/src/components/MathText.tsx): `Computational_Thinking_2025-26/client/src/components/MathText.tsx`
- [Workspace rendering](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/client/src/components/WorkspaceSolutionText.tsx): `Computational_Thinking_2025-26/client/src/components/WorkspaceSolutionText.tsx`
- [Voice tutor hook](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/client/src/hooks/useVoiceTutor.ts): `Computational_Thinking_2025-26/client/src/hooks/useVoiceTutor.ts`
- [Voice tutor UI](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/client/src/components/VoiceTutor.tsx): `Computational_Thinking_2025-26/client/src/components/VoiceTutor.tsx`

### Administration

- [Admin console](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Admin/src/App.tsx): `Computational_Thinking_2025-26/Admin/src/App.tsx`
- [Admin API](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Admin/src/api.ts): `Computational_Thinking_2025-26/Admin/src/api.ts`

### Backend services

- [Flask application](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/app.py): `Computational_Thinking_2025-26/Server/app.py`
- [HTTP routes](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/routes/routes.py): `Computational_Thinking_2025-26/Server/routes/routes.py`
- [Authentication](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/auth_services.py): `Computational_Thinking_2025-26/Server/services/auth_services.py`
- [Workspace services](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/workspace_services.py): `Computational_Thinking_2025-26/Server/services/workspace_services.py`
- [Workspace computation](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/workspace_computation_service.py): `Computational_Thinking_2025-26/Server/services/workspace_computation_service.py`
- [Workspace solutions](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/workspace_solution_services.py): `Computational_Thinking_2025-26/Server/services/workspace_solution_services.py`
- [Question service](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/questionAPI.py): `Computational_Thinking_2025-26/Server/services/questionAPI.py`
- [History service](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/history_services.py): `Computational_Thinking_2025-26/Server/services/history_services.py`
- [Scoring service](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/score_services.py): `Computational_Thinking_2025-26/Server/services/score_services.py`
- [Domain models](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/database/models.py): `Computational_Thinking_2025-26/Server/database/models.py`
- [SQLAlchemy store](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/database/db.py): `Computational_Thinking_2025-26/Server/database/db.py`
- [Voice service](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/voice_microservice.py): `Computational_Thinking_2025-26/Server/services/voice_microservice.py`

### Computation

- [Query parser](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/language/parser.py): `Computational_Thinking_2025-26/Server/services/language/parser.py`
- [Intent router](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/language/router.py): `Computational_Thinking_2025-26/Server/services/language/router.py`
- [Parsed query](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/language/entities.py): `Computational_Thinking_2025-26/Server/services/language/entities.py`
- [Conversation context](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/language/context.py): `Computational_Thinking_2025-26/Server/services/language/context.py`
- [Execution service](https://github.com/sanhik-hub/novamerged/blob/main/Computational_Thinking_2025-26/Server/services/execution_service.py): `Computational_Thinking_2025-26/Server/services/execution_service.py`
- [Computation providers](https://github.com/sanhik-hub/novamerged/tree/main/Computational_Thinking_2025-26/Server/providers): `Computational_Thinking_2025-26/Server/providers`

### Other components

- **Learner**
- **Administrator**
- **Database**
- **Browser audio**

## Connections

- Learner → Student app: uses
- Student app → Client API: calls (evidence: `Computational_Thinking_2025-26/client/src/App.tsx`)
- Student app → Math rendering: renders with (evidence: `Computational_Thinking_2025-26/client/src/App.tsx`)
- Student app → Workspace rendering: renders with (evidence: `Computational_Thinking_2025-26/client/src/App.tsx`)
- Student app → Voice tutor UI: renders (evidence: `Computational_Thinking_2025-26/client/src/App.tsx`)
- Voice tutor UI → Voice tutor hook: uses
- Client API → HTTP routes: HTTP requests
- Admin console → Admin API: calls (evidence: `Computational_Thinking_2025-26/Admin/src/App.tsx`)
- Administrator → Admin console: uses
- Admin API → HTTP routes: HTTP requests
- Flask application → SQLAlchemy store: initializes (evidence: `Computational_Thinking_2025-26/Server/app.py`)
- Flask application → Domain models: creates tables (evidence: `Computational_Thinking_2025-26/Server/app.py`)
- Flask application → HTTP routes: registers (evidence: `Computational_Thinking_2025-26/Server/app.py`)
- HTTP routes → Workspace services: calls (evidence: `Computational_Thinking_2025-26/Server/routes/routes.py`)
- HTTP routes → Workspace computation: calls (evidence: `Computational_Thinking_2025-26/Server/routes/routes.py`)
- HTTP routes → Workspace solutions: calls (evidence: `Computational_Thinking_2025-26/Server/routes/routes.py`)
- HTTP routes → Authentication: calls (evidence: `Computational_Thinking_2025-26/Server/routes/routes.py`)
- HTTP routes → Question service: calls (evidence: `Computational_Thinking_2025-26/Server/routes/routes.py`)
- HTTP routes → History service: calls (evidence: `Computational_Thinking_2025-26/Server/routes/routes.py`)
- HTTP routes → Scoring service: calls (evidence: `Computational_Thinking_2025-26/Server/routes/routes.py`)
- Workspace solutions → Execution service: calls (evidence: `Computational_Thinking_2025-26/Server/services/workspace_solution_services.py`)
- Execution service → Intent router: uses (evidence: `Computational_Thinking_2025-26/Server/services/execution_service.py`)
- Execution service → Computation providers: dispatches to (evidence: `Computational_Thinking_2025-26/Server/services/execution_service.py`)
- Query parser → Parsed query: creates (evidence: `Computational_Thinking_2025-26/Server/services/language/parser.py`)
- Intent router → Parsed query: reads (evidence: `Computational_Thinking_2025-26/Server/services/language/router.py`)
- Intent router → Conversation context: reads (evidence: `Computational_Thinking_2025-26/Server/services/language/router.py`)
- Workspace services → Domain models: reads and writes (evidence: `Computational_Thinking_2025-26/Server/services/workspace_services.py`)
- Authentication → Domain models: queries (evidence: `Computational_Thinking_2025-26/Server/services/auth_services.py`)
- Question service → Domain models: uses (evidence: `Computational_Thinking_2025-26/Server/services/questionAPI.py`)
- History service → Domain models: uses (evidence: `Computational_Thinking_2025-26/Server/services/history_services.py`)
- Domain models → SQLAlchemy store: defines tables (evidence: `Computational_Thinking_2025-26/Server/database/models.py`)
- SQLAlchemy store → Database: persists
- Browser audio → Voice tutor hook: streams audio (evidence: `Computational_Thinking_2025-26/client/src/hooks/useVoiceTutor.ts`)
- Voice tutor hook → Voice service: WebSocket
