A minimal, privacy-focused, map-based matchmaking app for Pakistan, built with Firebase Auth, Cloudflare Workers, MariaDB, and Tailwind CSS. Users appear as gender-colored dots on a map and can connect anonymously. Phone numbers are only revealed upon mutual acceptance.
- Phone-based OTP login via Firebase
- Invisible reCAPTCHA for security
- Persistent login across sessions (auto-redirect to map)
- ID Card (CNIC image + selfie)
- Phone Number (hidden by default)
- Gender (immutable post-login)
- Precise location (used only when online)
- Dots represent online users:
- 🔵 Male
- 🎀 Female
- Dots are only visible to opposite gender
- Clicking a dot sends a connect request
- Request + Accept = connection
- Phone numbers revealed after mutual acceptance
- Dot turns 🟡 Yellow ("Engaged") for 48 hours
- Users must log in daily to maintain yellow status
- If no login in 48h → dot turns ⚫ Grey (inactive)
| Layer | Technology |
|---|---|
| Frontend | HTML + Tailwind + Alpine.js |
| Hosting | Firebase Hosting (*.web.app) |
| Auth | Firebase Phone Auth |
| Map / UI | Google Maps or Leaflet |
| API Layer | Cloudflare Workers |
| Realtime Loc | Cloudflare KV |
| File Storage | Cloudflare R2 (CNIC/selfie) |
| DB | MariaDB (external hosting) |
- PWA manifest + service worker
- Installable on Android/iOS
- Mobile-first UI with Tailwind
- Admin dashboard for moderation
- Blocking/reporting
- Verified badge / profile boost
- Guardian-mode accounts
- Stripe/Paymob for monetization
- User logs in via phone OTP
- Uploads CNIC/selfie and selects gender
- Goes online — appears on map (dot)
- Sees nearby opposite gender users
- Sends/receives match requests
- Mutual accept = phone reveal + yellow dot
public/
├── index.html # Login + Auth
├── map.html # Map interface (after login)
├── manifest.webmanifest
├── sw.js # PWA service worker
firebase.json # Firebase hosting config
Proprietary — Built by and for private use (RishtaApp).