10 KiB
10 KiB
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 instancebrowser.ts- Browser-compatible clientmodels.ts- Type definitions untuk database modelsenums.ts- Enum definitionscommonInputTypes.ts- Input type definitionslibquery_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
/libdi root project - Isi: Helper functions dan utility libraries
- Contoh isi:
pose/HARCore.ts- Human Activity Recognition corepose/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.)
- HTML structure (
- 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 diaksesroute.ts→ API endpointlayout.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
- AI Form Analysis: Real-time pose detection dan rep counting
- Per-Rep Tracking: Detail skor form untuk setiap repetisi
- Round System: Exercise grouping untuk efisiensi workout builder
- 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
- Jangan edit folder
generated/secara manual - Run
prisma generatesetelah schema change - API routes mengikuti REST convention
- Per-rep data disimpan dalam struktur nested di recap
- Feedback text di-capture frame-by-frame lalu dianalisa untuk dominan message