Abdelrahman Mahmoud
hello@abdelrahmanmahmoud.com

KeepComing

My own SaaS product. A multi-tenant loyalty platform that issues live Apple Wallet and Google Wallet cards.

Type
Own product
Stack
NestJS, Next.js, PostgreSQL, Redis, BullMQ, Apple Wallet, Google Wallet, Paymob, WhatsApp Cloud API

Architecture at a glance

data flows left to right
  1. Wallet card
  2. Next.js app
  3. NestJS API
  4. BullMQ workers
  5. 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.

Open to conversations

Building something that needs a solid backend? Let's talk.