Usage Guide

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