Perimtr
Perimtr is a mobile geofenced attendance and workforce platform for the HR offices of Philippine local government units. Built with Nuxt 4, PostgreSQL, and a Flutter mobile app, it lets office and field teams clock in from their phones while the server verifies each event against geofences, trusted networks, and integrity checks, then turns the record into schedules, leave and overtime under Civil Service Commission rules, CSC Form 48, and payroll exports.

Perimtr is built on one rule: the phone collects evidence and the server makes the attendance decision. Every clock-in is checked against accuracy-aware geofences, trusted office networks, clock skew, and an integrity engine that flags impossible travel and repeated coordinates. Every submission is kept with its full evidence trail, whether it was accepted or not.
The admin console covers the whole HR workflow. Staff see who is on site today and what is waiting for review, manage the employee roster with bulk Excel import, draw work-location fences on a map, and set up schedules, shifts, holidays, and the organization chart. Leave and overtime follow Civil Service Commission rules, with accrual, compensatory time off, and credits that move only on approval. Attendance prints as CSC Form 48 exactly as it appears on screen, exports to CSV and payroll files, and locks by month with carry-forward, while dashboards update live and a scheduler runs recurring work on its own.
Employees use a Flutter app that checks the fence before they press anything, shows hours worked and late marks, lists their rostered shifts, and lets them file leave and overtime. Field staff photograph their work with a generated map stamp. Each handset is enrolled once and approved by HR, with Play Integrity attestation verified on the server, and events are held on the phone and sent when the office is reachable. The geofence engine exists in both TypeScript and Dart, and a shared conformance table generated from the server's engine keeps the two from disagreeing.
The record is built so it cannot be quietly changed. Attendance events are append-only and enforced by database triggers, corrections are appended rather than edited, employees are never deleted, and the audit log is hash-chained. Perimtr can also run as an on-premises appliance with no outbound internet, serving its own map tiles, taking nightly backups, and rolling back a failed migration on its own.
It is built with Nuxt 4, Nuxt UI, and Nuxt layers, better-auth with two-factor authentication and seven roles, Drizzle ORM on PostgreSQL, MapLibre GL, and Zod, with the mobile client written in Flutter and Dart. The API contract is published as OpenAPI and checked for drift in CI, and the test suite runs on Vitest with PGlite and fast-check.



