Installer tooling, go-live controls and device telemetry for a UK smart-locker platform
- Client
- UK smart-locker company
- Industry
- IoT and workplace technology
- Services
- Custom software
- Timeline
- 8 months, 2022–2023
In numbers
- 20%of all commits during our time on the project
- 4connected apps we worked across: portal, admin console, device API and shared core
- 1request for an installer to submit a whole location, with a result for every lock
The problem
The lockers talk to a cloud platform over MQTT. Customers manage them through a web portal, the company’s staff and resellers use an admin console, and installers set up new sites with a mobile app.
As the business grew, new sites needed a clear path from installation to go-live, and one platform had to manage a fleet with several kinds of lock and several firmware versions. Deleting a person couldn’t be allowed to wipe out the history of what happened at a locker, and the admin console needed proper roles instead of all-or-nothing access.
What we built
Installers got an API that accepts a whole location in one request, records a test result for every lock, kiosk and smartbox, and reports success or errors lock by lock, plus install-log exports per location. Each account gained a live switch: until it’s live, installer cards keep working and the customer portal stays in setup mode, and switching it on pushes new configuration to every lock in the account.
Lock behaviour moved from a per-customer setting to a per-lock one, so a single site can mix hardware. Locks now report battery voltage with each check-in, sorted into critical, low, medium and good bands that drive a daily email and the portal, with a fallback for older firmware. When a person is deleted, their orders and locker history keep a pseudonymous ID instead of disappearing.
With one of the client’s engineers, we also built custom roles for the admin console, with a permission check on every page and action and a menu that only shows what a role allows. We added account analytics and trial accounts too.
Our part
Our engineers worked as contract developers in the client’s team for eight months, with about a fifth of all commits in that time. Custom roles were joint work with a client engineer, and the roles, analytics and trial-account work was still in review when our engagement ended. The device firmware, the mobile apps and the platform’s original architecture were built by the client’s team.
Built with
- Ruby on Rails
- PostgreSQL
- Sidekiq
- Elasticsearch
- MQTT
- Grape
- AWS