AI‑powered course generation with a modern web UI, real‑time notifications, and a modular services architecture.
flowchart LR
subgraph Browser
A[Web UI\nVite/React] -- HTTP --> G[[Oathkeeper Gateway]]
A -- WS --> NWS[(Notifier WS)]
end
G --> MS[Management Service\nNode TS • Hono • Drizzle]
MS <--> PG[(PostgreSQL)]
MS -- AMQP --> RMQ[(RabbitMQ)]
subgraph Workers
LW[LLM Worker\nPython] -- consumes --> Q1((course.create))
LW -- produces --> Q2((course.created))
LW -->|notifications| QN((notifications))
end
RMQ <-.-> Q1
RMQ <-.-> Q2
RMQ <-.-> QN
Q2 --> MS
QN --> NS[Notifier Service\nGo]
NS -.-> NWS
subgraph Auth
K[Ory Kratos] -. session mgmt .-> G
end
-
Web UI (Vite + React)
- Location:
web-ui/ - Dev:
npm run dev(port 3030) - Env:
VITE_PUBLIC_MANAGEMENT_API_URLdefaulthttp://localhost:4455/api/managementVITE_PUBLIC_NOTIFIER_WS_URLdefaultws://localhost:4455/api/notifier/wsVITE_PUBLIC_ORY_KRATOS_URLdefaulthttp://localhost:4433
- Location:
-
Management Service (Node, TypeScript, Hono)
- Location:
services/management-service/ - Dev:
npm install && npm run dev(port 3000) - Build:
npm run build; Start:npm start - DB: Postgres
- Queues:
- Publishes
course.create - Consumes
course.createdand publishesnotifications
- Publishes
- Health:
GET /health
- Location:
-
Notifier Service (Go, WebSocket hub)
- Location:
services/notifier-service/ - Env:
AMQP_URL(defaultamqp://guest:guest@localhost:5672)NOTIFIER_QUEUE(defaultnotifications)HTTP_ADDR(default:8080)WS_PATH(default/ws)HEALTH_PATH(default/healthz)
- Endpoints:
GET /ws(WebSocket)GET /healthz
- Location:
-
LLM Worker (Python)
- Location:
services/llm-worker/ - Runs as a consumer for
course.create, emitscourse.created, and may emitnotifications. - Env:
AMQP_HOST,AMQP_PORT,AMQP_USER,AMQP_PASSQUEUE_CREATE(defaultcourse.create)QUEUE_CREATED(defaultcourse.created)GENERATION_MAX_RETRIES,GENERATION_RETRY_DELAY_SECONDSLLM_PROVIDER,LLM_BASE_URLfor model selection
- Location:
-
Gateway and Auth (Docker‑only in local dev)
- Oathkeeper: public gateway at 4455 (admin 4456)
- Kratos: public 4433 (admin 4434)
web-ui/– React appservices/management-service/– Course and lesson APIservices/notifier-service/– WebSocket notificationsservices/llm-worker/– Course generation workerconfig/– Gateway and auth configurationdocker-compose.yml– Local infra and services
- Start backend stack
docker compose up -dComponents:
- Postgres 5432
- RabbitMQ 5672 (UI: 15672)
- Kratos 4433/4434
- Oathkeeper 4455/4456
- Management, Notifier, LLM Worker
- Start Web UI
cd web-ui
npm install
npm run dev- Gateway base:
http://localhost:4455- Management API:
/api/management - Notifier WS:
/api/notifier/ws
- Management API:
- Follow
UI_UX_ACCESSIBILITY.md. - Keep changes small and focused; add tests where feasible.
MIT