# mxlitey/pai architecture

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

- Interactive diagram: https://gitdiagram.com/mxlitey/pai
- Repository: https://github.com/mxlitey/pai

## Overview

This is a calendar-based education scheduling system: families find a student by name or ID, open that student’s schedule, and browse it by month, week, or day; administrators sign in to manage students, courses, schedules, attendance, announcements, sharing, and dashboard statistics. The React app calls Edge Functions through its API layers, and the backend stores domain records in EdgeOne Blob. The README documents major features whose component internals were not sampled; those are represented at their documented source paths, with uncertain call wiring omitted.

Main entry points: [`node-functions/api`](https://github.com/mxlitey/pai/tree/main/node-functions/api) (Function routes), [`src/components/Admin/AdminPanel.tsx`](https://github.com/mxlitey/pai/blob/main/src/components/Admin/AdminPanel.tsx) (Admin workspace), [`src/api/admin.ts`](https://github.com/mxlitey/pai/blob/main/src/api/admin.ts) (Admin API client), [`src/App.tsx`](https://github.com/mxlitey/pai/blob/main/src/App.tsx) (App navigation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_family["Family calendar"]
  node_app["App navigation<br/>[App.tsx]"]
  node_search["Student search<br/>[SearchBar.tsx]"]
  node_calendar["Calendar views"]
  node_schedule_detail["Schedule detail<br/>[ScheduleDetail.tsx]"]
  node_announcement_view["Announcement display<br/>[Announcement.tsx]"]
end

subgraph group_admin["Administration"]
  node_admin_panel["Admin workspace<br/>[AdminPanel.tsx]"]
  node_admin_auth["Admin sign-in<br/>[AdminLogin.tsx]"]
  node_admin_schedule["Schedule management<br/>[ScheduleAdmin.tsx]"]
  node_admin_attendance["Attendance management"]
  node_admin_student["Student management<br/>[StudentAdmin.tsx]"]
  node_admin_course["Course management<br/>[CourseAdmin.tsx]"]
  node_admin_announcement["Announcement editor"]
  node_admin_dashboard["Dashboard statistics<br/>[DashboardAdmin.tsx]"]
  node_admin_shares["Share links"]
end

subgraph group_backend["Backend functions"]
  node_api_client["Frontend API client<br/>[index.ts]"]
  node_admin_api["Admin API client<br/>[admin.ts]"]
  node_api_routes["Function routes"]
  node_mcp["MCP interface<br/>[mcp.js]"]
end

subgraph group_domain["Domain services"]
  node_auth["Token authentication<br/>[auth.js]"]
  node_students["Student service<br/>[students.js]"]
  node_courses["Course service<br/>[courses.js]"]
  node_schedules["Schedule service<br/>[schedules.js]"]
  node_announcements["Announcement service<br/>[announcement.js]"]
end

subgraph group_state["Stored data"]
  node_blob[("Blob object store")]
end

node_family_actor(("Family user"))
node_admin_actor(("Administrator"))
node_edge{{"Edge Functions platform"}}

node_family_actor -->|"searches"| node_search
node_search -->|"queries students"| node_api_client
node_api_client -->|"requests"| node_api_routes
node_api_routes -->|"dispatches"| node_students
node_family_actor -->|"opens calendar"| node_app
node_app -->|"loads schedules"| node_api_client
node_api_client -->|"requests schedules"| node_api_routes
node_api_routes -->|"dispatches"| node_schedules
node_app -->|"renders schedule"| node_calendar
node_calendar -->|"opens details"| node_schedule_detail
node_app -->|"loads announcement"| node_api_client
node_api_routes -->|"dispatches"| node_announcements
node_app -->|"renders content"| node_announcement_view
node_admin_actor -->|"manages records"| node_admin_panel
node_admin_panel -->|"prompts sign-in"| node_admin_auth
node_admin_auth -->|"authenticates"| node_admin_api
node_admin_panel -->|"hosts"| node_admin_schedule
node_admin_panel -->|"hosts"| node_admin_attendance
node_admin_panel -->|"hosts"| node_admin_student
node_admin_panel -->|"hosts"| node_admin_course
node_admin_panel -->|"hosts"| node_admin_announcement
node_admin_panel -->|"hosts"| node_admin_dashboard
node_admin_panel -->|"hosts"| node_admin_shares
node_admin_schedule -->|"submits schedules"| node_admin_api
node_admin_attendance -->|"updates attendance"| node_admin_api
node_admin_student -->|"manages students"| node_admin_api
node_admin_course -->|"manages courses"| node_admin_api
node_admin_announcement -->|"saves announcement"| node_admin_api
node_admin_dashboard -->|"requests statistics"| node_admin_api
node_admin_shares -->|"gets student links"| node_admin_api
node_admin_api -->|"requests"| node_api_routes
node_api_routes -->|"checks tokens"| node_auth
node_api_routes -->|"dispatches"| node_students
node_api_routes -->|"dispatches"| node_courses
node_api_routes -->|"dispatches"| node_schedules
node_api_routes -->|"dispatches"| node_announcements
node_mcp -.->|"uses domain logic"| node_students
node_mcp -.->|"uses domain logic"| node_courses
node_mcp -.->|"uses domain logic"| node_schedules
node_edge -->|"runs"| node_api_routes
node_students -->|"reads and writes"| node_blob
node_courses -->|"reads and writes"| node_blob
node_schedules -->|"reads and writes"| node_blob
node_announcements -->|"reads and writes"| node_blob

click node_app "https://github.com/mxlitey/pai/blob/main/src/App.tsx"
click node_search "https://github.com/mxlitey/pai/blob/main/src/components/SearchBar.tsx"
click node_calendar "https://github.com/mxlitey/pai/tree/main/src/components/Calendar"
click node_schedule_detail "https://github.com/mxlitey/pai/blob/main/src/components/ScheduleDetail.tsx"
click node_announcement_view "https://github.com/mxlitey/pai/blob/main/src/components/Announcement/Announcement.tsx"
click node_admin_panel "https://github.com/mxlitey/pai/blob/main/src/components/Admin/AdminPanel.tsx"
click node_admin_auth "https://github.com/mxlitey/pai/blob/main/src/components/Admin/AdminLogin.tsx"
click node_admin_schedule "https://github.com/mxlitey/pai/blob/main/src/components/Admin/ScheduleAdmin.tsx"
click node_admin_attendance "https://github.com/mxlitey/pai/blob/main/src/components/Admin/AttendanceAdmin.tsx"
click node_admin_student "https://github.com/mxlitey/pai/blob/main/src/components/Admin/StudentAdmin.tsx"
click node_admin_course "https://github.com/mxlitey/pai/blob/main/src/components/Admin/CourseAdmin.tsx"
click node_admin_announcement "https://github.com/mxlitey/pai/blob/main/src/components/Admin/AnnouncementAdmin.tsx"
click node_admin_dashboard "https://github.com/mxlitey/pai/blob/main/src/components/Admin/DashboardAdmin.tsx"
click node_admin_shares "https://github.com/mxlitey/pai/blob/main/src/components/Admin/ShareLinksAdmin.tsx"
click node_api_client "https://github.com/mxlitey/pai/blob/main/src/api/index.ts"
click node_admin_api "https://github.com/mxlitey/pai/blob/main/src/api/admin.ts"
click node_api_routes "https://github.com/mxlitey/pai/tree/main/node-functions/api"
click node_auth "https://github.com/mxlitey/pai/blob/main/node-functions/_lib/auth.js"
click node_students "https://github.com/mxlitey/pai/blob/main/node-functions/_lib/students.js"
click node_courses "https://github.com/mxlitey/pai/blob/main/node-functions/_lib/courses.js"
click node_schedules "https://github.com/mxlitey/pai/blob/main/node-functions/_lib/schedules.js"
click node_announcements "https://github.com/mxlitey/pai/blob/main/node-functions/_lib/announcement.js"
click node_mcp "https://github.com/mxlitey/pai/blob/main/node-functions/api/mcp.js"

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_search,node_calendar,node_schedule_detail,node_announcement_view,node_family_actor toneBlue
class node_admin_panel,node_admin_auth,node_admin_schedule,node_admin_attendance,node_admin_student,node_admin_course,node_admin_announcement,node_admin_dashboard,node_admin_shares toneAmber
class node_api_client,node_admin_api,node_api_routes,node_mcp toneMint
class node_auth,node_students,node_courses,node_schedules,node_announcements toneRose
class node_blob,node_admin_actor,node_edge toneIndigo
```

## Components

### Family calendar

- [App navigation](https://github.com/mxlitey/pai/blob/main/src/App.tsx): `src/App.tsx`
- [Student search](https://github.com/mxlitey/pai/blob/main/src/components/SearchBar.tsx): `src/components/SearchBar.tsx`
- [Calendar views](https://github.com/mxlitey/pai/tree/main/src/components/Calendar): `src/components/Calendar`
- [Schedule detail](https://github.com/mxlitey/pai/blob/main/src/components/ScheduleDetail.tsx): `src/components/ScheduleDetail.tsx`
- [Announcement display](https://github.com/mxlitey/pai/blob/main/src/components/Announcement/Announcement.tsx): `src/components/Announcement/Announcement.tsx`

### Administration

- [Admin workspace](https://github.com/mxlitey/pai/blob/main/src/components/Admin/AdminPanel.tsx): `src/components/Admin/AdminPanel.tsx`
- [Admin sign-in](https://github.com/mxlitey/pai/blob/main/src/components/Admin/AdminLogin.tsx): `src/components/Admin/AdminLogin.tsx`
- [Schedule management](https://github.com/mxlitey/pai/blob/main/src/components/Admin/ScheduleAdmin.tsx): `src/components/Admin/ScheduleAdmin.tsx`
- [Attendance management](https://github.com/mxlitey/pai/blob/main/src/components/Admin/AttendanceAdmin.tsx): `src/components/Admin/AttendanceAdmin.tsx`
- [Student management](https://github.com/mxlitey/pai/blob/main/src/components/Admin/StudentAdmin.tsx): `src/components/Admin/StudentAdmin.tsx`
- [Course management](https://github.com/mxlitey/pai/blob/main/src/components/Admin/CourseAdmin.tsx): `src/components/Admin/CourseAdmin.tsx`
- [Announcement editor](https://github.com/mxlitey/pai/blob/main/src/components/Admin/AnnouncementAdmin.tsx): `src/components/Admin/AnnouncementAdmin.tsx`
- [Dashboard statistics](https://github.com/mxlitey/pai/blob/main/src/components/Admin/DashboardAdmin.tsx): `src/components/Admin/DashboardAdmin.tsx`
- [Share links](https://github.com/mxlitey/pai/blob/main/src/components/Admin/ShareLinksAdmin.tsx): `src/components/Admin/ShareLinksAdmin.tsx`

### Backend functions

- [Frontend API client](https://github.com/mxlitey/pai/blob/main/src/api/index.ts): `src/api/index.ts`
- [Admin API client](https://github.com/mxlitey/pai/blob/main/src/api/admin.ts): `src/api/admin.ts`
- [Function routes](https://github.com/mxlitey/pai/tree/main/node-functions/api): `node-functions/api`
- [MCP interface](https://github.com/mxlitey/pai/blob/main/node-functions/api/mcp.js): `node-functions/api/mcp.js`

### Domain services

- [Token authentication](https://github.com/mxlitey/pai/blob/main/node-functions/_lib/auth.js): `node-functions/_lib/auth.js`
- [Student service](https://github.com/mxlitey/pai/blob/main/node-functions/_lib/students.js): `node-functions/_lib/students.js`
- [Course service](https://github.com/mxlitey/pai/blob/main/node-functions/_lib/courses.js): `node-functions/_lib/courses.js`
- [Schedule service](https://github.com/mxlitey/pai/blob/main/node-functions/_lib/schedules.js): `node-functions/_lib/schedules.js`
- [Announcement service](https://github.com/mxlitey/pai/blob/main/node-functions/_lib/announcement.js): `node-functions/_lib/announcement.js`

### Stored data

- **Blob object store**

### Other components

- **Family user**
- **Administrator**
- **Edge Functions platform**

## Connections

- Family user → Student search: searches
- Student search → Frontend API client: queries students
- Frontend API client → Function routes: requests
- Function routes → Student service: dispatches
- Family user → App navigation: opens calendar
- App navigation → Frontend API client: loads schedules
- Frontend API client → Function routes: requests schedules
- Function routes → Schedule service: dispatches
- App navigation → Calendar views: renders schedule
- Calendar views → Schedule detail: opens details
- App navigation → Frontend API client: loads announcement
- Function routes → Announcement service: dispatches
- App navigation → Announcement display: renders content
- Administrator → Admin workspace: manages records
- Admin workspace → Admin sign-in: prompts sign-in
- Admin sign-in → Admin API client: authenticates
- Admin workspace → Schedule management: hosts
- Admin workspace → Attendance management: hosts
- Admin workspace → Student management: hosts
- Admin workspace → Course management: hosts
- Admin workspace → Announcement editor: hosts
- Admin workspace → Dashboard statistics: hosts
- Admin workspace → Share links: hosts
- Schedule management → Admin API client: submits schedules
- Attendance management → Admin API client: updates attendance
- Student management → Admin API client: manages students
- Course management → Admin API client: manages courses
- Announcement editor → Admin API client: saves announcement
- Dashboard statistics → Admin API client: requests statistics
- Share links → Admin API client: gets student links
- Admin API client → Function routes: requests
- Function routes → Token authentication: checks tokens
- Function routes → Student service: dispatches
- Function routes → Course service: dispatches
- Function routes → Schedule service: dispatches
- Function routes → Announcement service: dispatches
- MCP interface → Student service: uses domain logic
- MCP interface → Course service: uses domain logic
- MCP interface → Schedule service: uses domain logic
- Edge Functions platform → Function routes: runs
- Student service → Blob object store: reads and writes
- Course service → Blob object store: reads and writes
- Schedule service → Blob object store: reads and writes
- Announcement service → Blob object store: reads and writes
