Skip to content

ReceiptBranch

Digital receipts and loyalty without handing over an email address

A consumer mobile app, a retailer dashboard and the backend between them, for a platform that delivers shop receipts straight to a phone.

ReceiptBranch mobile app screens showing a receipt list, partner stores, offers and a barcode scanner.

The challenge

Paper receipts get lost, and the usual digital alternative asks shoppers for an email address or phone number at the till. Many people decline, and retailers end up with neither a receipt delivered nor a customer relationship.

ReceiptBranch set out to remove that trade-off: a shopper should be able to collect a receipt on their phone at checkout without giving the retailer any personal contact details.

The requirement

The product needed three parts that work as one:

  • A mobile app where shoppers receive and keep their receipts, and see offers from stores they have bought from.
  • A dashboard where retailers manage their stores, offers and vouchers.
  • A backend that links a purchase to a shopper at the point of sale, quickly enough to work in a checkout queue.

The solution

We built the shopper app in Flutter for iOS and Android. A shopper identifies themselves at the till by tapping or scanning, and the receipt appears in the app once the sale completes. Receipts are stored and searchable, so returns and expenses no longer depend on a slip of paper.

On top of receipts we built the loyalty layer: points earned on verified purchases, vouchers that retailers issue to past customers, and time-limited offers. Because every reward is tied to a real receipt, retailers know the offer reached an actual customer.

Retailers work in a React web dashboard, where they manage locations, configure offers and review redemptions.

Architecture

A single NestJS API serves both the mobile app and the retailer dashboard, with PostgreSQL as the system of record for receipts, loyalty balances and vouchers. Firebase handles push notifications and real-time delivery to the app. Payments go through Stripe.

The shopper’s identity stays in the app. What the retailer sees is the purchase, not the person’s contact details. That decision shaped the data model from the start, since it is far harder to add later.

Technology

Flutter, React, NestJS, PostgreSQL, Firebase and Stripe.

Outcome

ReceiptBranch has a working product across three surfaces, built by one team on one backend: a consumer app, a retailer dashboard and the API that connects them to the point of sale.

More work

Have something similar to build?

Tell us what you’re building, fixing or automating. We’ll tell you honestly whether we can help.