Full-Stack · Product · Payments
Boomingo
Digital loyalty platform with Apple & Google Wallet

Overview
Boomingo replaces the physical loyalty punch-card with a digital pass that lives in Apple Wallet or Google Wallet. A customer scans a QR code at the counter, adds the business's pass to their wallet in seconds, and earns stamps and rewards on every visit — no app download required.
For businesses, it's a full SaaS platform: a dashboard to design passes and reward rules, customer analytics, and an automated marketing engine that pushes campaigns straight to the passes already sitting in customers' wallets.
What it does
- Apple Wallet & Google Wallet pass generation with live pass updates
- QR-code onboarding flow — scan, add pass, start earning in seconds
- Multi-tenant business dashboard for pass design, reward rules, and analytics
- Cron-based campaign engine that targets customer segments automatically
- Stripe + RevenueCat subscription billing, kept in sync via webhooks
- React Native companion app with a WebView bridge to native device features
The hard parts
Scaling wallet updates past 100k passes
A single program update or location campaign rewrote every pass row just to signal a change, then queued each user one row at a time inside one long transaction — a design that doesn't hold up at 100k+ passes. I traced the full update path and designed the redesign: a one-row template version that devices compare against instead of the mass update, batched enqueueing in a background worker, no transactions on read-only Wallet endpoints, and Redis for cross-server locks.
Wallet pass generation across two ecosystems
Apple and Google have completely different pass formats, signing requirements, and update mechanisms. I built a single abstraction that generates, signs, and updates passes for both platforms, so a business configures its loyalty card once and it works everywhere.
An automated marketing engine
Businesses wanted campaigns that run themselves — 'reward customers who haven't visited in 30 days'. I built a cron-driven engine that evaluates customer segments on a schedule and delivers campaigns to matching wallet passes without any manual work.
Billing that never drifts
Subscriptions come in through both Stripe (web) and RevenueCat (mobile). Webhooks from both sources reconcile into one subscription state per tenant, handling renewals, upgrades, and failed payments without double-charging or losing access.
Native features inside a WebView
The mobile app is a React Native shell around the web product. A custom JavaScript bridge exposes native capabilities — camera for QR scanning, push notifications, wallet integration — to the web layer, keeping one codebase for the core product.
Tech stack
Outcome
Shipped end-to-end as a multi-tenant product and deployed on AWS (EC2, S3) — from database schema to wallet passes in customers' pockets.