design
Expansion Project Manager
Section titled “Expansion Project Manager”Who: Precious, the Expansion Project Manager. He runs pilots in new areas and sets one up and runs it without depending on other teams. Catalog category: Expansion (sidebar subtext EXPANSION). This build follows the PM’s own screen brief; the pilot overview and framework are out of scope, so there is no Overview page and nothing here models a pilot.
Sidebar (7): Clusters · Swap stations · Riders · Batteries · Release · Station activity · Telemetry. The flow opens on Clusters. Actions Precious cannot use (deactivating a cluster, kit assignment, station hold, bulk or temporary station assignment, enabling new areas) are not on screen at all.
Common to every register. Page header, a register table inside a .tbl-card with search in the card head, CSV export, and a footer with the page window. Three or more filters live in a Filters dialog (Reset and Apply, a count badge on the button, removable chips beside the page title). A dependent filter (LGA depends on State) stays disabled until its parent is chosen and clears with it. Every row opens its record or dialog. A record page remembers where it was opened from, so Back, the crumb and the highlighted sidebar item follow (for example a rider opened from Station activity goes back to Station activity).
States. There are no real loading or error moments in a static prototype, so Settings > Preferences has a Data state (prototype) select (Normal, Loading, Empty, Error), also reachable as ?state=loading, ?state=empty or ?state=error. It previews skeleton rows, the empty dataset, and the error with Try again on every register and every record page. Filtering to nothing shows its own “no match” state.
| Screen | What it shows and does |
|---|---|
| Clusters | Register (Name, State · LGA, Swap price, Days per week, Operations manager, Stations). Filters: search, State, LGA, No operations manager. Create and edit dialog (unique name, enabled states and LGAs only, price above 0, 1 or more operating days). Clusters is the one register that folds State and LGA into one column, to stay inside the table width budget; both still filter separately. Cluster record: details, attached stations, Add station. |
| Swap stations | Register (Station, State · LGA, Address, Cluster, Status, Manager). Filters: search, Status, Cluster (including No cluster), State, LGA. Add dialog (name 3 to 51 letters and spaces, address with map search that fills state and LGA, or a pin dropped on a real map (Leaflet, OpenStreetMap tiles) that can be clicked and dragged when the search finds nothing; either one passes the Location check; starts Inactive). Record: details with Edit, setup checklist (Location, Manager, Active, In a cluster) with a fix on each item, staff (assign or remove manager, swap operators, support staff), Activate (blocked without a manager) and Deactivate, Attach to cluster with a warning that it replaces the current one. |
| Riders | Primary station only. Register (Rider · phone, Account status, Cluster, Primary station, Agent). Filters: search name or phone, Account status, Cluster, Primary station, No primary station. The rider record replaces the table with tabs Rider details (personal information, onboarded by, retrofit schedule), Keke details (plate, kit, VCU, battery and station shown read-only, total swaps, last swap), Station, Battery and Release, and an Open in Telemetry button. Rider details and Keke details live here and not on the Release record. Set primary station lists active stations with their cluster and warns that it replaces the current one and moves the rider into that station’s cluster. |
| Batteries | Tabs: Rider fitting (find a rider, see the assigned pack, Assign battery with the refusal reason shown inline, Remove battery), Station stock (Request batteries, and the request list, which defaults to open requests, with Station and Status filters; a row opens its progress), Pack lookup (one serial search that opens a pack and also filters the register of all packs under it, which has Station and Status filters). |
| Release | Release progress register (Rider · phone, Primary station, Checks passed, Released; no work-order column, the retrofit check sits inside Checks passed). Filters: search, Station, Cluster, Released today. A row opens a lean release record: back button, title with account-status badge, plate and phone, an Open rider record button, then Primary swap station (Update or Set station), Battery (Assign or Remove) and Wallet (available and ledger balance and virtual accounts with a copy button, or an empty state with Create wallet and virtual accounts). A release checklist is pinned on the right: six checks, at least 4 of 6 must pass, Assign battery, Set station and Create wallet fixes on their rows, and a Release vehicle button that also needs a primary station. Kit, VCU and retrofit failures are the retrofit team’s, so they carry no fix button. Rider and Keke details are on the rider record. Profile fields, balances and virtual account numbers are mock data. |
| Station activity | Station picker (required) and a date (defaults to today). Headline strip: assigned riders, swapped here, swapped elsewhere, no swap, turnout. Swapped here, swapped elsewhere and no swap partition the assigned riders (completed swaps only); the Riders who swapped tab counts completed swaps only and marks visiting riders under their name; the Swaps tab is the full log and also shows failed attempts, counted in its sub-line. Tabs Swaps (time, rider, swap number that day, minutes since the previous swap), Riders who swapped (count, first and last swap), and Not swapped today, shown only when the date is today and labelled as of now (never-swapped riders first, Open telemetry per row). Swaps and Riders work for any date. |
| Telemetry | One search for name, phone or plate. Header with status, cluster, primary station, plate and a link to the rider record. Vehicle location card (a real Leaflet map with the vehicle marked) with separate states for no permission, no location data and error, plus when the vehicle was last active. Tiles: swaps in 30 days, total swaps, last swap (days ago, with the date). Enabled and Flagged sit in the header beside the account status. Recent swaps with a date range. States: before any search, no match, a rider with no vehicle or plate. |
Vocabulary. Account status uses the onboarding words (Verified, Retrofit pending, Retrofit completed). Station status is Active or Inactive; a station’s setup is Location, Manager, Active, In a cluster. Battery request status is Requested, Approved, In transit, Delivered. Release checks are the six from Release Vehicle in pm-onboarding, with the 4-of-6 minimum.
Data. One seeded dataset (6 clusters, 14 stations, 58 riders, packs and requests, and a month of swaps), so every count, strip and table agree. A station’s capacity is not modelled anywhere in the product yet, so no screen uses it.