I built an AI travel agent for India's hidden destinations — here's the tech stack An engineer spent five months building Almanac India, an editorial platform documenting hidden destinations in India, and detailed the tech stack in a blog post. The site uses Next.js 15, Mapbox GL, Firebase Auth, and an AI travel agent powered by Claude Sonnet via Ofox.ai, with features like dynamic context loading and prompt caching. The engineer highlighted distribution as the hardest problem and sought advice for research-heavy content products. I spent 5 months building almanacindia.com — an editorial platform documenting India's genuinely hidden destinations. Not "offbeat" places that show up on every listicle. Places like Bara Bhangal a permanently inhabited village with no road, reachable only by a 5-day trek over a 4,700m Himalayan pass and Hunderman a village that was Pakistani territory until 1971, 8km from Kargil . Here's everything I built and how. The Stack Framework: Next.js 15 App Router with TypeScript, deployed on Cloudflare Pages via OpenNext. Static generation for 1,500+ pages at build time. No Git — Proton Drive with AES-256 encrypted backups. Maps: Mapbox GL v3 Standard style. 96 Indian cities, 3D cinematic dusk lighting, destination pins, routing between places, satellite toggle, live rain/snow overlay from Open-Meteo 15-min cache . Night mode activates automatically after 7pm local time. Expedition Books: Each destination gets a full book — About, History, What Nobody Tells You, The Moment, Before You Go. Books paginate using DOM-height measurement via Range.getClientRects — not character count. Fonts load before pagination runs via document.fonts.ready. 32 books live. Media: Cloudinary for all destination cover photos. g auto crop handles landscape-to-portrait conversion for book covers. f auto,q auto across the board. Auth: Firebase Auth with OAuth. Community chat via Firebase Realtime Database with admin moderation and 48hr auto-delete. Email: Resend for the Inner Circle newsletter. Rotates 100 cities every 2 weeks. AI Chat: The most interesting piece. The AI Travel Agent Built an editorial chat agent that opens with "Where do you want to disappear to?" — three starter chips, streams word by word, right-side push sidebar. Provider: Ofox.ai official Anthropic partner gateway — solved the India payment problem after Anthropic's Stripe integration blocked all Indian cards. Model: Claude Sonnet via Ofox. Architecture: Dynamic context loading — max 2 expedition books per question, under 7,000 token budget Prompt caching — 71.6% cache hit rate on day one Retrieval logic — books only attach when the question names a specific destination or region, not on departure intent words Postgres Q&A cache — 80% word-match threshold, 7-day expiry ALMANAC GAP logs — every unanswered region query goes to a content roadmap Gap rule: When a user asks about a place we haven't documented, the agent acknowledges the gap and redirects to the closest documented region. Never halluccinates. SEO/GEO Architecture Built specifically for AI citation: llms.txt at root with all 58 destination URLs and descriptions robots.txt explicitly allows GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot, Google-Extended Cloudflare AI Crawl Control — all crawlers set to Allow IndexNow — 1,531 pages submitted on first run FAQ schema 153 Q&A pairs for AI answer engine visibility Canonical URLs enforced across all 1,500+ pages Attraction descriptions server-trimmed to 120 chars on city pages so full text only lives on attraction pages — fixes the duplicate content problem Google penalises The Hardest Problem Distribution. The product works. Getting the first 1,000 people to see it is the actual problem. If you've solved this for a research-heavy content product — I want to hear how. almanacindia.com — The India nobody shows you.