Events, CRM, vendors, finance, HR and payroll behind role-based access that builds the sidebar itself.
An events company running on spreadsheets, WhatsApp threads and disconnected tools. Employee records were manual, event planning was untrackable, sales and expenses lived in separate sheets, and management had no unified view of any of it.
The difficulty was never any single module. Six of them had to ship while the schema was still moving underneath them, and every department needed a different slice of the same data. Get the permission layer wrong and either people see payroll they should not, or they are locked out of their own work and quietly go back to the spreadsheet.
Events, CRM, vendors, finance, HR and payroll were built as distinct modules with their own boundaries, so adding the sixth did not mean touching the first. Schema changes went through Django migrations, never by hand.
The sidebar is generated from permissions, not hard-coded and hidden with CSS. A user cannot navigate to something they are not entitled to see, because for them the route does not exist.
Releases used to go out as hand-uploaded zip files. That became a GitHub Actions pipeline, and the platform moved off managed hosting onto a self-managed Ubuntu server — several production applications on one 2GB box at 236ms average response.
The production server's real IP was exposed. DNS went behind Cloudflare for masking, and the box was hardened with UFW, Fail2Ban and PAM-secured SSH — inside two days, with zero downtime. Nobody using the system noticed anything.
In daily use since 2024 as the company's operating system. Manual paperwork and duplicate data entry across these six departments are gone.
Tell us what you are running and what hurts. One of the two people who built this answers, within one working day.
Start a project