All projects
Embedded Systems · Hardware / PCB Design · Software Engineering
Beastie Checkpoint — Attendance System
An end-to-end employee attendance system: a wall-mounted RFID terminal on a custom PCB, embedded firmware that reports events over Wi-Fi, and a backend and web application for managing attendance records. It was used in a real workplace for about two years.
Deployed· in use ~2 years2024
CHECKPOINT / CONNECTED DEVICE
Hardware → firmware → softwareConcept diagram
Problem and motivation
The workplace needed a dependable way for staff to record arrival and departure, with records that management could review. I built the full system myself, from the circuit board to the web interface.
Requirements
- Check in or out with a single badge tap.
- Network configuration on site, without reflashing firmware.
- Events stored centrally and visible in a web dashboard.
- Reliable enough for unattended daily use.
Hardware architecture
- ESP8266 (NodeMCU v3 module) mounted on a custom carrier PCB designed in KiCad.
- MFRC522 RFID reader connected over SPI.
- Push-button input for user interaction, debounced in firmware.
- Custom 3D-printed enclosure designed around the PCB and reader.
Firmware and software architecture
- Firmware in C++ (Arduino framework): reads the tag UID, packages the event as JSON and sends it to the backend over HTTP.
- Wi-Fi credentials are entered through a captive portal (WiFiManager) on first boot.
- Backend: Node.js / Express in TypeScript, with Firebase for data storage.
- Frontend: React web dashboard for viewing and managing attendance records.
- Implementation details, data and code stay private because the system belongs to the business.
Engineering decisions
- An off-the-shelf MCU module on a custom carrier board kept the design simple to assemble and service.
- A captive-portal Wi-Fi setup meant the device could be moved or the network changed without a laptop.
- Owning both the device and the backend allowed the device–server protocol to be designed together.
Testing and validation
- Validated in daily use at the workplace for approximately two years.
Results
The system ran in daily use for about two years. I built every layer of it: electronics, firmware, enclosure, backend and web interface.
Potential improvements
- Queue events in flash while the network is unavailable and sync them later.
- Move to an ESP32 for more headroom for TLS and on-device feedback.
- Device health reporting (uptime, reconnects) to the backend.