Short answer
RaftLabs built LoyaltyPass, a wallet-native digital loyalty card platform that delivers stamp cards, points programs, and tiered rewards directly inside Apple Wallet and Google Wallet. Customers enroll by scanning a QR code: no app download, no account creation required. LoyaltyPass achieves 60% higher enrollment than app-based programs, 100% pass update delivery rate via wallet notifications, and a 3x increase in repeat visit rate. Operators manage enrolled customers, push seasonal campaigns, and update card designs from a web dashboard. Built in 14 weeks using Next.js, Node.js, PostgreSQL, and AWS.
The situation
The loyalty program problem is not strategy. It is friction. Most businesses that launch a loyalty program know what they want: repeat visits, higher basket size, better retention data. What kills them is the app download requirement.
Asking a customer to download a dedicated app to collect stamps is a barrier most customers never cross. The program launches with a marketing push, peaks at week three, and flatlines before the first reward is ever redeemed.
LoyaltyPass removes the download entirely. A loyalty card that lives in Apple Wallet or Google Wallet shows up on the lock screen when the customer is near the store. One tap to enroll. No credentials. No app store. No friction. The client reported the result: 60% higher enrollment than equivalent app-based programs and a 3x lift in repeat visit rate.
A card sitting in a customer's wallet, next to their credit cards and transit pass, gets used. A points balance buried in an app that requires a login does not. Nobody wants another restaurant app. The loyalty program that wins is the one that is already where the customer is.

Engagement
The LoyaltyPass engagement
- Product
- LoyaltyPass, a wallet-native loyalty platform: digital loyalty cards in Apple Wallet and Google Wallet, no app download
- What we built
- Pass generation and signing for Apple and Google, real-time wallet push delivery, operator dashboard with visit frequency and churn signals, program structure changes without resetting customer progress
- Stack
- Apple PKPass and Google Wallet JSON normalization layer, wallet push notification pipeline, web dashboard
- Status
- Live. The client reported 60% higher enrollment than equivalent app-based programs
Before and after
What changed
- App-based loyalty programs averaged 12 to 18% enrollment of customers who were explicitly told about them, and most would not download a dedicated app
- Physical stamp cards were lost, forgotten, or fraudulently stamped with no audit trail and no way to resolve redemption disputes
- Businesses had no data on which customers were active, churning, or at risk: the loyalty program ran blind
- Email-based loyalty updates reached only 20 to 30% of enrolled customers, with the rest never seeing the message
- Changing a reward value or card design required printing new physical cards and a fresh distribution campaign
- Customers scan a QR code and the loyalty card installs directly into Apple Wallet or Google Wallet in seconds: no account creation, no app store
- Stamp count, tier status, and active rewards are visible on the card in the customer's wallet, surfacing on the lock screen near the store
- Wallet push notifications reach 100% of enrolled customers: a promotional push lands on the lock screen, not in an ignored inbox
- Operators see visit frequency, redemption rate, and churn signals per customer from a web dashboard
- Card design changes, new rewards, and updated tier thresholds push to every enrolled customer's wallet immediately
What we had to solve
Generating and signing wallet passes correctly for both Apple and Google
Apple PKPass and Google Wallet JSON have different schemas, different certificate signing requirements, and different update protocols. Building a pass generation service that handles both without treating them as two separate products required a normalization layer that mapped a single LoyaltyPass program configuration into the correct format for each platform. Certificate management (generating, storing, and renewing the signing certificates Apple requires) added a security and operational layer that most developers underestimate when they first look at the Apple Wallet API.
Delivering real-time push updates to wallets reliably at scale
When a business pushes a promotional update (double points this weekend, new reward unlocked) it needs to reach every enrolled customer's wallet within seconds, not hours. Apple and Google have different push notification protocols for wallet passes, and neither is as well-documented as mobile push notifications. Building a reliable delivery pipeline required understanding both protocols at the implementation level, handling registration updates when customers change devices, and designing a retry mechanism for failed deliveries that did not result in duplicate notifications.
Proof
What the client reported, and what this page can't claim
Program figures reported by the client. These are operator reports, not independently audited measurements.
| Result | What changed | Period or context | Evidence and limitation |
|---|---|---|---|
| Enrollment | 60% higher than equivalent app-based programs | Customers scan a QR code and the card installs into Apple Wallet or Google Wallet in seconds. No account creation, no app store | Client-reported. App-based programs averaged 12 to 18% enrollment of customers explicitly told about them |
| Notification reach | 100% pass update delivery rate via wallet notifications | A promotional push lands on the lock screen. Email-based updates reached 20 to 30% of enrolled customers | Client-reported |
| Repeat visits | 3x increase in repeat visit rate | The card surfaces on the lock screen when the customer is near the store, a reminder the program exists between visits | Client-reported |
the build
What we built
LoyaltyPass is built around the principle that the best loyalty program is the one customers actually use.
Customers have their loyalty card in seconds: enrollment happens at the point of sale
Customers scan a QR code and receive a wallet pass in seconds. The pass installs into Apple Wallet or Google Wallet with their current stamp count, tier status, and active rewards visible on the card face. No account creation required: enrollment is frictionless enough to happen at the point of sale.
Operators change the program structure after launch without resetting customer progress
Businesses choose their program structure: classic stamp card (buy 9, get 1 free), points accumulation with threshold rewards, or a tiered program with named tiers and escalating benefits. The engine handles all three mechanics and allows operators to change the structure after launch without resetting enrolled customer progress.
Operators see who's drifting and run seasonal campaigns without a developer
Operators manage enrolled customers, view visit and redemption data, and push promotional notifications from a web dashboard. Seasonal campaigns (double points weekend, birthday reward) are configured without a developer. The dashboard shows which customers are active, which are drifting, and which have not visited in a set period.
Card changes appear on every enrolled customer's wallet immediately, no re-enrollment needed
Changing a stamp target, adding a new reward, or redesigning the card layout pushes to every enrolled customer's wallet immediately via the Apple and Google Wallet push update APIs. No redownload or re-enrollment needed, the change appears on the customer's existing card.
The lesson
The download is the graveyard
The loyalty program problem is not strategy. It is friction. App-based programs peak at week three and flatline before the first reward is ever redeemed, because the download is a barrier most customers never cross. If they delete the app, change phones, or simply forget to open it, the stamp collection stops.
The wallet solves this by removing the decision. The card is already where the customer is, next to their credit cards and transit pass, surfacing on the lock screen when they are near the store. Remove the download and the math changes: enrollment, reach, and repeat visits all move. The hardest engineering on this build was the part nobody sees: signing passes correctly for both platforms, delivering push updates reliably at scale, and handling device changes without duplicate notifications. Invisible infrastructure, visible results.
How it runs
- Next.js
- The operator dashboard and the public enrollment flow needed consistent performance and a server-driven architecture. App Router with React Server Components gave us fast initial loads for both surfaces without duplicating the application layer.
- Node.js
- The pass generation service handles Apple PKPass creation, Google Wallet JSON generation, certificate signing, and push update delivery for both platforms. Node's async I/O model handles concurrent pass operations efficiently without threading complexity.
- PostgreSQL
- The customer-program relationship model (enrollments, stamp counts, tier history, redemptions) needed reliable relational storage with the query performance to support churn signal analysis and campaign targeting across enrolled customers.
- AWS
- Apple pass signing certificates and PKPass bundles are stored in S3. Lambda handles the Apple Push Notification Service webhook flow that triggers wallet updates when a business pushes a campaign or a customer earns a new stamp.
Common questions
No. Customers scan the QR code and the pass installs into their wallet linked to a device identifier. For businesses that want named accounts (to enable cross-device access or personalized rewards), an optional account creation step can be added to the enrollment flow. Most businesses start without it to keep enrollment frictionless and add it later for their highest-value customer segments.
Yes. LoyaltyPass has an API that POS systems can call to stamp or credit points at checkout. Pre-built connectors exist for common POS platforms. For custom POS integrations, a webhook-based approach handles most setups within a few days without requiring changes to the POS hardware or software.
Customer data is exportable as a CSV at any time. Upon cancellation, LoyaltyPass provides a 30-day data export window before deletion. The data belongs to the business that collected it: LoyaltyPass does not retain or use it after the relationship ends.
Yes. Program structure changes (stamp target, reward value, tier thresholds) apply going forward and do not reset existing customer progress unless you explicitly choose to reset. Enrolled customers stay enrolled and their accumulated progress is preserved. Card design changes push to every enrolled wallet immediately.
We built LoyaltyPass (Apple Wallet and Google Wallet pass generation, stamp and points engine, operator dashboard, campaign management, real-time push updates, and POS API) in 14 weeks. The most technically complex part was the wallet pass signing and update infrastructure for both Apple and Google protocols simultaneously. A single-wallet-platform version (Apple-only or Google-only) would be faster. Contact us to estimate based on your program mechanics and integration requirements.
Related work
More of our work
Modernizing loyalty for a leading
Modernizing loyalty for a leading Irish utility provider
Modern loyalty platform managing 300K+ users with automated workflows and real-time redemptions.
Building a loyalty platform for
Building a loyalty platform for a high-end cosmetic dermatology practice
Gamified mobile loyalty platform for a medical spa with urgency mechanics and point redemption.