Sentra Laundry — Architecture & Tech Stack Delta¶
System Architecture¶
SentraLaundry Clean mengadopsi arsitektur Distributed State Machine Event Hub yang melacak perubahan status ribuan item cucian secara asinkron di multi-cabang.
3.1 C4 Container Diagram¶
graph TB
subgraph "Outlet Cabang (Edge Node)"
A["POS Desktop Client (Tauri + React)"]
B["Scale Driver Hub (Go Daemon)"]
C["Operator App (React Native Mobile)"]
D["Waterproof Tag Printer"]
A <-->|1. Read Weight via Local Socket| B
A -->|2. Serial Print Command| D
end
subgraph "Cloud Backend Infrastructure (AWS)"
E["API Gateway Reverse Proxy (Nginx)"]
F["Order State Machine Engine (Go)"]
G["Courier Dispatch & Route Planner (Go)"]
H["WhatsApp & Sync Event Bus (RabbitMQ)"]
I[("PostgreSQL Master (Transactional DB)")]
J[("Redis State & Session Store")]
end
A -->|3. HTTPS API Order Create| E
C -->|4. Push Task Updates| E
E <--> F
E <--> G
F <--> I
F <--> J
G --> H
H -->|5. Trigger Notifications| K["WhatsApp Gateway Client"]
3.2 Protokol Pelacakan Status Cucian (Event-Driven State Engine)¶
Sistem melacak siklus cucian menggunakan pola Finite State Machine (FSM). Perpindahan status dipicu oleh pemindaian barcode fisik di stasiun kerja:
- Intake Event: Cucian diterima -> Status
RECEIVED. - Scan Stasiun Cuci: Operator cuci memindai tag -> Status berubah menjadi
WASHING(mencatat ID operator dan ID mesin cuci). - Scan Stasiun Setrika: Operator setrika memindai tag -> Status berubah menjadi
IRONING. - QC Check Event: Staf QC memindai tag -> Status
READY_FOR_COLLECTION. - State Transition Validation: Sistem memvalidasi transisi status. Misal: Pakaian tidak boleh di-scan di stasiun
IRONINGjika belum melewati statusDRYING(mencegah operator melompati prosedur standar).
Tech Stack — Laundry Delta¶
Baseline:
_shared/tech-stack-baseline.md
Overrides¶
- POS Client App → Tauri (Rust) + React (override: butuh native Rust
serialportcrate untuk integrasi langsung dengan timbangan digital USB tanpa driver tambahan; Electron tidak punya native Rust binding yang sama mudahnya)
Tambahan Sistem-Spesifik¶
- Hardware Integration: timbangan digital USB via Rust
serialportcrate — Go Daemon (Scale Driver Hub) membaca data serial dari port COM/USB dan mengekspos nilai berat stabil ke POS client via local socket. - Waterproof Tag Printer: POS mengirim ZPL print command ke printer barcode thermal melalui koneksi serial/USB lokal untuk mencetak pita label anti air.
- Operator App (React Native Expo): Aplikasi Android staf dapur cuci dan kurir — mendukung kamera scan barcode tag, update status stasiun, dan GPS kurir real-time.
- RabbitMQ Event Bus: Perubahan status cucian (FSM state transitions) dipublikasikan ke queue RabbitMQ dan dikonsumsi oleh worker notifikasi WhatsApp, payroll calculator, dan sync dashboard.
- WhatsApp Business API Gateway: Pengiriman link pelacakan interaktif ke konsumen setelah order dibuat; notifikasi status update real-time ke nomor HP konsumen.