| Authentication | src/lib/auth.ts, src/app/api/auth/ | Email/password login with NextAuth, JWT strategy, bcrypt hashing, role-based access (STUDENT, TEACHER, ADMIN) | Complete |
| Registration | src/app/api/auth/register/route.ts, src/app/[locale]/(auth)/register/ | New user signup with email, name, password, role selection, preferred locale | Complete |
| Dashboard | src/app/[locale]/(dashboard)/dashboard/ | Role-aware home screen showing relevant courses, progress, and actions | Complete |
| Course Listing | src/app/[locale]/(dashboard)/courses/page.tsx | Browse and filter published courses, role-based views (own vs all) | Complete |
| Course Detail | src/app/[locale]/(dashboard)/courses/[id]/page.tsx | View course metadata, Twee source, version history, status | Complete |
| Course Editor | src/app/[locale]/(dashboard)/courses/[id]/edit/page.tsx | Edit course metadata, update Twee source, manage versions | Complete |
| Course Creation (Manual) | src/app/[locale]/(dashboard)/courses/new/page.tsx, src/app/api/courses/create-from-twee/ | Upload or paste Twee source, set metadata, create course | Complete |
| AI Course Generation | src/app/[locale]/(dashboard)/courses/generate/page.tsx, src/lib/llm/generate-story.ts | LLM generates Twee 3 story from topic, objectives, and audience | Complete |
| Course Publishing | src/app/api/courses/[id]/publish/route.ts | Compile Twee, inject tracking, set status to PUBLISHED | Complete |
| Course Archive/Restore | src/app/api/courses/[id]/archive/, src/app/api/courses/[id]/restore/ | Soft archive and restore courses | Complete |
| Course Play | src/app/[locale]/(dashboard)/courses/[id]/play/page.tsx, src/components/twine/TwinePlayer.tsx | Load built HTML in iframe, postMessage-based progress tracking | Complete |
| Twine Compilation | src/lib/twine/compiler.ts | Twee 3 to HTML compilation using tweego, IFID generation | Complete |
| Tracking Injection | src/lib/twine/injector.ts | Inject JavaScript into compiled HTML for passage-change tracking | Complete |
| Twine Parser | src/lib/twine/parser.ts | Parse uploaded Twine HTML to extract passages and metadata | Complete |
| Twee Utilities | src/lib/twine/twee-utils.ts | Parse Twee source into passage objects, link extraction | Complete |
| Error Detection | src/lib/twine/detect-errors.ts | Detect dead links, duplicate passages, and orphan passages in Twee | Complete |
| AI Error Fixing | src/lib/llm/fix-twee-errors.ts, src/app/api/courses/[id]/fix-errors/ | LLM repairs structural Twee errors (dead links, duplicates, orphans) | Complete |
| AI Translation | src/lib/llm/translate.ts, src/app/api/courses/translate-all/ | Batch metadata translation, full Twee story translation (en-US / ko-KR) | Complete |
| AI Image Prompts | src/lib/llm/generate-image-prompts.ts, src/app/api/courses/[id]/generate-image-prompts/ | Generate DALL-E 3 prompts with style directive and character personas | Complete |
| AI Image Generation | src/lib/llm/client.ts (generateImage), src/app/api/courses/[id]/generate-image/ | DALL-E 3 image generation with safety constraints | Complete |
| Progress Tracking | src/app/api/progress/, src/app/[locale]/(dashboard)/progress/ | Start, update, complete tracking per user per course with visited passages, time, quiz scores | Complete |
| Submission Upload | src/app/api/upload/twine/route.ts, src/app/[locale]/(dashboard)/submissions/new/ | Upload Twine HTML, parse metadata, create draft submission | Complete |
| Submission Review | src/app/api/submissions/[id]/review/route.ts, src/app/[locale]/(dashboard)/submissions/[id]/review/ | Teacher reviews submissions (approve, reject, request changes), global queue | Complete |
| Internationalization | src/lib/i18n/, src/messages/en-US.json, src/messages/ko-KR.json | All UI strings via next-intl, locale in URL path, locale switcher | Complete |
| Quick Exit | src/components/safety/quick-exit.tsx | Emergency exit button + Escape key, clears sessionStorage, redirects to weather.com | Complete |
| Get Help | src/components/safety/get-help.tsx | Dialog with Korean hotlines (1366, 112, 02-735-8994) and international resources | Complete |
| Landing Page | src/app/[locale]/page.tsx, src/components/hero/ | Public landing with hero section, evidence quotes from API | Complete |
| Evidence API | src/app/api/hero-evidence/route.ts | CRUD for landing page evidence items (bilingual quotes) | Complete |
| Pilot Request | src/app/api/pilot-request/route.ts, src/app/[locale]/pilot/ | Pilot program interest form | Complete |
| User Settings | src/app/[locale]/(dashboard)/settings/page.tsx | Update profile, preferred locale | Complete |
| Design System | src/app/globals.css, tailwind.config.ts | Semantic tokens (brand-soft, progress-fill, safety-exit), shadcn/ui primitives | Complete |
| Security Headers | next.config.js | X-Frame-Options (SAMEORIGIN), X-Content-Type-Options (nosniff), Referrer-Policy | Complete |
| Teacher Access Logs | TeacherAccessLog model in Prisma | Audit trail for teacher actions on student resources | Complete |
| E2E Tests | tests/ (Playwright) | End-to-end tests for critical flows | Complete |