KeepComing
My own SaaS product. A multi-tenant loyalty platform that issues live Apple Wallet and Google Wallet cards.
Architecture at a glance
data flows left to right- Wallet card
- Next.js app
- NestJS API
- BullMQ workers
- PostgreSQL
connectedApple / Google WalletPaymobWhatsAppRedis
The problem
Small businesses want repeat customers, but paper punch cards get lost and most loyalty apps ask customers to download yet another app. The card needs to live where the customer already looks: their phone’s wallet.
What I built
KeepComing is my own product, designed and built end to end. A business signs up, designs its card from templates, and starts issuing live Apple Wallet and Google Wallet passes to customers. Staff scan the customer’s QR code from the web or mobile app to redeem, and the card in the wallet stays live.
It is multi-tenant from the ground up. One platform serves many businesses, each with its own locations, card templates, and customers. A super admin dashboard sits across all of them.
Engineering decisions
- Background work is queued. Slow work runs as BullMQ jobs on Redis instead of inside the request.
- The partner API is idempotent and rate-limited. External systems can retry safely without double-stamping a card.
- Payments fit the market. Payments run through Paymob, and customer messaging goes through the WhatsApp Cloud API.
- Pricing is geo-aware. Plans adapt to the business’s country without separate builds.