PojokSantri.ID adalah marketplace cohort-based untuk pembelajaran ngaji online di Indonesia. Platform ini menghubungkan santri dengan ustadz terverifikasi melalui program berbasis batch, jadwal, kapasitas, harga, pendaftaran, dan konfirmasi pembayaran manual.
Status proyek: Phase 1 MVP Alignment. Sumber kebenaran produk dan teknis saat ini berada di specs/PojokSantriID-PRD-v1.1.md dan specs/PojokSantriID-TechStack-v1.1.md.
- Fitur Utama MVP
- Tech Stack
- Prasyarat
- Instalasi Lokal
- Menjalankan Aplikasi
- Struktur Project
- Arsitektur Aplikasi
- Domain dan Database
- Environment Variables
- Command yang Tersedia
- Testing dan Quality Check
- Development Workflow
- Release Automation
- Deployment
- Troubleshooting
- Roadmap Singkat
- Kontribusi
- Lisensi
- Credits
- Marketplace program ngaji online: listing program, detail program, batch, jadwal, kapasitas, dan harga.
- Profil ustadz publik: informasi ustadz dan status verifikasi admin.
- Role-based access: santri, ustadz, dan admin.
- Auth email/password: autentikasi awal berbasis session Laravel.
- Dashboard admin: kelola data utama, verifikasi ustadz, dan konfirmasi pembayaran manual.
- Ustadz onboarding: ustadz mengisi profil dan menunggu approval admin.
- Enrollment santri: santri mendaftar batch program yang tersedia.
- Manual bank transfer: pembayaran MVP melalui transfer bank dan konfirmasi oleh admin.
| Area | Teknologi |
|---|---|
| Backend | Laravel 13, PHP 8.3+ |
| Frontend | Inertia React v3, React 19 |
| Styling | Tailwind CSS v4 |
| Bundler | Vite |
| Route helper | Laravel Wayfinder |
| Database MVP | MySQL |
| Database lokal starter | SQLite via .env.example |
| Auth | Laravel session auth |
| ORM | Eloquent |
| Testing | Pest 4, PHPUnit 12 |
| Formatter | Laravel Pint, Prettier |
| Linter | ESLint |
| Release | Semantic Release + Conventional Commits |
- PHP 8.3 atau lebih baru.
- Composer.
- Node.js 22 atau lebih baru.
- npm.
- MySQL untuk target MVP, atau SQLite untuk setup lokal cepat mengikuti
.env.example. - Laravel Herd direkomendasikan untuk macOS local development.
git clone https://github.com/ryansutrisno/suntree.git
cd suntreecomposer installnpm installcp .env.example .env
php artisan key:generateUntuk setup lokal cepat, .env.example sudah memakai SQLite:
DB_CONNECTION=sqliteUntuk mengikuti target MVP, gunakan MySQL:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=pojoksantri
DB_USERNAME=root
DB_PASSWORD=php artisan migrate --seednpm run buildProject menyediakan script Composer untuk setup awal:
composer run setupScript ini menjalankan install dependency, membuat .env, generate app key, migrasi database, install npm package, dan build asset.
Laravel Herd otomatis menyajikan aplikasi di domain berbasis nama folder, misalnya:
http://suntree.test
Jalankan Vite saat mengembangkan frontend:
npm run devcomposer run devScript ini menjalankan server Laravel, queue listener, Laravel Pail, dan Vite secara bersamaan.
├── app/ # Kode Laravel: model, controller, middleware, provider
├── bootstrap/ # Bootstrap Laravel
├── config/ # Konfigurasi aplikasi
├── database/ # Migration, factory, seeder
├── public/ # Public entry point dan asset publik
├── resources/
│ ├── css/ # CSS aplikasi
│ └── js/ # Inertia React pages, layouts, components
├── routes/ # Web, console, auth routes
├── specs/ # PRD dan dokumen tech stack PojokSantri.ID
├── tests/ # Pest tests
├── .github/workflows/ # CI, lint, dan release workflow
├── composer.json # Dependency dan script PHP/Laravel
└── package.json # Dependency dan script frontend
PojokSantri.ID menggunakan Laravel modular monolith dengan Inertia React. Pendekatan ini dipilih agar MVP cepat dibangun tanpa kompleksitas API-first, microservice, Redis, WebSocket, atau monorepo.
Browser
↓
React 19 + Inertia React v3 + Tailwind CSS v4
↓
Laravel Web Routes + Controllers + Form Requests
↓
Policies/Gates + Actions bila logic mulai membesar
↓
Eloquent Models
↓
MySQL
User: akun santri, ustadz, dan admin.UstadzProfile: profil dan status approval ustadz.Program: program pembelajaran ngaji online.Batch: jadwal, kapasitas, harga, dan lifecycle program.Enrollment: pendaftaran santri ke batch.
- Gunakan
Inertia::render()untuk page server-side routing. - Gunakan Wayfinder untuk helper route/action typed di frontend.
- Gunakan Form Request untuk validasi input.
- Gunakan Policy/Gate untuk authorization.
- Hitung kapasitas batch dari enrollment aktif; realtime counter ditunda.
- Payment gateway live ditunda sampai marketplace tervalidasi.
Target database MVP adalah MySQL. .env.example masih menggunakan SQLite agar starter Laravel bisa berjalan cepat di lokal.
Saat masuk implementasi Phase 1, pastikan migrasi mengikuti domain PRD v1.1:
- user dan role dasar;
- profil ustadz;
- program;
- batch;
- enrollment;
- status pembayaran manual.
| Variable | Wajib | Deskripsi | Default lokal |
|---|---|---|---|
APP_NAME |
Ya | Nama aplikasi | Laravel |
APP_ENV |
Ya | Environment aplikasi | local |
APP_KEY |
Ya | Encryption key Laravel | dibuat via php artisan key:generate |
APP_URL |
Ya | URL aplikasi | http://localhost |
DB_CONNECTION |
Ya | Driver database | sqlite |
DB_HOST |
Untuk MySQL | Host database | 127.0.0.1 |
DB_PORT |
Untuk MySQL | Port database | 3306 |
DB_DATABASE |
Untuk MySQL | Nama database | laravel |
DB_USERNAME |
Untuk MySQL | User database | root |
DB_PASSWORD |
Untuk MySQL | Password database | kosong |
SESSION_DRIVER |
Ya | Driver session | database |
QUEUE_CONNECTION |
Ya | Driver queue | database |
CACHE_STORE |
Ya | Driver cache | database |
MAIL_MAILER |
Ya | Mail transport | log |
VITE_APP_NAME |
Ya | Nama app untuk Vite | ${APP_NAME} |
| Command | Deskripsi |
|---|---|
composer run setup |
Setup awal project secara one-shot |
composer run dev |
Jalankan Laravel server, queue listener, Pail, dan Vite |
composer lint |
Format PHP dengan Laravel Pint |
composer lint:check |
Cek format PHP tanpa mengubah file |
composer test |
Clear config, cek lint PHP, lalu run test Laravel |
composer ci:check |
Cek format frontend, lint frontend, typecheck, lalu test backend |
php artisan test |
Jalankan test Laravel/Pest |
npm run dev |
Jalankan Vite dev server |
npm run build |
Build asset production |
npm run build:ssr |
Build asset dan SSR bundle |
npm run format |
Format file frontend di resources/ |
npm run format:check |
Cek format frontend |
npm run lint |
Jalankan ESLint dengan auto-fix |
npm run lint:check |
Jalankan ESLint tanpa auto-fix |
npm run types:check |
Cek TypeScript tanpa emit |
Jalankan seluruh quality gate lokal:
composer ci:checkJalankan test backend:
php artisan testAtau gunakan Pest langsung:
./vendor/bin/pest --compactBuild frontend production:
npm run buildCI GitHub saat ini menjalankan test pada PHP 8.3, 8.4, dan 8.5 dengan Node.js 22.
- Baca PRD dan Tech Stack v1.1 sebelum menambah fitur besar.
- Buat perubahan kecil dan terarah.
- Ikuti konvensi Laravel: controller, Form Request, Policy/Gate, migration, factory, seeder, dan Pest test bila relevan.
- Untuk frontend Inertia, gunakan page di
resources/js/pagesdan helper Wayfinder untuk route/action. - Gunakan Conventional Commits agar semantic-release bisa membuat changelog otomatis.
Contoh commit:
feat: add ustadz profile approval flow
fix: prevent duplicate enrollment for same batch
docs: add phase 1 setup notes
Project ini menggunakan Semantic Release melalui .github/workflows/release.yml dan .releaserc.json.
- Branch release:
main. featmenghasilkan minor release.fix,docs,refactor,chore,perf, dancimenghasilkan patch release.- Breaking change menghasilkan major release.
styledantesttidak membuat release.
Workflow release menginstall tool semantic-release menggunakan npm install --no-save, sehingga dependency release tidak perlu dimasukkan ke package.json.
Belum ada konfigurasi deployment final di repository ini. Baseline deployment Laravel production:
composer install --no-dev --optimize-autoloader
npm ci
npm run build
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cachePastikan production environment memakai database MySQL, APP_ENV=production, APP_DEBUG=false, dan secret yang aman.
Laravel Cloud dapat menjadi opsi cepat untuk deploy Laravel production. Alternatif lain: VPS, Forge, Ploi, Render, Railway, atau platform Docker-compatible.
Jalankan Vite dev server:
npm run devAtau build ulang asset production:
npm run buildnpm run buildphp artisan migrate --seedphp artisan config:clear
php artisan cache:clearrm -rf node_modules package-lock.json
npm install- Role dan auth email/password.
- Core data model.
- Admin seeder.
- Dashboard admin basic.
- Ustadz approval boolean.
- Payment confirmation manual.
- Listing program.
- Program detail.
- Profil ustadz publik.
- Ustadz onboarding.
- Program CRUD.
- Batch CRUD.
- Enrollment dan dashboard minimal.
- Mayar payment gateway.
- Google login.
- Upload dokumen verifikasi.
- WhatsApp/email automation.
- Review/rating.
- Certificate.
Untuk kontribusi internal:
- Gunakan branch dari
mainatau branch kerja yang disepakati. - Ikuti Conventional Commits.
- Jalankan quality check sebelum push:
composer ci:check- Pastikan perubahan tetap selaras dengan PRD dan Tech Stack v1.1.
Project ini menggunakan lisensi MIT. Lihat file LICENSE.
- Product & Engineering: PojokSantri.ID Team.
- Maintainer: Ryan Sutrisno.