The problem
Paper logbooks, WhatsApp groups and Excel. A company with 200 guards could not say who was on site, who was late, or who had walked out of their zone. Facilities paying for the service had no proof anyone was at their post. Payroll came off handwritten timesheets and every cycle ended in an overtime argument. A 2 AM emergency went through a phone tree that failed about half the time.
What we built
Four user types on one platform. Facilities post service ads and price requests, companies bid with cost breakdowns and negotiate in chat, guards work from a mobile app, admins oversee all of it. Contracts come out of the system with custom clauses, payment schedules and digital signatures.
Attendance is the spine. A guard clocks in against a configurable zone: 100 m by default, a warning at 80 m, automatic clock-out after 30 minutes outside it. Payroll then reads that attendance directly, with daily thresholds, overtime multipliers, bonuses and deductions, which is what ended the monthly disputes.
Inside the system
- 321 permissions across five role types: admin, company, facility, guard, preventive security.
- Three SignalR hubs: position tracking, push-to-talk with request/release, and SOS broadcast with live GPS.
- 59 notification types, from shift reminders to geofence violations, over Firebase and SignalR.
- 28-screen Flutter app with biometric login, patrol checkpoints and offline support.
- Recruitment and leave both run as proper approval workflows, not WhatsApp messages.
Screens