# ace-vizserve/online-admission architecture

> Architecture diagram of the GitHub repository ace-vizserve/online-admission, 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/ace-vizserve/online-admission
- Repository: https://github.com/ace-vizserve/online-admission

## Overview

HFSE Online Admission is a parent portal for new enrollment, re-enrollment, VizSchool enrollment, and open-house registration, with document submission and application tracking. Parents enter through routed, guarded pages, complete validated multi-step forms, and save or submit application data; re-enrollment can hydrate prior records. Supporting branches include document re-upload, account settings, and admin operations. Supabase provides authentication, database, and storage services; the README documents RLS. Some subsystem links are documented rather than verified in sampled implementation excerpts.

Main entry points: [`src/routes/app-routes.tsx`](https://github.com/ace-vizserve/online-admission/blob/main/src/routes/app-routes.tsx) (Route dispatcher), [`src/pages/private/enrol-student/new`](https://github.com/ace-vizserve/online-admission/tree/main/src/pages/private/enrol-student/new) (New enrollment), [`src/pages/private/enrol-student/old`](https://github.com/ace-vizserve/online-admission/tree/main/src/pages/private/enrol-student/old) (Re-enrollment), [`src/zustand-store.ts`](https://github.com/ace-vizserve/online-admission/blob/main/src/zustand-store.ts) (Form state)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Portal entry"]
  node_router["Route dispatcher<br/>[app-routes.tsx]"]
  node_auth["Authentication<br/>[auth.ts]"]
end

subgraph group_flows["Application flows"]
  node_newenroll["New enrollment"]
  node_reenroll["Re-enrollment"]
  node_vizschool["VizSchool enrollment"]
  node_openhouse["Open-house registration"]
  node_validation["Form validation<br/>[zod-schema.ts]"]
  node_reenrolldata["Prior-data hydration"]
end

subgraph group_support["Parent services"]
  node_drafts["Draft management<br/>[drafts.ts]"]
  node_documents["Document uploads"]
  node_reupload["Document re-upload"]
  node_profile["Account settings"]
  node_tracking["Application tracking<br/>[pending-tasks.tsx]"]
  node_admin["Admin operations"]
end

subgraph group_backend["State and backend"]
  node_formstate["Form state<br/>[zustand-store.ts]"]
  node_actions["Enrollment actions<br/>[private.ts]"]
  node_storage[("Persistent form storage<br/>[safe-storage.ts]")]
  node_supabase[("Supabase services<br/>[client.ts]")]
end

node_parent(("Parent"))

node_parent -->|"opens portal"| node_router
node_router -->|"guards access"| node_auth
node_router -->|"routes to"| node_newenroll
node_router -->|"routes to"| node_reenroll
node_router -->|"routes to"| node_vizschool
node_router -->|"routes to"| node_openhouse
node_parent -->|"signs in"| node_auth
node_newenroll -->|"validates fields"| node_validation
node_reenroll -->|"validates fields"| node_validation
node_vizschool -->|"validates fields"| node_validation
node_openhouse -->|"validates fields"| node_validation
node_newenroll -.->|"maintains form state"| node_formstate
node_vizschool -.->|"maintains form state"| node_formstate
node_openhouse -->|"maintains form state"| node_formstate
node_reenroll -->|"loads prior data"| node_reenrolldata
node_reenrolldata -->|"reads applications"| node_supabase
node_newenroll -->|"submits documents"| node_documents
node_reenroll -->|"submits documents"| node_documents
node_documents -.->|"uploads with"| node_actions
node_actions -->|"reads and writes"| node_supabase
node_formstate -->|"persists state"| node_storage
node_parent -->|"saves progress"| node_drafts
node_drafts -.->|"stores drafts"| node_storage
node_parent -->|"updates documents"| node_reupload
node_parent -->|"manages account"| node_profile
node_parent -->|"checks status"| node_tracking
node_admin -.->|"manages records"| node_supabase
node_supabase -->|"restricts records"| node_parent

click node_router "https://github.com/ace-vizserve/online-admission/blob/main/src/routes/app-routes.tsx"
click node_auth "https://github.com/ace-vizserve/online-admission/blob/main/src/actions/auth.ts"
click node_newenroll "https://github.com/ace-vizserve/online-admission/tree/main/src/pages/private/enrol-student/new"
click node_reenroll "https://github.com/ace-vizserve/online-admission/tree/main/src/pages/private/enrol-student/old"
click node_vizschool "https://github.com/ace-vizserve/online-admission/tree/main/src/pages/private/enrol-student/vizschool"
click node_openhouse "https://github.com/ace-vizserve/online-admission/tree/main/src/pages/private/open-house"
click node_validation "https://github.com/ace-vizserve/online-admission/blob/main/src/zod-schema.ts"
click node_formstate "https://github.com/ace-vizserve/online-admission/blob/main/src/zustand-store.ts"
click node_drafts "https://github.com/ace-vizserve/online-admission/blob/main/src/actions/drafts.ts"
click node_documents "https://github.com/ace-vizserve/online-admission/tree/main/src/components/private/shared/upload-requirements"
click node_reupload "https://github.com/ace-vizserve/online-admission/blob/main/src/components/private/documents/shared/reupload-dialog.tsx"
click node_profile "https://github.com/ace-vizserve/online-admission/blob/main/src/pages/private/account-settings.tsx"
click node_tracking "https://github.com/ace-vizserve/online-admission/blob/main/src/pages/private/pending-tasks.tsx"
click node_admin "https://github.com/ace-vizserve/online-admission/tree/main/src/pages/admin"
click node_reenrolldata "https://github.com/ace-vizserve/online-admission/blob/main/src/actions/get-reenrollment-data.ts"
click node_actions "https://github.com/ace-vizserve/online-admission/blob/main/src/actions/private.ts"
click node_storage "https://github.com/ace-vizserve/online-admission/blob/main/src/lib/safe-storage.ts"
click node_supabase "https://github.com/ace-vizserve/online-admission/blob/main/src/lib/client.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_router,node_auth toneBlue
class node_newenroll,node_reenroll,node_vizschool,node_openhouse,node_validation,node_reenrolldata toneAmber
class node_drafts,node_documents,node_reupload,node_profile,node_tracking,node_admin toneMint
class node_formstate,node_actions,node_storage,node_supabase toneRose
class node_parent toneIndigo
```

## Components

### Portal entry

- [Route dispatcher](https://github.com/ace-vizserve/online-admission/blob/main/src/routes/app-routes.tsx): `src/routes/app-routes.tsx`
- [Authentication](https://github.com/ace-vizserve/online-admission/blob/main/src/actions/auth.ts): `src/actions/auth.ts`

### Application flows

- [New enrollment](https://github.com/ace-vizserve/online-admission/tree/main/src/pages/private/enrol-student/new): `src/pages/private/enrol-student/new`
- [Re-enrollment](https://github.com/ace-vizserve/online-admission/tree/main/src/pages/private/enrol-student/old): `src/pages/private/enrol-student/old`
- [VizSchool enrollment](https://github.com/ace-vizserve/online-admission/tree/main/src/pages/private/enrol-student/vizschool): `src/pages/private/enrol-student/vizschool`
- [Open-house registration](https://github.com/ace-vizserve/online-admission/tree/main/src/pages/private/open-house): `src/pages/private/open-house`
- [Form validation](https://github.com/ace-vizserve/online-admission/blob/main/src/zod-schema.ts): `src/zod-schema.ts`
- [Prior-data hydration](https://github.com/ace-vizserve/online-admission/blob/main/src/actions/get-reenrollment-data.ts): `src/actions/get-reenrollment-data.ts`

### Parent services

- [Draft management](https://github.com/ace-vizserve/online-admission/blob/main/src/actions/drafts.ts): `src/actions/drafts.ts`
- [Document uploads](https://github.com/ace-vizserve/online-admission/tree/main/src/components/private/shared/upload-requirements): `src/components/private/shared/upload-requirements`
- [Document re-upload](https://github.com/ace-vizserve/online-admission/blob/main/src/components/private/documents/shared/reupload-dialog.tsx): `src/components/private/documents/shared/reupload-dialog.tsx`
- [Account settings](https://github.com/ace-vizserve/online-admission/blob/main/src/pages/private/account-settings.tsx): `src/pages/private/account-settings.tsx`
- [Application tracking](https://github.com/ace-vizserve/online-admission/blob/main/src/pages/private/pending-tasks.tsx): `src/pages/private/pending-tasks.tsx`
- [Admin operations](https://github.com/ace-vizserve/online-admission/tree/main/src/pages/admin): `src/pages/admin`

### State and backend

- [Form state](https://github.com/ace-vizserve/online-admission/blob/main/src/zustand-store.ts): `src/zustand-store.ts`
- [Enrollment actions](https://github.com/ace-vizserve/online-admission/blob/main/src/actions/private.ts): `src/actions/private.ts`
- [Persistent form storage](https://github.com/ace-vizserve/online-admission/blob/main/src/lib/safe-storage.ts): `src/lib/safe-storage.ts`
- [Supabase services](https://github.com/ace-vizserve/online-admission/blob/main/src/lib/client.ts): `src/lib/client.ts`

### Other components

- **Parent**

## Connections

- Parent → Route dispatcher: opens portal
- Route dispatcher → Authentication: guards access (evidence: `src/routes/app-routes.tsx`)
- Route dispatcher → New enrollment: routes to (evidence: `src/routes/app-routes.tsx`)
- Route dispatcher → Re-enrollment: routes to (evidence: `src/routes/app-routes.tsx`)
- Route dispatcher → VizSchool enrollment: routes to (evidence: `src/routes/app-routes.tsx`)
- Route dispatcher → Open-house registration: routes to (evidence: `src/routes/app-routes.tsx`)
- Parent → Authentication: signs in
- New enrollment → Form validation: validates fields (evidence: `src/pages/private/enrol-student/new/enrollment-information.tsx`)
- Re-enrollment → Form validation: validates fields (evidence: `src/pages/private/enrol-student/old/old-enrollment-information.tsx`)
- VizSchool enrollment → Form validation: validates fields (evidence: `src/pages/private/enrol-student/vizschool/new/learner-enrollment-information.tsx`)
- Open-house registration → Form validation: validates fields (evidence: `src/pages/private/open-house/application-form/open-house-enrollment-information.tsx`)
- New enrollment → Form state: maintains form state (evidence: `src/pages/private/enrol-student/new/enrollment-information.tsx`)
- VizSchool enrollment → Form state: maintains form state (evidence: `src/pages/private/enrol-student/vizschool/new/learner-enrollment-information.tsx`)
- Open-house registration → Form state: maintains form state (evidence: `src/pages/private/open-house/application-form/open-house-enrollment-information.tsx`)
- Re-enrollment → Prior-data hydration: loads prior data (evidence: `src/pages/private/enrol-student/old/old-enrollment-information.tsx`)
- Prior-data hydration → Supabase services: reads applications (evidence: `src/actions/get-reenrollment-data.ts`)
- New enrollment → Document uploads: submits documents
- Re-enrollment → Document uploads: submits documents
- Document uploads → Enrollment actions: uploads with
- Enrollment actions → Supabase services: reads and writes (evidence: `src/actions/private.ts`)
- Form state → Persistent form storage: persists state (evidence: `src/zustand-store.ts`)
- Parent → Draft management: saves progress
- Draft management → Persistent form storage: stores drafts
- Parent → Document re-upload: updates documents
- Parent → Account settings: manages account
- Parent → Application tracking: checks status
- Admin operations → Supabase services: manages records
- Supabase services → Parent: restricts records
