Skip to content
All case studies
EnterpriseDelivered2025

IMS Containers — Fleet & Container Management Platform

A logistics operator managing a container and vehicle fleet needed to know where every asset was, what condition it was in, and who was accountable for it — without the answer depending on which staff member you asked.

Client
Crystal Logistic
Region
India
Discipline
Enterprise Systems
ims.internal / fleet
Total assets
342
Utilisation
78%
Under repair
11
Asset IDTypeStatusLocation
CNT-441740ft HCOn hireNhava Sheva
CNT-229020ft ReeferAvailableYard A
VEH-118TrailerIn transitNH-48
CNT-380640ft DryUnder repairWorkshop
CNT-105220ft DryAvailableYard B
Role-based access
Admin — fullOperations — hire / returnYard — status onlyManagement — read only

Interface recreated from the delivered system. Client data is illustrative and non-identifying.

The problem

Container fleets fail quietly. An asset goes out on hire, comes back needing repair, sits in a yard, and unless someone updates a sheet, it is simply invisible — still billed as available, still counted in capacity, generating nothing.

The operator was tracking assets in spreadsheets shared over email, with a single shared login into what tooling existed. That made two things impossible at once: knowing the true state of the fleet, and knowing who changed what.

  • Asset status was as current as the last person who remembered to update the sheet.
  • Hire, return, repair and maintenance history were recorded inconsistently, so lifecycle cost per asset was unknowable.
  • A shared login meant no accountability — every change looked identical in the record.
  • Utilisation reporting was manual, so it happened rarely and was distrusted when it did.

The approach

The core decision was to make the asset — not the transaction — the primary record. Every event in a container's life attaches to that container, so its history is a timeline rather than rows scattered across sheets.

The second decision was to design permissions before features. In an operation where multiple staff, yard supervisors and managers touch the same records, RBAC is not an admin afterthought; it determines what the screens can even be.

  • Modelled every asset with an immutable identity and a mutable, fully-logged state.
  • Defined the role matrix — who can create, transfer, mark under repair, retire and report — before building any screen.
  • Made every state change an append-only event so history is reconstructable and nothing silently overwrites.
  • Built the manager dashboard from questions the operator actually asks weekly, not from a generic KPI template.

What we built

A fleet platform where the registry, the movement history and the reporting all read from one event-sourced record per asset.

  • Container and vehicle registry with type, capacity, ownership, current location and live status.
  • Lifecycle state machine — available, on hire, in transit, under repair, retired — with permitted transitions enforced server-side.
  • Hire and return workflow capturing counterparty, dates, rates and condition on both legs.
  • Maintenance and repair log per asset, building a real cost-to-own history over time.
  • Role-based access control with distinct roles for admin, operations, yard supervisor and read-only management.
  • Full audit trail — every state change stamped with actor, timestamp and previous value.
  • Utilisation and availability dashboard with filters by asset type, location and period.

Tech stack

Frontend

Next.jsTypeScriptTailwind CSSData tables

Backend

Node.jsExpressJWT authPolicy-based authorization

Data

PostgreSQLAppend-only event logIndexed reporting views

Infra

DockerCI deploysScheduled backups

Outcome

The fleet has one current state that everyone reads from, and a history that survives staff turnover.

  • Every asset has a live status and a complete, attributable history.
  • Shared logins are gone — each action is tied to a named user and a role.
  • Utilisation reporting is a dashboard filter instead of a manual spreadsheet exercise.
  • Repair and maintenance cost accumulates per asset, making replace-or-repair a data question.

Building something like this?

Most of these started as one module solving one painful process. Tell us which process is yours.

We reply within 24 hours, Mon–Sat.