JainWeddings — matchmaking with the kundli built in.
A matrimony platform open to every Jain community, where each match carries a real 36-point Guna Milan score. We built the Vedic astrology engine ourselves — from ephemeris data, not a paid API — so compatibility is a search filter, not an afterthought.

- Client
- JainWeddings
- Scope
- Member PWA, API & admin console
- Core build
- Next.js 16 · Node · MySQL
- Standout
- In-house Vedic matching engine
A Jain portal that parents could actually use.
General matrimony sites are broad by design, and community-specific ones are usually narrow to a single sect. JainWeddings sits between the two: open to every Jain community, with sect, sub-community and gotra recorded on every profile so families can filter the way they actually think — and with a kundli match included rather than sold as a paid add-on.
The second constraint shaped everything else. A large share of profiles are created by parents and relatives rather than the candidate — often people in their fifties and sixties who are not comfortable with dense web apps. The register form's first question is literally “Who is filling this profile?”
So the interface was built to a stricter accessibility bar than a typical consumer site: minimum 44px touch targets, 52–56px primary buttons, 16.5px form inputs, real labels bound to every field, and plain-language copy throughout.
The design rule: if a 55-year-old parent can't complete the profile wizard on a mid-range Android phone without help, the screen isn't finished.
We wrote the astrology engine ourselves.
Kundli matching is usually outsourced to a third-party API billed per request. That makes it slow, costly at scale, and impossible to filter a search by. We computed it in-house instead.
36-point Ashtakoot Guna Milan
Full eight-koota scoring computed from planetary positions at birth, with the complete breakdown shown on every profile — not just a total out of 36.
Mangal Dosh detection
Manglik status derived from Mars placement, then exposed as a search filter defaulting to like-for-like — the way families actually shortlist.
Nadi Dosha, computed properly
A dedicated ephemeris layer resolves Moon, Mars, Venus and Jupiter positions and the ascendant, so Nadi and the related doshas are derived from the chart rather than looked up from a table.
Birth place, resolved properly
Worldwide geocoding with the IANA timezone resolved at the date of birth — because a 1968 birth in India needs 1968's offset, not today's.
Compatibility as a filter
Because scores are precomputed at profile-save time, members filter directly on minimum guna, Nadi dosha and Bhakoot dosha — live, in the search itself.
Two-stage search
SQL narrows the pool first, then scoring runs in memory over the shortlist — keeping an astrological search fast enough to feel instant.
“Not provided” is a real state
Members without a recorded birth time are never scored zero and never silently dropped from results. Unknown is displayed as unknown — the detail the whole feature rests on.
Nobody browses until they've cleared every gate.
Onboarding is deliberately linear. Each stage must complete before the next unlocks, and the API — not the browser — decides where a member currently stands.
Register
Account created, with the relationship of whoever is filling the profile recorded up front.
Build profile
A seven-step wizard: basics, birth details, community, education, career, family and photos.
Pay membership
A single lifetime fee via Razorpay — no tiers, no renewals, no recurring surprises.
Admin review
A human moderator approves the profile and each photo before anything becomes visible.
Browse & match
Only now do search, interests and shortlists unlock — enforced server-side on every call.
Photos and phone numbers stay closed until both sides agree.
A member can upload up to six photos. Only the primary one is public — the rest stay locked until an interest has been sent and accepted. Contact details work the same way. Nothing is exchanged on one party's say-so.
Payment trust is enforced the same way. Razorpay signatures are verified server-side with HMAC and reconciled through an idempotent webhook, so a membership can never be unlocked by a tampered client-side callback or double-credited by a retried webhook.
Members can report or block any profile, and both actions land in the moderation queue rather than a mailbox.
A 19-screen console, because moderation is the product.
On a community platform, the admin tooling isn't back-office overhead — it's what makes “every profile verified” a promise the operator can actually keep.
Approval & photo queues
Profiles and images reviewed separately, with soft delete and a restorable trash so a wrong call is never permanent.
Payments & coupons
Razorpay reconciliation, discount coupons, offline payment entry for members who pay in person, and CSV exports.
Multi-channel notifications
Email, SMS and WhatsApp campaigns with reusable templates — because this audience reads WhatsApp, not inboxes.
Scheduled background jobs
Membership expiry reminders, notification retries and trash purging run on a DB-claimed scheduler, safe to run on more than one instance.
Reports & monitoring
Revenue, growth, profile-completeness and anomaly reports, plus a live health view and a full audit log of admin actions.
Separated admin identity
Admins live in their own table with their own token audience and super-admin / moderator roles, so a member token can never reach an admin route.
Every Jain family already has a biodata. Most of them are a Word file.
Before a profile ever reaches a matrimony site, families circulate a biodata — a one-page sheet with the candidate's details, family, gotra and horoscope, sent around on WhatsApp. They are almost always built by hand in Word, and it shows.
So the platform builds one for you. The details already on the profile are laid into a designed sheet — a choice of ornamented templates with borders, floral work and traditional motifs — with the kundli chart rendered from the same birth data that drives the matching engine.
The output is a shareable link and a print-ready page, so the sheet that goes round the family is the same record the site holds. A watermarked preview lets someone see the result before they commit.
Why it matters: the biodata is the artefact families actually pass around. Owning it means the profile travels with the platform rather than away from it.
The details nobody asks for, and everybody notices.
Autocomplete that knows your college. Education fields are backed by a dataset of roughly 80,000 institutions across 201 countries, matched through a multi-pass fuzzy and acronym search — so typing “MNIT” finds the right college instead of returning nothing.
Money as integers. Amounts are stored in paise, never floats. A membership fee should never drift by a rounding error.
Honest search results. When the candidate pool is truncated for performance, the API says so explicitly rather than quietly presenting a partial list as complete.
Installable on the home screen. The member app is a PWA with an offline fallback — members typically arrive through a WhatsApp link, and installing it means never having to find that link again.
One source of truth for state. Every auth response returns exactly where the member stands in onboarding, so the interface can never disagree with the server about what happens next.
What it's built on
Member App
- Next.js 16 (App Router)
- React 19 · TypeScript
- Tailwind CSS v4
- TanStack Query
- PWA + service worker
- Biodata sheet renderer
- Razorpay Checkout
API & Data
- Node.js · Express
- MySQL via Knex migrations
- JWT + bcrypt auth
- Zod validation
- Helmet, CORS, rate limiting
- Custom Vedic astronomy engine
- Hindi / English interface
Admin & Infra
- React + Vite SPA
- React Router · React Hook Form
- Razorpay orders & webhooks
- Cloudflare R2 for video
- Sharp image pipeline
- SMTP, SMS & WhatsApp Cloud API
Building a platform for a community you know well?
Niche platforms live or die on the domain details — the ones a generic template can't hold. That's the part we like most.