Sunday/Work/№ 04 · DICHUNG

DICHUNG.

On-demand ride-share and delivery across 40+ Vietnamese provinces — airport transfers, shared trips, self-drive rentals, and express cargo, all in one app.

ORG
Dichung JSC
Year
2021 — 2022
Role
Frontend developer
Timeline
2 years · 5 product lines
Dichung banner
01

The brief

Context · what existed before

Long-distance trips between Vietnamese provinces ran on empty seats and Facebook posts — drivers ferried passengers one-way, came back empty, and matched riders by hand in scattered group chats.

Inter-province travel in Vietnam is huge — Hanoi to Hai Phong, HCMC to Vung Tau, the airport runs at 4am — but the matching layer was entirely manual. Drivers posted “còn 2 chỗ Hà Nội — Lào Cai” to Zalo groups; passengers replied with phone numbers; payments settled in cash.

Dichung wanted one app where a passenger could search a route, see live capacity from real drivers, and book a shared seat or a private car in under a minute — and where a driver’s empty return leg became a second paid trip instead of fuel burn.

The job: design and ship the customer-facing web app for five product lines — shared rides, airport transfer, express courier, self-drive rental, and tour packages — across 40+ provinces, on a stack a small team could keep deploying weekly.

02

What changed

Outcome · two years on
40+
Provinces covered
nationwide route graph
5
Product lines · one app
ride · airport · cargo · rental · tour
1min
Search → booked
from manual chat to one-tap
2yr
Shipping cadence
weekly releases, small team
03

How it got built

Process · five moves
  1. 01

    Built the route search before anything else.

    The product lives or dies on whether a passenger types ‘Hà Nội — Lào Cai’ and gets real seats back fast. Spent the first weeks tuning the autosuggest, the shared/private split, and the time-window picker so the search felt instant on a 3G connection from a tablet in a coffee shop.

  2. 02

    Treated each product line as a config, not a fork.

    Shared rides, airport transfer, courier, rental, and tour all share the same booking primitives — pickup, dropoff, time, capacity, price. Modelled them as one form engine driven by config, so adding a new line meant a JSON entry plus a copy file, not a new page tree.

  3. 03

    Made the booking flow survive a flaky network.

    Passengers book on the move — buses, taxis, weak hotel WiFi. Built every step (quote, lock seat, pay, confirm) as resumable: refresh mid-payment and the queue picks up with the same lock. Optimistic UI for confirmations, server reconciliation on retry. Zero double-bookings.

  4. 04

    Wired the driver and dispatch tooling to the same spine.

    Same React codebase, different routes — one bundle for passengers, one for drivers, one for dispatch. Shared the same auth, same booking state, same SSE stream. Dispatch ops staff could see exactly what a passenger saw, which killed an entire class of ‘I booked it but they say no’ tickets.

  5. 05

    Shipped weekly for two years.

    Small team, no staging drama. Built a release rhythm with feature flags, gradual rollouts by province, and on-call rotation tied to booking-volume windows (4am airport spikes, Friday-evening intercity surges). Every release rode a real demand peak, not a calendar.

04

What it’s built on

Stack · web · mobile-first
Frontend
ReactSass

Five product lines, 40+ provinces, weekly releases for two years — and an empty return leg turned into a second paid trip.

— Dichung · 2021–2022
Marketplace or ops product?sunday19x3@gmail.com
Back to →All work