All work

Business systemsFace-recognition attendance for bus fleets

Bus attendance that keeps working with no signal on the road

Face-recognition terminals on each bus record scans offline. At the depot, a Windows server collects them, keeps every terminal's face library in sync and builds the reports.

Face-recognition attendance for bus fleets preview

Screens from the working product, with sample data.

How it works

  1. Terminal on the bus Records scans with no signal
  2. Depot Wi-Fi Logs collected when the bus returns
  3. Depot server One Windows PC, four services
  4. Dashboard and reports CSV, Excel and PDF exports
Client
A transport company
Year
2026
Platforms
Windows, Web dashboard, Face terminals
Built with
TypeScript, Fastify, PostgreSQL, pg-boss, React, Hikvision ISAPI
Team
Awais Tariq

Riders scan their face when they board in the morning and the evening. The terminal keeps working on the road, and when the bus is back at the depot the server collects the day’s scans, sends any new or changed faces to the terminals and updates attendance.

What we built

  • A Today view showing who boarded each bus, who is late, absent or on the wrong bus, and which terminals are online
  • People, buses and assignments, with photo enrollment pushed to the terminals
  • Reports: the daily manifest, one person’s history and the monthly summary, exportable to CSV, Excel and PDF
  • A single Windows installer that sets up the database, API, background worker and web server as Windows services
  • English and Arabic interface, and licensing so the system can be resold to several fleets

What was hard

Building for hardware we did not have. No terminals were available during development, so we built a simulator that behaves like a fleet of them, and every stage shipped with automated tests against it. Anything the device documentation left unclear was logged and checked on real terminals later.

Never counting a scan twice, or missing one. All device traffic runs through one worker process, so lockouts, limits and per-terminal ordering are handled in one place. Every scan has a deduplication key, so a log sent twice is stored once, and a nightly full-day pull fills any gaps a bus left behind.