Kshitij Dhamala
Kshitij Dhamala

Build less. Think deeper.

Writing · Case study · · 6 min read

A loyalty card nobody has to install

How I designed Naan Cafe Rewards: what the research said, what I cut, and why the counter never waits on the software.

I built Naan Cafe’s website first. It’s a family-run Indian restaurant with two counters in Fontana and Redlands, California. Once the site was doing its job, the owner asked the harder question: how do you bring regulars back more often?

Every answer on the market came with a catch, so before writing any code I spent a day on research. This is what it said, and what I decided because of it.

The market gap wasn’t features

Loyalty programs built into point-of-sale systems are capable, but they keep the customer list inside the POS and typically cost somewhere between $49 and $185 a month. Standalone stamp apps are cheap, but they look generic, and some ask customers to install an app before they get anything.

Asking someone to install an app at a lunch counter is where most of these programs die. So the first decision made itself: no app. The card lives in the browser, the restaurant owns its customer list, and the product has to earn its place by being faster and nicer than what’s already on the counter.

What actually makes people come back

Two findings from peer-reviewed field studies shaped the card more than anything else. The first is the goal gradient: in a café study, customers came back faster as they got close to a reward, with about 12 days between the first two stamps and about 5 between the last two (Kivetz, Urminsky and Zheng, 2006).

The second is endowed progress: a card that starts with free stamps gets completed far more often than an equivalent empty one, 34% against 19% in the original experiment (Nunes and Drèze, 2006).

So the card is short and starts moving immediately. It has eight stamps, the first one is free on joining, there’s a Mango Lassi or Samosas at stamp four, and a free combo at stamp eight. Every number is something the owner can change.

Stamp first, questions later

The usual sign-up flow asks for a phone number, sends a code, waits, and only then gives you anything. At a counter with a tray in your hand, that’s too much.

Naan Cafe Rewards gives the first stamp before it asks you to prove anything. Joining takes a first name and a number. Verification is deferred until it actually matters: the first time you redeem a reward, or when you sign in on a new phone. Sign-up becomes almost instant, and most of the text messages a program would normally send never need to be sent.

The counter never waits on the software

Staff were the other user I designed for. During the lunch rush nobody should be typing. Anything staff do is one tap.

To earn a stamp, a customer scans a code on a counter tablet. The code rotates every minute, so a screenshot shared in a group chat is worthless by the time it arrives. Each location has a cooldown so one visit can’t earn a pile of stamps. When someone redeems, staff see a full-screen check with a live clock: obvious at a glance, and hard to fake.

Trust through the ledger

Every stamp, point and redemption is an entry in an append-only ledger with the person who made it. Entries can be reversed but never edited. When an owner asks “why does this customer have seven stamps?”, there is always an answer.

What I chose not to build

A points system is built and switched off. Research and the owner both pointed to stamps first: simple, visible and reachable. Points can be turned on later without a rebuild.

Automatic stamps from the Clover POS were left out of version one too. Clover’s webhooks need a published app, and a staff tap or a rotating code works today. The POS can become a source of ledger entries later; it doesn’t need to be a dependency now.

I built most of it with AI coding agents doing much of the typing. That made the cutting more important, not less. When building is cheap, deciding what belongs in version one is the actual work.

Where it stands

The rewards platform is built: the card, the counter tablet, the owner dashboard, light and dark themes, an offline state and full account deletion. It launches when the owner is ready, and I’ll add real numbers here when there are some to share.

See the project