# nijo918/nijo_online architecture

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

- Interactive diagram: https://gitdiagram.com/nijo918/nijo_online
- Repository: https://github.com/nijo918/nijo_online

## Overview

Nijo Learn is a self-paced course platform: learners browse a catalog, enroll, complete lessons and quizzes, track progress, and access completion certificates; administrators manage course content and publishing. Next.js routes present these journeys, feature actions and data modules implement them, and Supabase provides authentication and persistent state. The README also documents OTP verification, password recovery, profile settings, and catalog-only preview without backend configuration. Edges are limited to relationships shown in excerpts, the source index, or README; unsampled route internals are not assumed.

Main entry points: [`src/lib/supabase/server.ts`](https://github.com/nijo918/nijo_online/blob/main/src/lib/supabase/server.ts) (Supabase client), [`src/features/courses/data.ts`](https://github.com/nijo918/nijo_online/blob/main/src/features/courses/data.ts) (Course data), [`src/features/admin/actions.ts`](https://github.com/nijo918/nijo_online/blob/main/src/features/admin/actions.ts) (Admin actions), [`src/features/learning/actions.ts`](https://github.com/nijo918/nijo_online/blob/main/src/features/learning/actions.ts) (Learning actions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Learner experience"]
  node_home["Home<br/>[page.tsx]"]
  node_catalog["Course catalog<br/>[page.tsx]"]
  node_course_detail["Course details<br/>[page.tsx]"]
  node_dashboard["Learning dashboard<br/>[page.tsx]"]
end

subgraph group_identity["Identity and access"]
  node_auth_routes["Auth screens<br/>[page.tsx]"]
  node_auth_actions["Auth actions<br/>[actions.ts]"]
end

subgraph group_authoring["Course administration"]
  node_admin_routes["Admin routes"]
  node_course_editor["Course editor<br/>[editor.tsx]"]
  node_admin_actions["Admin actions<br/>[actions.ts]"]
end

subgraph group_learning["Learning and credentials"]
  node_learning_routes["Learning routes"]
  node_learning_actions["Learning actions<br/>[actions.ts]"]
  node_learning_data["Progress data<br/>[data.ts]"]
  node_certificate_routes["Certificate routes"]
  node_certificate_data["Certificate data<br/>[data.ts]"]
  node_certificate_pdf["Certificate PDF<br/>[pdf.ts]"]
end

subgraph group_platform["Application services"]
  node_auth_service["Auth and access<br/>[auth.ts]"]
  node_course_data["Course data<br/>[data.ts]"]
  node_demo_catalog["Preview catalog<br/>[demo.ts]"]
  node_supabase_client["Supabase client<br/>[server.ts]"]
  node_supabase[("Supabase Auth and PostgreSQL")]
  node_rules["Validation rules<br/>[rules.ts]"]
end

node_learner(("Learner"))
node_admin(("Administrator"))

node_learner -->|"opens"| node_home
node_learner -->|"browses"| node_catalog
node_learner -->|"signs in"| node_auth_routes
node_admin -->|"manages courses"| node_admin_routes
node_catalog -->|"loads catalog"| node_course_data
node_home -->|"loads courses"| node_course_data
node_course_detail -->|"loads course"| node_course_data
node_dashboard -->|"requires user"| node_auth_service
node_dashboard -->|"loads course data"| node_course_data
node_course_data -->|"uses preview"| node_demo_catalog
node_course_data -->|"queries"| node_supabase_client
node_auth_routes -->|"submits forms"| node_auth_actions
node_auth_actions -->|"performs auth"| node_supabase_client
node_auth_service -->|"checks session"| node_supabase_client
node_auth_actions -->|"validates input"| node_rules
node_course_detail -->|"starts enrollment"| node_learning_actions
node_learning_routes -.->|"records progress"| node_learning_actions
node_learning_routes -.->|"loads learning state"| node_learning_data
node_learning_actions -->|"requires user"| node_auth_service
node_learning_actions -->|"updates progress"| node_supabase_client
node_learning_data -->|"reads progress"| node_supabase_client
node_admin_routes -->|"edits courses"| node_course_editor
node_course_editor -->|"saves draft"| node_admin_actions
node_admin_actions -->|"requires admin"| node_auth_service
node_admin_actions -->|"runs admin RPC"| node_supabase_client
node_admin_actions -->|"validates identifiers"| node_rules
node_certificate_routes -->|"loads certificate"| node_certificate_data
node_certificate_routes -->|"renders download"| node_certificate_pdf
node_certificate_data -->|"loads records"| node_supabase_client
node_supabase_client -->|"connects"| node_supabase

click node_home "https://github.com/nijo918/nijo_online/blob/main/src/app/page.tsx"
click node_catalog "https://github.com/nijo918/nijo_online/blob/main/src/app/courses/page.tsx"
click node_course_detail "https://github.com/nijo918/nijo_online/blob/main/src/app/courses/%5Bslug%5D/page.tsx"
click node_dashboard "https://github.com/nijo918/nijo_online/blob/main/src/app/dashboard/page.tsx"
click node_learning_routes "https://github.com/nijo918/nijo_online/tree/main/src/app/learn/%5Benrollment%5D"
click node_auth_routes "https://github.com/nijo918/nijo_online/blob/main/src/app/auth/%5Bscreen%5D/page.tsx"
click node_auth_actions "https://github.com/nijo918/nijo_online/blob/main/src/features/auth/actions.ts"
click node_auth_service "https://github.com/nijo918/nijo_online/blob/main/src/lib/auth.ts"
click node_admin_routes "https://github.com/nijo918/nijo_online/tree/main/src/app/admin"
click node_course_editor "https://github.com/nijo918/nijo_online/blob/main/src/features/admin/editor.tsx"
click node_admin_actions "https://github.com/nijo918/nijo_online/blob/main/src/features/admin/actions.ts"
click node_course_data "https://github.com/nijo918/nijo_online/blob/main/src/features/courses/data.ts"
click node_demo_catalog "https://github.com/nijo918/nijo_online/blob/main/src/features/courses/demo.ts"
click node_learning_actions "https://github.com/nijo918/nijo_online/blob/main/src/features/learning/actions.ts"
click node_learning_data "https://github.com/nijo918/nijo_online/blob/main/src/features/learning/data.ts"
click node_certificate_routes "https://github.com/nijo918/nijo_online/tree/main/src/app/certificates/%5Bid%5D"
click node_certificate_data "https://github.com/nijo918/nijo_online/blob/main/src/features/certificates/data.ts"
click node_certificate_pdf "https://github.com/nijo918/nijo_online/blob/main/src/features/certificates/pdf.ts"
click node_supabase_client "https://github.com/nijo918/nijo_online/blob/main/src/lib/supabase/server.ts"
click node_rules "https://github.com/nijo918/nijo_online/blob/main/src/lib/rules.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_home,node_catalog,node_course_detail,node_dashboard toneBlue
class node_auth_routes,node_auth_actions toneAmber
class node_admin_routes,node_course_editor,node_admin_actions toneMint
class node_learning_routes,node_learning_actions,node_learning_data,node_certificate_routes,node_certificate_data,node_certificate_pdf toneRose
class node_auth_service,node_course_data,node_demo_catalog,node_supabase_client,node_supabase,node_rules,node_learner,node_admin toneIndigo
```

## Components

### Learner experience

- [Home](https://github.com/nijo918/nijo_online/blob/main/src/app/page.tsx): `src/app/page.tsx`
- [Course catalog](https://github.com/nijo918/nijo_online/blob/main/src/app/courses/page.tsx): `src/app/courses/page.tsx`
- [Course details](https://github.com/nijo918/nijo_online/blob/main/src/app/courses/%5Bslug%5D/page.tsx): `src/app/courses/[slug]/page.tsx`
- [Learning dashboard](https://github.com/nijo918/nijo_online/blob/main/src/app/dashboard/page.tsx): `src/app/dashboard/page.tsx`

### Identity and access

- [Auth screens](https://github.com/nijo918/nijo_online/blob/main/src/app/auth/%5Bscreen%5D/page.tsx): `src/app/auth/[screen]/page.tsx`
- [Auth actions](https://github.com/nijo918/nijo_online/blob/main/src/features/auth/actions.ts): `src/features/auth/actions.ts`

### Course administration

- [Admin routes](https://github.com/nijo918/nijo_online/tree/main/src/app/admin): `src/app/admin`
- [Course editor](https://github.com/nijo918/nijo_online/blob/main/src/features/admin/editor.tsx): `src/features/admin/editor.tsx`
- [Admin actions](https://github.com/nijo918/nijo_online/blob/main/src/features/admin/actions.ts): `src/features/admin/actions.ts`

### Learning and credentials

- [Learning routes](https://github.com/nijo918/nijo_online/tree/main/src/app/learn/%5Benrollment%5D): `src/app/learn/[enrollment]`
- [Learning actions](https://github.com/nijo918/nijo_online/blob/main/src/features/learning/actions.ts): `src/features/learning/actions.ts`
- [Progress data](https://github.com/nijo918/nijo_online/blob/main/src/features/learning/data.ts): `src/features/learning/data.ts`
- [Certificate routes](https://github.com/nijo918/nijo_online/tree/main/src/app/certificates/%5Bid%5D): `src/app/certificates/[id]`
- [Certificate data](https://github.com/nijo918/nijo_online/blob/main/src/features/certificates/data.ts): `src/features/certificates/data.ts`
- [Certificate PDF](https://github.com/nijo918/nijo_online/blob/main/src/features/certificates/pdf.ts): `src/features/certificates/pdf.ts`

### Application services

- [Auth and access](https://github.com/nijo918/nijo_online/blob/main/src/lib/auth.ts): `src/lib/auth.ts`
- [Course data](https://github.com/nijo918/nijo_online/blob/main/src/features/courses/data.ts): `src/features/courses/data.ts`
- [Preview catalog](https://github.com/nijo918/nijo_online/blob/main/src/features/courses/demo.ts): `src/features/courses/demo.ts`
- [Supabase client](https://github.com/nijo918/nijo_online/blob/main/src/lib/supabase/server.ts): `src/lib/supabase/server.ts`
- **Supabase Auth and PostgreSQL**
- [Validation rules](https://github.com/nijo918/nijo_online/blob/main/src/lib/rules.ts): `src/lib/rules.ts`

### Other components

- **Learner**
- **Administrator**

## Connections

- Learner → Home: opens (evidence: `README.md`)
- Learner → Course catalog: browses (evidence: `README.md`)
- Learner → Auth screens: signs in (evidence: `README.md`)
- Administrator → Admin routes: manages courses (evidence: `README.md`)
- Course catalog → Course data: loads catalog (evidence: `src/app/courses/page.tsx`)
- Home → Course data: loads courses (evidence: `src/app/page.tsx`)
- Course details → Course data: loads course (evidence: `src/app/courses/[slug]/page.tsx`)
- Learning dashboard → Auth and access: requires user (evidence: `src/app/dashboard/page.tsx`)
- Learning dashboard → Course data: loads course data (evidence: `src/app/dashboard/page.tsx`)
- Course data → Preview catalog: uses preview (evidence: `src/features/courses/data.ts`)
- Course data → Supabase client: queries (evidence: `src/features/courses/data.ts`)
- Auth screens → Auth actions: submits forms (evidence: `src/app/auth/[screen]/page.tsx`)
- Auth actions → Supabase client: performs auth (evidence: `src/features/auth/actions.ts`)
- Auth and access → Supabase client: checks session (evidence: `src/lib/auth.ts`)
- Auth actions → Validation rules: validates input (evidence: `src/features/auth/actions.ts`)
- Course details → Learning actions: starts enrollment (evidence: `src/app/courses/[slug]/page.tsx`)
- Learning routes → Learning actions: records progress (evidence: `src/app/learn/[enrollment]/quizzes/[assessment]/page.tsx`)
- Learning routes → Progress data: loads learning state (evidence: `src/app/learn/[enrollment]/quizzes/[assessment]/page.tsx`)
- Learning actions → Auth and access: requires user (evidence: `src/features/learning/actions.ts`)
- Learning actions → Supabase client: updates progress (evidence: `src/features/learning/actions.ts`)
- Progress data → Supabase client: reads progress (evidence: `src/features/learning/data.ts`)
- Admin routes → Course editor: edits courses (evidence: `src/app/admin/courses/[id]/page.tsx`)
- Course editor → Admin actions: saves draft (evidence: `src/features/admin/editor.tsx`)
- Admin actions → Auth and access: requires admin (evidence: `src/features/admin/actions.ts`)
- Admin actions → Supabase client: runs admin RPC (evidence: `src/features/admin/actions.ts`)
- Admin actions → Validation rules: validates identifiers (evidence: `src/features/admin/actions.ts`)
- Certificate routes → Certificate data: loads certificate (evidence: `src/app/certificates/[id]/page.tsx`)
- Certificate routes → Certificate PDF: renders download (evidence: `src/app/certificates/[id]/download/route.ts`)
- Certificate data → Supabase client: loads records (evidence: `src/features/certificates/data.ts`)
- Supabase client → Supabase Auth and PostgreSQL: connects (evidence: `src/lib/supabase/server.ts`)
