Safari Camp Pass

Safari Camp Pass

Introduction

Eliminated manual gate verification by building a QR-based access control system. The web app provides real-time ID verification and employee registry management for a Saudi multi-division enterprise.

Details
Scope
  • Web Apps01
  • Prototyping as Design02
  • Web & Experiential03
Outcomes
2400+
Employees managed
12
Departments integrated
100%
Verifiable entry record
The brief

Safari Group operates large-scale construction and service camps across Saudi Arabia — sites where hundreds of employees from multiple departments move through a single entry point each shift. The existing process relied on physical checks: manual ID verification at the gate, no logged record of who entered or when, and no centralized view for the security team.

The constraint: the workforce spans departments, nationalities, and languages. Any system that required literacy in one language, or that broke down without a network administrator on-site, would fail in field conditions. The solution needed to work for the person at the gate, not just the person who managed the system.

What I found

I conducted stakeholder interviews and contextual observations at the gate. The core problem wasn't access control — it was the absence of a verifiable record. Guards knew faces, not IDs. New hires had no reliable process for getting issued an identity in the system before their first shift. Inactive employees had no structured offboarding path — they just stopped appearing, but remained in whatever list existed.

"The gate was the last place to catch a problem that should have been solved at onboarding."

The second issue was operational. Department heads and HR had no live view of who was on-site. Headcounts happened manually, after the fact. For a site managing shift rotations across multiple functions, that latency was a real risk.

The bilingual requirement surfaced a usability constraint beyond translation. Arabic is right-to-left. An interface that renders a layout designed for LTR and simply swaps text will break spatial logic — button positions, reading order, form field alignment. The language switch had to flip the entire layout, not just the copy.

The approach

The framing decision: the QR code is not a convenience feature — it's the entire identity layer. Rather than asking a guard to match a face to a name on a list, the system makes identity machine-readable. The guard scans. The system confirms. The person either clears or doesn't. That decision eliminated every manual verification step downstream.

Designed the scanner view as the primary interface — full-screen camera feed, immediate feedback on scan result, employee details surfaced on detection without a secondary confirmation step.

Built the employee record as a structured unit: name, department, photo, assigned QR ID — the minimum fields needed for a gate decision, nothing redundant.

Designed the admin panel with three distinct workflows: add a new hire (issue an ID), view the manning list (see who's active), and deactivate an employee (remove access without deleting the record).

Built a scan log that timestamps every entry event and exports to CSV — giving admins a portable, auditable record of all gate activity without requiring a dedicated reporting environment.

Implemented bilingual support — English and Arabic — with full RTL layout switching, not text substitution. Direction, alignment, and component mirroring all respond to the selected language.

Built the login layer to gate admin functions from scanner-only access — a guard at the gate doesn't need HR controls; a department admin doesn't need to be the same person.

The tradeoff

The QR code is tied to the issued ID in the system. If an employee loses their physical QR card, they're locked out until an admin reissues it. A biometric fallback or a secondary name-based lookup would remove that single point of failure. Given the timeline and the client's existing hardware, QR-only was the correct first version. A secondary lookup path is the right v2 enhancement.

What shipped

Camp entry at Safari Group sites is now verified against a live employee registry. Guards scan, the system responds, and the result is logged with a timestamp. Admins manage the full employee lifecycle — onboarding, active roster, and deactivation — from a single panel, in their language of choice. Entry history exports to CSV, giving the security team an auditable record they can act on outside the system.

What I'd do differently

I'd build deactivation as a scheduled action rather than a manual one. Employees going on leave or contract end have a known return-or-exit date. A time-bound deactivation tied to that date would remove the dependency on an admin remembering to act — and close the gap where an inactive employee stays valid simply because no one got around to removing them.

Want to see more?

Let's build something.

How can I help?
Hey, I'm Princeton, your business pal.