Work · 03 of 9

Humraah

Matrimonial platform. Backend, PWA and mobile app taken from a failed audit to store review

Role
Sole engineer on backend, PWA and mobile (Third Shade Media)
Team
Shreya (8 commits)
Studio
Third Shade Media Services
Period
Jun to Sep 2026
Status
store review
Stack
  • Node.js
  • Express 5
  • MongoDB
  • JWT
  • Expo
  • React Native
  • TypeScript
  • Cloudinary
  • Razorpay
  • Apple IAP
  • Google Play Billing
  • FCM
  • APNs
  • Gallabox
  • SurePass
  • Render
Links

Measured

MetricValueWindowSource
Blocking audit findings, 35 fixed, 5 accepted as non-blocking; localStorage auth, public image URLs, missing spec features40 → 030 Jun to 12 SepAll_Issues.md and launch QA register F-01…F-30, 12 Sep 2026
Backend commits, the rest by one teammate355 of 363Jun to Sep 2026git shortlog -sn, humraah-backend, 12 Sep 2026
Mobile commits, Expo app built from scratch155 of 155Jul to Sep 2026git shortlog -sn, humraah-mobile, 12 Sep 2026
Pre-registrations, founding-member list before launch500+Sep 2026Third Shade, 14 Sep 2026

Problem

Humraah is a private, family-first matrimonial service: Aadhaar-verified profiles, up to three curated introductions a week, photos hidden until the chat stage, a five-day supervised family chat, and a guarded path from YES/NO/LATER to mutual interest, biodata and a Meet/No decision. When I joined in late June the product looked finished from the outside. An audit on 30 June found forty issues, including auth that lived in localStorage, user images on public URLs, and features from the spec that did not exist. The brief became: make it real, then take it to the app stores, on one backend.

One backend, three clients

WordPress + PWAservice worker, web pushExpo appAndroid, iOSAdmin dashboardmoderation, analyticsNode / Express backend13 routes · 23 services · 26modelsIntegrationsSurePass, Gallabox,Razorpay, IAP, FCM, APNsMongoDB, Cloudinaryprivate media
Public pages and the PWA on WordPress and Hostinger; the app on Expo; everything on one Node backend.

What I built, in order

  • Security first (30 June to 5 July). Strict JWT auth, helmet, hpp, mongo-sanitize, rate limiting; user images moved to private Cloudinary; admin auth hardened; release builds stopped logging profile status.
  • Matching. Compatibility scoring, family-exclusion rules so members of one family group are never matched, separate pools for first marriages and new journeys, a daily match-feed job.
  • Registration. WhatsApp OTP, resumable drafts, a gender-based photo policy with on-device face detection, Aadhaar via SurePass with a deep-link return for native, payment gate, email verification.
  • The notification policy engine. Twenty-five event types over three channels with opposite eligibility rules: WhatsApp only before a profile is active, email only after and only to a verified address, push whenever a token exists. One policy file decides; every channel enforces it a second time.
  • Moderation and the match journey. A four-level moderation engine, report and block with a permanent-block privacy model, the five-day supervised chat, and the Meet/No decision after chat expiry.
  • The app (22 July to 12 September). Expo and React Native from scratch, every screen rebuilt against the website as source of truth, push end to end, Aadhaar on device, Play Store UGC compliance, reviewer sign-in, in-app purchases on both stores.

Before and after

BeforeAfter
AuthToken in localStorage, no expiryJWT with role checks, rate-limited OTP, hardened admin
Member photosPublic Cloudinary URLsPrivate storage, served through the API
A single reportSuspended the account, killed chats and matching, no restoreTwo distinct reporters required; automatic reinstatement on dismissal
"Profile verified" messageCould never send: one guard required active, the other required not activeExplicit post-activation allow-list; the template fires
ClientsWeb onlyWeb, PWA, Android on internal testing, iOS on TestFlight

Where it stands

Google Play: bundle 1.0.0 (5) on internal testing, listing and every content declaration done, the ₹499 one-time product active in 169 regions; the only step left is finance attaching a bank account and pressing rollout. App Store: build 1.0 (8) in TestFlight, version page and App Privacy complete, blocked only on the Paid Apps Agreement. Thirty-five of forty QA register items fixed, the rest documented as non-blocking. Client work: product screenshots are intentionally omitted, so this case study covers the architecture, the engineering decisions, security, release engineering and the measured outcomes instead.

Learned: One backend, three clients, and every notification channel has its own rules.

keysKeyboard
j / k
next / previous row
Enter
open the focused row
⌘K or /
search, or ask this site
g then h w a c
go home, work, about, contact
t
toggle light and dark
Esc
close the palette or this map
?
this map