← All Projects

SushiPizza

One delivery app for two restaurants, a sushi bar and a pizzeria: a shared menu of 160+ dishes, one cart, and orders that reach the kitchen as a Telegram ticket.

Home screen with a pizza promo banner, category tabs and rolls listed with weight and price
Dish page for the LUX Tuna roll with its photo, weight, ingredients and a 590 ₽ price
  • 160+

    dishes on one shared menu

  • 14

    menu categories, from rolls to drinks

  • 2

    restaurants behind one cart

  • 2

    ways to get an order: delivery or pickup

Client
Two restaurant brands, sushi and pizza
Industry
Food delivery
Platforms
iOS on the App Store, Android and web from one codebase
Our part
Design, app, backend, order flow
Timeline
2024–2025, released December 2024

The brief.

Context

Two restaurant brands, a sushi bar and a pizzeria, sell through one app. A customer browses rolls, pizza, wok, burgers and drinks in a single menu, fills one cart and chooses delivery or pickup. We designed and built it, from the first screen to the ticket the kitchen reads.

Challenge

The menu is long: more than 160 dishes in 14 categories, from rolls and sets to sauces and drinks. It had to stay quick to browse on a phone and let the food photography do the selling. On the other end, staff needed every order complete and readable at a glance: dishes, total, address, how to reach the customer and how they will pay.

Approach

We built the app in Flutter, starting from FlutterFlow, on a Supabase backend that holds the menu, accounts and carts. Category tabs and a side menu cover the whole catalogue, and a dish is two taps from the cart. At checkout the app assembles a structured ticket, and a small relay on Google App Engine posts it to the restaurant's Telegram.

The whole menu, one scroll away.

Home opens on a promo carousel and category tabs. Each dish is a row with its photo, weight and price, a heart for favourites and an add button. A side menu lists all 14 categories, and dishes the restaurant marks as hot carry a badge.

Home screen with a pizza promo banner, category tabs and rolls listed with weight and price
Home
Side menu listing 14 categories from Rolls / Futomaki to Halves
Menu
Pizza category with 4 Seasons, 4 Cheese and a BBQ pizza marked HOT
Pizza

Dish, quantity, cart.

A dish page shows the photo, weight, ingredients and price. Adding it opens a small sheet where the amount follows the quantity. The cart switches between delivery and pickup, counts cutlery and offers sauces and extras before checkout.

  • The cart is stored per account in Supabase, so it is still there after the app is closed.
Dish page for the LUX Tuna roll with its photo, weight, ingredients and a 590 ₽ price
Dish
Quantity sheet set to 2 with an amount of 1180 ₽ and an Add to cart button
Quantity
Cart with two LUX Tuna rolls and a 4 Seasons pizza, cutlery, suggested sauces and a 1870 ₽ total
Cart

One form, and the kitchen has it.

Checkout asks only what a courier needs: a street picked from a list, house, entrance, a preferred time and whether it is a private house. The customer chooses to be contacted by phone or in Telegram and pays the courier in cash or by card.

  • New customers sign up with a phone number and an SMS code; returning ones sign in with email and password.
Checkout form with delivery address fields, contact by phone or Telegram, and cash or card payment to the courier
Checkout

From the cart to the kitchen's Telegram.

The menu, accounts and carts live in Supabase, which the app queries directly. When an order is placed, the app formats a ticket and hands it to a small relay on Google App Engine, which posts it to the restaurant's Telegram. Firebase Cloud Messaging carries push notifications.

  1. Menu

    Dishes, categories and promo banners are read from Supabase.

  2. Cart

    Each dish added becomes a row tied to the customer's open order.

  3. Checkout

    Address, contact method, payment and comment are assembled into one ticket.

  4. Relay

    A small service on Google App Engine receives the ticket from the app.

  5. Kitchen

    Staff see the order in Telegram: dishes, total, address and how to reach the customer.

Charcoal, red and the food.

The interface stays dark so the studio food photography carries every screen: a charcoal ground, near-black bars and cards, and red only for actions and the active tab. Type is Manrope throughout.

  • Charcoal
  • Bars and cards
  • Action red
  • Secondary text
  • Text

What we built.

Our part

  • Interface design for both restaurant brands
  • Flutter app for iOS and Android, started in FlutterFlow
  • Supabase data model for the menu, accounts and carts
  • Checkout and the Telegram order ticket
  • Order relay on Google App Engine
  • Phone sign-up with SMS codes
  • Push notifications and a web build on Firebase Hosting

Stack

App
  • Flutter
  • Dart
  • FlutterFlow
  • go_router
  • Provider
Backend
  • Supabase
  • Supabase Auth
  • Google App Engine
Integrations
  • Telegram Bot API
  • SMS Aero
  • Firebase Cloud Messaging
Delivery
  • App Store
  • Firebase Hosting

Running a restaurant?
Let's take the orders in an app.

We build ordering apps around the way a kitchen already works. Tell us how yours does.