Three products, three seat licences, and no shared record between them. Sales lived in one, delivery in another, and anything to do with people in a third — so cross-checking a project against who was on it, or what it had cost, meant opening all three and trusting whoever did the arithmetic.
- Deal, project, and timesheet data had no shared identity across the three tools
- Per-seat pricing scaled with headcount for software the team had outgrown
- Reporting across the pipeline and delivery meant manual reconciliation
- Nothing could be customised beyond what the vendors exposed
One Postgres schema behind all three functions — 21 tables covering deals and stages, projects and milestones, tasks, documents, time entries, leave, payroll, and expenses. 45 row-level security policies enforce who sees what, in the database rather than in application code.
CRM with a configurable stage pipeline usable as either a board or a list, version-controlled documents on both incoming and outgoing sides, and a next-step task that notifies whoever it lands on. Deals convert straight into projects, so the commercial record and the delivery record are the same record.
HR that people actually use: check in and out against a project, admin-configured leave types with an approval path, announcements, and holidays. Time entries roll into a weekly per-person-per-project report, which is the view that had been impossible before.
Realtime notifications through Supabase, exports to Excel and PDF, and a deliberate integration seam left where Zoho Books stays — the one product worth keeping, so the platform is built to talk to it rather than replace it.