Fleet Management
Multi-tenant industrial telemetry with authorisation that reaches the query.
- Category
- Platforms
- Status
- Live
- Platforms
- Web
- Stack
- Next.js, PostgreSQL, Prisma, Auth.js, ECharts, Zod, Playwright, Docker
A white-label operations platform for heavy machinery: live and historical telemetry, anomaly and breakdown tracking, maintenance records, member administration, and dashboards users assemble themselves. Every data path is tenant-scoped and permission-checked in the repository layer, not merely hidden in the UI.
Fleet Management monitors heavy machinery for several customer organisations out of one deployment. The interesting problem is not the charts, it is the authorisation.
Authorisation below the UI
Every request takes the same path: middleware gate, Zod parse, session lookup, a centralised policy, then a tenant-scoped repository transaction. Machine and group access-control lists constrain the query, so a user who guesses an identifier gets nothing back rather than an empty screen rendered over data they were never entitled to fetch.
Administration that cannot lock you out
Administrators create members, set their role and status, and grant access to individual machines or machine groups. Three rules are enforced in one policy module rather than scattered through handlers: nobody may administer their own account, nobody may assign a role carrying permissions they do not themselves hold, and the last active administrator can be neither demoted nor deactivated. A new member starts with no machine grants, and the panel says so plainly rather than letting an administrator wonder why the fleet looks empty.
Operational limits stated in words
Each tenant sets warning and critical limits per telemetry metric, bounded by the range the ingestion contract accepts. The machine view then states the resulting classification in words with a non-colour mark, because a reading that matters should not depend on the reader distinguishing amber from red.
Dashboards people actually build
Users add widgets from a five-kind catalogue, configure them, reorder and resize them, and save the layout. Every drag action has a button and keyboard equivalent, because a platform used in a workshop with gloves on cannot depend on precise pointer work. Charts are bounded for large series, reduced-motion aware, and always paired with a summary and a table so the information exists outside the picture.
Try it
Sign in at fleet.altixcode.com with [email protected] and the password demo. The account is a read-only Viewer in its own tenant: it can open every machine, its telemetry, events and maintenance, but it holds no write permission and cannot change its own password, so the demonstration stays intact for the next visitor.
Running in production
It deploys from its own repository to a self-hosted Coolify instance as a multi-stage Docker image that applies committed migrations before accepting traffic, runs as an unprivileged user, and answers a database-aware readiness probe. It holds a dedicated least-privilege PostgreSQL role rather than a shared superuser, takes nightly backups, and prunes telemetry on a retention schedule. Two hundred unit tests and eight browser journeys run against a real database, including the full member lifecycle: create, grant, sign in scoped to one machine, change password, deactivate.
- Tenant isolation
- Every query is scoped to the tenant in the repository layer, so isolation does not depend on any caller remembering to filter.
- Object-level grants
- Per-machine and per-group access-control lists constrain list and detail queries directly, not only the controls on screen.
- Member administration
- Create members and set roles and status under one policy that blocks self-administration, privilege escalation and last-administrator lockout.
- Telemetry history
- Current and historical readings per machine, with anomalies, breakdowns and maintenance recorded against the same timeline.
- Operational thresholds
- Per-metric warning and critical limits, surfaced as a worded classification with a non-colour indicator rather than colour alone.
- Custom dashboards
- User-assembled widget layouts that persist, with keyboard-accessible alternatives for every drag action.
- Audited mutations
- Every security- or data-significant change writes a validated mutation and an audit record, without storing passwords or tokens.
- Localised throughout
- English and German, with locale-aware number and date formatting rather than a translated string table over English formats.
What it looks like in use.
Select any screen to view it full size. Use the arrow keys to move between screens and Escape to close.
The fleet list shows only machines the signed-in user holds a grant for. Status carries a dot and a word, not colour alone. Machine detail pairs a bounded telemetry series with current, minimum, maximum and average, plus the limit status in words. Members, their role and status, and the machines they may see. An administrator's own row is deliberately not editable. Widgets from a five-kind catalogue, reordered by drag or by button, saved per person. Every significant mutation is recorded with actor, action, target and time, filterable and exportable.
The same authorisation and the same data on a phone, with bottom navigation and 44px targets.