The guest wallet
What a guest actually holds: joining from a QR, the card faces, stamps arriving, redeeming at the counter, inviting a friend, and keeping the wallet on the home screen.
The wallet is the guest’s half of loyalty. It is a web app, so there is nothing to install from a store, and one wallet holds every Maska brand a guest has joined.
A guest’s phone number is their account. There is no password and no username, and joining and signing in are the same three taps.
Joining
A guest joins by scanning your sign-up QR or opening your join link. The link carries the outlet, so a store’s own code credits the sign-up to that store. See Stores and settings.
Welcome. A sample deck of illustrative cards, and one button, Create my wallet. A guest who already has a wallet can tap Sign in instead; both go to the same next screen.
Your number. A bare ten digits behind a fixed +91, under the line “Your number is your account. No app, no password. Your wallet opens on any phone, at any Maska counter.” The note under the field says the one-time code arrives on WhatsApp. A number that is not on WhatsApp is refused there and then.
The code. Four digits, sent on WhatsApp, filling in automatically where the phone offers it. A resend becomes available after thirty seconds.
Almost there. Name, and two optional things: a birthday month, tagged “treats on the house”, and a friend’s code, tagged “you both get a stamp”. A referral code from the link they opened is filled in already, and can be cleared. Then an Offers and nudges switch, on by default, and a tick to accept the programme terms, which is always off and always has to be ticked.
A wrong referral code never blocks the join. It says so and everything else is saved.
Done. The new card, badged NEW, with the welcome stamp already on it if you have that switched on, and a button into the wallet.
A guest who is already signed in and scans another brand’s code skips all of that: one screen asking “Join brand?”, the terms tick, and Add to my wallet.
If the link is dead, the wallet says so honestly: “This link isn’t live. The brand may have replaced its join code. Ask at the counter for the current one. Your stamps are safe either way.”
The deck
The wallet opens on a fanned stack of cards, newest on top, with a header carrying a + to add a card and the guest’s avatar to reach their profile.
Tapping a card expands it where it sits. Tapping it again, or dragging it down, closes it.
The closed face carries your brand mark, a status badge, the locality line, the stamp row, the guest’s name, and TAP TO OPEN. The badge reads 1 REWARD or 3 REWARDS when there is something banked, NEW for the first three days, PAUSED on a blocked card, and otherwise REGULAR or MEMBER.
The open face swaps the locality line for LOYALTY · MEMBER CARD and adds the guest’s QR beside the stamp meter.
The stamp meter
Three states, and no more: an earned stamp filled in your accent with your own glyph, the next one drawn as a faint cell with an accent ring so the guest can see where they are, and the rest faint. A card longer than eight stamps splits into two balanced rows.
When a stamp lands, that one cell pops. Nothing else moves.
The QR
The code on the card is a rotating token, minted fresh and short-lived, not a printed member number. Tapping it fills the screen, captioned “Show this at the counter” with the reminder to turn the brightness up.
A paused card shows no code and says so.
Under the card
Expanding a card reveals, in order:
- Last visit and visits, with how many rewards they have enjoyed.
- Nudges and offers: a lapsing-stamp reminder with its deadline in plain words, and any live campaign card.
- The reward strip, when something is banked: REWARD READY, the reward in your own words, whether it expires, and a Redeem button.
- The passbook, headed “Lately at brand”: every visit, stamp and reward as it happened, five rows at a time behind Show more. Empty it reads “Nothing here yet.”
- Invite a friend, Programme terms and Remove from wallet.
Stamps arriving
A guest never taps to give themselves a stamp. Every stamp comes from the counter, and the wallet updates itself the moment it happens, on screen, with no refresh.
When a stamp completes the card, the wallet celebrates: a full-screen moment reading CARD COMPLETE, the reward’s own name, and the line “Added to your rewards. Your stamps start fresh.” Two buttons, Show at counter and Save it for later.
It fires once per reward. A guest opening their wallet later is not re-congratulated for a reward they already know about.
Redeeming
Redeem opens a sheet headed SHOW AT COUNTER carrying the reward’s name, the guest’s QR at full size, and their member code in plain characters. The caption says exactly who does what: “The counter scans this to mark your reward used.”
Nothing in the wallet can declare a redemption. Only the counter can.
Where scanning is awkward, Show my code mints a six-character one-time code to read out, with the time it has left. Showing a new one cancels the one before it, and the sheet says so.
The moment the counter marks it used, the sheet turns over by itself: a drawn check, Redeemed. Enjoy., and the reward named as marked used at the counter.
Inviting a friend
If you have referrals switched on, each guest carries a
code like MSK·ANJ·26.
- On their profile, a card headed “Give a coffee, get a stamp”, with the code as a button that copies it.
- On each card, an Invite a friend row that opens the phone’s own share sheet with your join link and the code already in it: “Join me on brand’s loyalty card and your first visit earns us both a stamp.”
The friend’s code lands pre-filled on their sign-up screen. Both sides earn on the friend’s first visit, within whatever monthly cap you set.
The profile
The avatar opens the guest’s own settings: their name and masked number, their invite code, and three switches.
- Expiry nudges, to be reminded before a stamp lapses.
- Offers and campaigns, deals from brands in their wallet.
- Birthday treats, which is off and unavailable if they never gave a birthday month.
Offers and campaigns is also what turns phone notifications on: switching it on asks the phone for permission there and then. If the phone refuses, or the browser cannot do it, nothing breaks and nothing nags. Campaigns still arrive as cards in the wallet; only the buzz is lost.
Under them, Sign out, which ends the session on that device only.
Keeping it on the home screen
Once, shortly after the first card lands, the wallet offers to install itself: Keep your card one tap away.
On Android it is one button. On an iPhone the sheet gives the two steps instead, because nothing can automate it there: tap the share button in the browser, then choose Add to Home Screen.
It is offered once and never nags. The profile keeps a row to reopen it.
Removing a card
Remove from wallet asks first, and the answer to the obvious worry is on the sheet: “Your stamps are safe. Scan the store’s QR any time and the card comes back exactly as you left it.”
It hides the card. It does not erase the member, the balance or the history.
Scanning from inside the wallet
A signed-in guest can scan another brand’s code without leaving the wallet, from Explore. It only opens Maska join codes; anything else is refused with “That code points somewhere else. Nothing was opened.”