Dolmapp
Every minibüs in İstanbul, finally mapped.
İstanbul's dolmuş network carries millions of trips and none of it is written down: no timetable, no signage, one line code running two directions. Dolmapp turns that local knowledge into something a stranger can use: which line, which direction, where to stand, where to get off, and what it costs.
- Year
- 2026
- Platforms
- iOS · Android · Web
- Scope
- Product → Launch
- Status
- Pre-launch, waitlist open

Role
Product, UX/UI, engineering, launch kit
Stack
- Expo
- React Native
- Tamagui
- Supabase
- Redux Toolkit
- Next.js
- Remotion
Chapters
/A network that lives in people's heads
The problem
The real competitor isn't another app. It's the habit of asking the driver, or the stranger next to you.
The dolmuş is a beloved piece of İstanbul: shared minibuses that leave when they fill up and stop wherever the locals know to stand. It is real infrastructure. It also exists almost entirely as local knowledge.
There is no timetable to read, most stops are unsigned, and every line code runs in two directions. Board the wrong one and you lose 30–45 minutes going away from where you're headed.
Google Maps, Moovit and the official İBB/İETT apps are strong on metro and municipal buses, but the minibüs layer is missing, partial, or not direction-aware. They tell you a minibüs exists. They don't tell you which one to board or where to stand.

/Outsiders in their own city
Who it's for
Three riders, one question: which line, which way?
The newcomer
Moved neighbourhood, moved city, new job, new campus. Needs the network and has none of the local knowledge it runs on.
The confident local
Knows their own line perfectly and none of the other 339. The network is only legible in fragments.
The driver
Live tracking only exists if drivers publish their position. They need a one-tap shift mode, not another app to learn.
The relief Dolmapp sells isn't “I saved four minutes.” It's “I'm on the right one.”
/Before any pixel, the map had to be right
The dataset is the product
Nobody had published the minibüs network in a form an app could route over. So the first product was the data: İstanbul's raw minibüs GeoJSON, re-ordered per direction, with every stop snapped onto its polyline in stop order.
Then the data had to survive a moving minibus. The app pulls the network once, stores it on-device in 500 KB chunks, and ships a bundled copy inside the build as a fallback, so it opens in a tunnel, on a bad connection, exactly where people need it.
Minibüs lines mapped
Both directions where they run
Stops, ordered
Snapped per direction
Chunk size on-device
Offline-first cache
Stops with corrupted indices
Found and fixed, Jul 28
Source · Dolmapp product docs & dataset integrity handover, July 2026
From raw city data to a phone in a tunnel
- 1
Source
Raw GeoJSON
İstanbul's minibüs polylines and stops, around 250k lines of raw geometry.
- 2
Build
Per-direction ordering
Scripts split each line into directions and snap every stop onto its polyline, in order.
- 3
Publish
Supabase + edge functions
The dataset is versioned and served through edge functions, with flags and overrides on a 15-minute cache.
- 4
Device
SQLite, chunked
Pulled once, cached in 500 KB chunks, with a bundled fallback compiled into the build.
- 5
Rider
Offline trip plan
Planning runs on the phone. The server is only a fallback.
A transit app that's wrong once gets deleted. Accuracy has to lead, not trail.
The most important finding of the project was a bad one. An integrity audit on 28 July showed 83.9% of stops carried corrupted order indices, the kind of bug that makes a transit app confidently wrong. It was fixed at the source and the dataset re-published before any rider saw it.
/Never the wrong direction
Planning on the phone
Trips are scored on walking distance, direction and stop order, not on a name match, so a suggestion never sends you the wrong way. Multi-leg trips chain up to five rides, with walking legs measured on an on-device pedestrian graph built from OpenStreetMap.
On 23 July the planner was run inside the real app against a desktop reference on 74 randomized pairs across the city. In the 12 cases where the answers differed, the app's pick was equal or faster every time.
Citywide pairs replanned on-device
Wrong recommendations
Missed trips or crashes
Trips needing 2+ rides
Source · On-device trip-planner test report, 23 Jul 2026 (point-in-time, before the Jul 28 index fix)
Small decisions that make it trustworthy
Refuse instead of guessing
Kadıköy → Beşiktaş has no minibus-only route. Raw geometry would suggest walking across the Bosphorus; the app says so plainly and suggests a ferry or metro instead.
Never fake “live”
Vehicles only appear where drivers are broadcasting, and are marked explicitly. Routing, stops and fares work with zero drivers online.
Fare before you board
A distance-based estimate against the current tariff, so the cash is ready before the door opens.
Stop names as people say them
Türkçe and English UI, but stop names stay in the language riders actually use at the kerb.
/Five moments, one question answered
The app
Scroll to ride through a trip, from “where do I stand?” to “I'm on the right one.”
01 · Plan
Type where you're going
Origin, destination, optional stops in between, and the lines already passing within a short walk.

02 · Route
We pick the line and the direction
Every option is scored on walking distance, direction and stop order. Transfers, walks, fare and duration in one card.

03 · Live
Watch it come to you
Where drivers share their location, time your walk instead of standing at an unsigned kerb.

04 · Lines
Browse all 340 lines
Searchable by line code, neighbourhood or stop, on both sides of the Bosphorus.

05 · Stops
Know exactly where to get off
Ordered stops for each direction, with boarding and alighting points marked before you step on board.

Real device captures









/Colour that means something on a map
The design system
On a transit map, colour isn't decoration. It's instruction. Every hue in the system maps to one meaning a rider needs at a glance: blue is the ride, teal is where you board, green is where you get off, purple is a transfer. Red is reserved for errors and nothing else.
Big radii and one geometric typeface (Manrope) keep a dense, data-heavy app feeling calm in one hand on a moving bus. The tokens live in one file and are mirrored into the website and a standalone design-system site.
Manrope · Display 34/38 · ExtraBold
Nereye gidiyorsun?
Manrope · Body · caption 12
Sana en yakın duraktan doğru minibüsü bul.
Field
22px
Card
24px
Hero / sheet
28px
Pill
999
/A waitlist, a scroll story, a campaign
Website & launch kit
The marketing site tells the product story the way the app works: the hero phone is built in code, not screenshotted, and a pinned scroll sequence rides through five real moments of a trip. It's a separate Next.js deployment against the same backend, alongside an operations admin for complaints and lost & found.
The launch assets came from the same source of truth: App Store and Play screenshots at every device size, the Play feature graphic, a nine-post Instagram campaign, YouTube channel art and two cut promos rendered with Remotion.




/Four months from first commit to store builds
Timeline
17 Apr
First commit
Admin panel with feature flags follows two days later.
21–24 Apr
Supabase-backed data
Routes and stops move from files to a published dataset.
23 Jul
On-device planner test
74 citywide pairs, zero wrong recommendations.
25 Jul
Planning moves on-device
Server becomes the fallback; fares consolidated into one table.
27 Jul
TestFlight 1.0 (3)
Web and admin split into their own repository.
28 Jul
Dataset integrity fix
83.9% of stops had corrupted indices; fixed at the source.
30 Jul
Android internal 1.0.0 (5)
Waitlist wired to a real backend.
8 Aug
Launch kit rendered
Store screenshots, campaign posts, promos.
15 Sep
Design-system site
Tokens, screens and brand published as their own site.

Next / Mobile app · Odoo platform
Diet Market