– 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.