Bengkel Pintar ERP
Dokumentasi flow diagram, PRD, dan skenario operasional sistem manajemen bengkel multi-cabang. Setiap modul dilengkapi diagram alur, mockup UI, dan panduan penggunaan.
🏢 Multi Cabang
Setiap cabang beroperasi secara mandiri dengan data terpisah. Kantor pusat dapat memonitor seluruh cabang secara real-time.
👥 Role-Based Access
6 role pengguna: Super Admin, Admin Cabang, Kasir, Mekanik, Kepala Mekanik, Gudang — setiap role memiliki akses terbatas sesuai fungsinya.
🔄 Approval Berjenjang
Transaksi di atas threshold tertentu memerlukan approval berjenjang. Flow approval dapat dikonfigurasi per cabang dan per tipe transaksi.
📱 Responsive UI
Interface dibangun dengan Next.js + Tailwind CSS. Mendukung akses dari desktop maupun tablet untuk semua role operasional.
Frontend (Admin & Landing)
Next.js 15 + React 19, TypeScript strict, Tailwind CSS, native fetch + JWT, WebSocket native via ticket flow
Backend (API)
Hono on Bun (TypeScript), Prisma 7 (driverAdapters), pg, BullMQ workers, node-cron, pino logger, Argon2 password hashing
Storage
PostgreSQL 14+ (eksternal/managed), Redis 7 (shared state, pub/sub, queue broker), MinIO S3-compatible (object storage)
Infrastructure
Docker Compose multi-service, Caddy reverse proxy + active health-check, PgBouncer transaction pool, zero-downtime rolling deploy
Topology Production
API & Worker scalable (rolling deploy zero-downtime). Cron service replicas=1 (anti duplicate trigger). Shared state via Redis.
active health-check
:4100] --> A1[API #1
:4000] C --> A2[API #2
:4000] C --> A3[API #N] A1 --> R[(Redis
:6379
pub/sub + queue
+ ticket store)] A2 --> R A3 --> R A1 --> PB[PgBouncer
txn pool] A2 --> PB A3 --> PB PB --> PG[(PostgreSQL
eksternal)] CRON[Cron Service
replicas=1
node-cron + DB-driven] --> R CRON --> PB W1[Worker #1
BullMQ consumer] --> R W2[Worker #2
scalable] --> R W1 --> PB W1 --> M[(MinIO
S3 object storage)] A1 --> M A2 --> M style C fill:#dbeafe,stroke:#3b82f6 style R fill:#fee2e2,stroke:#dc2626 style PB fill:#fef3c7,stroke:#d97706 style CRON fill:#f0fdf4,stroke:#16a34a
Redis (Shared State)
- Rate-limit cross-instance (atomic INCR + EXPIRE)
- WebSocket ticket store (SETEX + GETDEL one-time)
- WS pub/sub channel
ws:events— event sampai ke semua instance - BullMQ queue broker (pdf, excel, email, whatsapp)
- Cron reload signal channel
cron:reload
Cron Service Terpisah
- Replicas tepat 1 — anti duplicate trigger saat API scale
- DB-driven schedule (tabel
CronJob,CronRun) - Hot-reload via Redis signal (perubahan UI admin langsung efektif)
- Configurable via Admin → Settings → Cron Jobs
- Default jobs auto-seed: stock-alert, booking-reminder, payroll-generate, dst
Worker Queue (BullMQ)
- Offload CPU-heavy: PDF render (PDFKit), Excel build (XLSX)
- Async background: email, WhatsApp, retry strategies
- Scalable, drain-safe rolling deploy
- At-least-once delivery, idempotent handler
Zero-Downtime Deploy
deploy.sh: build → infra up → migrate → rolling api → rolling worker → recreate cron- Caddy auto-route via DNS re-resolve (no manual config)
- Healthcheck-driven: container baru harus healthy sebelum container lama dimatikan
- Worker drain in-flight job sebelum exit (BullMQ
worker.close())