← 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.
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.
Offline-first guest cart that merges conflict-free the moment you sign in. It survives cold starts.
Atomic checkout: order, stock, cart, and loyalty all move in one transaction, or none do.
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