Case study
Sticky Cards
Digital Wallet & Customer Engagement Platform
Role
Scope
Stack
What I built.
- 01
Businesses create branded cards (loyalty cards, event passes, promotions) that customers add to Apple Wallet or Google Wallet in one tap, with no app to download.
- 02
Each business sets its own colours, logo, banner and the details on the front and back of the card.
- 03
Cards update themselves: a new offer or points balance appears on every customer’s phone automatically, and businesses can send messages straight to saved cards.
- 04
Customers are organised into contacts and lists, so a business can see who holds which card.
- 05
Built the logic behind reward programs: tracking customer activity, awarding rewards and running loyalty workflows that bring customers back.
- 06
Designed it so new card types and loyalty features can be added without rebuilding what already exists.
- 01
Built a dedicated NestJS module (controller, service, repository) around three entities: card definitions with separate Apple and Google payloads, issued card instances, and device registrations.
- 02
Implemented the Apple Wallet Web Service (device registration, updated serials, latest pass, logs) and signed .pkpass generation with passkit-generator.
- 03
Real-time updates: an edited card flags its serial numbers and sends a silent APNs push to every registered device, which pulls the new pass; Google Wallet objects are updated in place.
- 04
Generated Google Wallet classes, objects and signed save links, with the callback tracking installs and removals.
- 05
Extended the contacts module with lists, custom fields and tags, with Socket.IO gateways keeping the dashboard in sync.
- 06
Reward events feed the wallet update pipeline, so a card refreshes when its balance changes; workspace scoping, soft deletes and DTO validation keep multi-tenant data safe, with BullMQ on Redis for bulk updates.