Projects

RATP

RATP

An internship at the Lebrun bus depot: a web app for Heuliez bus troubleshooting (two-level decision trees, fully data-driven), an Excel/VBA analysis tool for the Electroclass tool dispenser, and illustrated step-by-step guides so staff can run it on their own.

Results

  • Troubleshooting web app: 7 bus models modelled, 3 fully documented
  • Excel/VBA tool that restores traceability on the tool dispenser (stock, borrowings per badge)
  • Two illustrated, button-by-button guides usable by staff with little computer experience

Tech stack

  • React
  • TypeScript
  • Vite
  • Tailwind CSS
  • FastAPI
  • JSON data-driven
  • Excel / VBA

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.

3
deliverables produced
7
bus models modelled
27
decision trees (GX 137 E)
2
levels: driver / workshop

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.

https://depannage.lebrun.local
Bus model selection screen, with a thumbnail per vehicle and an energy badge
Model selection, grouped by family (GX 137, GX 337) and by energy: electric, Diesel, CNG, hydrogen.

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
https://depannage.lebrun.local/gx137_e
Bus technical sheet with identification, dimensions and weights
Sheet for a GX 137 E. Six tabs: overview, powertrain, systems, electrical, dashboard, troubleshooting.

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 — DriverLevel 2 — Workshop
WhoDriver, on the roadCertified technician
ActionsVisual check, key cycle, resetMeasurements, diag tools, HV lockout
ToolingNoneMegohmmeter, ElfaTool, voltage tester
OutcomeResolved, or handover to workshopDiagnosis and repair
https://depannage.lebrun.local/gx137_e/depannage
Troubleshooting catalogue with category filters and one card per symptom
Model catalogue: 16 entry points, filtered by domain, sorted by severity (critical / alert).
https://depannage.lebrun.local/gx137_e/depannage/isolement-ht
Level 1 driver guided step, with method, target component and expected result
A Level 1 step (green banner): a key cycle to clear an intermittent fault, with no tools.
https://depannage.lebrun.local/gx137_e/depannage/isolement-ht
Handover node between level 1 and level 2 with a button to switch to the workshop
The handover: Level 1 actions exhausted, preliminary diagnosis shown, switch to the workshop.
https://depannage.lebrun.local/gx137_e/depannage/isolement-ht-atelier
Level 2 workshop guided step, with required tooling and a high-voltage lockout procedure
Level 2 (blue banner): required tooling, HV lockout, danger-to-life warning.

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.