NaughtyClock
Biometric clock-in terminal to Sage timesheets, with no cloud in between.
A face-and-fingerprint terminal on the wall, timesheets in Sage, and nothing in between except a person retyping. NaughtyClock is the something in between. It runs on a small machine on the shop’s LAN, pulls attendance events straight off a Hikvision terminal over ISAPI with no cloud dependency, pairs each person’s clocks into daily timesheets, and pushes them to Sage Accounting.
Staff are managed in Hik-Connect Team and mirrored automatically; the only admin task is mapping each employee to their Sage code. Days with an odd number of clocks are flagged open and held back rather than pushed with bad data. Until Sage API credentials exist, it exports CSV instead.
It is a good example of the hardware-to-accounting plumbing we build: unglamorous, offline-tolerant, and quietly saving someone an hour a week.
- Attendance events pulled straight from the terminal on the LAN; no vendor cloud dependency.
- Employees mirrored automatically from Hik-Connect Team; the only admin task is mapping each one to a Sage code.
- Positional in/out pairing into daily timesheets; days with an odd number of clocks are flagged open and held back.
- Sage push queue with CSV export until API credentials exist.
- Device poller and nightly push as background services, plus sync-now from the dashboard.
| Item | Layer | Component |
|---|---|---|
| 01 | Framework | Django 6 |
| 02 | Database | PostgreSQL |
| 03 | Front end | HTMX, Alpine.js, Tailwind CSS; light and dark UI |
| 04 | Device | Hikvision DS-K1T343MFWX over ISAPI with digest auth, polled on the LAN |
| 05 | Accounting | Sage Accounting (ZA) push queue with stub, live and CSV modes |
| 06 | Deployment | systemd units for web, poller and nightly push; nginx; DuckDNS with a source-restricted port forward |
Integrations
Tell us what to build.
A web app, a mobile app, a platform, an integration nobody else wants to touch. Send the brief, we reply with questions, a scope and a price.