Manual bakery operations relied on a 13-sheet Excel workbook to track inventory, production, sales, and payroll. No audit trail, no scheduled reports, role confusion between production, sales, and finance teams. Data was siloed and error-prone.
14 Django apps with 100+ models. Per-item table architecture — 27 inventory items each have their own Details, Purchases, and Outputs tables (81 tables total). Bank ledger philosophy: all production, sales, and purchase records are immutable (CREATE-ONLY). PostgreSQL on Railway with Django-Q2 task queue.
Designed and built the entire system from scratch — all 14 apps, role-based access control (8 roles), scheduled report generation (Django-Q2), PDF/Excel output (WeasyPrint + openpyxl), email integration (Gmail SMTP), audit trail, and real-time analytics dashboards.
Per-item table routing — 27 items × 3 table types = 81 physical tables, all routed dynamically via inventory/routing.py. Mix snapshots freeze the complete recipe (JSON) at batch creation time, ensuring historical accuracy even if recipes are later modified. Business day logic treats 12:00 AM–5:59 AM as "yesterday."
8 user roles (Superadmin to Basic User), 25+ report types (PDF/Excel) across 6 categories, real-time analytics dashboards, scheduled email delivery, full audit trail, gate log for security, crate accountability, commission tracking, payroll processing with KRA/NSSF/NHIF deductions.
Replaced a 13-sheet Excel workbook with a centralized web application. Automated report generation and delivery (daily, weekly, monthly, annual). Full audit trail for compliance. Role-based access for 8 user types across production, sales, finance, and security departments.
Loading inventory pipeline...