← The work

Case study · transit · 2026

vtv: a transit platform pitched cold to a city.

A unified operations platform for Riga’s municipal buses: a bilingual CMS for routes, stops and schedules, with an AI agent that advises while humans decide. Designed and built solo, presented at Riga City Hall in May 2026; the city’s office is forwarding the documentation to Rīgas Satiksme (Riga’s municipal transport operator).

A live product of my own, built outside this concept. Not work for Fin, and not affiliated with them.

compliant transit data
GTFS
languages, day one
2
access roles shaping the UI
4
to swap the LLM provider
1 var

The context

Riga’s buses run on institutional memory and legacy tools. Transit suites from the big vendors are heavy, priced for capitals with bigger budgets, and designed for the procurement committee rather than the dispatcher. Nobody asked me to fix this: the problem was unowned, the users were strangers, the market unproven.

The bet

A GTFS-native operations platform a municipal budget could buy, with AI positioned the only way a public operator can accept: the agent reads, summarises and advises; a named human decides and acts.

The VTV operations dashboard: fleet KPIs, driver-hour limits under EU 561/2006, a weekly shift calendar, and the Aīda assistant answering a shift-coverage question in a sidebar An active incident in VTV: a vehicle stopped with an OBD-II fault, the assistant returning structured vehicle status and three qualified replacement drivers with ETAs Generative analytics in VTV: a natural-language question produces a punctuality dashboard for route 13 with worst stops and the assistant’s recommendation
The operations panel: 187 vehicles, punctuality, driver-hour limits under EU 561/2006 and tomorrow’s shift coverage on one screen, with Aīda advising from the sidebar. Bilingual, role-aware, and live. Tap a capture to open it full size.

The design decisions

Bilingual from the first screen.

Every label, error and document exists in Latvian and English from day one, because in a public institution language is politics as much as usability.

Roles shape the interface.

Four access levels, and the UI shows each person only the verbs they own. A viewer cannot see buttons that would be refused; an editor cannot quietly become an admin. The permission model is the information architecture.

The agent lives in a sidebar, not in charge.

It answers transit queries with read-only tools and drafts into the knowledge base, beside the work rather than between the person and the data. Advice is visible, decisions are human, and every write is attributable.

No vendor lock-in, by design.

The platform swaps between LLM providers with one environment variable, because a city cannot hang its operations on one supplier’s pricing.

The door

The route to the room was a cold Facebook message about the idea. That led to a meeting at Riga City Hall in late May 2026, where I presented the working platform to Edvards Šlesers and colleagues; his office is forwarding the documentation to Rīgas Satiksme. The lesson I keep from it: a working product is the best deck, and nobody warm-introduces you into a category you invented for yourself.

What I learned

Designing for users you have never met, in a domain with hard external constraints like GTFS, forces the research to be real: ride the routes, read the specs, talk your way into the rooms. And institutions do not buy cleverness; they buy the feeling that the system will not embarrass them. Most of the design above is about manufacturing that feeling honestly.