Tiko is Bangladesh's multi-tenant transit operating system. 90% of intercity buses still run on cash, paper ledgers, and WhatsApp — I designed the architecture, tokens, and four tenant-aware surfaces that replace all three, for personas who have never opened a piece of software before.
Bangladesh's intercity transport sector manages massive fleets but operates almost entirely in the dark. 90% of intercity buses rely strictly on cash, paper ledgers, and WhatsApp — a complete absence of digital infrastructure that causes 15–20% revenue leakage per operator and leaves the entire industry unable to see its own numbers.
I joined as Lead Product Systems Designer in 2024, tasked with a question bigger than any single screen: how do you design one multi-tenant mobility network that has to work for four entirely different personas — a system administrator, a fleet operator's back office, a counter agent under pressure, and a price-sensitive consumer — each with different permissions, different hardware, and wildly different digital literacy?
The answer wasn't four apps bolted together. It was one tokenized architecture — Super Admin, Operator Admin, Counter & Agent Terminal, and B2C Consumer Web — all reading and writing to the same database, all inheriting the same component library, each one tuned to the job its user actually has to do.
That architecture now anchors major public transit networks in production: the Challan & Audit system has run live since January 2026, and four new bus companies onboarded onto Counter Ticketing in a single month — at a 91% platform gross margin.
"It was never one interface to design. It was four interfaces that had to agree with each other, in real time, off a single source of truth."
Super Admin, Operator Admin, the counter terminal, and the consumer storefront were each being scoped as if they were separate products. Without a shared permissions model and component system, every new tenant risked feature fatigue, permission leaks, and inconsistent terminology between the people configuring the system and the people using it under pressure.
A single Figma foundation — colors, type, buttons, field inputs, and molecular components — let four tenant-aware surfaces inherit the same visual language while each was tuned for its own job: configuration, operations, split-second transactions, or retail conversion.
90% of intercity buses run on cash, paper ledgers, and WhatsApp groups — no digital record, no audit trail, no visibility into what's actually happening on any given route.
Without digital reconciliation, cash mismanagement and unrecorded discounts quietly erode operator margins — and there's no dashboard that could even show it happening.
A system administrator, an operator's back office, a counter agent, and a retail consumer each need a completely different product — without four separate codebases or four separate design languages.
To avoid feature fatigue and manage a massive configuration matrix, I structured a universal design system and navigation hierarchy split across four distinct user experiences — all reading from the same core engine.
The ticketing engine operates in high-volume, split-second environments. It's designed symmetrically across web dashboards for desktop terminals and a native Android app for field counters and agents — both built on the same token layer.
A high-density, centralized space to monitor daily operations, close accounting books, and track revenue leakage — live in production with a major public bus enterprise since January 2026.
Each ecosystem inherits the same token layer — then diverges exactly as far as its user's job demands.
Replace each .sc-img-zone with an <img> tag when your Figma exports are ready.
Every screen across the four ecosystems pulls from one Primary Blue ramp, a semantic Alert family (Danger / Success / Warning), and a set of domain-specific seat-map colors (VIP, Reserve 1, Reserve 2) — kept separate so a "reserved seat" can never be confused with a "failed payment." Color and ramp values below are pulled directly from the live Color Styles panel; Alert tones are representative pending that group's export.
One flat, rigorously maintained page list — from brand primitives through to molecular components — means a Field_Input built once shows up identically whether it's collecting a phone number at a counter or a price on the consumer storefront.
How each epic workflow is distributed across the four-ecosystem architecture — the working document that kept four surfaces from drifting apart.
| Epic Workflow | Super Admin | Operator Admin | Terminal / Agent App | B2C Storefront |
|---|---|---|---|---|
| Ticketing Matrix | Custom ticket UI designer & dynamic bill configuration | Branded voucher customizer & financial settlements | 3-second counter booking grid, VIP purchases & manifest migrations | Multi-modal API search, live booking & Air GDS checkout |
| Fleet Ops & Logistics | Seating layout creator & universal route map configurator | Comprehensive VMS (inventory), HRM & optional VTS core | Dynamic fuel/expense log tracking & status flags | Real-time bus location tracking over interactive SMS |
| FinTech & Auditing | Global fee structuring, usage invoicing & credit edits | Third-party agent balance adjustments & commissions | Prepaid/postpaid agent wallet ledger adjustments | Instant self-service refunds & EMI checkout options |
Defined the four personas — admin, operator, agent, consumer — and the permissions and hardware constraints each one actually works under.
Mapped the full service design matrix — every epic workflow against every ecosystem — before any wireframe was drawn.
Built the Colors, Typography, Button System, and Field_Input primitives once, shared across all four surfaces from day one.
Counter Ticketing and Challan & Audit shipped first, hardened against real counter conditions before the consumer layer launched.
New operators onboard onto an existing component library — four joined in a single month with near-zero transition lag.
Field_Input, Number_Input, Phone_Input, and Price_Input built once and reused identically across Super Admin, Operator Admin, the terminal, and the storefront.
Check, Card, Pagination, Label-Tags, Table Rows, Modal, and Filter components documented once, mapped to every screen that uses them.
Every Super Admin screen ships with the exact field-level visibility rules engineers need to implement the permissions matrix correctly.
Web and native Android counter flows reviewed side by side at every milestone so a ticket sale behaves identically on either surface.
Danger / Success / Warning and VIP / Reserve tokens are governed separately, so a system-state color can never collide with a seat-state color.
New tenant onboarding leans entirely on the existing library — the reason four operators went live on Counter Ticketing in a single month.
The same trip record needed to read as a configuration object to an admin, a liquidity event to an operator, a two-tap transaction to an agent, and a price to a consumer. Designing the IA per-role, not retrofitting one view for everyone, is what kept all four from fighting each other.
"Fast" isn't a performance footnote at a bus counter — it's the spec. Designing the booking grid around a two-tap completion target, not a feature checklist, is what made the terminal usable under real pressure.
VIP, Reserve, Danger, and Success aren't decoration on a seat map — they're how an agent makes a split-second decision. Keeping domain tokens separate from system-alert tokens prevented exactly the kind of confusion that causes double-bookings.
Four operators onboarding onto Counter Ticketing in a single month, with no onboarding team, is a stronger usability signal than any lab test score — it means the component library actually generalizes to a fleet it was never designed for in isolation.