Parcel Flow

Parcel delivery management · Yangon

From the office shelf to the final settlement.

A full-stack app for a small courier: log parcels as they arrive, assign riders, track every kyat of COD and delivery fees, and turn delivered parcels into merchant settlements and rider payouts.

Portfolio project · Demo data resets daily

ParcelsToday · all townships
Live
At office
38
On the way
24
COD pending
1,284,000 MMK
ParcelTownshipRiderStatus
PF-483921-740268SanchaungKo Zaw MinOn The Way
PF-105377-628410KamayutKo ThihaDelivered
PF-772045-319956HlaingUnassignedAt Office
PF-260813-904127BahanKo Aung KyawPostpone
PF-938460-152703TamweKo Htet NaingDelivered

Background

Parcel Flow was designed for a delivery business my sister was planning to start in Yangon. I modeled it on how small local couriers work: pickup arranged on Telegram, cash on delivery, township-based fees, and weekly settlements with merchants. The business plans changed, so it’s now a source-available portfolio project.

How it works

One status trail for every parcel.

Pickup happens on Telegram, outside the app. Parcel Flow takes over the moment a parcel reaches the office, and records every change after that.

01At Office

Log it on arrival

Pick the merchant, enter the receiver and township. The delivery fee fills in from township pricing, and a PF code is issued.

Office admin
02Assigned

Assign a rider

See each rider’s expected collection for the day before handing over more parcels.

Office admin
03On The Way

Out for delivery

Riders start delivery from their parcel cards and record the COD and fee they actually collect.

Rider
04Delivered

Ready to settle

Delivered parcels become financial items, eligible for the next merchant settlement and rider payout.

Rider or admin
Postpone

Delivery failed? The rider leaves a note, an admin reviews it and schedules a retry — the parcel goes back to At Office.

Canceled

Won’t be retried? It’s routed for return handling until it is Returned to Merchant.

Live demo

Each role sees exactly what it needs.

Pick a role — each one sees a different app. One click signs you in to a pre-seeded demo account.

Admins

Super admin & office admin
  • Create, edit and assign parcels
  • Review failure notes and decide retry or return
  • Correct status or rider with a recorded reason
  • Build settlements and rider payouts

Merchants

Read-only view of their business
  • See every parcel the moment it’s logged
  • Search by receiver phone, filter by date
  • Follow settlement and payment status
  • Browse paid settlement history

Riders

Assigned parcels only
  • Parcel cards built for the road
  • Start delivery and mark delivered
  • Expected vs. actual collection at a glance
  • Complete assigned merchant returns

COD & payouts

Cash that adds up, down to the last kyat.

Every delivered parcel produces financial items. Settlements and payouts are built from them — nothing typed in twice.

01

COD & delivery fee tracking

Collected, not collected, deducted from merchant or waived — each parcel carries its own fee and COD state.

02

Merchant settlements

Bundle eligible financial items into a settlement. A super admin marks it paid with the bank transfer receipt.

03

Rider payouts

Pay riders per payable delivery attempt and merchant-return way, drafted and confirmed in one place.

Merchant settlementShwe Pyi Fashion
Pending
PF-105377-628410COD − fee42,000 MMK
PF-938460-152703COD − fee27,500 MMK
PF-611904-283355Fee deducted−3,000 MMK
Net to merchant66,500 MMK
Super admin confirms with a bank transfer receipt.Awaiting payment

How it’s built

Type-safe from the database to the form.

Read the source on GitHub
  • Next.jsApp Router
  • React 19
  • TypeScript
  • SupabasePostgres + Realtime
  • Drizzle ORM
  • Better Auth
  • Zod
  • React Hook Form
  • Tailwind CSS
  • shadcn/ui
  • Cloudflare R2images
  • Railwayhosting
  • Bun
  • Playwrighte2e
  • Sentry
01

Status state machine

Every parcel moves through defined statuses with allowed transitions per role. Manual corrections require a recorded reason.

02

Live updates

Status changes appear on admin, merchant and rider screens without a refresh, scoped by row-level security.

03

Financial items as the source of truth

Delivered parcels generate financial items; settlements and rider payouts are built from them, so nothing is entered twice.

04

Role-based access

Three roles with scoped views and permissions, enforced on the server, not just hidden in the UI.

Readable parcel codes

PF-XXXXXX-XXXXXX codes, unique in the database, easy to read out over the phone.

Township pricing

Delivery fees come from township settings, so no one quotes from memory.

Tested & benchmarked

Unit, integration and Playwright end-to-end tests, plus query performance baselines.

See it working.

Try the live demo — no sign-up needed. Sample data resets every day.