diff --git a/CLAUDE.md b/CLAUDE.md index 43c994c..64f3176 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1 +1,233 @@ -@AGENTS.md +# 🚀 SeTrip Project Architecture Guide + +## 📌 Overview + +Dokumen ini menjelaskan standar struktur project untuk aplikasi **SeTrip** menggunakan Next.js (App Router). + +Tujuan: + +- Menjaga code tetap rapi & scalable +- Menghindari spaghetti code +- Memudahkan AI / developer kontribusi + +--- + +# 🧠 Core Principles + +1. **Feature-based structure (WAJIB)** +2. **Separation client vs server logic** +3. **Colocation (file dekat dengan fitur)** +4. **No over-engineering (keep it simple)** + +--- + +# 🏗️ Project Structure + +```bash +src/ +├── app/ # Next.js App Router (UI & routing) +│ ├── (public)/ # halaman publik +│ ├── (auth)/ # login/register +│ ├── trips/ # halaman trip +│ ├── create-trip/ +│ └── profile/ +│ +├── features/ # 🔥 Business logic per domain +│ ├── auth/ +│ ├── user/ +│ ├── trip/ +│ ├── booking/ +│ └── review/ +│ +├── server/ # 🔒 Backend-only logic +│ ├── db/ +│ ├── services/ +│ └── repositories/ +│ +├── components/ # reusable UI components +│ ├── ui/ +│ └── shared/ +│ +├── lib/ # helpers & utilities +│ ├── prisma.ts +│ ├── auth.ts +│ └── utils.ts +│ +├── hooks/ # custom react hooks +├── types/ # global types +└── config/ # config (env, constants) +``` + +--- + +# 📂 Folder Rules + +## 1. `/app` (Routing Layer) + +Hanya untuk: + +- page.tsx +- layout.tsx +- UI rendering +- data fetching ringan + +❌ DILARANG: + +- business logic +- query database langsung + +--- + +## 2. `/features` (Domain Layer) 🔥 + +Setiap fitur punya folder sendiri: + +```bash +features/trip/ +├── components/ +├── services/ +├── hooks/ +├── api/ +└── types.ts +``` + +Digunakan untuk: + +- business logic +- validation +- orchestration + +--- + +## 3. `/server` (Backend Layer) + +```bash +server/ +├── db/ +│ └── prisma.ts +├── services/ +│ └── trip.service.ts +└── repositories/ + └── trip.repo.ts +``` + +Digunakan untuk: + +- database access +- heavy logic +- internal backend + +--- + +## 4. `/components` + +```bash +components/ +├── ui/ # button, input, modal +└── shared/ # navbar, header +``` + +--- + +## 5. `/lib` + +Utility global: + +- prisma instance +- auth helper +- formatter + +--- + +# 🔄 Data Flow Standard + +```text +UI (app/) + ↓ +Feature (features/) + ↓ +Service (server/services) + ↓ +Repository (server/repositories) + ↓ +Database +``` + +--- + +# 🧩 Example Flow (Create Trip) + +1. User klik create trip (UI) +2. Call feature service +3. Feature validate data +4. Call server service +5. Service call repository +6. Repository insert ke database + +--- + +# ⚠️ Anti-Pattern (DILARANG) + +❌ Jangan: + +- query Prisma langsung di page.tsx +- campur UI + logic +- buat folder controller/service ala backend di Next.js +- over abstraction di awal + +--- + +# ✅ Best Practice + +✔ Gunakan: + +- Zod untuk validation +- Prisma untuk ORM +- Server Actions / API route secukupnya + +✔ Naming: + +- `trip.service.ts` +- `trip.repo.ts` +- `useTrip.ts` + +--- + +# 🚀 Development Phases + +## Phase 1 (MVP) + +- Auth +- Create Trip +- Join Trip + +## Phase 2 + +- Review +- Limit & validation + +## Phase 3 + +- Payment +- Organizer role + +--- + +# 🧠 Final Principle + +> Build fast → validate → refactor later + +Jangan terlalu fokus ke arsitektur sempurna di awal. + +--- + +# 📌 Notes for AI / Contributors + +- Ikuti struktur ini tanpa pengecualian +- Jangan membuat folder baru tanpa alasan jelas +- Semua fitur baru harus masuk ke `/features` +- Semua akses DB harus lewat `/server` + +--- + +**End of Document**