diff --git a/uad-landing.html b/uad-landing.html new file mode 100644 index 0000000..d06b43d --- /dev/null +++ b/uad-landing.html @@ -0,0 +1,364 @@ + + + + + + UniFi Access Badge-In Dashboard + + + + + + + + +
+
Open Source ยท Self-Hosted ยท Docker
+

Real-Time Attendance
Powered by UniFi Access

+

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.

+
+ See the Dashboard + Quick Install +
+
+ + +
+
~5 min
Setup Time
+
0 ms
Cloud Dependency
+
6 hr
Auto User Sync
+
100%
Self-Hosted & Private
+
+ + +
+
Live Preview
+
Your dashboard, today
+
Real names resolved from your UniFi Access controller, attendance status applied automatically against your custom cutoff time.
+ +
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
#NameFirst Badge InLatest Badge InActor IDStatus
1Alex Rivera08:47 AMโ€” samea3f9c21bON TIME
2Jordan Lee08:53 AM02:14 PMb72e4d09ON TIME
3Morgan Chen09:12 AMโ€” samec8a1f355LATE
4Taylor Brooks08:58 AM01:07 PMd04b9e77ON TIME
5Casey Nguyen09:31 AMโ€” samee19d2c88LATE
6Riley Thompson08:41 AM03:22 PMf5c0a3b2ON TIME
7Drew Martinez08:59 AMโ€” same60e7f14cON TIME
8Sam Patel09:48 AMโ€” same71ba3d6fLATE
+
+
+ + +
+
+ +
Everything you need, nothing you don't
+
Built specifically for UniFi Access environments that want local, fast, and transparent attendance tracking.
+ +
+
+
โšก
+

Real-Time Webhook Events

+

Receives access.door.unlock events from UniFi Access the moment a badge is tapped โ€” no polling, no delays.

+
+
+
๐Ÿ‘ค
+

Automatic Name Resolution

+

Translates raw UniFi actor UUIDs into real display names by syncing your user roster directly from the Access controller.

+
+
+
๐ŸŸข
+

ON TIME / LATE Status

+

Set any daily cutoff time. The dashboard automatically marks each person's first badge as ON TIME (green) or LATE (red).

+
+
+
๐Ÿ“…
+

Historical Date Browsing

+

All badge events are persisted in a local SQLite database. Browse any past date with the date picker โ€” your history, your server.

+
+
+
๐Ÿ”’
+

HMAC-Secured Webhooks

+

Every incoming event is verified with HMAC-SHA256 using your unique webhook secret, blocking spoofed or unauthorized payloads.

+
+
+
๐Ÿณ
+

Single Docker Container

+

One docker compose up -d command deploys Flask + SQLite. Runs on Unraid or any Linux host with Docker installed.

+
+
+
+
+ + +
+
Get Started
+
Up and running in minutes
+
Requires a UniFi OS console running Access 1.9.1+, Docker, and a local network connection to your controller.
+ +
+
+
1
+
+

Open Firewall Port 12445

+

Add a LAN IN firewall rule in UniFi Network โ†’ Settings โ†’ Firewall & Security allowing TCP 12445 from your subnet to your controller IP.

+
+
+
+
2
+
+

Generate a Developer API Token

+

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.

+
+
+
+
3
+
+

Clone & Configure

+

Clone the repo to your Unraid server, copy .env.example to .env, and fill in your controller IP, API token, and timezone.

+
+
+
+
4
+
+

Build & Start the Container

+

Run docker compose up -d --build. The container launches Flask on port 8000, creates the SQLite database, and immediately syncs your user roster.

+
+
+
+
5
+
+

Register the Webhook

+

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.

+
+
+
+
6
+
+

Open the Dashboard

+

Navigate to http://<UNRAID-IP>:8000/. Pick a date, set your cutoff time, and watch attendance populate in real time as badges are tapped.

+
+
+
+
+ + + + + + \ No newline at end of file