All projects
Full Stack case study

Accellum

An IoT operations platform that turns MQTT card and gateway signals into device health, checkpoints, access history, and live dashboards.

Accellum original reports and statistics dashboard UI
Original Accellum codebase UI running locally with fictional attendance and building seed data.

Project introduction

Accellum is an IoT access and attendance operations platform. Bluetooth cards and gateway devices publish signals that are translated into device status, checkpoints, movement, and auditable access history.

What I worked on

  • Built MQTT ingestion for device alive, gateway status, and checkpoint topics
  • Implemented WebSocket-driven dashboard updates alongside durable PostgreSQL records
  • Developed user, card, device, building, access-log, and role-permission workflows
  • Added validated Excel import/export for operational data
  • Supported TypeORM migrations, Docker services, Mosquitto, and MinIO-compatible storage

Architecture

NestJS subscribers validate MQTT payloads, resolve device and card identities, persist normalized records through TypeORM, and broadcast relevant updates over Socket.IO. The Nuxt/Vuetify admin provides role-aware monitoring and management while historical records remain searchable and exportable.

Outcome

The system turns low-level device traffic into a dashboard administrators can monitor and audit.

Core feature walkthrough

How the main product workflows operate

Core feature · Device event to attendance record

Radio observations become durable room presence and access history

Accellum separates physical detection, event transport, domain rules and operator presentation. MQTT keeps devices independent from request-response APIs, while PostgreSQL and WebSocket serve different durability and immediacy needs.

Realtime event path

BLE → gateway → MQTT → NestJS → PostgreSQL / Socket.IO

Select a node for implementation detail
Realtime does not replace history

Socket.IO improves freshness; PostgreSQL remains the auditable source for reports and investigation.

Each device has a domain role

Monitor and checkpoint devices intentionally use different session rules instead of sharing one ambiguous timeout algorithm.

Detailed diagrams follow

The next two interactive diagrams expose the physical communication path and the exact monitor/checkpoint decision branches.

Device-to-application flow

How a card detection becomes attendance data

BLE → MQTT → WebSocket

The card only broadcasts its identity. The gateway turns that radio observation into an application event; the backend then validates, interprets, stores, and publishes the result to operators.

Physical devicesEvent transportApplication logicDataUser interface
Check-in / check-out logic

Two detection modes, two session strategies

Monitor mode models presence from repeated signals and checks out on timeout. Checkpoint mode models an entry/exit session with a five-second debounce and explicit room-transfer handling.

MonitorBest for continuous room presence and occupancy counts.