OnWay

Our Work · Local delivery · Flutter

OnWay: Local Delivery Platform

Customers order from local stores and restaurants, independent drivers pick up and deliver, and dispatchers watch the whole fleet on a live map. AI fills carts by voice, checks delivery photos, answers support questions and tells dispatchers what needs attention.
Pick Customer, Driver or Dispatcher on the welcome screen with no sign-up. Stores and people are fictional, checkout is sandbox only and no real money moves.

Who OnWay is for

OnWay is a local delivery platform with three roles in one Flutter codebase. Role-based routing sends each person to a different start screen.

Customers

Browse nearby stores, build a cart, check out, track the driver live, chat with the driver, rate the delivery and view receipts, or simply ask the AI concierge for what they want.

Drivers

Go online, receive 30-second job offers, accept or decline, follow a step-by-step job flow to pickup and drop-off, capture proof of delivery and see their earnings.

Dispatchers

Watch every online driver and active order on a live map, see late, unassigned and flagged orders, read an AI fleet summary, reassign drivers and review the audit log.

What OnWay does

The full order lifecycle, from browsing to receipt, across all three roles.

Stores and menus

Nearby stores sorted by distance or fastest ETA across food, grocery, pharmacy, florals and late night, with items, sizes and add-ons chosen from a bottom sheet.

Cart and checkout

Distance-based delivery fee, service fee, tax, a driver tip of 15 to 25% or custom, leave-at-door or hand-to-customer, delivery instructions, saved addresses and promo codes.

Live tracking

A real-time map with store, drop-off and the driver’s moving marker, an order progress strip, an ETA countdown and a driver nearby alert at 0.3 miles.

Masked chat

Customer and driver message through a relay, so neither sees the other’s phone number. Phone numbers are never stored, only the sender role and order.

Driver job flow

Offers go to the nearest available driver with a live 30-second countdown, then move to the next driver if declined. Each step has one large button and a link out to Google Maps or Apple Maps.

Proof, ratings and receipts

Drivers capture a photo and optional signature; customers see the proof, rate driver and store, and get an itemized receipt. A delivery-failed flow records the reason and starts a return.

Dispatcher console

Headline tiles for orders today, average delivery time, on-time percentage and active drivers, an order table filtered by late, unassigned or flagged, and logged manual actions.

Driver earnings

Today’s total, trips and tips, and a full history of completed trips with base pay, tip, miles and completion time.

AI across the whole delivery

OnWay uses Anthropic’s Claude: Sonnet for ordering, support and fleet summaries, and Haiku for fast photo checks. Every AI call is logged with user, feature, model and tokens.

Voice and chat ordering

Customers describe what they want, by voice or text. AI proposes a cart through a structured tool call, shown as a preview card in the chat; the customer confirms. “My usual” works from order history. AI never places an order or charges a card.

AI support agent

Answers “Where’s my order?” from live data, logs missing items as a support ticket with no automatic refund, cancels before pickup, updates instructions or hands over to a human dispatcher. Every action needs the customer’s confirmation.

AI-checked proof of delivery

The driver’s photo is checked by AI vision and marked clear, unclear or failed. Unclear photos prompt one retake and are flagged for the dispatcher. The delivery still proceeds; the flag is for human review.

What needs my attention?

Dispatchers get a plain-language summary of late orders, unassigned orders, flagged photos and open support tickets, built from the current order table and driver positions. Read-only.

How OnWay is built

Flutter on the front, Supabase Postgres with PostGIS behind it, and a few rules that never bend.

A server-enforced state machine

Orders move from placed to delivered through one idempotent database function that rejects invalid transitions. The app can never write an order’s status directly, and every transition is timestamped and logged.

PostGIS for location

Stores, addresses, drop-offs and live driver positions are stored as geographic points, and the nearest available driver is found with a spatial query.

Row-level security

Customers see only their own orders, drivers only the orders offered or assigned to them, and dispatchers see everything. Only publishable keys ship in the app.

Money in whole cents

Every amount is stored as an integer number of cents, and totals never use floating-point math, so fees, tips and tax always add up.

Privacy by default

Masked chat, proof photos in a private bucket behind signed links that expire after an hour, and location pings deleted after 7 days.

Append-only audit log

Dispatcher actions are recorded with actor, action, order and time in a table that cannot be edited or deleted.

AI behind an Edge Function

All Claude calls go through a Supabase Edge Function, so no secret keys ever reach the app, and AI usage is logged per user and feature.

Honest web simulation

In the browser, 12 simulated drivers move on the map and accept orders automatically, using the same state machine as real drivers, with no separate fake code path.

Build something like this

OnWay shows how Lycore builds real-time, multi-role platforms: a state machine the app cannot bypass, location data in PostGIS, and AI that helps customers, drivers and dispatchers without ever moving money. Planning a delivery, dispatch or field service app? Let’s talk about what yours needs.

Talk to LycoreSee more of our work