Back to all projects

SafePass24

Access control and student entry/exit tracking

A system for managing card-based access at schools and organizations, helping parents follow their children’s entry and exit.

SafePass24 overview: web control center and parent mobile app; student entry-exit and attendance tracking.
From physical access to web and mobile monitoring.A promotional visual of the web management console and parent mobile app.
Who is it for?
Organizations, access administrators and parents
My contribution
Independent project · Full-stack development

The need to solve

Schools and organizations need to manage access control and devices, while parents need to follow their children’s entry and exit. Access decisions must continue when connectivity drops.

What it enables

Manage card-based access, let parents follow their children’s entry and exit, continue using local permissions without internet and send records to web and mobile applications when connectivity returns.

What I built

I worked on software for card readers and turnstiles, the server side and connections to web and mobile applications. I connected physical access events to records people can follow in the applications.

Explore development details

For readers interested in the technical approach: workflows, technologies and implementation decisions.

How does the process work?

Device commissioning, access decisions and application monitoring are connected processes. If connectivity drops, the controller continues using local permissions.

Main flow

  1. Commission the device

    Configure the controller, readers, relays and camera; pair the device with the backend.

  2. Read the card

    Process the card UID received through OSDP / RS-485 and protect it with an HMAC hash.

  3. Decide access

    Use remote authorization when available. Fall back to the SQLite permission cache if a remote decision cannot be obtained.

  4. Control the passage

    Activate the Modbus relay for authorized access and associate the decision with an access event.

  5. Associate the event and image

    Prepare an event-linked camera snapshot through ONVIF / ISAPI and RTSP / FFmpeg; encrypt the local image.

  6. Synchronize events to the cloud

    A persistent outbox and retries deliver events to the backend after connectivity returns.

  7. Monitor on web and mobile

    Administrators follow access records within their permission scope, while parents follow their children’s entry and exit through Next.js / Flutter applications.

Alternative and supporting processes

When remote authorization is unavailable

Related step03Decide access
  1. Check local permissions

    The SQLite cache reduces the access decision’s dependency on connectivity.

  2. Keep the event durably

    Write the offline event to the outbox; synchronize it at step 6 once connectivity returns.

When device configuration changes

  1. Distribute configuration

    Synchronize device configuration over MQTT.

  2. Apply the new settings

    The controller uses the updated configuration for subsequent reader and access events.

From physical access to web and mobile monitoring.A schematic illustration of how the product works.

The approach

  • Translated client needs into edge-controller requirements for readers, RS-485, relays, cameras and Linux runtime; developed controller software matched to the hardware.
  • Integrated OSDP/RS-485 readers through Go/CGO and libosdp, and turnstile relays through Modbus; built event-linked camera snapshots using ONVIF/ISAPI and RTSP/FFmpeg.
  • Implemented SQLite authorization-cache fallback, a persistent outbox and retry mechanisms for offline access decisions and event synchronization after reconnection.
  • Worked on HMAC hashing for card UIDs, AES-GCM encryption for local camera images and device-scoped communication controls.
  • Built a modular Go/Fiber backend with multi-tenant data isolation and JWT/OTP flows; developed APIs for Next.js/Flutter clients, device commissioning and MQTT configuration sync.
  • Configured GitHub Actions CI for Go tests, race detection and govulncheck; published images to GHCR and signed them with Cosign.

Technologies

  • Go
  • Next.js
  • TypeScript
  • Flutter
  • PostgreSQL
  • Redis
  • MQTT
  • SQLite
  • MinIO
  • Docker
  • Nginx
  • OSDP / Modbus