# devcntid/fluencyhub architecture

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

## Overview

FluencyHub is an online course and learning platform with public course discovery, checkout, payment confirmation, student learning, instructor curriculum management, and administrative operations. The main purchase path creates an order, starts payment through manual or gateway methods, then processes gateway callbacks or submitted proof to advance fulfillment. The tree and excerpts support these domain stages and several major feature areas; details of unsampled page-to-API wiring are not assumed, so only evidenced relationships are shown.

Main entry points: [`src/lib/db`](https://github.com/devcntid/fluencyhub/tree/main/src/lib/db) (Database Queries), [`src/app/api/orders/[id]/pay/route.ts`](https://github.com/devcntid/fluencyhub/blob/main/src/app/api/orders/%5Bid%5D/pay/route.ts) (Payment Start), [`src/app/api/orders/route.ts`](https://github.com/devcntid/fluencyhub/blob/main/src/app/api/orders/route.ts) (Order Creation), [`src/app/api/webhooks/midtrans/route.ts`](https://github.com/devcntid/fluencyhub/blob/main/src/app/api/webhooks/midtrans/route.ts) (Midtrans Callback)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_commerce["Course Commerce"]
  node_public["Public Site<br/>[page.tsx]"]
  node_course["Course Detail<br/>[page.tsx]"]
  node_checkout["Checkout<br/>[page.tsx]"]
  node_orders["Order Creation<br/>[route.ts]"]
  node_paymentstart["Payment Start<br/>[route.ts]"]
  node_proof["Payment Proof<br/>[route.ts]"]
  node_midwebhook["Midtrans Callback<br/>[route.ts]"]
  node_xenwebhook["Xendit Callback<br/>[route.ts]"]
  node_fulfillment["Order Fulfillment<br/>[orders.ts]"]
end

subgraph group_learning["Learning Platform"]
  node_student["Student Dashboard<br/>[page.tsx]"]
  node_progress["Progress Tracking<br/>[route.ts]"]
  node_instructor["Instructor Portal<br/>[page.tsx]"]
  node_curriculum["Curriculum Editor"]
  node_lessonapi["Lesson API<br/>[route.ts]"]
end

subgraph group_operations["Platform Operations"]
  node_admin["Admin Console<br/>[page.tsx]"]
  node_adminapi["Admin APIs<br/>[route.ts]"]
  node_upload["File Upload<br/>[route.ts]"]
end

subgraph group_data["Data and Infrastructure"]
  node_auth["Authentication<br/>[session.ts]"]
  node_queries["Database Queries"]
  node_database[("Application Database<br/>[schema.ts]")]
end

node_learner(("Learner"))
node_midtrans{{"Midtrans"}}
node_xendit{{"Xendit"}}
node_blob{{"Blob Storage"}}

node_learner -->|"browses"| node_public
node_public -->|"opens course"| node_course
node_learner -->|"starts checkout"| node_checkout
node_checkout -->|"creates order"| node_orders
node_orders -->|"reads and writes"| node_queries
node_orders -->|"checks session"| node_auth
node_learner -->|"initiates payment"| node_paymentstart
node_paymentstart -->|"loads and updates"| node_queries
node_paymentstart -.->|"requests charge"| node_midtrans
node_paymentstart -.->|"requests payment"| node_xendit
node_midtrans -.->|"sends callback"| node_midwebhook
node_xendit -.->|"sends callback"| node_xenwebhook
node_midwebhook -->|"loads and updates"| node_queries
node_xenwebhook -->|"loads and updates"| node_queries
node_midwebhook -->|"marks paid"| node_fulfillment
node_xenwebhook -->|"marks paid"| node_fulfillment
node_proof -->|"records proof"| node_queries
node_proof -->|"checks session"| node_auth
node_learner -->|"opens learning"| node_student
node_student -->|"records progress"| node_progress
node_progress -->|"checks enrollment"| node_queries
node_progress -->|"upserts progress"| node_database
node_instructor -->|"manages curriculum"| node_curriculum
node_curriculum -->|"submits lessons"| node_lessonapi
node_lessonapi -->|"reads and writes"| node_queries
node_admin -->|"manages courses"| node_adminapi
node_adminapi -->|"reads and writes"| node_queries
node_upload -->|"checks session"| node_auth
node_upload -->|"uploads files"| node_blob
node_queries -->|"reads and writes"| node_database

click node_public "https://github.com/devcntid/fluencyhub/blob/main/src/app/(public)/page.tsx"
click node_course "https://github.com/devcntid/fluencyhub/blob/main/src/app/(public)/courses/%5Bslug%5D/page.tsx"
click node_checkout "https://github.com/devcntid/fluencyhub/blob/main/src/app/(public)/checkout/page.tsx"
click node_orders "https://github.com/devcntid/fluencyhub/blob/main/src/app/api/orders/route.ts"
click node_paymentstart "https://github.com/devcntid/fluencyhub/blob/main/src/app/api/orders/%5Bid%5D/pay/route.ts"
click node_proof "https://github.com/devcntid/fluencyhub/blob/main/src/app/api/payment-proofs/route.ts"
click node_midwebhook "https://github.com/devcntid/fluencyhub/blob/main/src/app/api/webhooks/midtrans/route.ts"
click node_xenwebhook "https://github.com/devcntid/fluencyhub/blob/main/src/app/api/webhooks/xendit/route.ts"
click node_fulfillment "https://github.com/devcntid/fluencyhub/blob/main/src/lib/orders.ts"
click node_student "https://github.com/devcntid/fluencyhub/blob/main/src/app/dashboard/courses/page.tsx"
click node_progress "https://github.com/devcntid/fluencyhub/blob/main/src/app/api/dashboard/progress/route.ts"
click node_instructor "https://github.com/devcntid/fluencyhub/blob/main/src/app/instructor/curriculum/page.tsx"
click node_curriculum "https://github.com/devcntid/fluencyhub/blob/main/src/components/course/CurriculumManager.tsx"
click node_lessonapi "https://github.com/devcntid/fluencyhub/blob/main/src/app/api/instructor/lessons/route.ts"
click node_admin "https://github.com/devcntid/fluencyhub/blob/main/src/app/%5BadminPath%5D/page.tsx"
click node_adminapi "https://github.com/devcntid/fluencyhub/blob/main/src/app/api/admin/courses/route.ts"
click node_upload "https://github.com/devcntid/fluencyhub/blob/main/src/app/api/upload/route.ts"
click node_auth "https://github.com/devcntid/fluencyhub/blob/main/src/lib/session.ts"
click node_queries "https://github.com/devcntid/fluencyhub/tree/main/src/lib/db"
click node_database "https://github.com/devcntid/fluencyhub/blob/main/drizzle/schema.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_public,node_course,node_checkout,node_orders,node_paymentstart,node_proof,node_midwebhook,node_xenwebhook,node_fulfillment toneBlue
class node_student,node_progress,node_instructor,node_curriculum,node_lessonapi,node_blob toneAmber
class node_admin,node_adminapi,node_upload toneMint
class node_auth,node_queries,node_database toneRose
class node_learner,node_midtrans,node_xendit toneIndigo
```

## Components

### Course Commerce

- [Public Site](https://github.com/devcntid/fluencyhub/blob/main/src/app/(public)/page.tsx): `src/app/(public)/page.tsx`
- [Course Detail](https://github.com/devcntid/fluencyhub/blob/main/src/app/(public)/courses/%5Bslug%5D/page.tsx): `src/app/(public)/courses/[slug]/page.tsx`
- [Checkout](https://github.com/devcntid/fluencyhub/blob/main/src/app/(public)/checkout/page.tsx): `src/app/(public)/checkout/page.tsx`
- [Order Creation](https://github.com/devcntid/fluencyhub/blob/main/src/app/api/orders/route.ts): `src/app/api/orders/route.ts`
- [Payment Start](https://github.com/devcntid/fluencyhub/blob/main/src/app/api/orders/%5Bid%5D/pay/route.ts): `src/app/api/orders/[id]/pay/route.ts`
- [Payment Proof](https://github.com/devcntid/fluencyhub/blob/main/src/app/api/payment-proofs/route.ts): `src/app/api/payment-proofs/route.ts`
- [Midtrans Callback](https://github.com/devcntid/fluencyhub/blob/main/src/app/api/webhooks/midtrans/route.ts): `src/app/api/webhooks/midtrans/route.ts`
- [Xendit Callback](https://github.com/devcntid/fluencyhub/blob/main/src/app/api/webhooks/xendit/route.ts): `src/app/api/webhooks/xendit/route.ts`
- [Order Fulfillment](https://github.com/devcntid/fluencyhub/blob/main/src/lib/orders.ts): `src/lib/orders.ts`

### Learning Platform

- [Student Dashboard](https://github.com/devcntid/fluencyhub/blob/main/src/app/dashboard/courses/page.tsx): `src/app/dashboard/courses/page.tsx`
- [Progress Tracking](https://github.com/devcntid/fluencyhub/blob/main/src/app/api/dashboard/progress/route.ts): `src/app/api/dashboard/progress/route.ts`
- [Instructor Portal](https://github.com/devcntid/fluencyhub/blob/main/src/app/instructor/curriculum/page.tsx): `src/app/instructor/curriculum/page.tsx`
- [Curriculum Editor](https://github.com/devcntid/fluencyhub/blob/main/src/components/course/CurriculumManager.tsx): `src/components/course/CurriculumManager.tsx`
- [Lesson API](https://github.com/devcntid/fluencyhub/blob/main/src/app/api/instructor/lessons/route.ts): `src/app/api/instructor/lessons/route.ts`

### Platform Operations

- [Admin Console](https://github.com/devcntid/fluencyhub/blob/main/src/app/%5BadminPath%5D/page.tsx): `src/app/[adminPath]/page.tsx`
- [Admin APIs](https://github.com/devcntid/fluencyhub/blob/main/src/app/api/admin/courses/route.ts): `src/app/api/admin/courses/route.ts`
- [File Upload](https://github.com/devcntid/fluencyhub/blob/main/src/app/api/upload/route.ts): `src/app/api/upload/route.ts`

### Data and Infrastructure

- [Authentication](https://github.com/devcntid/fluencyhub/blob/main/src/lib/session.ts): `src/lib/session.ts`
- [Database Queries](https://github.com/devcntid/fluencyhub/tree/main/src/lib/db): `src/lib/db`
- [Application Database](https://github.com/devcntid/fluencyhub/blob/main/drizzle/schema.ts): `drizzle/schema.ts`

### Other components

- **Learner**
- **Midtrans**
- **Xendit**
- **Blob Storage**

## Connections

- Learner → Public Site: browses
- Public Site → Course Detail: opens course
- Learner → Checkout: starts checkout
- Checkout → Order Creation: creates order
- Order Creation → Database Queries: reads and writes
- Order Creation → Authentication: checks session
- Learner → Payment Start: initiates payment
- Payment Start → Database Queries: loads and updates
- Payment Start → Midtrans: requests charge
- Payment Start → Xendit: requests payment
- Midtrans → Midtrans Callback: sends callback
- Xendit → Xendit Callback: sends callback
- Midtrans Callback → Database Queries: loads and updates
- Xendit Callback → Database Queries: loads and updates
- Midtrans Callback → Order Fulfillment: marks paid
- Xendit Callback → Order Fulfillment: marks paid
- Payment Proof → Database Queries: records proof
- Payment Proof → Authentication: checks session
- Learner → Student Dashboard: opens learning
- Student Dashboard → Progress Tracking: records progress
- Progress Tracking → Database Queries: checks enrollment
- Progress Tracking → Application Database: upserts progress
- Instructor Portal → Curriculum Editor: manages curriculum
- Curriculum Editor → Lesson API: submits lessons
- Lesson API → Database Queries: reads and writes
- Admin Console → Admin APIs: manages courses
- Admin APIs → Database Queries: reads and writes
- File Upload → Authentication: checks session
- File Upload → Blob Storage: uploads files
- Database Queries → Application Database: reads and writes
