# 🛠ïļ Web Development Documentation: e-Learning Platform (Frontend) āđ€āļ­āļāļŠāļēāļĢāļ‰āļšāļąāļšāļ™āļĩāđ‰āļŠāļĢāļļāļ›āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ—āļēāļ‡āđ€āļ—āļ„āļ™āļīāļ„ āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āđ‚āļ„āđ‰āļ” āđāļĨāļ°āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āļĢāļ°āļšāļš **Frontend-Learner** --- ## 🏗ïļ 1. Technical Foundation (āļĢāļēāļāļāļēāļ™āļ—āļēāļ‡āđ€āļ—āļ„āļ™āļīāļ„) āļĢāļ§āļĄāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­, āļĢāļ°āļšāļšāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ āđāļĨāļ°āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļ—āļģāļ‡āļēāļ™āđ„āļ§āđ‰āļ”āđ‰āļ§āļĒāļāļąāļ™ ### 1.1 Tech Stack - **Core:** [Nuxt 3](https://nuxt.com) (Vue 3 Composition API), TypeScript `^5.0` - **Styling:** Tailwind CSS (Utility) + Vanilla CSS Variables (Theming) - **State:** `ref`/`reactive` (Local) + `useState` (Global/Shared State) - **Localization:** `@nuxtjs/i18n` (TH/EN Support) ### 1.2 Core Systems & Security - **Authentication:** āļĢāļ°āļšāļš Auth āļœāļđāļāļāļąāļš API āđ‚āļ”āļĒāļĄāļĩ Middleware (`middleware/auth.ts`) āļ„āļ­āļĒāļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡ Route āđ€āļ‰āļžāļēāļ° - **API Handling:** āđƒāļŠāđ‰ `runtimeConfig.public.apiBase` āļˆāļąāļ”āļāļēāļĢ Base URL āđāļĨāļ° Auto-attach Bearer Token āđƒāļ™ Composables - **Performance:** - **Caching:** āđƒāļŠāđ‰ `useState` āļˆāļģāļ‚āđ‰āļ­āļĄāļđāļĨ (User Profile, Courses, Categories) āđ€āļžāļ·āđˆāļ­āļĨāļ” request āļ‹āđ‰āļģāļ‹āđ‰āļ­āļ™ - **Request Deduping:** āļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ API āđ€āļ”āļīāļĄāļ‹āđ‰āļģāđ† āđƒāļ™āđ€āļ§āļĨāļēāđ€āļ”āļĩāļĒāļ§āļāļąāļ™ --- ## 📂 2. Frontend Structure (āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļŦāļ™āđ‰āļēāđ€āļ§āđ‡āļšāđāļĨāļ° UI) ### 2.1 Application Routes (`pages/`) | Module | āđ„āļŸāļĨāđŒ | Path | āļŦāļ™āđ‰āļēāļ—āļĩāđˆ | | :---------- | :------------------------- | :---------------------- | :--------------------------- | | **Public** | `index.vue` | `/` | āļŦāļ™āđ‰āļēāđāļĢāļ Landing Page | | | `browse/index.vue` | `/browse` | āļŦāļ™āđ‰āļēāļĢāļ§āļĄāļ„āļ­āļĢāđŒāļŠāļ—āļąāđ‰āļ‡āļŦāļĄāļ” | | | `browse/discovery.vue` | `/browse/discovery` | **āļĢāļ°āļšāļšāļ„āđ‰āļ™āļŦāļēāđāļĨāļ° Filter** | | | `course/[id].vue` | `/course/:id` | **āļŦāļ™āđ‰āļēāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ„āļ­āļĢāđŒāļŠ** | | **Auth** | `auth/login.vue` | `/auth/login` | āđ€āļ‚āđ‰āļēāļŠāļđāđˆāļĢāļ°āļšāļš | | | `auth/register.vue` | `/auth/register` | āļŠāļĄāļąāļ„āļĢāļŠāļĄāļēāļŠāļīāļāļœāļđāđ‰āđ€āļĢāļĩāļĒāļ™ | | **Student** | `dashboard/index.vue` | `/dashboard` | āđāļ”āļŠāļšāļ­āļĢāđŒāļ”āļ āļēāļžāļĢāļ§āļĄ | | | `dashboard/my-courses.vue` | `/dashboard/my-courses` | āļ„āļ­āļĢāđŒāļŠāļ‚āļ­āļ‡āļ‰āļąāļ™ | | | `classroom/learning.vue` | `/classroom/learning` | **āļŦāđ‰āļ­āļ‡āđ€āļĢāļĩāļĒāļ™ (Video Player)** | | | `classroom/quiz.vue` | `/classroom/quiz` | āļāļēāļĢāļŠāļ­āļšāļ§āļąāļ”āļœāļĨ | ### 2.2 Reusable Components (`components/`) - **Layout:** `AppHeader.vue`, `AppSidebar.vue`, `MobileNav.vue` (Navigation āļŦāļĨāļąāļ) - **Common:** `FormInput.vue` (āļŸāļ­āļĢāđŒāļĄ), `LoadingSpinner.vue` (āļŠāļ–āļēāļ™āļ°āđ‚āļŦāļĨāļ”), `LanguageSwitcher.vue` (āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļ āļēāļĐāļē) - **Modules:** `CourseCard.vue` (āđāļŠāļ”āļ‡āļœāļĨāļ„āļ­āļĢāđŒāļŠāđāļšāļš Grid), `UserAvatar.vue` (āļĢāļđāļ›āđ‚āļ›āļĢāđ„āļŸāļĨāđŒ) --- ## 🧠 3. Logic & Data Layer (Composables + API) āļĢāļ§āļšāļĢāļ§āļĄ Logic āđāļĨāļ° API Endpoint āļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āđ„āļ§āđ‰āđƒāļ™āļ—āļĩāđˆāđ€āļ”āļĩāļĒāļ§āđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāđ€āļ‚āđ‰āļēāđƒāļˆāļ‡āđˆāļēāļĒ ### 3.1 `useAuth.ts` (Authentication & User) āļˆāļąāļ”āļāļēāļĢāļŠāļ–āļēāļ™āļ°āļœāļđāđ‰āđƒāļŠāđ‰, āļĨāđ‡āļ­āļāļ­āļīāļ™, āđāļĨāļ°āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāđˆāļ§āļ™āļ•āļąāļ§ - **Endpoints:** - `GET /api/user/me`: āļ”āļķāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ‚āļ›āļĢāđ„āļŸāļĨāđŒ (Cached) - `PUT /api/user/me`: āļ­āļąāļ›āđ€āļ”āļ•āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāđˆāļ§āļ™āļ•āļąāļ§ - `POST /api/user/change-password`: āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļĢāļŦāļąāļŠāļœāđˆāļēāļ™ ### 3.2 `useCourse.ts` (Course & Learning) āļŦāļąāļ§āđƒāļˆāļŦāļĨāļąāļāļ‚āļ­āļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļāļēāļĢāļŠāļ­āļ™ āļ•āļąāđ‰āļ‡āđāļ•āđˆāļŦāļ™āđ‰āļēāļĢāļēāļĒāļāļēāļĢāļ„āļ­āļĢāđŒāļŠāļˆāļ™āļ–āļķāļ‡āļŦāđ‰āļ­āļ‡āđ€āļĢāļĩāļĒāļ™ - **Course Catalog Endpoints:** - `GET /api/courses`: āļ”āļķāļ‡āļ„āļ­āļĢāđŒāļŠāļ—āļąāđ‰āļ‡āļŦāļĄāļ” (Cached) - `GET /api/courses/{id}`: āļ”āļķāļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ„āļ­āļĢāđŒāļŠ - `POST /api/students/courses/{id}/enroll`: āļĨāļ‡āļ—āļ°āđ€āļšāļĩāļĒāļ™āđ€āļĢāļĩāļĒāļ™ - **Classroom Endpoints:** - `GET /api/students/courses`: āļ”āļķāļ‡ "āļ„āļ­āļĢāđŒāļŠāļ‚āļ­āļ‡āļ‰āļąāļ™" - `GET /api/students/courses/{id}/learn`: āļ”āļķāļ‡āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļšāļ—āđ€āļĢāļĩāļĒāļ™ (Syllabus) - `GET /api/students/courses/{id}/lessons/{lessonId}`: āļ”āļķāļ‡āļ§āļīāļ”āļĩāđ‚āļ­āđ€āļ™āļ·āđ‰āļ­āļŦāļē - `POST /api/students/lessons/{lessonId}/progress`: āļšāļąāļ™āļ—āļķāļāđ€āļ§āļĨāļēāđ€āļĢāļĩāļĒāļ™ (Video Progress) ### 3.3 `useCategory.ts` & Utilities - `fetchCategories`: āļ”āļķāļ‡āļŦāļĄāļ§āļ”āļŦāļĄāļđāđˆ (`GET /api/categories`) āļŠāļģāļŦāļĢāļąāļšāļ•āļąāļ§āļāļĢāļ­āļ‡āļŦāļ™āđ‰āļē Discovery - `useFormValidation.ts`: āļĢāļ§āļĄ RegEx āļŠāļģāļŦāļĢāļąāļšāļ•āļĢāļ§āļˆāļŠāļ­āļš Email, Password āđ€āļšāļ·āđ‰āļ­āļ‡āļ•āđ‰āļ™ --- ## ðŸŽĻ 4. Design System & Theming ### 4.1 Dark Mode Strategy āļĢāļ°āļšāļšāđƒāļŠāđ‰ **Class-based Dark Mode** āļ‚āļ­āļ‡ Tailwind āļœāļŠāļĄāļāļąāļš CSS Variables: - **Backgrounds:** `bg-slate-50` (Light) vs `bg-slate-900` (Dark) - **Text Visibility Rule (New):** - āđƒāļŠāđ‰ **Utility Classes** āļĢāļ°āļšāļļāļŠāļĩāļ•āļĢāļ‡āđ† āđāļ—āļ™āļ•āļąāļ§āđāļ›āļĢ CSS āđƒāļ™āļˆāļļāļ”āļŠāļģāļ„āļąāļāđ€āļžāļ·āđˆāļ­āļ›āđ‰āļ­āļ‡āļāļąāļ™āļŠāļĩāđ€āļžāļĩāđ‰āļĒāļ™ - Ex: `

` - **Fonts:** Prompt (Headings), Sarabun (Body) --- ## 📊 5. Project Status (āļŠāļ–āļēāļ™āļ°āļāļēāļĢāļžāļąāļ’āļ™āļē) ### ✅ Completed Updates (āļŠāļīāđˆāļ‡āļ—āļĩāđˆāļ—āļģāđ€āļŠāļĢāđ‡āļˆāđāļĨāđ‰āļ§) 1. **Code Cleanup:** āļĨāļšāđ„āļŸāļĨāđŒāļ‚āļĒāļ° (Mock Data pages) āļ­āļ­āļāļˆāļēāļāļĢāļ°āļšāļš 2. **Theme Refinement:** āđāļāđ‰āđ„āļ‚āļ›āļąāļāļŦāļēāļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨ Text Color āđƒāļ™ Light/Dark Mode āļŦāļ™āđ‰āļē `learning.vue` āđāļĨāļ° `discovery.vue` āđ€āļŠāļĢāđ‡āļˆāļŠāļĄāļšāļđāļĢāļ“āđŒ 3. **API Integration:** āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļĢāļ°āļšāļšāļŦāļĨāļąāļāļ„āļĢāļšāļ–āđ‰āļ§āļ™ (Auth, Course, Enroll, Learning Progress) 4. **Localization:** āļĢāļ­āļ‡āļĢāļąāļšāļ āļēāļĐāļēāđ„āļ—āļĒāļŠāļĄāļšāļđāļĢāļ“āđŒāļžāļĢāđ‰āļ­āļĄāļ„āļģāļ­āļ˜āļīāļšāļēāļĒāđ‚āļ„āđ‰āļ” ### ïŋ― Pending / Future Work (āļŠāļīāđˆāļ‡āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļ—āļģāļ•āđˆāļ­) 1. **Quiz System:** āļŦāļ™āđ‰āļē Quiz āļĒāļąāļ‡āļĢāļ­āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­ API (`/api/quizzes`) 2. **Certificates:** āļĢāļ°āļšāļšāļ”āļēāļ§āļ™āđŒāđ‚āļŦāļĨāļ”āđƒāļšāļ›āļĢāļ°āļāļēāļĻāļ™āļĩāļĒāļšāļąāļ•āļĢ 3. **Advanced Features:** Upload āļĢāļđāļ›āđ‚āļ›āļĢāđ„āļŸāļĨāđŒāļˆāļĢāļīāļ‡, āļĢāļ°āļšāļš Reviews/Rating āļ„āļ­āļĢāđŒāļŠāđ€āļĢāļĩāļĒāļ™ ---