Case study · Fleet ops · Client work · 2025–2026

Navigator.

The engine won’t start until service is closed. A driver PWA, a dispatcher admin, 16 garages and 1С — on one backend.

So the “who owes whom” argument never reaches the director.

ProductUIInteractionFrontend
Driver PWA: service request, five fields auto-filled from 1С
Driver PWA: engine unlocked, vehicle ready
Driver PWA home: balance, mileage and an overdue-service warning
1С
5 of 6fields filled
before the driver types
Centre tab · telematicsEngine lock
161cars in the fleet
16partner garages
15admin sections
2PWA apps
5cities
1С+ Telegram + AI
20-second summaryClient work
What
A car-rental platform for a St Petersburg taxi fleet: driver PWA, dispatcher admin, garages and 1С on one backend.
Why
Every step lived in a separate chat; service orders were backdated and mismatches caught once a month.
My role
Product, UI, interaction and frontend, built with AI co-workers.
Result
161 cars · 16 partner garages · 15 admin sections
Explore the case ↓
Overview

A car-rental platform for a St Petersburg taxi fleet, where one service order looks the same to the driver, the garage and the finance team.

RoleProduct + UI + interaction + frontend
Scope15 admin sections · 2 PWA
StackReact · Vite · Fastify · Postgres · 1С · Tauri
Year2025–2026
StatusLive · v3.22.293 · RuStore
Read the full story

Car-rental platform for an SPb taxi fleet: driver PWA, dispatcher admin, integrations with 16 garages and 1С. 15 admin sections, 2 PWA apps, 5 cities — every state designed so the «who owes whom» argument never reaches the director.

Built with AI co-workers (Claude Code). Client work, 2025–2026.

At a glance

One order. Three screens.

Driver’s phone, garage chat, finance admin.

3
sides approvebefore a single rouble
can be paid
01 · Context

Excel + WhatsApp. The fight reaches the director.

161 cars, 16 garages in 5 cities, 1С as the source of truth — and every step a separate chat.

Problem

Same thing every day

Missed service, unapproved invoices.

Thesis

The service order is one entity

Payment is impossible until all three sides approve it.

Three rules
  • 01Coloured status beats the number.
  • 02Tabular numerals everywhere.
  • 03Inline edit, never a popup.

Rejected

Task cardsDetail pagesPaginationWeek foldersAnonymous comments
Read the full story

A 161-car fleet, 16 partner garages in 5 cities, 1С as the source of truth. Before the system, every step was a separate chat. Service orders backdated, mismatches caught once a month.

Problem — same thing every day. Driver missed service. Garage sent an invoice without approval. Accounting can’t tell what they’re paying for. Information arrives chaotically from chats and calls — never from a single form.

Thesis — the service order is one entity. One data object looks the same in three UIs: driver’s phone, garage chat, finance admin. Payment is impossible until the order is approved by all three sides.

Three rules, no exceptions. Coloured status beats the order number — the red «Needs re-approval» chip always sits above the black title. Tabular numerals everywhere — when amounts tick, layout doesn’t shift. Inline edit, not popup — clicking a field in a row edits in place; no modals, no detail pages.

Rejected. Card layout for tasks — we have hundreds; rows + scroll wins. Detail pages — everything inline in the same row. Pagination — virtual scroll wins on 10 000+ orders. Per-week folders — week-divider inside one feed instead. Anonymous comments — every reply has author + avatar.

02 · Process

From audit calls to v3.22 in production.

Every admin decision carries a user quote.

Discovery90 min of recordings7 pains · 3 roles
ArchitectureOne entity · 3 views1 schema · 3 UIs
MVPDriver PWA + adminReact · Fastify · Prisma
IterationAction logs → fixes1,135 events · 30+ fixes
Productionv3.22.293 · live5 platforms · 1 backend

The service order · happy path

Driver

Requests service in the PWA

Garage

Confirms in chat

Fleet

Approves the limit

Lock

Engine unlocked

Final

Paid, 1С reconciled

Each step in detail

90 minutes of recordings with the fleet → 7 specific pains → design system → UI kit → integrations → prod. Every admin decision carries a quote prefix.

Discovery. Recorded 90 minutes of conversations with dispatcher, driver and garage manager. Transcribed into 7 pains: «specialists never click into a detail page», «comments need authors», «we need rows, not cards».

Architecture. Service order: statuses (draft / under review / re-approval / paid) shared across all 3 UIs. 1С binding by UUID, not name. «Mismatches» as a separate table, not a bug.

MVP. React + Vite + TypeScript on the front. Fastify + Prisma + Postgres on the back. Tauri wrapper for iOS/Android. First version: 5 driver tabs, 8 admin sections.

Iteration. 1 135 events in logs in month one revealed: where people clicked and stuck, where they hit «Cancel» and went to chat. Logs produced 30+ micro-UI fixes and 5 new admin sections.

Production. Web + VK Mini App + Android APK on a single backend. CI/CD via GitHub Actions, self-hosted runner. Telematics integration locks the engine until service is closed.

UX map, happy path — 5 nodes, 3 actors: driver requests service via PWA → garage confirms in chat → fleet office approves limit → engine unlocked → payment, 1С reconciled.

03 · Driver PWA

Five tabs. One lock.

The round centre button isn’t a tab — it unlocks the engine.

My car: balance, mileage, service warning

My carBalance, mileage, tier.

Service request with 1С autofill

ServiceSix fields, five pre-filled.

Engine unlocked screen

LockRed until approved.

Profile with cashback tier

ProfileCashback tier, history.

AI assistant with suggested questions

AI assistantTypical questions, answered.

80%
handled by AIbalance, service,
“how to drive free”

Coded mockups with test data — no real driver.

Each tab in detail

Driver PWA on five tabs. The central round button isn’t just a tab — it’s a physical engine unlock. Until service is closed, it locks the car at the telematics layer.

01 · My car — balance, mileage, tier. One screen answers three questions: how much money I have, what’s up with service, what cashback tier I’m on. Service overdue → red banner up top, driver doesn’t call the office.

02 · Service — six fields, five pre-filled. Name, contract, phone, make, plate — all pulled from 1С automatically. Driver picks only work type, garage, date and time. Request lands in garage chat without manual entry.

03 · Lock (centre) — not a design choice, a business rule. Until the service order is approved by both fleet and garage, the button glows red and the engine physically does not unlock. After approval — green: «Engine unlocked — no request needed».

04 · Friends + AI — 5 000 ₽ per friend, AI for the rest. Referral: 5 000 ₽ when a friend tops up 10 000+ ₽, capped at 15 000 ₽. AI Assistant intercepts 80% of typical questions («what’s my balance», «when is service», «how to drive for free») — operator only handles non-trivial.

The lock tab: engine unlocked, no service order needed
Signature rule

Not a design choice. A business rule.

Until fleet and garage approve the order, the engine physically does not unlock.

  1. ●
    RedOrder not approvedThe car stays locked at the telematics layer.
  2. ✓
    Green“Engine unlocked”No request needed — drive.
04 · Admin control

15 sections. One entity — the service order.

Back office for dispatch, finance and garage security. Personal data blurred.

Dashboard
Admin dashboard: cars, garages, orders, mismatches

01 · DashboardIf the fourth tile isn’t zero, look no further.

Service orders
Service orders list with the red re-approval chip on top

02 · Service ordersRed “Needs re-approval” always on top.

0
mismatcheswith 1С, reconciled
in real time
The back office

Every section, one rhythm.

Cars
03 · CarsMileage, contract, service history.
Garages
04 · Garages16 in 5 cities, own limits.
Parts and jobs
05 · Parts & jobsPrices via Rossko API.
Replacement stats
06 · Replacements2,472 by make and city.
Chat
07 · ChatA thread per order.
Reports
08 · Reports1С mismatches in red.
To pay
09 · To payConfirmed → invoice → paid.
Users
10 · UsersThree access tiers.
Bookings
12 · BookingsConflicts, auto-reminders.
Rossko API settings
13 · Rossko API5 cities, 0 manual prices.
Action logs
14 · Action logsWho did what, when.
AI assistant
16 · AI assistant70 scenarios, 11 roles.
Mobile admin: dashboard
Mobile admin: service orders

The admin fits a phone, too.

Catalog requests queue
Referral program settings

11 · Catalog requests · 15 · Referral

All 16 screens, captioned

Back-office for dispatcher, finance and garage security. Coloured status flag, 1С mismatches, «to-pay» funnel, replacement stats by make and 70-scenario AI assistant on 11 roles.

  • 01 · Dashboard. One screen, four numbers: cars, garages, orders, mismatches. If the fourth tile isn’t zero, you can stop looking elsewhere.
  • 02 · Service orders. Coloured status outranks the order number. Red «Needs re-approval» always sits up top.
  • 03 · Cars. Each car carries its own mileage, contract, status and service history.
  • 04 · Garages. 16 garages across 5 cities. Each has its own payment limit and priority.
  • 05 · Parts & jobs. Parts catalog with auto-pulled prices via Rossko API.
  • 06 · Replacement stats. 2 472 replacements in the period by make and city — clear which models break more.
  • 07 · Chat. Thread per order. AI agent intercepts the typical, escalates only edge cases.
  • 08 · Reports. 1С reconciliation in real time — mismatches highlighted red.
  • 09 · To pay. Funnel: confirmed → invoice → paid. Per-garage limits as guard rails.
  • 10 · Users. Three access tiers: super-admin, finance, garage security.
  • 11 · Catalog requests. Manual catalog edit queue with priority and SLA.
  • 12 · Bookings. Booking calendar with conflict resolution and driver auto-reminder.
  • 13 · Rossko API. 5 cities, 5 key pairs, 0 manual price entry.
  • 14 · Action logs. 1 135 events — who did what when. Without logs, «who owes whom» is unsolvable.
  • 15 · Referral. Bonus, cap, priority — three knobs and the program runs.
  • 16 · AI Assistant. 70 scenarios on 11 roles. Average model confidence — 100% in trained dialogues. Suggestions on top because 80% of questions repeat.

Mobile admin views: the dashboard and the service orders.

05 · Result

At launch, in production.

Five platforms on a single backend.

161cars in the system
16partner garages
195orders in flight
01С mismatches
70AI scenarios, 11 roles
1,135events in logs
Driver PWA·VK Mini App·Android APK·RuStore ↗·Admin console
Release details

Version v3.22.293. Driver PWA + VK Mini App + Android APK + RuStore + admin console on a single backend. Production: навигатораппспб.рф/app/. 5 cities · 5 platforms.

Questions

Do you design fleet management or taxi dispatch software?

Yes. Navigator.Taxi runs a 161-car fleet across 16 garages: a driver PWA, a dispatcher admin and 1C integration.

Can software enforce maintenance rules?

Yes. In Navigator.Taxi the engine stays locked until a service is approved, and the driver app pre-fills most fields before the driver types.

Running a fleet, taxi
or logistics operation?

I design and ship operations software for fleets: driver apps, dispatcher consoles and integrations with your accounting.

See all casesBook a free call