Use when building or extending the academy — courses, lessons, learning paths, lesson progression. Triggers on "academy", "course", "lesson", "curriculum", "learning", "education module".
How courses and lessons are structured and rendered.
AGENTS.md, CLAUDE.md, docs/standards/agent-knowledge-protocol.md. Task-scoped: docs/ARCHITECTURE.md (routing, data flow); types in src/lib/supabase/types.ts.
Course (1) ──→ (many) Lesson
Course: title, slug, description, access_tier, status, cover_image Lesson: title, slug, body, course_id, order, access_tier
Lessons are ordered by the order field within a course.
| Route | Page | Description |
|---|---|---|
/academy | Listing | All published courses |
/academy/[slug] | Course detail | Course info + lesson list |
/academy/[slug]/[lessonSlug] | Lesson detail | Lesson content |
From src/lib/supabase/queries.ts:
getCourses() — all published coursesgetCourseBySlug(slug) — single course with lessonsgetLessonBySlug(courseSlug, lessonSlug) — single lessonCourses and lessons have independent access_tier fields:
checkContentAccess(lesson.access_tier)Course detail page shows:
/academy/[courseSlug]/[lessonSlug]Lesson detail page shows:
src/app/(auth)/admin/courses/ and nested lesson routesCourseForm.tsxLessonForm.tsx (nested under course: /admin/courses/[id]/lessons/)src/app/(auth)/admin/courses/actions.ts and lessons/actions.ts# SQL seeds
supabase/seed-courses.sql
supabase/seed-lessons.sql
# Or via script
npx tsx scripts/seed-all.ts # includes courses + lessons
order valuesstatus: 'published' when ready/academy