# lordverton/sikaschool-website architecture

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

- Interactive diagram: https://gitdiagram.com/lordverton/sikaschool-website
- Repository: https://github.com/lordverton/sikaschool-website

## Overview

SikaSchool is a tutoring platform with public lead capture and separate student, tutor, and admin portals. A lead or account enters through the public/auth flows; learners and tutors then manage sessions, learning, messaging, and payments through role-specific portals and APIs. The README documents Supabase for identity and product data, Mercure for realtime signals, LiveKit for video, Stripe for payments, and Sika AI for student assistance. Sampled routes support the booking, dashboard, messaging, and payment edges shown; some broader portal-to-API connections follow documented capabilities.

Main entry points: [`lib/supabase.ts`](https://github.com/lordverton/sikaschool-website/blob/main/lib/supabase.ts) (Supabase database), [`app/api/sessions/route.ts`](https://github.com/lordverton/sikaschool-website/blob/main/app/api/sessions/route.ts) (Session booking API), [`lib/auth.ts`](https://github.com/lordverton/sikaschool-website/blob/main/lib/auth.ts) (Session helpers), [`components/Booking/index.tsx`](https://github.com/lordverton/sikaschool-website/blob/main/components/Booking/index.tsx) (Booking experience)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public and acquisition"]
  node_publicsite["Public site<br/>[page.tsx]"]
  node_booking["Booking experience<br/>[index.tsx]"]
  node_leadapi["Lead intake<br/>[route.ts]"]
  node_slotapi["First-session slots<br/>[route.ts]"]
end

subgraph group_identity["Identity and access"]
  node_authui["Sign-in and signup<br/>[page.tsx]"]
  node_authapi["Authentication API<br/>[route.ts]"]
  node_authlib["Session helpers<br/>[auth.ts]"]
  node_usermgmt["Account management<br/>[user-management.ts]"]
end

subgraph group_learning["Tutoring and learning"]
  node_student["Student portal<br/>[page.tsx]"]
  node_studentdash["Student dashboard API<br/>[route.ts]"]
  node_tutor["Tutor portal<br/>[page.tsx]"]
  node_tutordash["Tutor dashboard API<br/>[route.ts]"]
  node_sessions["Session booking API<br/>[route.ts]"]
  node_live["Live class experience<br/>[LiveClass.tsx]"]
  node_livekitapi["LiveKit token API<br/>[route.ts]"]
  node_livekit["LiveKit service"]
end

subgraph group_communication["Realtime and assistance"]
  node_ai["Sika AI agent<br/>[agent.ts]"]
  node_aiapi["AI conversations API<br/>[route.ts]"]
  node_messages["Student messaging API<br/>[route.ts]"]
  node_realtime["Mercure publishing<br/>[mercure.ts]"]
  node_mercure["Mercure hub"]
end

subgraph group_operations["Administration and payments"]
  node_admin["Admin portal APIs<br/>[route.ts]"]
  node_payments["Student payments API<br/>[route.ts]"]
  node_stripehook["Stripe webhook<br/>[route.ts]"]
  node_db[("Supabase database<br/>[supabase.ts]")]
  node_stripe["Stripe"]
end

node_prospective(("Prospective learner"))

node_prospective -->|"visits"| node_publicsite
node_publicsite -->|"opens booking"| node_booking
node_booking -->|"requests slots"| node_slotapi
node_booking -->|"submits lead"| node_leadapi
node_leadapi -->|"creates account"| node_usermgmt
node_leadapi -->|"reads and writes"| node_db
node_slotapi -->|"checks availability"| node_db
node_slotapi -->|"creates session"| node_sessions
node_authui -->|"authenticates"| node_authapi
node_authapi -->|"uses sessions"| node_authlib
node_authapi -->|"checks identity"| node_db
node_student -->|"loads dashboard"| node_studentdash
node_studentdash -->|"checks session"| node_authlib
node_studentdash -->|"reads learning data"| node_db
node_tutor -->|"loads dashboard"| node_tutordash
node_tutordash -->|"checks session"| node_authlib
node_tutordash -->|"reads session data"| node_db
node_sessions -->|"checks session"| node_authlib
node_sessions -->|"writes session"| node_db
node_sessions -->|"publishes update"| node_realtime
node_realtime -->|"dispatches signal"| node_mercure
node_live -->|"requests token"| node_livekitapi
node_livekitapi -->|"issues access"| node_livekit
node_student -->|"opens AI chat"| node_aiapi
node_aiapi -->|"runs agent"| node_ai
node_aiapi -->|"stores conversations"| node_db
node_messages -->|"reads and writes"| node_db
node_messages -->|"publishes message signal"| node_realtime
node_admin -->|"manages records"| node_db
node_payments -->|"starts checkout"| node_stripe
node_payments -->|"reads payment data"| node_db
node_stripe -->|"sends events"| node_stripehook
node_stripehook -->|"updates payments and credits"| node_db

click node_publicsite "https://github.com/lordverton/sikaschool-website/blob/main/app/(site)/page.tsx"
click node_booking "https://github.com/lordverton/sikaschool-website/blob/main/components/Booking/index.tsx"
click node_leadapi "https://github.com/lordverton/sikaschool-website/blob/main/app/api/leads/route.ts"
click node_slotapi "https://github.com/lordverton/sikaschool-website/blob/main/app/api/leads/first-session-slots/route.ts"
click node_authui "https://github.com/lordverton/sikaschool-website/blob/main/app/(site)/auth/signin/page.tsx"
click node_authapi "https://github.com/lordverton/sikaschool-website/blob/main/app/api/auth/%5B...nextauth%5D/route.ts"
click node_authlib "https://github.com/lordverton/sikaschool-website/blob/main/lib/auth.ts"
click node_usermgmt "https://github.com/lordverton/sikaschool-website/blob/main/lib/user-management.ts"
click node_student "https://github.com/lordverton/sikaschool-website/blob/main/app/student/page.tsx"
click node_studentdash "https://github.com/lordverton/sikaschool-website/blob/main/app/api/student/dashboard/route.ts"
click node_tutor "https://github.com/lordverton/sikaschool-website/blob/main/app/tutor/page.tsx"
click node_tutordash "https://github.com/lordverton/sikaschool-website/blob/main/app/api/tutor/dashboard/route.ts"
click node_sessions "https://github.com/lordverton/sikaschool-website/blob/main/app/api/sessions/route.ts"
click node_live "https://github.com/lordverton/sikaschool-website/blob/main/components/LiveClass.tsx"
click node_livekitapi "https://github.com/lordverton/sikaschool-website/blob/main/app/api/livekit/token/route.ts"
click node_ai "https://github.com/lordverton/sikaschool-website/blob/main/lib/ai-tutor/agent.ts"
click node_aiapi "https://github.com/lordverton/sikaschool-website/blob/main/app/api/student/ai-tutor/conversations/route.ts"
click node_messages "https://github.com/lordverton/sikaschool-website/blob/main/app/api/student/messages/route.ts"
click node_realtime "https://github.com/lordverton/sikaschool-website/blob/main/lib/mercure.ts"
click node_admin "https://github.com/lordverton/sikaschool-website/blob/main/app/api/admin/users/route.ts"
click node_payments "https://github.com/lordverton/sikaschool-website/blob/main/app/api/student/payments/checkout/route.ts"
click node_stripehook "https://github.com/lordverton/sikaschool-website/blob/main/app/api/webhooks/stripe/route.ts"
click node_db "https://github.com/lordverton/sikaschool-website/blob/main/lib/supabase.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_publicsite,node_booking,node_leadapi,node_slotapi toneBlue
class node_authui,node_authapi,node_authlib,node_usermgmt toneAmber
class node_student,node_studentdash,node_tutor,node_tutordash,node_sessions,node_live,node_livekitapi,node_livekit toneMint
class node_ai,node_aiapi,node_messages,node_realtime,node_mercure toneRose
class node_admin,node_payments,node_stripehook,node_db,node_stripe,node_prospective toneIndigo
```

## Components

### Public and acquisition

- [Public site](https://github.com/lordverton/sikaschool-website/blob/main/app/(site)/page.tsx): `app/(site)/page.tsx`
- [Booking experience](https://github.com/lordverton/sikaschool-website/blob/main/components/Booking/index.tsx): `components/Booking/index.tsx`
- [Lead intake](https://github.com/lordverton/sikaschool-website/blob/main/app/api/leads/route.ts): `app/api/leads/route.ts`
- [First-session slots](https://github.com/lordverton/sikaschool-website/blob/main/app/api/leads/first-session-slots/route.ts): `app/api/leads/first-session-slots/route.ts`

### Identity and access

- [Sign-in and signup](https://github.com/lordverton/sikaschool-website/blob/main/app/(site)/auth/signin/page.tsx): `app/(site)/auth/signin/page.tsx`
- [Authentication API](https://github.com/lordverton/sikaschool-website/blob/main/app/api/auth/%5B...nextauth%5D/route.ts): `app/api/auth/[...nextauth]/route.ts`
- [Session helpers](https://github.com/lordverton/sikaschool-website/blob/main/lib/auth.ts): `lib/auth.ts`
- [Account management](https://github.com/lordverton/sikaschool-website/blob/main/lib/user-management.ts): `lib/user-management.ts`

### Tutoring and learning

- [Student portal](https://github.com/lordverton/sikaschool-website/blob/main/app/student/page.tsx): `app/student/page.tsx`
- [Student dashboard API](https://github.com/lordverton/sikaschool-website/blob/main/app/api/student/dashboard/route.ts): `app/api/student/dashboard/route.ts`
- [Tutor portal](https://github.com/lordverton/sikaschool-website/blob/main/app/tutor/page.tsx): `app/tutor/page.tsx`
- [Tutor dashboard API](https://github.com/lordverton/sikaschool-website/blob/main/app/api/tutor/dashboard/route.ts): `app/api/tutor/dashboard/route.ts`
- [Session booking API](https://github.com/lordverton/sikaschool-website/blob/main/app/api/sessions/route.ts): `app/api/sessions/route.ts`
- [Live class experience](https://github.com/lordverton/sikaschool-website/blob/main/components/LiveClass.tsx): `components/LiveClass.tsx`
- [LiveKit token API](https://github.com/lordverton/sikaschool-website/blob/main/app/api/livekit/token/route.ts): `app/api/livekit/token/route.ts`
- **LiveKit service**

### Realtime and assistance

- [Sika AI agent](https://github.com/lordverton/sikaschool-website/blob/main/lib/ai-tutor/agent.ts): `lib/ai-tutor/agent.ts`
- [AI conversations API](https://github.com/lordverton/sikaschool-website/blob/main/app/api/student/ai-tutor/conversations/route.ts): `app/api/student/ai-tutor/conversations/route.ts`
- [Student messaging API](https://github.com/lordverton/sikaschool-website/blob/main/app/api/student/messages/route.ts): `app/api/student/messages/route.ts`
- [Mercure publishing](https://github.com/lordverton/sikaschool-website/blob/main/lib/mercure.ts): `lib/mercure.ts`
- **Mercure hub**

### Administration and payments

- [Admin portal APIs](https://github.com/lordverton/sikaschool-website/blob/main/app/api/admin/users/route.ts): `app/api/admin/users/route.ts`
- [Student payments API](https://github.com/lordverton/sikaschool-website/blob/main/app/api/student/payments/checkout/route.ts): `app/api/student/payments/checkout/route.ts`
- [Stripe webhook](https://github.com/lordverton/sikaschool-website/blob/main/app/api/webhooks/stripe/route.ts): `app/api/webhooks/stripe/route.ts`
- [Supabase database](https://github.com/lordverton/sikaschool-website/blob/main/lib/supabase.ts): `lib/supabase.ts`
- **Stripe**

### Other components

- **Prospective learner**

## Connections

- Prospective learner → Public site: visits
- Public site → Booking experience: opens booking
- Booking experience → First-session slots: requests slots
- Booking experience → Lead intake: submits lead
- Lead intake → Account management: creates account
- Lead intake → Supabase database: reads and writes
- First-session slots → Supabase database: checks availability
- First-session slots → Session booking API: creates session
- Sign-in and signup → Authentication API: authenticates
- Authentication API → Session helpers: uses sessions
- Authentication API → Supabase database: checks identity
- Student portal → Student dashboard API: loads dashboard
- Student dashboard API → Session helpers: checks session
- Student dashboard API → Supabase database: reads learning data
- Tutor portal → Tutor dashboard API: loads dashboard
- Tutor dashboard API → Session helpers: checks session
- Tutor dashboard API → Supabase database: reads session data
- Session booking API → Session helpers: checks session
- Session booking API → Supabase database: writes session
- Session booking API → Mercure publishing: publishes update
- Mercure publishing → Mercure hub: dispatches signal
- Live class experience → LiveKit token API: requests token
- LiveKit token API → LiveKit service: issues access
- Student portal → AI conversations API: opens AI chat
- AI conversations API → Sika AI agent: runs agent
- AI conversations API → Supabase database: stores conversations
- Student messaging API → Supabase database: reads and writes
- Student messaging API → Mercure publishing: publishes message signal
- Admin portal APIs → Supabase database: manages records
- Student payments API → Stripe: starts checkout
- Student payments API → Supabase database: reads payment data
- Stripe → Stripe webhook: sends events
- Stripe webhook → Supabase database: updates payments and credits
