Skip to content
Mind Matrix Technologies

Cashback Reward System: our own product

A QR-to-UPI rewards platform where brands fund a wallet, people scan a label, and money actually arrives in a bank account.

Sector

Product

Services

Web development, Cloud and support

Outcome

Live payouts, and a set of hard opinions about error states.

Cashback Reward System is ours. A brand funds a wallet and prints a QR code on a label. Someone buys the product, scans the code with their phone camera, logs in with a mobile number and an OTP, and the reward lands in their wallet. When they want it, they withdraw it to a UPI ID.

There is no app to install. The QR opens a web page.

The one sentence that matters

Scanning a QR code never charges the user. The gateway is used only on the way out.

We say it on the product page, we say it in the interface, and we say it here, because it is the first thing anybody assumes wrongly. A payment gateway appearing in a flow makes people expect a charge. In this flow the gateway only ever sends money outward.

The name check

Before a payout is sent, the gateway returns the name the bank has registered against that UPI ID. The user has to confirm it is theirs.

It is one extra tap and it is the most valuable screen in the product. A UPI ID typed with one wrong character is a valid UPI ID belonging to a stranger. Without the name check, that money is gone and there is nothing anyone can do. With it, the user reads a name they do not recognise and stops.

Six words, and only six

Every amount is in exactly one state, described by one of six words: Pending, Scanned, Credited, Processing, Success, Failed, Reversed.

The rule we hold to is that the word in the app is the same word a support agent uses on the phone and the same word in the brand's dashboard. No internal state names leaking into a user's screen, no "in progress" in one place and "processing" in another.

Failure is a designed screen

Payouts fail. Bank downtime, an ID that stopped working, a limit hit.

When one fails, the amount returns to the wallet automatically and the status reads Failed or Reversed. The user does not raise a ticket, does not wait, and does not have to trust that someone noticed. The balance is simply back.

Building that properly took longer than building the success path. It is also the only reason the product is usable.

What running it taught us

Client work teaches you how to build software. Running something where real money leaves an account every day teaches you what happens at the edges — the retry that fires twice, the webhook that arrives out of order, the reconciliation at the end of the day that has to balance to the rupee.

We are better at other people's payment integrations because of it.

Tell us what you need built.

One reply from a person who will actually work on it, usually within a working day.

Book a demo