# Dokumentasi File Root Level - Straps Dev ## Gambaran Umum File-file di root level workspace berisi konfigurasi project, dependencies, build settings, dan utility scripts untuk development dan production. --- ## 📁 Struktur File Root ``` straps-dev/ ├── .env # Environment variables (secrets) ├── .gitignore # Git ignore rules ├── README.md # Project documentation ├── package.json # NPM dependencies & scripts ├── package-lock.json # Locked dependency versions ├── tsconfig.json # TypeScript compiler config ├── next.config.ts # Next.js configuration ├── postcss.config.mjs # PostCSS (Tailwind) config ├── eslint.config.mjs # ESLint linting rules ├── prisma.config.ts # Prisma configuration ├── next-env.d.ts # Next.js type definitions (auto-generated) ├── tsconfig.tsbuildinfo # TypeScript incremental build cache (auto-generated) ├── debug_menu.js # Quick database inspection script ├── integrated.js # Legacy fall detection + rehab system (100KB!) ├── exercise_rules.pdf # Exercise configuration documentation └── DOKUMENTASI_*.md # Project documentation files (generated) ``` --- ## 🔧 Configuration Files ### **1. `package.json`** ⭐ **Path**: `/package.json` **Fungsi**: NPM package configuration - dependencies, scripts, metadata **Size**: ~1.3 KB #### **Project Metadata**: ```json { "name": "straps-dev", "version": "0.1.0", "private": true } ``` #### **NPM Scripts**: ```json { "scripts": { "dev": "concurrently \"next dev --webpack\" \"prisma studio\"", "build": "prisma generate && next build --webpack", "start": "next start", "lint": "eslint", "db:studio": "prisma studio" } } ``` **Command Breakdown**: | Command | Description | Use Case | |---------|-------------|----------| | `npm run dev` | Start dev server + Prisma Studio | Development (hot reload) | | `npm run build` | Generate Prisma Client + Build production | Pre-deployment | | `npm start` | Run production server | Production mode | | `npm run lint` | Run ESLint | Code quality check | | `npm run db:studio` | Open Prisma Studio only | Database management | **Key Features**: - ✅ `concurrently` runs dev server + Prisma Studio simultaneously - ✅ `--webpack` flag for webpack mode (vs Turbopack) - ✅ Prisma Client auto-generation before build #### **Dependencies** (Production): ```json { "@mediapipe/pose": "^0.5.1675469404", // Legacy pose detection "@mediapipe/tasks-vision": "^0.10.22", // MediaPipe AI "@prisma/client": "^6.19.1", // Database ORM "@tensorflow-models/pose-detection": "^2.1.3", // TensorFlow pose "@tensorflow/tfjs": "^4.22.0", // TensorFlow.js "axios": "^1.13.2", // HTTP client "bcryptjs": "^3.0.3", // Password hashing "framer-motion": "^12.23.26", // Animations "lucide-react": "^0.562.0", // Icon library "next": "^16.1.1", // Next.js framework "next-auth": "^5.0.0-beta.30", // Authentication "react": "^19.2.3", // React 19 "zod": "^4.2.1" // Validation } ``` **Tech Stack**: - **Frontend**: React 19 + Next.js 16 - **AI**: MediaPipe + TensorFlow.js - **Database**: PostgreSQL + Prisma - **Auth**: NextAuth v5 (beta) - **Styling**: Tailwind CSS v4 #### **DevDependencies**: ```json { "@tailwindcss/postcss": "^4", // Tailwind v4 "@types/node": "^20", // Node types "@types/react": "^19", // React types "concurrently": "^9.2.1", // Run multiple commands "eslint": "^9", // Linting "tsx": "^4.21.0", // TypeScript executor "typescript": "^5" // TypeScript compiler } ``` #### **Prisma Seed Config**: ```json { "prisma": { "seed": "npx tsx prisma/seed.ts" } } ``` - Auto-runs `seed.ts` after `prisma migrate reset` --- ### **2. `next.config.ts`** ⚙️ **Path**: `/next.config.ts` **Fungsi**: Next.js build and webpack configuration **Size**: ~1.2 KB #### **Code**: ```typescript const nextConfig = { // Transpile ESM packages to CommonJS transpilePackages: [ "@tensorflow-models/pose-detection", "@/app/generated/client", ], experimental: { esmExternals: "loose", // Allow mixing CJS/ESM }, webpack: (config: any) => { // Alias @mediapipe/pose to custom shim const path = require("path"); config.resolve.alias["@mediapipe/pose"] = path.resolve( __dirname, "lib/mediapipe-shim.js", ); // Extension alias for JS/TS interop config.resolve.extensionAlias = { ".js": [".ts", ".tsx", ".js", ".jsx"], }; return config; }, // CORS headers for API routes async headers() { return [ { source: "/api/:path*", headers: [ { key: "Access-Control-Allow-Origin", value: "*" }, { key: "Access-Control-Allow-Methods", value: "GET, POST, PUT, DELETE, OPTIONS", }, { key: "Access-Control-Allow-Headers", value: "Content-Type, Authorization", }, ], }, ]; }, }; ``` **Key Features**: 1. **MediaPipe Shim**: Custom polyfill untuk resolve MediaPipe compatibility 2. **ESM Transpilation**: Convert pose-detection library to CommonJS 3. **CORS Enabled**: Allow external API requests 4. **Extension Alias**: Support `.ts` imports dengan `.js` extension **Why Needed**: - MediaPipe has module resolution issues di browser - Pose detection library is ESM-only, Next.js needs CommonJS - API routes accessible dari external domains --- ### **3. `tsconfig.json`** 📘 **Path**: `/tsconfig.json` **Fungsi**: TypeScript compiler configuration **Size**: ~663 bytes #### **Code**: ```json { "compilerOptions": { "target": "ES2017", // Compile to ES2017 (async/await support) "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, // Allow .js files "skipLibCheck": true, // Skip type checking node_modules "strict": true, // Strict type checking "noEmit": true, // No JS output (Next.js handles compilation) "esModuleInterop": true, "module": "esnext", "moduleResolution": "node", "resolveJsonModule": true, // Import JSON files "isolatedModules": true, // Each file as separate module "jsx": "react-jsx", // React 19 JSX transform "incremental": true, // Faster rebuilds "plugins": [{ "name": "next" }], // Next.js TypeScript plugin "paths": { "@/*": ["./*"] // Path alias: @/lib → /lib } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "exclude": ["node_modules"] } ``` **Important Settings**: - ✅ `strict: true` - Maximum type safety - ✅ `noEmit: true` - Next.js handles compilation - ✅ `paths: { "@/*": ["./*"] }` - Import shorthand - ✅ `incremental: true` - Faster rebuilds (uses `.tsbuildinfo`) **Path Alias Usage**: ```typescript // Instead of: import { HARCore } from "../../../lib/pose/HARCore"; // Use: import { HARCore } from "@/lib/pose/HARCore"; ``` --- ### **4. `postcss.config.mjs`** 🎨 **Path**: `/postcss.config.mjs` **Fungsi**: PostCSS configuration untuk Tailwind CSS v4 **Size**: ~94 bytes #### **Code**: ```javascript const config = { plugins: { "@tailwindcss/postcss": {}, }, }; export default config; ``` **Purpose**: - Enable Tailwind CSS v4 processing - Auto-process `globals.css` dengan Tailwind directives **Tailwind v4 Changes**: - No more `tailwind.config.js` - All config via PostCSS - Faster build times --- ### **5. `eslint.config.mjs`** ✅ **Path**: `/eslint.config.mjs` **Fungsi**: ESLint code quality rules **Size**: ~465 bytes #### **Code**: ```javascript import { defineConfig, globalIgnores } from "eslint/config"; import nextVitals from "eslint-config-next/core-web-vitals"; import nextTs from "eslint-config-next/typescript"; const eslintConfig = defineConfig([ ...nextVitals, // Next.js best practices ...nextTs, // TypeScript rules globalIgnores([".next/**", "out/**", "build/**", "next-env.d.ts"]), ]); export default eslintConfig; ``` **Rules Applied**: 1. **Next.js Core Web Vitals**: Performance, accessibility, SEO 2. **TypeScript**: Type-aware linting 3. **Ignores**: Build artifacts, generated files **Run Lint**: ```bash npm run lint ``` --- ### **6. `prisma.config.ts`** 🗄️ **Path**: `/prisma.config.ts` **Fungsi**: Prisma ORM configuration (alternative to `schema.prisma` for programmatic config) **Size**: ~527 bytes #### **Code**: ```typescript import "dotenv/config"; import { defineConfig } from "prisma/config"; export default defineConfig({ schema: "prisma/schema.prisma", migrations: { path: "prisma/migrations", }, datasource: { url: process.env["DATABASE_URL"]!, }, // @ts-expect-error - seed is valid at runtime seed: { command: "npx tsx prisma/seed.ts", }, }); ``` **Note**: Ini adalah **optional config file** - Prisma masih menggunakan `schema.prisma` sebagai source of truth - File ini untuk advanced configuration (custom generators, etc.) - Tidak wajib untuk basic usage --- ### **7. `.gitignore`** 🚫 **Path**: `/.gitignore` **Fungsi**: Git ignore rules untuk exclude files dari version control **Size**: ~503 bytes #### **Key Exclusions**: ```gitignore # Dependencies /node_modules # Build outputs /.next/ /out/ /build # Environment variables .env* # TypeScript *.tsbuildinfo next-env.d.ts # Prisma generated /app/generated/prisma ``` **Why**: - ✅ `node_modules` - Too large, regenerate via `npm install` - ✅ `.next/` - Build cache, regenerate on `npm run dev` - ✅ `.env` - **CRITICAL**: Contains secrets (DATABASE_URL, API keys) - ✅ `tsbuildinfo` - TypeScript cache, auto-regenerated **Security**: - ❌ **NEVER** commit `.env` to Git - ✅ Provide `.env.example` with placeholder values --- ###**8. `.env`** 🔐 **Path**: `/.env` **Fungsi**: Environment variables (secrets, config) **Size**: ~123 bytes **Status**: ⚠️ **CONFIDENTIAL** - Not shown in docs **Expected Contents**: ```bash # Database DATABASE_URL="postgresql://user:pass@localhost:5432/straps_db" # NextAuth (if used) NEXTAUTH_SECRET="your-secret-key" NEXTAUTH_URL="http://localhost:3000" # API Keys (if any) NEXT_PUBLIC_API_URL="http://localhost:3000/api" ``` **Best Practices**: 1. ✅ Use `NEXT_PUBLIC_` prefix for client-side variables 2. ✅ Create `.env.example` dengan placeholder values 3. ❌ Never commit `.env` to Git 4. ✅ Use different `.env` untuk dev/staging/production --- ## 📄 Auto-Generated Files ### **9. `next-env.d.ts`** (Auto-Generated) **Path**: `/next-env.d.ts` **Fungsi**: Next.js TypeScript type definitions **Size**: ~251 bytes **Content**: ```typescript /// /// // NOTE: This file should not be edited // see https://nextjs.org/docs for more information. ``` **Purpose**: - Enable TypeScript autocomplete untuk Next.js APIs - Auto-regenerated oleh Next.js - ❌ **DO NOT EDIT** --- ### **10. `tsconfig.tsbuildinfo`** (Auto-Generated) **Path**: `/tsconfig.tsbuildinfo` **Fungsi**: TypeScript incremental build cache **Size**: **~170 KB** (Large!) **Purpose**: - Speed up TypeScript compilation - Stores type information dari previous builds - Safe to delete (will regenerate) **When to Delete**: ```bash # If TypeScript acting weird rm tsconfig.tsbuildinfo npm run dev # Will regenerate ``` --- ## 🛠️ Utility Scripts ### **11. `debug_menu.js`** 🐛 **Path**: `/debug_menu.js` **Fungsi**: Quick script untuk inspect latest menu dari database **Size**: ~706 bytes #### **Code**: ```javascript const { PrismaClient } = require("./app/generated/client"); const prisma = new PrismaClient(); async function main() { const menus = await prisma.training_menus.findMany({ orderBy: { id: "desc" }, take: 1, }); if (menus.length > 0) { console.log("Latest Menu:", JSON.stringify(menus[0], null, 2)); const ex = menus[0].exercises; if (typeof ex === "string") { console.log("Exercises (parsed):", JSON.parse(ex)); } else { console.log("Exercises (raw):", ex); } } else { console.log("No menus found."); } } main() .catch((e) => console.error(e)) .finally(async () => await prisma.$disconnect()); ``` **How to Run**: ```bash node debug_menu.js ``` **Output**: ```json Latest Menu: { "id": 1, "name": "Upper Body Day 1", "exercises": [ { "name": "Bicep Curl", "reps": 10, "weight": 15 } ], ... } ``` **Use Cases**: - ✅ Verify menu saved correctly - ✅ Debug JSON parsing issues - ✅ Quick database inspection tanpa Prisma Studio --- ### **12. `integrated.js`** 🏋️ (Legacy) **Path**: `/integrated.js` **Fungsi**: Legacy fall detection + rehabilitation exercise system **Size**: **~100 KB** (Very Large!) **Status**: ⚠️ **DEPRECATED** - Superseded by TypeScript implementation **Content**: 3,380 lines of JavaScript - Fall detection using MediaPipe - 7 rehabilitation exercises - ROI (Region of Interest) for sleeping detection - Firebase integration - Telegram alerts - Form accuracy scoring - Rehab mode workout queue **Why So Large**: - Contains entire UI logic - Embedded exercise Config - Firebase SDK imports - Telegram integration - Canvas drawing functions **Current Usage**: Likely **NOT USED** - Modern app uses `/lib/pose/` TypeScript modules - Check if referenced anywhere: ```bash grep -r "integrated.js" app/ ``` **Recommendation**: - ✅ Archive to `/legacy/` folder - ✅ Or delete if not referenced --- ### **13. `exercise_rules.pdf`** 📖 **Path**: `/exercise_rules.pdf` **Fungsi**: Documentation of exercise configuration rules **Size**: ~24 KB **Content** (Likely): - Explanation of `ExerciseRules.ts` config - Angle thresholds untuk setiap exercise - Form validation rules - Diagrams/illustrations **Use Case**: - Reference untuk non-technical stakeholders - Onboarding documentation - Exercise configuration guide **Recommendation**: - Move to `/docs/` folder for better organization --- ## 📚 Documentation Files ### **14-18. `DOKUMENTASI_*.md`** 📝 **Path**: `/DOKUMENTASI_*.md` **Files**: 1. `DOKUMENTASI_APP_FOLDER.md` (~10 KB) 2. `DOKUMENTASI_LIB_FOLDER.md` (~17 KB) 3. `DOKUMENTASI_PRISMA_FOLDER.md` (~17 KB) 4. `DOKUMENTASI_PUBLIC_FOLDER.md` (~12 KB) 5. `DOKUMENTASI_SCRIPTS_FOLDER.md` (~16 KB) **Fungsi**: Project documentation dalam Bahasa Indonesia **Total Size**: ~72 KB **Created**: Recently generated for project documentation **Content**: Comprehensive guides untuk each major folder --- ### **19. `README.md`** 📘 **Path**: `/README.md` **Fungsi**: Project README (default Next.js template) **Size**: ~1.5 KB **Content**: ```markdown This is a Next.js project bootstrapped with create-next-app. ## Getting Started npm run dev Open http://localhost:3000 ## Learn More - Next.js Documentation - Learn Next.js tutorial ## Deploy on Vercel [Link to Vercel deployment docs] ``` **Status**: ⚠️ **NEEDS UPDATE** **Recommendation**: Replace with custom README: ```markdown # Straps Fitness - AI-Powered Form Tracking ## Tech Stack - Next.js 16 + React 19 - PostgreSQL + Prisma - MediaPipe AI - Tailwind CSS v4 ## Quick Start \`\`\`bash npm install npm run dev \`\`\` ## Features - Real-time form tracking - Per-rep analysis - Coach-client management - Training recap dashboard [... more details ...] ``` --- ## 🔐 Security Checklist ### **✅ Safe to Commit**: - `package.json`, `package-lock.json` - `tsconfig.json` - `next.config.ts` - `postcss.config.mjs` - `eslint.config.mjs` - `.gitignore` - `README.md` - `DOKUMENTASI_*.md` ### **❌ NEVER Commit**: - `.env` - **Contains DATABASE_URL, secrets** - `node_modules/` - Too large - `.next/` - Build artifacts - `tsconfig.tsbuildinfo` - Cache file ### **⚠️ Sensitive Files**: - `integrated.js` - May contain hardcoded API keys/tokens - **Action**: Review before committing --- ## 📊 File Size Summary | File | Size | Status | Editable? | | ---------------------- | ---------- | ------- | ------------- | | `.env` | 123 B | Secret | ✅ (config) | | `.gitignore` | 503 B | Config | ✅ | | `postcss.config.mjs` | 94 B | Config | ⚠️ (rarely) | | `prisma.config.ts` | 527 B | Config | ⚠️ (optional) | | `eslint.config.mjs` | 465 B | Config | ✅ | | `tsconfig.json` | 663 B | Config | ✅ | | `debug_menu.js` | 706 B | Utility | ✅ | | `package.json` | 1.3 KB | Config | ✅ | | `next.config.ts` | 1.2 KB | Config | ✅ | | `README.md` | 1.5 KB | Docs | ✅ | | `next-env.d.ts` | 251 B | Auto | ❌ | | `exercise_rules.pdf` | 24 KB | Docs | ✅ | | `integrated.js` | **100 KB** | Legacy | ⚠️ (archive) | | `tsconfig.tsbuildinfo` | **170 KB** | Cache | ❌ | | `package-lock.json` | **293 KB** | Lock | ❌ (auto) | **Total Configurable**: ~40 KB **Total Auto-Generated**: ~460 KB --- ## 🚀 Common Workflows ### **Workflow 1: Fresh Setup** ```bash # Clone repo git clone [repo-url] cd straps-dev # Install dependencies npm install # Create .env cp .env.example .env # Edit .env dengan DATABASE_URL # Setup database npx prisma migrate dev npx prisma db seed # Start dev server npm run dev ``` --- ### **Workflow 2: Add New Dependency** ```bash # Add production dependency npm install [package-name] # Add dev dependency npm install -D [package-name] # Verify package.json updated git diff package.json ``` --- ### **Workflow 3: Production Build** ```bash # Generate Prisma Client + Build npm run build # Test production locally npm start # Deploy (example: Vercel) vercel deploy --prod ``` --- ### **Workflow 4: Update Dependencies** ```bash # Check outdated packages npm outdated # Update specific package npm update [package-name] # Update all (careful!) npm update # Test after update npm run build npm run dev ``` --- ## 💡 Troubleshooting ### **Issue**: `npm install` fails ```bash Error: ENOENT: no such file or directory ``` **Solution**: ```bash # Clear npm cache npm cache clean --force # Delete node_modules rm -rf node_modules package-lock.json # Reinstall npm install ``` --- ### **Issue**: TypeScript errors after update ```bash Error: Cannot find module '@/lib/...' ``` **Solution**: ```bash # Clear TS cache rm tsconfig.tsbuildinfo # Restart TS server (VSCode) Cmd/Ctrl + Shift + P → "TypeScript: Restart TS Server" ``` --- ### **Issue**: Next.js build errors ```bash Error: Module not found: @mediapipe/pose ``` **Solution**: ```bash # Check next.config.ts webpack alias # Verify file exists: lib/mediapipe-shim.js # Try clean build rm -rf .next npm run build ``` --- ### **Issue**: Prisma Client not found ```bash Error: Cannot find module '@prisma/client' ``` **Solution**: ```bash # Regenerate Prisma Client npx prisma generate # Verify generation ls app/generated/client/ ``` --- ## 📈 Maintenance Tips ### **Regular Tasks**: #### **Weekly**: - ✅ Run `npm outdated` to check dependency updates - ✅ Review `.env` for unused variables - ✅ Check `.gitignore` if adding new tools #### **Monthly**: - ✅ Update dependencies (major versions carefully) - ✅ Review `integrated.js` - still needed? - ✅ Clean up `debug_*.js` scripts #### **Before Deployment**: - ✅ `npm run lint` - No errors - ✅ `npm run build` - Build succeeds - ✅ Test production mode locally - ✅ Verify `.env.production` configured --- ## 🎯 Optimization Opportunities ### **1. Remove Unused Dependencies**: ```bash # Check bundle size npm run build # Analyze bundle npm install -D @next/bundle-analyzer # Identify unused packages npx depcheck ``` --- ### **2. Archive Legacy Code**: ```bash # Move to legacy folder mkdir legacy mv integrated.js legacy/ git commit -m "Archive legacy integrated.js" ``` --- ### **3. Update README**: - Replace boilerplate with project-specific content - Add architecture diagram - Document environment variables - Add troubleshooting guide --- ## ✅ Summary **Total Root Files**: 19 (excluding folders) **Categories**: - 🔧 **Configuration**: 9 files (package.json, tsconfig, etc.) - 📄 **Auto-Generated**: 3 files (next-env.d.ts, tsbuildinfo, package-lock.json) - 🛠️ **Utilities**: 2 files (debug_menu.js, integrated.js) - 📚 **Documentation**: 6 files (README.md, DOKUMENTASI\_\*.md, exercise_rules.pdf) - 🔐 **Secrets**: 1 file (.env) **Key Files to Know**: 1. `package.json` - Dependencies & scripts 2. `next.config.ts` - Build configuration 3. `tsconfig.json` - TypeScript settings 4. `.env` - **Secrets** (never commit!) 5. `.gitignore` - Version control rules **Total Size**: ~570 KB (mainly `package-lock.json` + cache files) **Security**: ✅ `.env` properly ignored from Git Dokumentasi ini mencakup semua file penting di root level! 🚀