Executive summary
Ardh Kumbh 2027 is a pilgrimage services platform: ritual bookings (puja, Aarti, Pind Pradanam), Shahi Snan packages, Veda Mineral Water orders, stall discovery, and end-to-end payments via Stripe. Delivery uses a Turborepo monorepo — Next.js 15 (web), Expo (iOS/Android), Node + Hono (API), shared Drizzle schema and Zod validators — deployed to Vercel, Fly.io, and app stores, with Neon, R2, and Resend as core infrastructure.
The programme runs in two-week sprints, with design-first weeks, then parallel client + API build, then integration hardening before a December–early January production cutover buffer ahead of peak pilgrimage traffic.
Goals, non-goals, success measures
Primary goals
- Pilgrims can discover, configure (pilgrim / ancestor details), pay, and receive confirmation (email + WhatsApp when live) with auditable booking state.
- Operational staff can fulfil bookings without manual spreadsheet chaos (admin path: minimal internal tools or integrated admin API — decide and implement by sprint 10).
- Web + mobile parity on core commerce: catalog → detail → cart → checkout → confirmation → “my bookings”.
- Find nearest stall works on mobile (GPS + maps) and web (embed + consent).
Non-goals (initial programme)
- Building a generic OTA for non-Kumbh inventory.
- Multi-gateway payments (Stripe-only is intentional).
- Flutter client (Expo-only per programme decision).
- Heavy custom CMS — prefer MDX/content layer or headless CMS only if editorial demand is proven.
Success measures (KPIs)
| Measure | Target direction |
|---|---|
| Checkout completion rate | Maximise; funnel analytics on web + mobile |
| Payment webhook error / duplicate rate | Near zero; 100% idempotent handling |
| p95 API latency (catalog) | < 300ms warm regions under nominal load |
| Crash-free sessions (mobile) | > 99.5% in production builds |
| Time to confirm booking after payment | < 60s (automated path) |
Scope matrix & business rules
| Capability | Web | Expo | API / data |
|---|---|---|---|
| Marketing & trust pages | Full | Lite / deep links | SEO N/A |
| Package catalog + filters | Full | Full | GET /packages, caching |
| Group / personal puja rules | Forms + validation | Same | Enforce min/max pilgrims server-side |
| Pind Pradanam + ancestors | Flow + forms | Same | ancestors table + rules |
| Shahi Snan fixed dates | Date picker constraints | Same | puja_dates + validation |
| Stripe checkout | Hosted or embedded | RN Stripe or WebView | Intent/session + webhooks |
| Water (Veda) orders | Landing + form | Optional v1.1 | water_orders |
| Nearest stall | Maps embed | GPS + maps | GET /stalls/nearby |
| Reviews | Read + submit | Read + submit | Moderation policy TBD |
Technical constraints
- Single Stripe webhook ingress on the Hono API — verify signature once; no duplicate Next + API handlers.
-
Validators live in
packages/validators; API imports them; web and mobile reuse for client-side parity. - Better Auth: one documented session strategy for web and mobile (cookies vs bearer); avoid split identity tables.
- packages/ui is web-only bespoke UI; do not import into Expo without RN Web — see design language.
- Region: API on Fly (e.g. Singapore); tune Neon pool and cold-start budgets for checkout paths.
Workstreams & dependencies
These streams run in parallel after Phase 1; critical path is Auth → Catalog → Booking draft → Stripe → Webhook → Confirmation.
| Stream | Outputs | Depends on |
|---|---|---|
| Design / UX | Figma (or equivalent), component specs, copy deck | Product sign-off on flows |
| Platform / monorepo | Turborepo, CI, shared tsconfig/eslint/tailwind presets | Repo bootstrap |
| Data | Drizzle schema, migrations, seed scripts (packages, dates, stalls) | ERD approval |
| API | Hono routes, services, Stripe webhooks, Resend, R2 presign | Schema + validators |
| Web | Route groups, bespoke cultural UI, TanStack Query, checkout UX | API + auth contract |
| Mobile | Expo Router, maps, MMKV cart, notifications | Same API + auth contract |
| DevOps | Vercel, Fly, secrets, observability, runbooks | Staging URLs for webhooks |
| Content & compliance | Legal pages, refund policy, DPDP-aware privacy, Hindi scope if any | Stakeholder review before payments live |
Phased roadmap (0–5)
Each phase has entry criteria (what must be true to start) and exit criteria (what must be true to advance).
Phase 0 Discovery & alignment (1–2 weeks)
- Confirm Shahi Snan date list, package SKUs, pricing model, cancellation rules.
- Choose WhatsApp BSP / Meta Cloud path; start any verification early.
- Exit: signed scope doc, RACI, communication rhythm (e.g. weekly demo).
Phase 1 Experience design (2–4 weeks)
- All critical screens: marketing, services, PDP, cart, checkout, auth, dashboard, stall, water.
- Component and token specs for culturally rooted UI; mobile parallel wireframes with the same visual system.
- Exit: design freeze + annotated handoff; URL map stable.
Phase 2 Foundation build (4–6 weeks)
- Monorepo, Neon, Drizzle migrations, users/packages/bookings/pilgrims/payments.
- Better Auth E2E on web; mobile session parity spike.
- Exit: staging deploy; health check; one vertical slice behind feature flag optional.
Phase 3 Parallel feature build (8–12 weeks)
- Web + Expo consume same endpoints; cart + checkout + Stripe + webhook path.
- Domain depth: ancestors, shahi date validation, water orders, reviews.
- Exit: feature-complete against v1 scope checklist; no P0 bugs in checkout.
Phase 4 Integration & hardening (4 weeks)
- E2E (Playwright web); mobile smoke + detox/Maestro if adopted.
- Load on checkout; webhook chaos testing; secret rotation drill.
- Exit: release candidate signed off; privacy + content pages live.
Phase 5 Launch & in-season ops (Jan–Apr 2027)
- Production cutover; monitoring; on-call; hotfix process (Expo Updates for eligible JS fixes).
- Exit: orderly ramp-down; post-mortem; archive costs (R2, Neon).
Sprint calendar (2-week cadence)
Sixteen sprints ≈ eight months from mid-2026; adjust start date to your real kickoff. Each sprint ends with a demo, retro, and backlog refinement.
| Sprint | Outcome focus |
|---|---|
| 1 | IA, wireframes, technical spikes (auth, Stripe test) |
| 2 | High-fidelity UI; API contract v0 frozen |
| 3 | Turborepo + Neon + Drizzle + users schema + CI skeleton |
| 4 | Catalog read path (web + Expo + API) |
| 5 | Stalls + maps read-only + seed data |
| 6 | Cart + booking create + pilgrim APIs + Zod parity |
| 7 | Stripe payment session + client integration |
| 8 | Webhooks + booking confirmation + Resend templates |
| 9 | Dashboard, profile, reviews CRUD |
| 10 | Pind Pradanam + Shahi Snan validation rules |
| 11 | Water orders + ops email / notification |
| 12 | Push reminders + scheduled jobs (Fly cron / queue) |
| 13 | E2E + load tests + webhook idempotency audit |
| 14 | Security pass: rate limits, headers, PII logging review |
| 15 | Store submission, SEO, analytics, content freeze |
| 16 | Prod buffer: smoke tests, runbooks, rollback drills |
Quality, testing, definition of done
Definition of Done (representative)
- Types strict; no
anyin new code paths. - Zod validation on API boundary; same schemas used in UI where applicable.
- Unit tests for pricing / date / pilgrim count rules in API service layer.
- Critical path E2E: login → add package → pay (Stripe test) → confirmed state.
- Accessibility: keyboard nav and focus order on checkout; color contrast on marketing.
- Observability: structured logs for payment and webhook events (redact PII).
Test pyramid
- Many unit tests (pure rules, validators).
- Some integration tests (API + test DB or containers).
- Few E2E flows (stable, run in CI on main).
- Manual device matrix for maps, payments, and low-network conditions.
Environments & release train
| Env | Purpose | Notes |
|---|---|---|
| Local | Developer machines + Docker Compose for Postgres optional | Stripe CLI for webhooks |
| Preview | PR previews (Vercel); optional ephemeral API | Webhook URLs may need Stripe CLI or proxy |
| Staging | Integrated QA; Neon branch DB | Stripe test mode; separate webhook secret |
| Production | Live pilgrims | Feature flags for risky modules until signed off |
Versioning: API under /v1; additive changes
preferred. Mobile uses EAS channels (e.g. staging /
production). Web deploys continuously with guardrails.
Integration programme
Order reflects dependency risk — parallelise where rows do not block.
- Neon + Drizzle — P0; block everything.
- Stripe test — P0; unblock checkout development.
- Resend — P0 for confirmations.
- R2 — P1 for marketing assets and package imagery.
- Google Maps — P1; billing account + key restrictions.
- WhatsApp — P1; template approval lead time.
- Sentry / analytics — P2 once core flows stable.
Risk register & mitigations
| Risk | Likelihood / impact | Mitigation |
|---|---|---|
| Webhook / payment race conditions | Med / High | Idempotency keys; store Stripe event ids; reconcile job |
| Auth mismatch web vs mobile | Med / Med | Early spike; shared API tests; document session transport |
| WhatsApp approval delays | Med / Med | Start early; email-only acceptable for MVP week |
| Peak load during Shahi Snan | Med / High | CDN for static; cache catalog; queue non-critical email |
| Scope creep (ritual variants) | High / Med | Change control; v1.1 backlog; feature flags |
| Single-bus-factor engineering | Med / High | Runbooks, ADRs in repo, bus-factor pairing on payments + auth |
Milestone gates & launch
- M1 — Design freeze: all checkout and auth flows approved.
- M2 — First paid booking (staging): end-to-end with test cards.
- M3 — Beta: limited real users; production Stripe with low traffic cap optional.
- M4 — General availability: marketing push allowed; app stores live.
- M5 — Event readiness (by ~7 Jan 2027): on-call rota, frozen deps unless critical CVE.
Go / No-Go checklist (abbreviated)
Legal pages live · refund policy linked at checkout · production webhooks verified · database backups tested · P0/P1 defects cleared · rollback plan for API and web documented.
In-season operations (Jan–Apr 2027)
- Monitoring: error rate, checkout funnel, API latency, DB connections.
- Support: defined SLAs for booking issues; manual override path in admin.
- Change control: freeze except P0 during peak Snan windows if agreed.
- Expo Updates: eligible JS fixes only; native changes via store when required.
- Incident response: severity levels, comms template, Stripe dashboard links.
Appendix · documentation map
Detailed specs live in sibling pages — keep this plan as the orchestration layer; update those pages when contracts change.
- Architecture — repo tree, principles.
- Design language — cultural UI for web and Expo.
- Web application — Next.js routes and UI.
- Mobile (Expo) — native concerns.
- Backend API — Hono, webhooks, services.
- Database — Drizzle schema reference.
- API reference — REST catalogue.
- Delivery & operations — sprint detail, MVP slice, CI/CD.