# nyzxz/salita architecture

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

- Interactive diagram: https://gitdiagram.com/nyzxz/salita
- Repository: https://github.com/nyzxz/salita

## Overview

Salita is a Filipino language-and-culture learning app with student and teacher workflows. Students sign in to explore vocabulary and language history, practice with flashcards and quizzes, and submit assigned work; teachers manage student accounts and review submissions. The React client calls an Express API, with shared types defining data contracts. The graph includes documented but unsampled product capabilities; relationships are limited to those shown in excerpts, the source index, or README, so some UI-to-API links are omitted.

Main entry points: [`server/src/app.ts`](https://github.com/nyzxz/salita/blob/main/server/src/app.ts) (API application), [`client/src/App.tsx`](https://github.com/nyzxz/salita/blob/main/client/src/App.tsx) (App routing), [`client/src/pages/StudentDashboard.tsx`](https://github.com/nyzxz/salita/blob/main/client/src/pages/StudentDashboard.tsx) (Student dashboard), [`server/src/submissions/submissions.service.ts`](https://github.com/nyzxz/salita/blob/main/server/src/submissions/submissions.service.ts) (Submission service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React client"]
  node_app["App routing<br/>[App.tsx]"]
  node_authui["Session auth<br/>[AuthContext.tsx]"]
  node_loginpage["Sign in<br/>[LoginPage.tsx]"]
  node_studentdash["Student dashboard"]
  node_teacherdash["Teacher dashboard"]
  node_management["Student management"]
  node_grading["Submission grading"]
  node_transport["API transport<br/>[client.ts]"]
end

subgraph group_learning["Learning content"]
  node_explorer["Vocabulary explorer"]
  node_timeline["Language timeline"]
  node_practice["Flashcards and quiz<br/>[QuizModule.tsx]"]
  node_words["Word content<br/>[words.data.ts]"]
  node_milestones["History milestones<br/>[milestones.data.ts]"]
  node_quizdata["Quiz questions<br/>[quiz.data.ts]"]
end

subgraph group_classroom["Classroom workflows"]
  node_taskui["Task submissions"]
  node_tasks["Task list<br/>[tasks.data.ts]"]
  node_submissionservice["Submission service"]
  node_submissionstore[("Submission records<br/>[Submission.ts]")]
  node_studentservice["Student accounts"]
end

subgraph group_server["Express API"]
  node_users[("User records<br/>[User.ts]")]
  node_authservice["Authentication<br/>[auth.service.ts]"]
  node_approuter["API application<br/>[app.ts]"]
  node_authroutes["Auth routes<br/>[auth.routes.ts]"]
  node_adminroutes["Admin routes<br/>[admin.routes.ts]"]
  node_taskroutes["Task routes<br/>[tasks.routes.ts]"]
  node_submissionroutes["Submission routes"]
  node_wordroutes["Word routes<br/>[words.routes.ts]"]
  node_milestoneroutes["Milestone routes"]
  node_quizroutes["Quiz routes<br/>[quiz.routes.ts]"]
end

subgraph group_contracts["Shared contracts"]
  node_sharedtypes["Typed data contracts<br/>[types.ts]"]
end

node_learner(("Learner"))
node_teacher(("Teacher"))

node_learner -->|"signs in"| node_loginpage
node_teacher -->|"signs in"| node_loginpage
node_app -->|"routes to"| node_loginpage
node_app -->|"routes to"| node_studentdash
node_app -->|"routes to"| node_teacherdash
node_app -->|"routes to"| node_management
node_app -->|"routes to"| node_grading
node_loginpage -->|"uses"| node_authui
node_authui -->|"requests auth"| node_transport
node_studentdash -->|"presents"| node_explorer
node_studentdash -->|"presents"| node_practice
node_studentdash -->|"loads work"| node_taskui
node_studentdash -->|"presents"| node_timeline
node_explorer -->|"explores"| node_words
node_timeline -->|"shows history"| node_milestones
node_practice -->|"uses questions"| node_quizdata
node_taskui -->|"fetches tasks"| node_tasks
node_taskui -->|"submits work"| node_submissionservice
node_teacher -->|"opens dashboard"| node_teacherdash
node_teacherdash -->|"opens management"| node_management
node_teacherdash -->|"opens grading"| node_grading
node_management -->|"calls API"| node_transport
node_grading -->|"calls API"| node_transport
node_transport -.->|"sends requests"| node_approuter
node_approuter -->|"mounts"| node_authroutes
node_approuter -->|"mounts"| node_adminroutes
node_approuter -->|"mounts"| node_taskroutes
node_approuter -->|"mounts"| node_submissionroutes
node_approuter -->|"mounts"| node_wordroutes
node_approuter -->|"mounts"| node_milestoneroutes
node_approuter -->|"mounts"| node_quizroutes
node_authroutes -->|"calls"| node_authservice
node_authservice -->|"reads and creates"| node_users
node_adminroutes -->|"calls"| node_studentservice
node_studentservice -->|"reads and updates"| node_users
node_submissionroutes -->|"calls"| node_submissionservice
node_adminroutes -->|"grades submissions"| node_submissionservice
node_submissionservice -->|"reads and writes"| node_submissionstore
node_submissionservice -->|"checks task IDs"| node_tasks
node_taskroutes -->|"serves tasks"| node_tasks
node_wordroutes -.->|"serves words"| node_words
node_milestoneroutes -.->|"serves milestones"| node_milestones
node_quizroutes -->|"serves questions"| node_quizdata
node_sharedtypes -->|"defines data shape"| node_explorer
node_sharedtypes -->|"defines data shape"| node_timeline
node_sharedtypes -->|"defines data shape"| node_practice

click node_app "https://github.com/nyzxz/salita/blob/main/client/src/App.tsx"
click node_authui "https://github.com/nyzxz/salita/blob/main/client/src/auth/AuthContext.tsx"
click node_loginpage "https://github.com/nyzxz/salita/blob/main/client/src/pages/LoginPage.tsx"
click node_studentdash "https://github.com/nyzxz/salita/blob/main/client/src/pages/StudentDashboard.tsx"
click node_teacherdash "https://github.com/nyzxz/salita/blob/main/client/src/pages/TeacherDashboard.tsx"
click node_management "https://github.com/nyzxz/salita/blob/main/client/src/pages/admin/UserManagementPage.tsx"
click node_grading "https://github.com/nyzxz/salita/blob/main/client/src/pages/TeacherGradingPage.tsx"
click node_transport "https://github.com/nyzxz/salita/blob/main/client/src/api/client.ts"
click node_explorer "https://github.com/nyzxz/salita/tree/main/client/src/components/vocab"
click node_timeline "https://github.com/nyzxz/salita/tree/main/client/src/components/timeline"
click node_practice "https://github.com/nyzxz/salita/blob/main/client/src/components/quiz/QuizModule.tsx"
click node_words "https://github.com/nyzxz/salita/blob/main/server/src/data/words.data.ts"
click node_milestones "https://github.com/nyzxz/salita/blob/main/server/src/data/milestones.data.ts"
click node_quizdata "https://github.com/nyzxz/salita/blob/main/server/src/data/quiz.data.ts"
click node_taskui "https://github.com/nyzxz/salita/blob/main/client/src/hooks/useTasksAndSubmissions.ts"
click node_tasks "https://github.com/nyzxz/salita/blob/main/server/src/data/tasks.data.ts"
click node_submissionservice "https://github.com/nyzxz/salita/blob/main/server/src/submissions/submissions.service.ts"
click node_submissionstore "https://github.com/nyzxz/salita/blob/main/server/src/models/Submission.ts"
click node_studentservice "https://github.com/nyzxz/salita/blob/main/server/src/admin/students.service.ts"
click node_users "https://github.com/nyzxz/salita/blob/main/server/src/models/User.ts"
click node_authservice "https://github.com/nyzxz/salita/blob/main/server/src/auth/auth.service.ts"
click node_approuter "https://github.com/nyzxz/salita/blob/main/server/src/app.ts"
click node_authroutes "https://github.com/nyzxz/salita/blob/main/server/src/routes/auth.routes.ts"
click node_adminroutes "https://github.com/nyzxz/salita/blob/main/server/src/routes/admin.routes.ts"
click node_taskroutes "https://github.com/nyzxz/salita/blob/main/server/src/routes/tasks.routes.ts"
click node_submissionroutes "https://github.com/nyzxz/salita/blob/main/server/src/routes/submissions.routes.ts"
click node_wordroutes "https://github.com/nyzxz/salita/blob/main/server/src/routes/words.routes.ts"
click node_milestoneroutes "https://github.com/nyzxz/salita/blob/main/server/src/routes/milestones.routes.ts"
click node_quizroutes "https://github.com/nyzxz/salita/blob/main/server/src/routes/quiz.routes.ts"
click node_sharedtypes "https://github.com/nyzxz/salita/blob/main/shared/src/types.ts"

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_authui,node_loginpage,node_studentdash,node_teacherdash,node_management,node_grading,node_transport toneBlue
class node_explorer,node_timeline,node_practice,node_words,node_milestones,node_quizdata toneAmber
class node_taskui,node_tasks,node_submissionservice,node_submissionstore,node_studentservice toneMint
class node_users,node_authservice,node_approuter,node_authroutes,node_adminroutes,node_taskroutes,node_submissionroutes,node_wordroutes,node_milestoneroutes,node_quizroutes toneRose
class node_sharedtypes,node_learner,node_teacher toneIndigo
```

## Components

### React client

- [App routing](https://github.com/nyzxz/salita/blob/main/client/src/App.tsx): `client/src/App.tsx`
- [Session auth](https://github.com/nyzxz/salita/blob/main/client/src/auth/AuthContext.tsx): `client/src/auth/AuthContext.tsx`
- [Sign in](https://github.com/nyzxz/salita/blob/main/client/src/pages/LoginPage.tsx): `client/src/pages/LoginPage.tsx`
- [Student dashboard](https://github.com/nyzxz/salita/blob/main/client/src/pages/StudentDashboard.tsx): `client/src/pages/StudentDashboard.tsx`
- [Teacher dashboard](https://github.com/nyzxz/salita/blob/main/client/src/pages/TeacherDashboard.tsx): `client/src/pages/TeacherDashboard.tsx`
- [Student management](https://github.com/nyzxz/salita/blob/main/client/src/pages/admin/UserManagementPage.tsx): `client/src/pages/admin/UserManagementPage.tsx`
- [Submission grading](https://github.com/nyzxz/salita/blob/main/client/src/pages/TeacherGradingPage.tsx): `client/src/pages/TeacherGradingPage.tsx`
- [API transport](https://github.com/nyzxz/salita/blob/main/client/src/api/client.ts): `client/src/api/client.ts`

### Learning content

- [Vocabulary explorer](https://github.com/nyzxz/salita/tree/main/client/src/components/vocab): `client/src/components/vocab`
- [Language timeline](https://github.com/nyzxz/salita/tree/main/client/src/components/timeline): `client/src/components/timeline`
- [Flashcards and quiz](https://github.com/nyzxz/salita/blob/main/client/src/components/quiz/QuizModule.tsx): `client/src/components/quiz/QuizModule.tsx`
- [Word content](https://github.com/nyzxz/salita/blob/main/server/src/data/words.data.ts): `server/src/data/words.data.ts`
- [History milestones](https://github.com/nyzxz/salita/blob/main/server/src/data/milestones.data.ts): `server/src/data/milestones.data.ts`
- [Quiz questions](https://github.com/nyzxz/salita/blob/main/server/src/data/quiz.data.ts): `server/src/data/quiz.data.ts`

### Classroom workflows

- [Task submissions](https://github.com/nyzxz/salita/blob/main/client/src/hooks/useTasksAndSubmissions.ts): `client/src/hooks/useTasksAndSubmissions.ts`
- [Task list](https://github.com/nyzxz/salita/blob/main/server/src/data/tasks.data.ts): `server/src/data/tasks.data.ts`
- [Submission service](https://github.com/nyzxz/salita/blob/main/server/src/submissions/submissions.service.ts): `server/src/submissions/submissions.service.ts`
- [Submission records](https://github.com/nyzxz/salita/blob/main/server/src/models/Submission.ts): `server/src/models/Submission.ts`
- [Student accounts](https://github.com/nyzxz/salita/blob/main/server/src/admin/students.service.ts): `server/src/admin/students.service.ts`

### Express API

- [User records](https://github.com/nyzxz/salita/blob/main/server/src/models/User.ts): `server/src/models/User.ts`
- [Authentication](https://github.com/nyzxz/salita/blob/main/server/src/auth/auth.service.ts): `server/src/auth/auth.service.ts`
- [API application](https://github.com/nyzxz/salita/blob/main/server/src/app.ts): `server/src/app.ts`
- [Auth routes](https://github.com/nyzxz/salita/blob/main/server/src/routes/auth.routes.ts): `server/src/routes/auth.routes.ts`
- [Admin routes](https://github.com/nyzxz/salita/blob/main/server/src/routes/admin.routes.ts): `server/src/routes/admin.routes.ts`
- [Task routes](https://github.com/nyzxz/salita/blob/main/server/src/routes/tasks.routes.ts): `server/src/routes/tasks.routes.ts`
- [Submission routes](https://github.com/nyzxz/salita/blob/main/server/src/routes/submissions.routes.ts): `server/src/routes/submissions.routes.ts`
- [Word routes](https://github.com/nyzxz/salita/blob/main/server/src/routes/words.routes.ts): `server/src/routes/words.routes.ts`
- [Milestone routes](https://github.com/nyzxz/salita/blob/main/server/src/routes/milestones.routes.ts): `server/src/routes/milestones.routes.ts`
- [Quiz routes](https://github.com/nyzxz/salita/blob/main/server/src/routes/quiz.routes.ts): `server/src/routes/quiz.routes.ts`

### Shared contracts

- [Typed data contracts](https://github.com/nyzxz/salita/blob/main/shared/src/types.ts): `shared/src/types.ts`

### Other components

- **Learner**
- **Teacher**

## Connections

- Learner → Sign in: signs in (evidence: `README.md`)
- Teacher → Sign in: signs in (evidence: `README.md`)
- App routing → Sign in: routes to (evidence: `client/src/App.tsx`)
- App routing → Student dashboard: routes to (evidence: `client/src/App.tsx`)
- App routing → Teacher dashboard: routes to (evidence: `client/src/App.tsx`)
- App routing → Student management: routes to (evidence: `client/src/App.tsx`)
- App routing → Submission grading: routes to (evidence: `client/src/App.tsx`)
- Sign in → Session auth: uses (evidence: `client/src/pages/LoginPage.tsx`)
- Session auth → API transport: requests auth (evidence: `client/src/auth/AuthContext.tsx`)
- Student dashboard → Vocabulary explorer: presents (evidence: `client/src/pages/StudentDashboard.tsx`)
- Student dashboard → Flashcards and quiz: presents (evidence: `client/src/pages/StudentDashboard.tsx`)
- Student dashboard → Task submissions: loads work (evidence: `client/src/pages/StudentDashboard.tsx`)
- Student dashboard → Language timeline: presents (evidence: `README.md`)
- Vocabulary explorer → Word content: explores (evidence: `README.md`)
- Language timeline → History milestones: shows history (evidence: `README.md`)
- Flashcards and quiz → Quiz questions: uses questions (evidence: `README.md`)
- Task submissions → Task list: fetches tasks (evidence: `client/src/hooks/useTasksAndSubmissions.ts`)
- Task submissions → Submission service: submits work (evidence: `README.md`)
- Teacher → Teacher dashboard: opens dashboard (evidence: `README.md`)
- Teacher dashboard → Student management: opens management (evidence: `README.md`)
- Teacher dashboard → Submission grading: opens grading (evidence: `client/src/App.tsx`)
- Student management → API transport: calls API (evidence: `client/src/pages/admin/UserManagementPage.tsx`)
- Submission grading → API transport: calls API (evidence: `client/src/pages/TeacherGradingPage.tsx`)
- API transport → API application: sends requests
- API application → Auth routes: mounts (evidence: `server/src/app.ts`)
- API application → Admin routes: mounts (evidence: `server/src/app.ts`)
- API application → Task routes: mounts (evidence: `server/src/app.ts`)
- API application → Submission routes: mounts (evidence: `server/src/app.ts`)
- API application → Word routes: mounts (evidence: `server/src/app.ts`)
- API application → Milestone routes: mounts (evidence: `server/src/app.ts`)
- API application → Quiz routes: mounts (evidence: `server/src/app.ts`)
- Auth routes → Authentication: calls (evidence: `server/src/routes/auth.routes.ts`)
- Authentication → User records: reads and creates (evidence: `server/src/auth/auth.service.ts`)
- Admin routes → Student accounts: calls (evidence: `server/src/routes/admin.routes.ts`)
- Student accounts → User records: reads and updates (evidence: `server/src/admin/students.service.ts`)
- Submission routes → Submission service: calls (evidence: `server/src/routes/submissions.routes.ts`)
- Admin routes → Submission service: grades submissions (evidence: `server/src/routes/admin.routes.ts`)
- Submission service → Submission records: reads and writes (evidence: `server/src/submissions/submissions.service.ts`)
- Submission service → Task list: checks task IDs (evidence: `server/src/submissions/submissions.service.ts`)
- Task routes → Task list: serves tasks (evidence: `server/src/routes/tasks.routes.ts`)
- Word routes → Word content: serves words (evidence: `server/src/routes/words.routes.ts`)
- Milestone routes → History milestones: serves milestones
- Quiz routes → Quiz questions: serves questions (evidence: `server/src/routes/quiz.routes.ts`)
- Typed data contracts → Vocabulary explorer: defines data shape (evidence: `README.md`)
- Typed data contracts → Language timeline: defines data shape (evidence: `README.md`)
- Typed data contracts → Flashcards and quiz: defines data shape (evidence: `README.md`)
