← All projectspersonal product2026Under the hood ↓

BrewPhoria

I didn't know Flutter. So I built a whole coffee app in it.

Cross-platform coffee ordering: a Flutter client on a layered Node/Express/TypeScript API.

Role
Personal product · solo
Stack
FlutterNode.jsPostgreSQLPrismaExpressTypeScriptRiverpodDioHiveRedisGemini
Result
1transaction covers the order, the stock, the cart and the points
Access
public repo, link on its way

A Screens

Click any screen to open it in the zoom viewer. Wheel to zoom, drag to pan.

01First Flutter build. I did not know the framework when I started this.
02The storefront home screen.
03Options, sizes and extras priced as you choose them.
04Light and dark carried through every screen, not just the shell.
05The cart.
06Checkout.
07Points, tiers and redemption: the reason a coffee app gets opened twice a day.
08Order history in dark mode.

Under the hood

BrewPhoria

Under the hood

BrewPhoria

B Architecture

From a guest cart to a confirmed order

The phone can build a cart with nobody signed in, and none of the numbers it holds are trusted. At checkout the server recomputes all of them and moves four things at once, or moves none of them.

What happens at checkout

The phone never decides a price. Order, stock, cart and loyalty all move inside one database transaction, and the push notification is sent only after it commits.

  • What people use
  • Code I wrote
  • Where it is kept
  • Someone else's service

An order that cannot change under you

What you bought is copied onto the order at the moment of purchase: name, image, price and options. The catalogue can be edited afterwards and a delivered order still reads exactly as it did at the till.

C Decisions

The calls that made the difference, and what each one bought.

  1. Offline-first guest cart that merges conflict-free the moment you sign in. It survives cold starts.

  2. Atomic checkout: order, stock, cart, and loyalty all move in one transaction, or none do.

  3. An AI barista (Gemini, tool-augmented) that resolves “something sweet and cold” to real menu items.

D What it runs on

  • Flutter
  • Node.js
  • PostgreSQL
  • Prisma
  • Express
  • TypeScript
  • Riverpod
  • Dio
  • Hive
  • Redis
  • Gemini

public repo, link on its way

↑ Back to the surface