All Work
Case Study·Spiritual Services & Travel·2024·India

HRDYAM

Full-Stack Spiritual Services Platform

ClientZoAstro Tech Pvt Ltd
TypeFull-Stack Web Platform
Live Site
HRDYAM Full-Stack Web Platform case study screenshot
150% increase

Online Inquiries

6 services orchestrated in single flow

Payment Flow

Zero user-facing errors across all integrations

Failure Handling

Near-instant via ISR webhook

Content Updates

// THE PROBLEM

India's spiritual services market is fragmented across WhatsApp groups, independent astrologers with no online presence, and travel agents who don't do digital. The client needed a single trusted platform with verified practitioners, transparent pricing, and a frictionless booking experience — capable of handling real-money payments, real-time booking slots, CRM pipeline management, automated meeting scheduling, and multi-recipient email notifications.

// WHAT WE BUILT

We built an end-to-end transactional platform unifying temple pilgrimage tours, live astrology consultations, wellness retreats, yoga programs, and an e-commerce store for certified spiritual products. The architecture prioritizes graceful degradation — every integration has a defined failure mode that degrades partially rather than crashing the page. Six external services (Cashfree, Firebase, Sanity, Zoho, Resend, Google Calendar) are orchestrated in a single payment-completion flow without a single point of failure.

// HOW IT WORKS

Under the Hood

Dual-Source Data Pattern

Every data-fetching function tries Sanity CMS first, then falls back to local TypeScript data. The site never crashes — even if Sanity has an incident, pages load normally from local data.

Dual-Storage Booking Model

Consultation bookings write to Firestore (for real-time slot blocking) and Sanity (canonical order record with payment status). Firestore queries have a 5-second timeout — if slow, all slots render as available rather than blocking the booking UI.

Two-Mode Payment Integration

Cashfree SDK supports two UX flows: modal mode for store products (stays on checkout page) and full-page redirect for consultations (signals seriousness for higher-trust transactions).

Server-Side Auth Without firebase-admin

Token verification uses Google Identity Toolkit REST API directly — a lightweight HTTPS call instead of an SDK import, avoiding service account JSON credentials in a serverless environment.

// TECH STACK
FrameworkNext.js 16 (App Router, React 19, TypeScript 5)
CMSSanity v5 (embedded Studio)
DatabaseFirebase Firestore
AuthFirebase Auth + Google Identity Toolkit
PaymentsCashfree PG v5.1 (NPM SDK)
EmailResend (transactional)
CRMZoho CRM (OAuth 2.0)
BlogHashnode (GraphQL API)
AnalyticsGTM + Meta Pixel + GA4 + Microsoft Clarity
DeploymentAWS Amplify (SSR standalone)
// WHAT IT DOES
  • Pilgrimage marketplace with multi-tier packages (Economy, Standard, Premium)
  • Astrology consultation booking with real-time Firestore slot availability
  • Sacred store e-commerce with spiritual-specific metadata (ruling planet, Rashi)
  • Dynamic city landing pages for SEO and ad campaign traffic
  • Admin panel with order clearance tracking and audit trail
  • Astrologer dashboard with earnings and client lead management
  • Dual-destination lead capture — Zoho CRM + Google Sheets simultaneously
  • Multi-channel event tracking — Meta Pixel, GTM, GA4 from single tracking utility
// THE HARD CALLS

Why We Did What We Did

Every architectural decision has a reason. Here are the ones worth explaining.

01

Why dual-store (Firestore + Sanity) for bookings?

Firestore is optimized for real-time reads with high write throughput — ideal for slot blocking during concurrent booking attempts. Sanity is the source of truth for orders and reporting. Using Sanity alone would have introduced CMS write costs and latency; Firestore alone would have meant building a separate order management UI.

02

Why Hashnode for the blog instead of Sanity?

The content team already uses Hashnode as their primary writing tool with a strong GraphQL API. Migrating blog workflow to Sanity would have cost editorial velocity with no meaningful technical benefit.

03

Why Promise.allSettled() for emails?

A customer waiting for payment confirmation should not see an error because the astrologer's email bounced. Each recipient is independent — one failure must not block others.

We needed a platform that truly captured the spiritual depth of our journeys — not just a booking website. The Beyond Horizon delivered something that moved our pilgrims before they even booked. Our inquiry volume jumped by 150% and the quality of leads improved dramatically.
— Aditya Shukla, Founder, HRDYAM Travels

Ready to Build Something Like This?

Let's talk about your project.