AC Mobility was paying an external vendor to run its core operations platform; expensive, brittle, and misaligned with how the business ran. I was brought in as the sole designer to replace it entirely, from scratch.
The result is a live system serving 21 upcountry bus operators and 995 agents, processing $130K+ daily in upcountry operations alone. Kigali routes run on the same USSD and mobile infrastructure for commuter top-up, self-registration, card management, and balance. Total system reach is substantially wider. That translates to 2,032,930 tickets and 76,615 trips monthly across upcountry operations.
Five platforms. Five user types. One design system.
The e-ticketing platform sits at the center as the source of truth for tickets, schedules, and transactions. Around it: an Android POS terminal for agents, a consumer mobile app (Tap&Go) for commuters, a USSD interface for balance management, and an Android Inspector app for field validation. The USSD, mobile, and web platforms serve both upcountry and Kigali operations.
A financial layer controls float allocation across agents, principals, and internal teams. The ability to issue a ticket is not a UI state, it is a financial condition.

System architecture diagram: four platforms connected to the central e-ticketing
Accountability over flexibility. Early versions let operators cancel, transfer, and modify tickets without record. Revenue losses had no traceable cause. I introduced mandatory reason fields and permanent audit history across all modification actions. Business owners can now see patterns, not just losses.

Every modification attributed, timestamped, and reason-coded.
Design for the worst device, not the average one. POS hardware dates to 2016 and cannot be updated. Every flow was stripped to essential steps, defaults pre-populated, guardrails placed at confirmation rather than mid-flow. Result: approximately 30 seconds per ticket at 99.9% of daily sales volume.
Financial state as a design problem. When an agent's float is exhausted, they cannot sell. This is not an edge case, it happens daily. The system surfaces float constraints clearly, prevents invalid transactions at the point of sale, and communicates the reason in terms the agent can act on immediately.
Channel parity without interface uniformity. The same ticket, schedule, and balance data surfaces across five interfaces, but the interaction model is completely different on each. USSD is sequential and session-bound. POS is tap heavy and time pressured. Tap&Go is self-directed. The design challenge was keeping data consistent while letting each interface behave on its own terms, not forcing a lowest-common-denominator approach across all of them.
Role as a design surface. Not all agents are equal. The system supports a hierarchy: agents, super agents, principals, each with different financial permissions, visibility scope, and interface states. A super agent sees float balances across agents they manage. A principal sees across branches. Designing these role views meant the interface itself had to communicate authority and constraint without a manual, at a glance, before any action is taken.
4.1. E-Ticketing Platform (Web · Operations core) The source of truth. Manages tickets, schedules, transactions, and the financial layer. Designed for operations staff who need full visibility without being overwhelmed by system complexity.

Operator dashboard, tickets, sales trips, activity overview
4.2. POS Terminal (Android · Agent-facing) Built for throughput on decade-old hardware. No unnecessary steps, defaults pre-populated, guardrails at confirmation. Assumes high volume, low error tolerance, and variable literacy across 995 agents serving 21 bus operators.



Register card flow, onboarding and input states
4.3. Tap&Go (Android, iOS, Web · Consumer) Rising self-service channel for commuters. Designed for people familiar with USSD and cash, not apps. Balance, booking, and validation in one flow. No training assumed. Projected to reach 30% of daily sales by June 2026.



Tap&Go core flow: home, booking, and ticket confirmation screens
4.4. USSD (Consumer) Handles top-up and transaction history under strict session constraints. Reaches users with no smartphone or data access. Built around the USSD mental model: numbered menus, sequential flows, no back-navigation.



USSD top-up flow, step-by-step dialogue states
4.5. Inspector App (Android · Field) Offline-first ticket validation. Fast scan-to-result, clear pass/fail states readable in bright daylight and crowded conditions.



Inspector scan result screen, validated and cancelled states
$130K+ processed daily in upcountry operations alone. Kigali commuters on the same USSD and mobile stack push total system reach substantially wider. 2,032,930 tickets monthly. 76,615 trips monthly. 21 upcountry bus operators. 995 agents. 0.6% transaction reversal rate. ~30 seconds average ticket issuance. External vendor contract eliminated. v2.0 in planning to onboard additional transport operators.
Transport is the context. The problems are not. Distributed channel consistency, non-standard infrastructure, financial constraints and role hierarchies surfaced as UI problems; these appear in fintech, logistics, healthcare operations, and anywhere multiple actors share state under real-world pressure.