diff --git a/static/uad-landing.html b/static/uad-landing.html new file mode 100644 index 0000000..d06b43d --- /dev/null +++ b/static/uad-landing.html @@ -0,0 +1,364 @@ + + +
+ + +Know exactly who badged in, when they arrived, and whether they were on time โ all from a clean live dashboard backed by your own infrastructure.
+ +| # | +Name | +First Badge In | +Latest Badge In | +Actor ID | +Status | +
|---|---|---|---|---|---|
| 1 | Alex Rivera | 08:47 AM | โ same | a3f9c21b | ON TIME |
| 2 | Jordan Lee | 08:53 AM | 02:14 PM | b72e4d09 | ON TIME |
| 3 | Morgan Chen | 09:12 AM | โ same | c8a1f355 | LATE |
| 4 | Taylor Brooks | 08:58 AM | 01:07 PM | d04b9e77 | ON TIME |
| 5 | Casey Nguyen | 09:31 AM | โ same | e19d2c88 | LATE |
| 6 | Riley Thompson | 08:41 AM | 03:22 PM | f5c0a3b2 | ON TIME |
| 7 | Drew Martinez | 08:59 AM | โ same | 60e7f14c | ON TIME |
| 8 | Sam Patel | 09:48 AM | โ same | 71ba3d6f | LATE |
Receives access.door.unlock events from UniFi Access the moment a badge is tapped โ no polling, no delays.
Translates raw UniFi actor UUIDs into real display names by syncing your user roster directly from the Access controller.
+Set any daily cutoff time. The dashboard automatically marks each person's first badge as ON TIME (green) or LATE (red).
+All badge events are persisted in a local SQLite database. Browse any past date with the date picker โ your history, your server.
+Every incoming event is verified with HMAC-SHA256 using your unique webhook secret, blocking spoofed or unauthorized payloads.
+One docker compose up -d command deploys Flask + SQLite. Runs on Unraid or any Linux host with Docker installed.
Add a LAN IN firewall rule in UniFi Network โ Settings โ Firewall & Security allowing TCP 12445 from your subnet to your controller IP.
In the UniFi Access app go to Settings โ General โ Advanced โ API Token. Create a new token with all permission scopes and copy it immediately โ it's shown only once.
Clone the repo to your Unraid server, copy .env.example to .env, and fill in your controller IP, API token, and timezone.
Run docker compose up -d --build. The container launches Flask on port 8000, creates the SQLite database, and immediately syncs your user roster.
From the container console, run the provided Python snippet to register your dashboard URL with UniFi Access for access.door.unlock events. Copy the returned secret into .env and rebuild.
Navigate to http://<UNRAID-IP>:8000/. Pick a date, set your cutoff time, and watch attendance populate in real time as badges are tapped.