# ACVE Frontend Product Plan (MVP-first, Fully Mapped UX) ## Purpose Give a complete, navigable frontend experience (even if powered by mock data) that illustrates the full platform: learner flow, teacher flow, auth, course creation, uploads, and admin surfaces. This is intended to be the living blueprint for backend integration. ## Principles - Every button leads somewhere (even if placeholder). - Every flow is complete end-to-end, including empty states. - Mock data must map to real schema terms to reduce backend mismatch. - Logged-out and logged-in states are always distinct and testable. - Teacher-only actions are visible only where appropriate, but teacher onboarding should be clear. ## Target Roles - Visitor (logged out) - Learner (logged in) - Teacher (logged in, teacher role) - Org Admin (future, placeholder-only) - Super Admin (future, placeholder-only) ## Core Navigation Map Top nav: - Home - Courses - Case Studies - Practice - AI Assistant - Auth (Login/Sign up or Account menu) Global flows: - Auth gating for: course player, practice modules, teacher dashboard. - Visitor can browse marketing and course detail pages. ## User Journey: Visitor -> Learner 1. Home - CTA: “Start Learning” -> /courses - CTA: “Explore Courses” -> /courses 2. Courses list - Filter by level - Course cards show title, summary, instructor, rating, lessons, weeks - CTA on card: “View Course” -> /courses/[slug] 3. Course detail - Shows course description and “Start Course” button - If logged out: CTA “Login to start” -> /auth/login?redirectTo=/courses/[slug]/learn 4. Login / Signup - Email/password login - “Are you a teacher? Login here” (teacher hint CTA) 5. After login - Redirect back to requested page or /courses 6. Course player - Lesson list with lock state for non-preview lessons if logged out - Progress tracking - “Mark complete” updates local progress ## User Journey: Teacher 1. Teacher login entry points - Login page: “Are you a teacher? Login here” -> /auth/login?role=teacher (frontend-only) - Navbar: “Teacher Dashboard” visible when role=teacher (or local mock toggle) 2. Teacher dashboard - List teacher-created courses (mock/localStorage) - CTA: “Create Course” -> /teacher/courses/new 3. Create course - Title, level, summary, instructor, weeks - Creates a local course stub with one intro lesson - Redirect to edit course page 4. Edit course - Update details - List lessons - CTA: “Add lesson” -> /teacher/courses/[slug]/lessons/new 5. Add lesson - Title, type (video/reading/interactive), duration - Video: field for placeholder URL or “Upload video” (mock) - Save -> returns to edit page 6. Course publish flow (mock) - Add “Status” selector (Draft/Published) - Published courses appear in public catalog ## Planned Screens (Additions/Upgrades) ### Auth - Login page - Add teacher CTA - Add “Forgot password” placeholder - Signup page - Add “I am a teacher” checkbox (frontend only) - Show note: “Teacher accounts are approved by admin” (placeholder) ### Teacher Surfaces - /teacher - Add stats cards (mock) - Add “Upload library” link (placeholder) - /teacher/courses/[slug]/edit - Add modules section (placeholder UI) - Add reorder UI (drag handles, non-functional) - /teacher/uploads - Upload manager placeholder with file list ### Learner Surfaces - /courses/[slug]/learn - Add sidebar module grouping (placeholder) - Add resource downloads section (placeholder) - /practice/[slug] - Add attempt history (mock) ### Org Admin (future placeholder) - /org - Team seats, usage, course assignments (placeholder only) ## Data Strategy (Frontend) - Current: - Course catalog: mockCourses + local teacher courses - Practice: mock modules - Case studies: mock - Progress: localStorage (per userId or guest) - Future API mapping (for backend): - Courses -> Prisma `Course`, `Module`, `Lesson` - Teachers -> `Profile` role=TEACHER - Uploads -> `Resource` or `Lesson` video URL - Progress -> `UserProgress` ## Page-by-Page Spec ### / (Home) - Hero, highlights, CTA - Quick links to courses/case studies/practice ### /courses - Tabs for levels - Grid of cards - Badge for status (Draft/Published) for teacher ### /courses/[slug] - Course overview - “Start Course” button (auth-gated) ### /courses/[slug]/learn (Protected) - Lesson list - Lesson viewer with placeholders - Progress bar ### /practice - Modules list ### /practice/[slug] (Protected) - Quiz flow ### /case-studies - Case list + active preview ### /case-studies/[slug] - Full case view ### /assistant - Full page assistant UI ### /auth/login - Login form - CTA: teacher login ### /auth/signup - Signup form - Teacher checkbox (placeholder) ### /teacher (Protected) - Dashboard - Create course ### /teacher/courses/new (Protected) - Create course form ### /teacher/courses/[slug]/edit (Protected) - Edit course - Lesson list ### /teacher/courses/[slug]/lessons/new (Protected) - Add lesson ### /teacher/uploads (Protected) - Placeholder upload UI ### /org (Protected) - Placeholder org admin dashboard ## UX/Content Notes - All teacher-only actions should be labeled “Teacher only” if role is not teacher. - No real upload yet: use “Upload disabled in MVP” messaging. - Show consistent empty states with CTA. ## Implementation Notes (Frontend) - Use localStorage for teacher-created courses and uploads. - Use event emitters to re-render lists when localStorage updates. - Keep schema-aligned data shapes for easy backend swap. ## Milestones 1. Complete teacher login CTA + role hints 2. Teacher flows: create/edit/lessons + placeholder uploads 3. Course player: modules/resources placeholders 4. Org admin placeholder 5. UI polish & copy pass ## Implementation Checklist (Living) Status key: TODO | IN PROGRESS | DONE Auth & Entry Points - DONE Add teacher CTA on `/auth/login` and `/auth/signup` - DONE Add “Forgot password” placeholder link - DONE Add teacher invite-only note on signup - DONE Add role hint handling (`role=teacher`) for copy changes Navigation & Role Visibility - DONE Show “Teacher Dashboard” link when teacher role is detected (allowlist-based) - DONE Add non-teacher “Teacher only” labels where relevant Teacher Dashboard & Course Ops - DONE Add stats cards (mock) - DONE Add course publish status selector (Draft/Published) - DONE Ensure published teacher courses appear in public catalog - DONE Add lesson reordering UI (non-functional) Teacher Upload Library - DONE Create `/teacher/uploads` placeholder page - DONE Add upload list with mock assets - DONE Add “Attach to lesson” picker placeholder - DONE Add “Upload disabled in MVP” messaging Course Player Enhancements - DONE Add module grouping sidebar (placeholder) - DONE Add resources/downloads section (placeholder) Practice Enhancements - DONE Add attempt history block (mock) Org Admin Placeholder - DONE Create `/org` placeholder dashboard (seats, usage, assignments) UI/Copy Polish - DONE Empty state consistency pass - DONE Microcopy alignment with schema terminology ## Progress Log - 2026-02-10: Implementation checklist added. - 2026-02-10: Added teacher CTA, invite-only copy, role-aware login copy, and forgot-password placeholder. - 2026-02-10: Added Supabase config validation fallback so malformed env values do not crash frontend; app continues in placeholder mode. - 2026-02-10: Added demo auth fallback credentials + cookie session for frontend-only development and allowlist-based teacher navbar visibility. - 2026-02-10: Added teacher upload library placeholder flow (`/teacher/uploads`) with mock assets, attach picker, and dashboard link/stats. - 2026-02-10: Added visible "Teacher only" label in navbar for logged-in non-teachers. - 2026-02-10: Added teacher course status workflow (Draft/Published), public catalog filtering for teacher courses, and lesson reorder placeholder controls. - 2026-02-10: Added course player module/resource placeholders, mock practice attempt history, and protected org placeholder dashboard. - 2026-02-10: Completed UX/copy polish pass for status visibility and placeholder consistency. ## Open Questions Resolved: - Teacher approval is invite-only. - Teacher roles are determined by email allowlist. - Uploads go to a central library (“cloud”) and can be assigned to lessons/courses (reusable assets).