# stafprintcenter/instructor architecture

> Architecture diagram of the GitHub repository stafprintcenter/instructor, 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/stafprintcenter/instructor
- Repository: https://github.com/stafprintcenter/instructor

## Overview

This is the React/TanStack instructor-facing application within STAF PRINT CENTER’s wider platform. The principal workflow is instructors managing trainings, scheduling sessions, reviewing student work and monitoring activity; community moderation, notifications, account security and authentication are parallel capabilities. The graph emphasizes sampled routes, feature components and data stores. Several README-listed public-site modules (newsletter, QR codes, etc.) are not represented in the supplied source tree, so they are omitted; unsampled feature wiring is not inferred.

Main entry points: [`src/stores/useSessionsStore.ts`](https://github.com/stafprintcenter/instructor/blob/main/src/stores/useSessionsStore.ts) (Session data), [`src/lib/api/resolve-url.ts`](https://github.com/stafprintcenter/instructor/blob/main/src/lib/api/resolve-url.ts) (Instructor API client), [`src/hooks/useDashboardData.ts`](https://github.com/stafprintcenter/instructor/blob/main/src/hooks/useDashboardData.ts) (Dashboard aggregation), [`src/components/pages/sessions/form/useSessionForm.ts`](https://github.com/stafprintcenter/instructor/blob/main/src/components/pages/sessions/form/useSessionForm.ts) (Session form logic)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access &amp; Account"]
  node_auth_route["Sign-in routes<br/>[login.tsx]"]
  node_auth_hook["Instructor auth"]
  node_auth_store["Auth API state<br/>[useAuthStore.ts]"]
  node_security_route["Security sessions<br/>[sessions.tsx]"]
  node_security_store["Session controls"]
  node_profile_route["Profile settings<br/>[profile.tsx]"]
end

subgraph group_learning["Training Operations"]
  node_training_route["Training catalog<br/>[index.tsx]"]
  node_training_store["Training data"]
  node_training_manage["Training editor"]
  node_quiz_manager["Quiz manager<br/>[Manager.tsx]"]
  node_session_route["Session detail"]
  node_session_form["Session form logic<br/>[useSessionForm.ts]"]
  node_session_store["Session data"]
  node_session_types["Session contracts<br/>[sessions.ts]"]
  node_corrections_route["Corrections<br/>[index.tsx]"]
  node_submissions_store["Submission data"]
end

subgraph group_community["Community &amp; Moderation"]
  node_community_posts["Community posts<br/>[index.tsx]"]
  node_community_reports["Moderation reports<br/>[index.tsx]"]
end

subgraph group_insight["Monitoring &amp; Messaging"]
  node_dashboard_route["Instructor dashboard<br/>[dashboard.tsx]"]
  node_dashboard_data["Dashboard aggregation"]
  node_notification_route["Notifications<br/>[index.tsx]"]
  node_notification_store["Notification data"]
  node_health_route["Profile health<br/>[health.tsx]"]
end

subgraph group_runtime["Application Data"]
  node_api_client["Instructor API client<br/>[resolve-url.ts]"]
end

node_instructor(("Instructor"))
node_backend[("Laravel API")]

node_instructor -->|"opens"| node_auth_route
node_auth_route -.->|"authenticates via"| node_auth_hook
node_auth_hook -->|"calls auth actions"| node_auth_store
node_auth_store -->|"sends requests"| node_api_client
node_instructor -->|"manages sessions"| node_security_route
node_security_route -->|"loads and mutates"| node_security_store
node_security_store -->|"sends requests"| node_api_client
node_instructor -->|"edits profile"| node_profile_route
node_instructor -->|"views activity"| node_dashboard_route
node_dashboard_route -.->|"loads dashboard data"| node_dashboard_data
node_dashboard_data -->|"queries"| node_submissions_store
node_dashboard_data -->|"queries"| node_session_store
node_dashboard_data -->|"queries"| node_training_store
node_instructor -->|"reviews alerts"| node_notification_route
node_notification_route -->|"loads notifications"| node_notification_store
node_notification_store -->|"sends requests"| node_api_client
node_instructor -->|"checks account health"| node_health_route
node_instructor -->|"manages trainings"| node_training_route
node_training_route -.->|"loads training data"| node_training_store
node_training_manage -->|"opens quiz manager"| node_quiz_manager
node_quiz_manager -->|"invalidates lessons"| node_training_store
node_instructor -->|"reviews session"| node_session_route
node_session_route -->|"loads session detail"| node_session_store
node_instructor -->|"creates or edits session"| node_session_form
node_session_form -->|"mutates session"| node_session_store
node_session_form -->|"uses session contracts"| node_session_types
node_session_store -->|"uses API types"| node_session_types
node_session_store -->|"sends requests"| node_api_client
node_instructor -->|"reviews corrections"| node_corrections_route
node_instructor -->|"participates in community"| node_community_posts
node_instructor -->|"moderates reports"| node_community_reports
node_api_client -->|"calls REST API"| node_backend

click node_auth_route "https://github.com/stafprintcenter/instructor/blob/main/src/routes/_auth/login.tsx"
click node_auth_hook "https://github.com/stafprintcenter/instructor/blob/main/src/hooks/useInstructorAuth.ts"
click node_auth_store "https://github.com/stafprintcenter/instructor/blob/main/src/stores/useAuthStore.ts"
click node_security_route "https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/security/sessions.tsx"
click node_security_store "https://github.com/stafprintcenter/instructor/blob/main/src/stores/useSecuritySessionsStore.ts"
click node_profile_route "https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/profile.tsx"
click node_dashboard_route "https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/dashboard.tsx"
click node_dashboard_data "https://github.com/stafprintcenter/instructor/blob/main/src/hooks/useDashboardData.ts"
click node_notification_route "https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/notifications/index.tsx"
click node_notification_store "https://github.com/stafprintcenter/instructor/blob/main/src/stores/useNotificationsStore.ts"
click node_health_route "https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/health.tsx"
click node_training_route "https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/trainings/index.tsx"
click node_training_store "https://github.com/stafprintcenter/instructor/blob/main/src/stores/useTrainingsStore.ts"
click node_training_manage "https://github.com/stafprintcenter/instructor/blob/main/src/components/pages/trainings/detail/manage/lessons/QuizManagerDialog.tsx"
click node_quiz_manager "https://github.com/stafprintcenter/instructor/blob/main/src/components/pages/trainings/detail/manage/eval/quiz/Manager.tsx"
click node_session_route "https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/trainings/%24trainingId/sessions.%24sessionId.tsx"
click node_session_form "https://github.com/stafprintcenter/instructor/blob/main/src/components/pages/sessions/form/useSessionForm.ts"
click node_session_store "https://github.com/stafprintcenter/instructor/blob/main/src/stores/useSessionsStore.ts"
click node_session_types "https://github.com/stafprintcenter/instructor/blob/main/src/data/sessions.ts"
click node_corrections_route "https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/corrections/index.tsx"
click node_submissions_store "https://github.com/stafprintcenter/instructor/blob/main/src/stores/useSubmissionsStore.ts"
click node_community_posts "https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/community/posts/index.tsx"
click node_community_reports "https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/community/reports/index.tsx"
click node_api_client "https://github.com/stafprintcenter/instructor/blob/main/src/lib/api/resolve-url.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_auth_route,node_auth_hook,node_auth_store,node_security_route,node_security_store,node_profile_route toneBlue
class node_training_route,node_training_store,node_training_manage,node_quiz_manager,node_session_route,node_session_form,node_session_store,node_session_types,node_corrections_route,node_submissions_store,node_backend toneAmber
class node_community_posts,node_community_reports toneMint
class node_dashboard_route,node_dashboard_data,node_notification_route,node_notification_store,node_health_route toneRose
class node_api_client,node_instructor toneIndigo
```

## Components

### Access & Account

- [Sign-in routes](https://github.com/stafprintcenter/instructor/blob/main/src/routes/_auth/login.tsx): `src/routes/_auth/login.tsx`
- [Instructor auth](https://github.com/stafprintcenter/instructor/blob/main/src/hooks/useInstructorAuth.ts): `src/hooks/useInstructorAuth.ts`
- [Auth API state](https://github.com/stafprintcenter/instructor/blob/main/src/stores/useAuthStore.ts): `src/stores/useAuthStore.ts`
- [Security sessions](https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/security/sessions.tsx): `src/routes/_instructor/security/sessions.tsx`
- [Session controls](https://github.com/stafprintcenter/instructor/blob/main/src/stores/useSecuritySessionsStore.ts): `src/stores/useSecuritySessionsStore.ts`
- [Profile settings](https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/profile.tsx): `src/routes/_instructor/profile.tsx`

### Training Operations

- [Training catalog](https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/trainings/index.tsx): `src/routes/_instructor/trainings/index.tsx`
- [Training data](https://github.com/stafprintcenter/instructor/blob/main/src/stores/useTrainingsStore.ts): `src/stores/useTrainingsStore.ts`
- [Training editor](https://github.com/stafprintcenter/instructor/blob/main/src/components/pages/trainings/detail/manage/lessons/QuizManagerDialog.tsx): `src/components/pages/trainings/detail/manage/lessons/QuizManagerDialog.tsx`
- [Quiz manager](https://github.com/stafprintcenter/instructor/blob/main/src/components/pages/trainings/detail/manage/eval/quiz/Manager.tsx): `src/components/pages/trainings/detail/manage/eval/quiz/Manager.tsx`
- [Session detail](https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/trainings/%24trainingId/sessions.%24sessionId.tsx): `src/routes/_instructor/trainings/$trainingId/sessions.$sessionId.tsx`
- [Session form logic](https://github.com/stafprintcenter/instructor/blob/main/src/components/pages/sessions/form/useSessionForm.ts): `src/components/pages/sessions/form/useSessionForm.ts`
- [Session data](https://github.com/stafprintcenter/instructor/blob/main/src/stores/useSessionsStore.ts): `src/stores/useSessionsStore.ts`
- [Session contracts](https://github.com/stafprintcenter/instructor/blob/main/src/data/sessions.ts): `src/data/sessions.ts`
- [Corrections](https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/corrections/index.tsx): `src/routes/_instructor/corrections/index.tsx`
- [Submission data](https://github.com/stafprintcenter/instructor/blob/main/src/stores/useSubmissionsStore.ts): `src/stores/useSubmissionsStore.ts`

### Community & Moderation

- [Community posts](https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/community/posts/index.tsx): `src/routes/_instructor/community/posts/index.tsx`
- [Moderation reports](https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/community/reports/index.tsx): `src/routes/_instructor/community/reports/index.tsx`

### Monitoring & Messaging

- [Instructor dashboard](https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/dashboard.tsx): `src/routes/_instructor/dashboard.tsx`
- [Dashboard aggregation](https://github.com/stafprintcenter/instructor/blob/main/src/hooks/useDashboardData.ts): `src/hooks/useDashboardData.ts`
- [Notifications](https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/notifications/index.tsx): `src/routes/_instructor/notifications/index.tsx`
- [Notification data](https://github.com/stafprintcenter/instructor/blob/main/src/stores/useNotificationsStore.ts): `src/stores/useNotificationsStore.ts`
- [Profile health](https://github.com/stafprintcenter/instructor/blob/main/src/routes/_instructor/health.tsx): `src/routes/_instructor/health.tsx`

### Application Data

- [Instructor API client](https://github.com/stafprintcenter/instructor/blob/main/src/lib/api/resolve-url.ts): `src/lib/api/resolve-url.ts`

### Other components

- **Instructor**
- **Laravel API**

## Connections

- Instructor → Sign-in routes: opens
- Sign-in routes → Instructor auth: authenticates via
- Instructor auth → Auth API state: calls auth actions (evidence: `src/hooks/useInstructorAuth.ts`)
- Auth API state → Instructor API client: sends requests (evidence: `src/stores/useAuthStore.ts`)
- Instructor → Security sessions: manages sessions (evidence: `src/routes/_instructor/security/sessions.tsx`)
- Security sessions → Session controls: loads and mutates (evidence: `src/routes/_instructor/security/sessions.tsx`)
- Session controls → Instructor API client: sends requests (evidence: `src/stores/useSecuritySessionsStore.ts`)
- Instructor → Profile settings: edits profile
- Instructor → Instructor dashboard: views activity
- Instructor dashboard → Dashboard aggregation: loads dashboard data
- Dashboard aggregation → Submission data: queries (evidence: `src/hooks/useDashboardData.ts`)
- Dashboard aggregation → Session data: queries (evidence: `src/hooks/useDashboardData.ts`)
- Dashboard aggregation → Training data: queries (evidence: `src/hooks/useDashboardData.ts`)
- Instructor → Notifications: reviews alerts
- Notifications → Notification data: loads notifications
- Notification data → Instructor API client: sends requests (evidence: `src/stores/useNotificationsStore.ts`)
- Instructor → Profile health: checks account health
- Instructor → Training catalog: manages trainings
- Training catalog → Training data: loads training data
- Training editor → Quiz manager: opens quiz manager (evidence: `src/components/pages/trainings/detail/manage/lessons/QuizManagerDialog.tsx`)
- Quiz manager → Training data: invalidates lessons (evidence: `src/components/pages/trainings/detail/manage/eval/quiz/Manager.tsx`)
- Instructor → Session detail: reviews session (evidence: `src/routes/_instructor/trainings/$trainingId/sessions.$sessionId.tsx`)
- Session detail → Session data: loads session detail (evidence: `src/routes/_instructor/trainings/$trainingId/sessions.$sessionId.tsx`)
- Instructor → Session form logic: creates or edits session (evidence: `src/components/pages/sessions/form/useSessionForm.ts`)
- Session form logic → Session data: mutates session (evidence: `src/components/pages/sessions/form/useSessionForm.ts`)
- Session form logic → Session contracts: uses session contracts (evidence: `src/components/pages/sessions/form/useSessionForm.ts`)
- Session data → Session contracts: uses API types (evidence: `src/stores/useSessionsStore.ts`)
- Session data → Instructor API client: sends requests (evidence: `src/stores/useSessionsStore.ts`)
- Instructor → Corrections: reviews corrections
- Instructor → Community posts: participates in community
- Instructor → Moderation reports: moderates reports
- Instructor API client → Laravel API: calls REST API (evidence: `src/lib/api/resolve-url.ts`)
