Codebase Structure
Doc Status: Good | ✓ Clear summary | ✓ Easy to read | ✓ Matches code | ✓ Good structure | ✓ Professional look | ✓ Visual components
Top-Level Directory Tree
Per-App Descriptions
apps/website/ — Public Marketing Site
Next.js 16 (App Router), public marketing site — no auth required. Serves course listings, enrollment forms (phiếu), and practice tools.
apps/admin/ — Internal Staff Dashboard
Next.js 16, internal staff dashboard, auth-gated via Convex Auth. Manages students, courses, attendance, and payments.
apps/mobile/ — Student Mobile App
Expo + Expo Router + NativeWind. Student-facing app for accessing course content and tools. Auth via ConvexAuthProvider + expo-secure-store.
apps/lark-sync/ — Lark Webhook Worker
Cloudflare Worker (Hono). HTTP entry point for Lark Base webhook events. Verifies HMAC signature and forwards to Convex httpAction. Does not call the Lark API.
apps/meta-conversions-worker/ — Meta CAPI Webhook Worker
Cloudflare Worker (Hono). HTTP entry point for Meta Conversions API webhook events. Verifies signature and forwards to Convex httpAction.
Packages
packages/backend/ — Convex Schema + Functions
Convex schema and functions shared by admin and mobile. The convex/ directory uses flat files (no subdirectories) — Convex’s runtime rejects hyphens in module paths.