Problem
Attendance in a shift-based team is usually recorded wherever it is convenient: a sheet by the door, a message in a group chat, and a spreadsheet that somebody updates afterwards. The record that reaches payroll is a reconstruction, and nobody can say with confidence who was actually on site at a given hour.
Our role
Design and build: data model, access rules, and the day-to-day screens managers and staff use.
Approach
The front end is React and TypeScript against Supabase, with employee roles and access-controlled views enforced in PostgreSQL through row-level security rather than by hiding buttons. Clock-in and clock-out are recorded as events with a timestamp and, where the client is configured for it, the location captured at the moment of the event.
Shifts are scheduled in their own table so a manager can see coverage before the week starts rather than after it ends. Attendance records feed summaries written for payroll preparation, and onboarding plus internal messaging live in the same application so that a new employee does not need a second account.
Outcome
The application covers the daily loop: clock in, record the shift, review the week, feed payroll. Each capability in this write-up is present in the codebase; which of them are running at a real site is being confirmed before any is presented as live.
Notes
Location capture is only described where it is configured. No attendance records, locations, or staff details are published, and dates that could identify a person are not part of the summary above.