Part-time, OPUS HR
OPUS-365
An HR app: attendance with geofenced clock-in, guests, requests and approvals.
- Google Play
- App Store
- OPUS-365 webThe platform’s web app; my work is the mobile app
Overview
Employees clock in for their shifts, register guests, and file requests that go through an approval flow. I built the attendance rules, offline clock-in, guests, requests and biometric login.
In the recording
Onboarding and sign-in, clock in inside the office geofence, then a hybrid shift: on-site is refused outside the allowed location, and the employee clocks in as remote.
Recorded from the real appRecorded from the real Flutter app in the iOS Simulator. The app ran from a throwaway copy pointed at a local mock server with made-up data, with crash reporting and analytics switched off; nothing reached the production backend. The app’s fake-GPS check and its request for “Always” location were turned off in that copy, because a simulator’s location is always simulated.
Private to OPUS HR. The company, office and employee in the recording are made up. The orientation module, QR scanner and payslips were built by other developers and are not shown.
Screens
6 stills from the recording above. Select one to see it larger.
01Onboarding 02Home: today’s shifts, hours and requests 03Clocked in inside the office geofence 04A hybrid shift asks where you are working 05On-site refused: outside the allowed location 06Attendance by day
Clock-in rules
An onsite shift can only start inside one of the shift’s allowed locations: the app measures the distance to each and compares it with that location’s radius. Hybrid shifts ask whether you are working remotely or onsite first.
With no connection, the clock-in is stored locally with its time and position and sent when the device reconnects; entries older than 24 hours are dropped. Shifts that require a selfie can’t be clocked into offline.
Other work
- Guest registration and check-in
- Employee requests with an approval flow and approval history
- Biometric login; Arabic and English; UTC handling for request dates
Stack
- Flutter
- Riverpod 3
- Freezed
- Hive CE
- go_router
- geolocator