Three weeks at the Lebrun bus depot, a maintenance site for the Paris bus fleet in the middle of its energy transition: Diesel and CNG Heuliez buses sit alongside the electric and hydrogen generations. Three deliverables came out of it, from the most technical to the most operational.
The troubleshooting web app
When a warning light comes on, two questions: what can I do myself, right now, and at what point do I hand over? The answer lives in thick manufacturer manuals, specific to each energy type. The web app turns it into a guided path, searchable by warning light, fault code or symptom.
A data-driven architecture
The defining choice: no business logic in the code. All the knowledge (decision trees, thresholds, procedures) lives in JSON files; the frontend is just a generic engine that reads a node and moves to the next. Adding a bus model or fixing a procedure never touches the code.
Each model is described by seven files, from the most stable to the most living, and aggregates its manufacturer specs into a unified view traced back to the source PDF page.
data
- index.json# model registry
- sources.json# source PDFs traced to the page
models/gx137_e_2019
- model.json# identity, energy, standards
- specs.json# dimensions, weights, capacity
- powertrain.json# powertrain group
- systems.json# braking, doors, pneumatics
- electrical.json# HV/LV, ECUs, CAN networks
- dashboard.json# warning lights and actions
- troubleshooting.json# decision trees
shared
- diagnostic_tools.json# ElfaTool, Forsee Diag...
- safety_procedures.json# HV lockout, voltage test
Two levels, one explicit handover
The core of the system: cleanly separating what the driver (Level 1) can do, with no tool or measurement, from what belongs to the workshop (Level 2). When Level 1 is exhausted, a node explicitly hands over, with a preliminary diagnosis, rather than ending in a dead end.
| Level 1 — Driver | Level 2 — Workshop | |
|---|---|---|
| Who | Driver, on the road | Certified technician |
| Actions | Visual check, key cycle, reset | Measurements, diag tools, HV lockout |
| Tooling | None | Megohmmeter, ElfaTool, voltage tester |
| Outcome | Resolved, or handover to workshop | Diagnosis and repair |
Traceability and controlled extrapolation
Every technical data point carries a reference to its source, page included, verifiable in under thirty seconds. And wherever the user manual doesn't spell out the repair, the tree deduces it from the bus's actual architecture (HV-BOX, BMS Master, the right tool) without ever inventing a component absent from the vehicle.
The Electroclass tool-dispenser analysis tool
The workshop hands out its tools through an Electroclass machine (an automated dispenser backed by the SupplyPoint software). The original software is slow and nobody uses it for the one question that matters day to day: who took what, and what hasn't been returned?
The RATP workstation is locked down, no Node, no Python. So I built the tool in Excel + VBA (analyse.xlsm), the only environment available everywhere. It ingests the machine's CSV transaction export and rebuilds two usable views.
- STOCK: per tool, current stock and the history of the latest operations (returned / taken, quantity, date, badge).
- BORROWINGS: per badge, the tools that are out and still not returned.
A nasty detail fixed along the way: the machine exports dates in the English format, Excel reads them in French. Those collisions had to be neutralised before any calculation, or the history fell apart. The tool also surfaces the traceability gaps built up over the years, down to the zero-stock tools that are candidates for renewal.
The guides, so it runs without me
The brief: the mechanics should be able to redo it all themselves after I leave. But many have little computer experience. So not a jargon guide with a couple of screenshots, but button by button, with annotated screenshots. I produced two.
Analyse the data
Export the machine's transaction history as CSV, load it into analyse.xlsm, read the STOCK and BORROWINGS tables. From export to reading, every click is illustrated.
Renew a drawer
Find the zero-stock tools, then unassign and reassign a drawer in the machine's configuration. The manufacturer's documentation dated back to 2011 and was incomplete: I rewrote it, up to date, in one afternoon.






