Home/Our Work/Atma Shambhala

Atma Shambhala

Connecting spiritual seekers with authentic guides, facilitators, and venues through streaming, networking, and discovery.

Visit live site ↗

Atma Shambhala bridges the gap between spiritual seekers and authentic guides, facilitators, and venues — forming a conscious network for growth and connection.

We built an immersive platform featuring a Netflix-style video library for streaming teachings, alongside tools for discovery, booking, and community.

The result is a spacious, emotionally resonant digital space with a flexible foundation the team can scale as their network of practitioners grows.

Brand-led UXVisual storytellingMotion

The challenge

Atma Shambhala set out to bridge the gap between spiritual seekers and the authentic guides, facilitators and venues they are looking for, forming a conscious network for growth and connection. Bringing that together in one place means solving several problems at once: discovery and booking, live teaching delivered online, in-person retreat venues, and paying practitioners across different countries and currencies. The platform had to carry that operational weight while still reading as a spacious, emotionally resonant space to spend time in, and rest on a flexible foundation the team can scale as their network of practitioners grows.

Our approach

  • We built Atma Shambhala as a single Next.js 16 App Router application in TypeScript, with React 19, Tailwind and Radix primitives on the front end and 99 Route Handlers serving the API.
  • The domain sits in MongoDB behind Mongoose, using discriminators so admin, guide, facilitator, seeker and portal accounts share one user collection while keeping the fields each role actually needs.
  • NextAuth with JWT sessions handles identity: edge middleware gates the members area on role and access status, while a role permissions matrix and requireAuth, requireRole and requireAdmin helpers guard the API routes behind guide tooling and admin approvals.
  • Live teaching runs on LiveKit with server-side recording written to Backblaze B2, so a finished session's recording becomes available through the Netflix-style streaming library.
  • Payments route by currency across Stripe and Razorpay, and payouts run back out through Stripe Connect and Razorpay Route against a ledger that tracks earnings, referrals, withdrawals and refund reversals.

What we built

Live sessions with server-side recording

Guides open a room through the LiveKit RoomServiceClient, and the platform starts a RoomCompositeEgress at the same moment, writing an H264 720p30 MP4 to a Backblaze B2 bucket over the S3-compatible API. Access tokens carry role metadata, and guides, session facilitators and admins receive room admin rights for server-side muting while enrolled seekers join the gallery.

Currency-aware checkout across two gateways

A gateway router sends INR payments to Razorpay and USD, EUR, GBP, AUD and CAD to Stripe. Checkout builds line items for the experience plus any per-night accommodation, verifies Razorpay webhooks with an HMAC-SHA256 signature, and enrols seekers directly when an experience is free.

Marketplace payouts with revenue splits and referrals

Each experience carries a contribution split across teachers, platform, foundation and portal that a save-time validator requires to total exactly 100 per cent. Guides onboard to Stripe Connect or Razorpay Route, and a payout ledger records earnings, referral earnings, withdrawals and the earning reversals a refund triggers, deriving balances by aggregation.

Five access models per experience

The Experience schema supports free access, per-session, trial, subscription and bundle pricing as independent flags, with save-time validators that reject free combined with paid options and require a price for every enabled one. Checkout enforces a one-trial-per-experience rule per seeker, and recordings carry their own separate access setting.

Timezone-correct recurring sessions

Sessions generate from daily, weekday, weekend, weekly or custom patterns over a rolling window, honouring excluded and additional dates. Each date resolves its real UTC offset through Intl.DateTimeFormat so daylight-saving shifts do not drift session times, and repeat runs skip dates that already exist, making generation idempotent.

In-person Portal venues with accommodation booking

Portal records model retreat venues with geocoded location, capacity, amenities and an accommodations array covering private rooms, dormitories, tents, glamping, cottages and treehouses, each with its own nightly price. Venue owners can be invited to manage a portal through a dedicated user type with its own payout account, and portals move through a draft, pending-approval and active lifecycle before rendering on Google Maps.

Technology

Frontend

  • Next.js 16.2 App Router with React Compiler and Cache Components enabled
  • React 19.2 and react-dom 19.2
  • TypeScript 5.9 with @/* path aliases
  • Tailwind CSS 3 with tailwindcss-animate, class-variance-authority, tailwind-merge and clsx
  • Radix UI primitives in shadcn-style components
  • Redux Toolkit 2.9 with react-redux across 14 slices
  • Framer Motion 12 for page and landing animation
  • MUI 7 with @mui/x-date-pickers 8, rc-slider, lucide-react and react-icons

Backend & Data

  • Next.js Route Handlers: 99 route files under app/api
  • MongoDB 5 driver with Mongoose 7 and ten models
  • Mongoose discriminators for admin, facilitator, guide, seeker and portal users
  • NextAuth.js 4 with JWT sessions, Google OAuth and a credentials provider
  • bcryptjs hashing with hashed email-verification and password-reset tokens
  • Edge middleware members-area gate plus requireAuth, requireRole and requireAdmin route helpers
  • A ROLE_PERMISSIONS matrix, role-aware user response sanitisers and DOMPurify for rendered rich text
  • Cron route handlers for session reminders and experience completion, with dayjs and Intl-based timezone utilities

Live Video & Media

  • LiveKit: livekit-client 2.18, @livekit/components-react 2.9, livekit-server-sdk 2.15
  • LiveKit RoomServiceClient for room lifecycle and server-side muting
  • EgressClient RoomCompositeEgress recording to H264 720p30 MP4
  • LiveKit WebhookReceiver for egress and room lifecycle events
  • Backblaze B2 as the S3-compatible egress target
  • Cloudinary with next-cloudinary and server-generated signatures for browser uploads
  • HTML canvas poster generation with qrcode
  • TipTap 3 rich-text editor

Payments & Integrations

  • Stripe 18 with Checkout Sessions, subscriptions, Connect and webhooks
  • Razorpay 2.9 with Orders, HMAC-SHA256 signature verification and Route transfers
  • Currency-based gateway router: INR to Razorpay, USD, EUR, GBP, AUD and CAD to Stripe
  • Stripe Connect and Razorpay Route payouts with a guide payout ledger
  • Brevo for transactional and bulk campaign email
  • googleapis Google Calendar v3 with OAuth token refresh
  • @react-google-maps/api for portal maps and location autocomplete
  • Meta Pixel and Conversions API, Vercel Analytics and Speed Insights

Tooling & Deployment

  • Biome 2.3 for linting and formatting
  • Vercel for production, with cron configuration in vercel.json
  • Render staging from a testing branch
  • Docker and docker-compose with Next.js standalone output
  • @next/bundle-analyzer and babel-plugin-react-compiler
  • Node 20 or later

Project Gallery

Atma Shambhala website — primary view
Landing and brand presentation.
Atma Shambhala website — content section
Key sections and layout.
Atma Shambhala website — experiences and journeys
Experiences, search, and program cards.
Atma Shambhala website — screen 4
Additional views and layout.
Atma Shambhala website — screen 5
Further pages and detail.
Atma Shambhala website — screen 6
Extended layout and visual system.
← All our work