STRAPS_LOCALHOST/DOKUMENTASI_APP_FOLDER.md

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
  • 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


  • 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