← All projects

Sambandh

The app for a global community of Yogi Divine Society devotees — a single hub for event registration, temple updates, publications, and community media.

Hero — Glimpses feed or My Smruti year-grid

The problem

Members of an international, geographically-dispersed Hindu spiritual organization (Yogi Divine Society) had their official communication scattered across WhatsApp and Telegram — no single source of truth, and hard to run large events against.

Sambandh pulls official communications and temple activity into one central hub. (Usage is event-spiky — it spikes around major annual events.)

What I built

  • Dynamic event registration — the flagship, config-driven flow (see the hard problem).
  • Glimpses — a moderated community photo feed: post, caption, and react (Nice · Pray · Wow · Funny) with live counts, full-screen viewing, and profiles.
  • My Smruti — AI-powered: surfaces every photo you appear in across event albums, browsable by year.
  • Admin content moderation — an approval queue for community posts.
  • E-book reader — an in-app reader for temple publications.
  • Plus: QR check-in and a reg desk with Stripe Terminal, HLS video, and onboarding/auth.
Dynamic registration — accommodation/room
Dynamic registration — day / gift
Dynamic registration — payment
Glimpses — feed + full-screen w/ reactions
My Smruti — year selector + results grid
Admin moderation queue
E-book reader

How it works

Client — React Native 0.83 (iOS + Android), TypeScript, Redux Toolkit + Redux-Saga, Apollo Client (GraphQL), React Navigation, Firebase (auth-token verification, analytics, Crashlytics, FCM push), Stripe React Native incl. Terminal, and HLS .m3u8 playback via S3/CloudFront.

Backend — Node with Express + Apollo Server on AWS Lambda (Serverless Framework) over MongoDB/Mongoose. A GraphQL layer (harisumiran-gql: Glimpses/albums, reactions, My Smruti) sits alongside a REST layer (bhet: registration, members, payments), with graphql-shield permissions and DataLoader batching. AWS S3 holds media, SQS runs async image processing and reaction-count updates, and Rekognition powers face matching for My Smruti.

The hard problem — a config-driven event-registration engine

The org runs many event types and no two register the same way. The solve: the event is its registration form. Each Event in MongoDB carries a registrationOptions + paymentRules config (flexible JSON); the React Native client reads that config and renders the flow conditionally — accommodation/room, mystery gift, pay-now vs pay-later, student pricing — orchestrated via Redux-Saga.

One registrant can register self + family + guests in a single batch, priced together via a live /registration/estimate call. Payment and check-in close the loop: Stripe online during registration, then each registration gets a QR code that a volunteer reg desk scans at the event to check people in and take in-person card payments via Stripe Terminal.

Why it's the flex: product sense (one adaptable flow, not N brittle ones) and technical depth (config-driven UI, saga-orchestrated multi-entity submission, dual online/in-person payment) — owned end-to-end.

Secondary depth — My Smruti

Per-event Rekognition face collections; a member's profile face is matched at 90% confidence, results cached, with a denylist for privacy opt-out. The client groups matches by year. (Backend plus shipped UI.)