Case study
Popup
Wallet Cards for a Venue Social Platform
Role
Scope
Stack
What I built.
- 01
Put a branded Popup Card in each user’s phone wallet: name, photo, email, phone and a QR code that opens their Popup profile.
- 02
Set up Popup’s Apple and Google developer accounts and the certificates wallet passes need.
- 03
Built “Add to Apple Wallet” and “Add to Google Wallet”, covering iPhone and Android from one backend.
- 04
Cards update by themselves: change a name or photo in Popup and the wallet card follows within seconds, the way a boarding pass updates when the gate changes.
- 05
Important changes can appear as lock-screen notifications, giving Popup a direct channel to its users.
- 06
Tested on real iPhones and Android phones, deployed to Popup’s server, and handed over with documentation, including how to renew the certificates.
- 01
Express and TypeScript service generating signed .pkpass files with passkit-generator, with images pulled from S3 and resized with sharp to Apple’s required sizes.
- 02
Deterministic serial numbers and Google object IDs per user, so a reissued pass replaces the existing card instead of adding a duplicate.
- 03
Apple PassKit Web Service with per-pass authentication tokens, passesUpdatedSince support and Last-Modified handling, backed by MongoDB models for passes, devices and registrations.
- 04
Empty APNs pushes over HTTP/2 to every registered device on change, with changeMessage fields for lock-screen notifications.
- 05
Google Wallet genericObject upserts, RS256 save-to-wallet links, and PATCH sync with TEXT_AND_NOTIFY messages kept within Google’s rate limits.
- 06
A secured /wallet/sync endpoint for Popup’s platform, Joi validation and structured logging, running on EC2 under PM2 behind HTTPS.