Skip to content

/ Case study — Delivery

Ayam Bakar Delivery

The brand got its own ordering app — browse, pay, track — so it keeps the customer and the margin instead of handing both to an aggregator.

RoleFrontend
Year2025
TypeDelivery
ReactViteReact RouterTypeScriptTailwind CSS
delivery.ayambakarasapjimbaran.co.id Live recreation

Delivery location

Canggu, Bali

🔔

What you'd like
to eat for today?

Free Delivery
on your first order!

Super Deal
50% OFF All Menu

Categories

🔥 Popular Ayam🐟 Seafood🍪 Desserts🍕 Pizza🥗 Salad

FLASH SALE

Limited time offer

02:15:48
Ayam Bakar Dada

Ayam Bakar Dada

Rp17.500

Rp35.000

Paket Komplit

Paket Komplit

Rp22.500

Rp45.000

Sate Lilit (5 Tusuk)

Sate Lilit (5 Tusuk)

Rp12.500

Rp25.000

Popular Now 🔥

See All
Ayam Bakar Dada

Ayam Bakar Dada

4.8 • 1.2 km

Rp35.000

Paket Komplit

Paket Komplit

4.9 • 1.2 km

Rp45.000

Sate Lilit (5 Tusuk)

Sate Lilit (5 Tusuk)

4.7 • 1.2 km

Rp25.000

Es Jeruk Kelapa

Es Jeruk Kelapa

4.5 • 1.2 km

Rp15.000

Ayam Bakar Asap Jimbaran

delivery.ayambakarasapjimbaran.co.id

Alur pesanan

  1. 1 Menu
  2. 2 Keranjang
  3. 3 Checkout
  4. 4 Lacak

Pesanan

Keranjang kosong

22 screens · React 19 + Vite · client-side routing

The actual storefront, rebuilt in code — order to doorstep, driven by itself.

delivery.ayambakarasapjimbaran.co.idFIG.00 — Overview
  • 20+ screens · React SPA (Vite + React Router)
  • Phone + OTP — no password wall
  • Prices recomputed server-side on the backend
DeliveryAyam Bakar Delivery
20+
Screens
Phone + OTP
Auth
Cart → pay → track
Journey
React SPA (Vite)
Client

/ What it does

Your own delivery app — order in a few taps

A branded ordering app your customers use directly, so you keep the margin and the relationship instead of paying an aggregator. Browse, pay, and track the order live.

Order foodStep 1 / 4

Sign in

Just your phone number — a quick code, no password.

Phone + OTP
  • Keep your margin

    No aggregator fee on every order — the channel is yours.

  • Own the customer

    Their details and order history stay with you, not a middleman.

  • A real app experience

    Fast, smooth, and branded — 20+ screens from login to live tracking.

Problem

Every delivery order ran through aggregator apps that took a cut of each sale and owned the customer relationship. The brand had no channel of its own — no cart, no order history, no idea who was ordering.

Approach

A mobile-first storefront the brand owns end to end, built as a fast single-page app. The whole ordering journey lives in one client — phone + OTP login, browse, product detail, cart, checkout, payment method, and live order tracking — plus favorites, promos, referrals, and support chat.

  • React SPA on Vite + React Router, with app-like screen transitions in the browser.
  • Phone + OTP sign-in — no password wall between hungry and paid.
  • 20+ screens covering the full journey: home, product, cart, checkout, payment, tracking, orders, addresses, store locator, rewards, refer-a-friend, chat, profile.

Own the channel, or rent your margin — and your customers — to someone else.

Architecture

React SPA (Vite + React Router)
  splash → login → OTP → home
    → product → cart → checkout → payment method
    → order tracking / history
  state: cart context · favorites · addresses
  orders + payment → ABAJ commerce backend (Xendit, server-side)

Key decisions & trade-offs

  • SPA, not a reload per tap. React Router drives app-like navigation so ordering on the web feels like a native app.
  • Phone + OTP over accounts. The lowest-friction identity that still ties an order to a real person — and reuses the brand’s own login.
  • Front-end owns the journey; the backend owns the money. Pricing and payment are recomputed server-side on the ABAJ backend — the client never quotes a total it can be trusted on.

Result

A complete, brand-owned ordering experience — from login to live tracking — that keeps the margin and the customer data in-house instead of with a middleman.

/ How it’s done

Phone-OTP sign-in — live

Type any 6 digits. Phone + OTP is the whole identity — no password wall between hungry and paid.

verify · +62 811-8100-141
type any 6 digits

Phone + OTP over accounts. No password to forget, no signup wall between hungry and paid — yet every order still resolves to a real person, reusing the brand's own login. The whole 20+ screen journey lives in one fast React SPA; pricing is recomputed server-side.

01

Own the channel

A first-party storefront so the brand keeps its margin and customer data, instead of renting both to aggregators.

02

Phone + OTP over accounts

The lowest-friction identity that still ties an order to a real person, reusing the brand’s own login — no signup wall to kill first-order conversion.

03

A real app in the browser

20+ screens — splash, product, cart, checkout, payment, live tracking, addresses, rewards — as one fast React SPA on Vite + React Router.

04

Front-end owns the journey; backend owns the money

Cart and flow live client-side; pricing and payment are recomputed server-side on the ABAJ backend before an invoice exists.