Fasih Ahmad Khan
All Projects

Case Study

QuickBite

A full-stack food delivery app that lets restaurants take orders, track deliveries, and grow their customer base — without lifting a finger for every transaction.

FrameworkFlutter (Dart)
StateRiverpod 2 — CartNotifier, SearchNotifier
NavigationGoRouter with ShellRoute
AnimationLottie, Shimmer loading states
ImagesCachedNetworkImage with shimmer placeholders
MapCustom Flutter CustomPainter — no paid SDK
DataMock data layer — drop-in ready for Firebase
DeploymentVercel (demo), structured for Firebase/Supabase

QuickBite order tracking screen

Background

The Problem

Tariq runs a popular Pakistani restaurant in Islamabad. His biryani sells out every Friday, his tikka platter has a five-star reputation on Google, and regulars drive across the city just for his karahi. But behind the counter, it's chaos. Orders come in through WhatsApp voice notes, someone's cousin manages a handwritten list of deliveries, and the phone rings non-stop during the dinner rush.

The delivery side was even worse. There was no way to track where the rider was, no way for the customer to know when to expect their food, and no record of what was ordered — so disputes about missing items had to be settled on trust. Refunds came out of his own pocket. His best customers were quietly switching to a competitor who had an app.

Tariq didn't need a tech co-founder. He needed a system that handled the ordering, the payments, the tracking, and the customer communication — so he could go back to doing the one thing he was actually brilliant at: cooking.

"He needed a system that handled the operations so the owner could focus on the food."

Solution

Core Features

Live Order Tracking with Animated Map

Customers watch their rider move toward them in real time, with an estimated arrival countdown. Built entirely with Flutter's CustomPainter — no Google Maps, no Mapbox, no surprise API bills. This single feature cuts 'where is my order?' calls to near zero.

Smart Cart with Add-on Customisation

Every menu item supports optional upgrades — extra cheese, a different size, a side dish. The cart calculates the total live as selections are made, so customers always know exactly what they are paying before they confirm.

Promo Code and Discount Engine

The owner can run timed promotions — first-order discounts, weekend deals, minimum-order offers — that apply automatically at checkout. Replaces the informal 'tell them I said 20% off' system that was impossible to track and easy to abuse.

Order History and Reorder in One Tap

Returning customers see every previous order with the exact items, add-ons, and total. Reordering their usual takes one tap. Repeat business increases without the owner doing anything.

Saved Addresses and Checkout Memory

The app remembers delivery addresses, preferred payment methods, and past restaurants. A returning customer can go from opening the app to placing an order in under 30 seconds.

Single Codebase for Android and iOS

Built in Flutter — one development budget covers both platforms, and any future update deploys to all users simultaneously. No separate native apps, no doubled maintenance cost.


Engineering

Key Challenges

01

Making the cart work across every screen without breaking

The Problem

In a food delivery app, the cart is touched by more screens than any other feature — the restaurant page adds to it, the search page adds to it, the cart screen modifies quantities, and the checkout reads from it. The challenge was keeping all of these in sync without the cart resetting when the user navigated back, or allowing items from two different restaurants to mix.

The Solution

A single CartNotifier using Riverpod's StateNotifier pattern — a single source of truth that every screen reads from and writes to, with a built-in guard that clears the cart and prompts the user if they try to add items from a second restaurant. No confused orders, no double-restaurant fulfilment nightmares, and a checkout total that is always accurate.


02

Building a real-time tracking experience without a paid map SDK

The Problem

Integrating Google Maps or Mapbox adds cost, API key management, billing risk, and third-party dependency to every deployment. For a small restaurant owner, a surprise £200 API bill in month three would kill confidence in the product.

The Solution

The tracking screen was built entirely with Flutter's CustomPainter — a hand-drawn street grid, an animated orange coverage zone, and a rider pin that moves smoothly using Flutter's built-in AnimationController. The pulsing location ring, the rider position drift, and the estimated arrival countdown all run at 60fps with zero external dependencies and zero ongoing cost.


Screens

Screenshot walkthrough

Live Demo — Food Order Flow
QuickBite order tracking screen
Home Screen — browsing state

Location header, category chips, promo banner

Restaurant Screen — customisation sheet

Dark hero header, menu tabs, Add to Cart sheet

Cart Screen — promo code applied

Item thumbnails, quantity steppers, discount row

Order Confirmed — Lottie animation

Order Tracking — rider mid-route

Animated map, orange blob, rider pin, Journey timeline

Profile Screen — stats visible

Elite Member badge, Favourites and Orders stat cards


Results

The Outcome

Order placement time reduced from 8–12 minutes of WhatsApp back-and-forth to under 60 seconds via in-app checkout with saved addresses

'Where is my order?' support calls projected to drop by 80%+ — live rider tracking answers the question before the customer picks up the phone

Promo code engine replaces informal discounting — every offer is trackable, time-limited, and tied to a minimum order value

Reorder in one tap increases repeat purchase rate — returning customers replicate any previous order instantly

Full menu customisation captured digitally — add-ons and special options are recorded per order, eliminating disputes

Single codebase runs on Android and iOS — one development budget, simultaneous updates across all users