Kafedeyim

20 Haziran 2026

Coupon Verification at the Register: How a 5-Minute Code Actually Works

How Kafedeyim's discount coupon system works at the counter: a 6-character code, a 5-minute window, four verdicts on /verify, and the daily limit that caps your spend.

Most coupon systems fail at the same place: the counter. A guest holds up a phone, the barista squints, the queue grows, and nobody is sure whether that code was already used last Tuesday. So when we built the gift wheel for venues, we spent most of our thinking on coupon verification — the ten seconds where it either works or it doesn't.

The code is designed to be read out loud

A guest spins the wheel on your venue page. Land on a winning slice, and they get a 6-character code.

Those characters come from a no-confusables alphabet: ABCDEFGHJKMNPQRSTUVWXYZ23456789. No zero, no one, no capital I, no capital O. That is not cosmetic. It means nobody at a loud counter on a Friday night has to ask "is that a zero or an O?" — the ambiguous characters simply aren't in the pool. (Hit a blank slice — the "no win" slice you define yourself — and there's no code at all. Nothing to check.)

Five minutes, on purpose

The coupon lives exactly five minutes, with a live countdown ticking on the guest's screen.

People ask us to make it longer. We keep saying no. A coupon with a long life is a coupon that dies in a pocket: screenshotted, forgotten, then produced three weeks later at your busiest moment.

Five minutes turns the wheel into a nudge with a direction: walk to the register now. The guest is already sitting in your cafe, and the reward is a reason to stand up while they still care. The countdown also does the saying-no for you, so nobody on staff has to be the bad guy about an old code.

The redeem code register flow: four verdicts, one screen

Staff open /en/verify, type the six characters, and get an instant verdict. There are exactly four:

  • Valid — shows the reward label ("free filter coffee", "10% off the bill", whatever you wrote) and marks it redeemed on the spot.
  • Already used — someone redeemed this code once already.
  • Expired — the five minutes ran out.
  • Not found — the code doesn't exist. A typo, or a guess.

Each code redeems exactly once. No partial state, no "pending", no manager override to learn. Read the label, hand over the thing, done.

The honest part: /verify has no login

The verification page needs no login by design. Anyone who opens that URL can type codes into it. We chose that because a login at the register is a login that gets shared, written on a sticky note, and forgotten by the new hire on their first shift.

So where is the real protection? Upstream, in the reward itself. Every reward has a daily limit — 0 to 100,000, where 0 means unlimited — counted per reward and reset at UTC midnight. When a reward hits its limit it drops out of the draw entirely. No more codes get issued for it that day, full stop.

That is your actual spending cap. The page is a lookup tool; the limit is the wallet. Set "free dessert" to 5 and your exposure is five desserts a day, no matter who opens which page.

What you see afterwards

The wheel tab in your owner panel keeps the receipts: counters for issued, redeemed and expired, plus the last 100 coupons with code, reward and status.

Lots issued, few redeemed usually points at one of two things: your reward isn't tempting enough to stand up for, or your staff didn't know the page existed. Both are fixable in a day.

One caveat we won't hide: the one-spin-per-device-per-day rule runs on a cookie and local storage. It's a UX-level limit, not an unbeatable one — a determined guest who clears cookies can spin again. Which is exactly why the per-reward daily limit is the layer that actually holds.

Train your staff in one minute

Seriously, one minute. Say this at the start of a shift:

  1. Guest walks up with six characters on their phone.
  2. Open the verify page — bookmark it on the till tablet, first tab, done.
  3. Type the code. Valid means give them what the screen says.
  4. "Already used", "expired" and "not found" all mean the same thing for you: sorry, this one didn't go through — spin again tomorrow. No judgement call, no calling the owner.
  5. No code is ever older than five minutes. If the screen says expired, it's expired.

That's the whole script. New hires have it before their coffee cools.

Try it before you build a poster around it

/en/k/demo is a real example venue — menu, wheel, campaign, branding — so you can spin it and watch the countdown yourself.

Be clear on the plan split: you can configure the whole wheel — every reward, every weight, every daily limit — on the free plan. The wheel actually spinning for guests is Pro. Registration is free, no card, and your venue page and menu stay free forever.

If that sounds like your kind of discount coupon system — small, honest, over in ten seconds at the counter — start at /en/for-business. Set up one reward, give it a daily limit you'd genuinely be happy to pay out, and see what a countdown does to a table that was about to ask for the bill.

Oyunlara göz at