Skip to content
Back to work
05 / Kokoloko's AppApp · React Native · Ordering

Kokoloko's App

A React Native app for ordering ahead at Kokoloko's and collecting at the counter, built on the restaurant's direct-pickup ordering backend.

Development build. Payments are mocked, orders don’t reach the kitchen yet, and the app isn’t published on the App Store or Google Play.

  • APP
  • FRONT-END
  • API
  • SYSTEM

Part of the Kokoloko’s project, and built on the same ordering backend.

01 / Ordering flow

From menu to “Order in!”

Pick from the menu, choose a size, check the basket, pick a time, leave a name and number, pay on the payment provider’s own page, then follow the order until it’s ready.

  • App menu with category chips and the direct-order discount banner
    Menu
  • Product sheet for a salad with two sizes to choose from
    Product with sizes
  • Menu with a basket bar showing 3 items and the pickup discount
    Basket bar
  • Basket with the server's total and pickup time slots
    Pickup time
  • Checkout form with name, phone and optional email
    Checkout
  • Order screen waiting for payment, labelled mock payment (development)
    Waiting for payment (mock)
  • Order in! confirmation with order number, pickup time and progress
    Order in!
  • My orders list with one order and its status
    My orders
  • Visit tab with the address, directions and opening hours
    Visit
  • Product sheet for Half Chicken with quantity and a note for the kitchen
    Product sheet
02 / Server-priced basket

The app never does the maths

The app sends only what was chosen: product, size, quantity and a note. The server sends back the quote, including the direct-pickup discount, and the app shows exactly that. Until it arrives, the basket says “Estimating…” rather than guessing.

In this capture: subtotal €41.65, direct pickup −10% (−€4.17), total €37.48.

Basket with three items and the server's quote
Prices
Only from the server; the app has no price list
Double orders
One idempotency key per checkout, reused on retries; Pay locks while sending
Card data
Never touches the app; payment happens on the provider's hosted page
On the phone
Only the order id and its access token, in secure storage
Order status
Checked every 5 seconds
Marketing consent
Off by default
03 / States

Closed, switched off, offline, empty

Each of these is a real screen. When the backend says ordering is switched off, the app keeps the menu browsable and explains why you can’t order, instead of showing an error.

  • Menu while pickup is closed, with a closed badge
    Pickup closed
  • Product sheet with a disabled button reading Pickup closed until 13:00
    Closed: button disabled
  • Menu with a banner saying ordering isn't open in the app yet
    Ordering switched off
  • Basket explaining ordering isn't open in the app yet
    Switched off: basket
  • Can't reach Kokoloko's error with a Try again button
    Network error
  • Loading skeleton for the menu
    Loading
  • Checkout form with field errors for name and phone
    Form errors
  • Empty basket with a See the menu button
    Empty basket
  • No orders yet with a Start an order button
    No orders yet
  • Basket while pickup is closed
    Closed: basket
04 / Design rules in code

Four colours, enforced by a test

The app uses only the brand’s four colours, yellow, orange, teal and red, with no white, black or grey. A unit test fails the build if any other colour appears anywhere in the code. Small text is only red on yellow or yellow on red; orange never carries text.

  • #FFEA56
  • #FF8246
  • #23A78F
  • #DA2328
05 / Status

What works, and what’s waiting

State of the app (checked 2026-10-08)
PartState
Menu, basket, checkout, status, orders, visitRunning against the backend in mock modeBuilt
Typecheck and unit testsTypeScript passes; 68 tests in 6 suites passLocal only
Real payments (Viva.com)Needs a merchant account and credentialsBlocked
Orders to the kitchen (JoinPOS / eLINK)Needs confirmation and accessBlocked
Sauces, sides, extras, allergensNeeds the owner's inputBlocked
Pickup hours and prep timeUses the published delivery hours until confirmedBlocked
App Store and Google Play buildsNeeds developer accountsBlocked
Production databaseThe backend's order store is in memory in developmentBlocked
06 / Output

A complete pickup flow in a development build, sharing one backend with the Kokoloko’s website. It goes live once payments, the kitchen connection and store accounts are in place.