– Authentication
– Use /register to create a new account; login via /login.
– Promote at least one user to ADMIN (see section 6) to access /admin.
– Categories & Subcategories (Admin)
– Navigate to `/admin/categories` and `/admin/subcategories` to create and manage taxonomy.
– Courses (Instructor/Admin)
– Create a course at `/instructor/courses/new`.
– Fill title, slug, descriptions, language, level, price, category/subcategory, and optional thumbnail/promo video URLs.
– Add sections and lessons under `/instructor/courses/[id]/lessons` and upload lesson resources.
– Uploads use Cloudinary; configure `NEXT_PUBLIC_CLOUDINARY_*` and preset first.
– Media Uploads
– Client forms reference `NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME` and `NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET`.
– A secure signature endpoint exists at `GET /api/uploads/cloudinary-signature` for signed workflows.
– Payments & Enrollments
– Stripe Checkout session is created via `POST /api/checkout/create-session`.
– Webhook handler at `/api/stripe/webhook` upserts enrollments post-payment.
– For testing locally: use the Stripe CLI to forward webhooks and set `STRIPE_WEBHOOK_SECRET`.
– Note: The sample `create-session` route currently restricts access to ADMIN. For real use, allow students to create checkout sessions after authentication.