# Dokumentasi Struktur Folder `app/`

## Gambaran Umum

Folder `app/` adalah direktori utama aplikasi Next.js yang menggunakan App Router. Folder ini berisi semua halaman, API routes, dan komponen utama aplikasi pelatihan kebugaran "Straps".

---

## 📁 Struktur Direktori

### 1. **`api/` - API Routes**

Folder yang berisi semua endpoint backend untuk komunikasi antara client dan server.

#### **`api/auth/[...nextauth]/`**

- **Fungsi**: Menangani autentikasi pengguna menggunakan NextAuth.js
- **Endpoint**: `/api/auth/*`
- **Fitur**: Login, logout, session management

#### **`api/clients/`**

- **Fungsi**: Endpoint untuk mengelola data klien
- **Operasi**: CRUD operations untuk client data

#### **`api/coach/link-client/`**

- **File**: `route.ts`
- **Fungsi**: Menghubungkan pelatih (coach) dengan klien mereka
- **Method**: POST untuk membuat hubungan coach-client

#### **`api/logs/`**

- **File**: `route.ts`
- **Fungsi**: Mencatat dan mengambil log aktivitas training
- **Method**: GET (mengambil logs), POST (membuat log baru)

#### **`api/menus/`**

- **File**: `route.ts`
- **Fungsi**: Mengelola menu latihan (workout programs)
- **Method**: GET (semua menu), POST (buat menu baru)

##### **`api/menus/[id]/`**

- **File**: `route.ts`
- **Fungsi**: Operasi pada menu spesifik berdasarkan ID
- **Method**: GET (detail menu), PUT (update), DELETE (hapus)

#### **`api/recap/`**

- **File**: `route.ts`
- **Fungsi**: Menyimpan dan mengambil ringkasan latihan (training recap)
- **Method**: GET (semua recap), POST (simpan recap baru)
- **Data**: Termasuk skor form, detail per-rep, dan statistik latihan

##### **`api/recap/[id]/`**

- **File**: `route.ts`
- **Fungsi**: Mengakses recap latihan spesifik
- **Method**: GET (detail recap), DELETE (hapus recap)

#### **`api/register/`**

- **File**: `route.ts`
- **Fungsi**: Registrasi pengguna baru
- **Method**: POST untuk membuat akun baru (Coach atau Client)
- **Validasi**: Email unik, password hashing

#### **`api/status/`**

- **Fungsi**: Health check endpoint untuk monitoring aplikasi
- **Method**: GET untuk cek status server

#### **`api/users/`**

- **File**: `route.ts`
- **Fungsi**: Mengelola data pengguna
- **Method**: GET (daftar users), POST (buat user)

##### **`api/users/[id]/`**

- **File**: `route.ts`
- **Fungsi**: Operasi pada user spesifik
- **Method**: GET (detail user), PUT (update), DELETE (hapus)

---

### 2. **`client/` - Halaman Klien**

Folder untuk semua halaman yang diakses oleh pengguna dengan role "Client".

#### **`client/page.tsx`**

- **Route**: `/client`
- **Fungsi**: Dashboard utama klien
- **Fitur**:
  - Menampilkan program latihan yang ditugaskan
  - Tombol navigasi ke mode Training, Free Mode, dan Monitor
  - Informasi pelatih yang ditugaskan

#### **`client/free/`**

##### **`client/free/page.tsx`**

- **Route**: `/client/free`
- **Fungsi**: Mode latihan bebas (Personal Menu)
- **Fitur**:
  - Builder untuk membuat menu latihan custom
  - Sistem berbasis "Round" (Set grouping)
  - Pilihan exercise terbatas ke 7 latihan inti
  - Penyimpanan ke localStorage
  - Duplicate round untuk efisiensi

#### **`client/monitor/`**

##### **`client/monitor/page.tsx`**

- **Route**: `/client/monitor`
- **Fungsi**: Monitor real-time untuk form exercise
- **Fitur**:
  - Live camera feed dengan pose detection
  - Visual feedback untuk form quality
  - Counter repetisi real-time
  - Tidak ada target/assignment

#### **`client/training/`**

##### **`client/training/page.tsx`**

- **Route**: `/client/training`
- **Fungsi**: Mode latihan utama dengan program assigned
- **Fitur**:
  - AI-powered form tracking per rep
  - Automatic rep counting
  - Rest timer antar set
  - **Training Recap**:
    - Summary statistik (total sets, total reps)
    - Table detail per set dengan:
      - Form score average
      - Expandable per-rep breakdown
      - Grade labels (Excellent/Good/Fair/Needs Improvement)
      - Feedback text spesifik per rep (e.g., "Knees Inward")
  - Toggle antara Assigned Program dan Personal Menu
  - Reset functionality

---

### 3. **`coach/` - Halaman Pelatih**

Folder untuk semua halaman yang diakses oleh pengguna dengan role "Coach".

#### **`coach/dashboard/`**

##### **`coach/dashboard/page.tsx`**

- **Route**: `/coach/dashboard`
- **Fungsi**: Dashboard utama pelatih
- **Fitur**:
  - Daftar klien yang terhubung
  - Link Client functionality
  - Navigasi ke menu management

#### **`coach/menu/`**

Folder untuk manajemen menu latihan.

##### **`coach/menu/[id]/`**

- **Route**: `/coach/menu/[id]`
- **Fungsi**: Edit menu latihan yang sudah ada
- **Fitur**:
  - Form editor untuk menu details
  - Exercise composer dengan round system
  - Preview menu structure
  - Update dan delete operations

##### **`coach/menu/new/`**

- **File**: `page.tsx`
- **Route**: `/coach/menu/new`
- **Fungsi**: Membuat menu latihan baru
- **Fitur**:
  - Round-based exercise builder
  - Input untuk:
    - Nama menu
    - Target reps per exercise
    - Weight (beban)
    - Rest time
  - Pilihan 7 exercise core
  - Duplicate round
  - Group sets by exercise
  - Auto-save to database

#### **`coach/recap/`**

##### **`coach/recap/[id]/`**

- **Route**: `/coach/recap/[id]`
- **Fungsi**: Melihat detail recap latihan klien
- **Fitur**:
  - Visualisasi statistik klien
  - Form quality analysis
  - Historical performance tracking

---

### 4. **`debug/`**

- **Fungsi**: Halaman untuk debugging dan testing
- **Status**: Development/testing only
- **Akses**: Biasanya disabled di production

---

### 5. **`generated/` - Prisma Client**

Folder yang di-generate otomatis oleh Prisma ORM.

#### **`generated/client/`**

- **File-file utama**:
  - `client.ts` - Prisma Client instance
  - `browser.ts` - Browser-compatible client
  - `models.ts` - Type definitions untuk database models
  - `enums.ts` - Enum definitions
  - `commonInputTypes.ts` - Input type definitions
  - `libquery_engine-*.so.node` - Native query engine binary

- **Folder `internal/`**: Internal Prisma helpers
- **Folder `models/`**: Model type definitions

**PENTING**: ❌ Jangan edit manual, akan di-regenerate saat `prisma generate`

---

### 6. **`lib/` (Symlink)**

- **Fungsi**: Symlink ke `/lib` di root project
- **Isi**: Helper functions dan utility libraries
- **Contoh isi**:
  - `pose/HARCore.ts` - Human Activity Recognition core
  - `pose/RehabCore.ts` - Exercise recognition dan rep counting
  - Form analysis algorithms

---

### 7. **`login/`**

- **File**: Kemungkinan `page.tsx` (route file)
- **Route**: `/login`
- **Fungsi**: Halaman login untuk semua pengguna
- **Fitur**:
  - Form email dan password
  - Authentication via NextAuth
  - Redirect ke dashboard sesuai role

---

### 8. **`register/`**

- **File**: `page.tsx`
- **Route**: `/register`
- **Fungsi**: Halaman registrasi pengguna baru
- **Fitur**:
  - Form input: nama, email, password
  - Pilihan role (Coach/Client)
  - Validasi input
  - Submit ke `/api/register`

---

## 📄 File Konfigurasi Root

### **`favicon.ico`**

- **Fungsi**: Icon aplikasi yang muncul di browser tab
- **Format**: ICO file
- **Size**: 25.9 KB

### **`globals.css`**

- **Fungsi**: Global stylesheet untuk seluruh aplikasi
- **Isi**:
  - Reset CSS
  - Tailwind CSS directives (@tailwind base, components, utilities)
  - Custom color variables
  - Global typography styles
- **Size**: ~773 bytes

### **`layout.tsx`**

- **Fungsi**: Root layout component (App-wide wrapper)
- **Fitur**:
  - HTML structure (`<html>`, `<body>`)
  - Metadata configuration
  - Font loading (biasanya)
  - Global providers (Session, Theme, etc.)
- **Applies to**: Semua route di aplikasi
- **Size**: ~757 bytes

### **`page.tsx`**

- **Route**: `/` (Homepage)
- **Fungsi**: Landing page aplikasi
- **Fitur**:
  - Welcome screen
  - Login/Register CTA
  - Informasi aplikasi
  - Redirect logic berdasarkan auth status
- **Size**: ~15 KB

---

## 🔑 Poin Penting untuk Dokumentasi

### **Routing Convention (Next.js App Router)**

- `page.tsx` → Halaman yang dapat diakses
- `route.ts` → API endpoint
- `layout.tsx` → Layout wrapper
- `[id]/` → Dynamic route parameter
- `[...slug]/` → Catch-all route

### **Role-Based Access**

- `/client/*` → Hanya untuk role "Client"
- `/coach/*` → Hanya untuk role "Coach"
- `/api/*` → Backend endpoints (internal)

### **Key Features**

1. **AI Form Analysis**: Real-time pose detection dan rep counting
2. **Per-Rep Tracking**: Detail skor form untuk setiap repetisi
3. **Round System**: Exercise grouping untuk efisiensi workout builder
4. **Training Recap**: Dashboard komprehensif pasca-latihan

### **Tech Stack**

- **Framework**: Next.js 16 (App Router)
- **Database**: PostgreSQL via Prisma ORM
- **Auth**: NextAuth.js
- **UI**: TailwindCSS
- **AI**: MediaPipe Pose Landmarker
- **Language**: TypeScript

---

## 📊 Diagram Struktur

```
app/
├── api/                    # Backend Endpoints
│   ├── auth/
│   ├── coach/
│   ├── logs/
│   ├── menus/
│   ├── recap/
│   ├── register/
│   └── users/
├── client/                 # Client Dashboard & Features
│   ├── free/              # Personal Menu Builder
│   ├── monitor/           # Live Form Monitor
│   ├── training/          # Assigned Training Mode
│   └── page.tsx           # Client Dashboard
├── coach/                  # Coach Dashboard & Tools
│   ├── dashboard/
│   ├── menu/
│   └── recap/
├── generated/             # Prisma Auto-Generated (DO NOT EDIT)
├── lib/                   # Utilities (Symlink)
├── login/                 # Login Page
├── register/              # Registration Page
├── favicon.ico
├── globals.css            # Global Styles
├── layout.tsx             # Root Layout
└── page.tsx               # Homepage
```

---

## 💡 Tips Maintenance

1. **Jangan edit** folder `generated/` secara manual
2. **Run** `prisma generate` setelah schema change
3. **API routes** mengikuti REST convention
4. **Per-rep data** disimpan dalam struktur nested di recap
5. **Feedback text** di-capture frame-by-frame lalu dianalisa untuk dominan message
