A zero-friction site and mobile app that makes people smile using the world's tour data. 136,000+ tours across 2,700+ destinations, AI-generated witty captions, and four ways to discover something surprising.
Live at tourgraph.ai
Every travel app wants you to plan, compare, and book. TourGraph wants you to smile. No accounts, no algorithms, no itineraries — just the world's most surprising tours, served up one random spin at a time. The kind of thing you pull up when you're bored in line and 20 minutes later you're still scrolling.
- App Store: v1.1 submitted, pending review
- Direct APK: Download from GitHub Releases — install directly on any Android 8.0+ device
- F-Droid: Submitted (MR #34392), pending review
- tourgraph.ai — works on any device with a browser
- Tour Roulette — One button. Random tour. Weighted toward the extremes: highest rated, weirdest, cheapest, most expensive. AI-generated witty one-liner. Swipe or press again.
- Right Now Somewhere... — Time-zone-aware. Shows tours happening right now where it's golden hour. "Right now in Kyoto it's 6:47am and you could be doing forest bathing with a Buddhist monk."
- The World's Most ___ — Superlatives from 136,000+ experiences. Most expensive tour. Cheapest 5-star. Longest duration. Each one a shareable card with photo, stat, and witty caption.
- Six Degrees of Anywhere — 491 pre-generated chains connecting cities through surprising thematic links. Chain roulette with vertical timeline. "Surprise Me" to load another.
- Favorites — Save tours with a heart tap, persist across sessions
- Home Screen Widgets — Right Now Somewhere and Random Tour on your home screen (iOS WidgetKit + Android Glance)
- Rich Share Cards — Beautiful 1200×630 branded image cards when sharing tours
- App Shortcuts — Quick actions from long-press (Android) and Siri Shortcuts (iOS)
- Search Indexing — Favorited tours searchable from Spotlight (iOS) and launcher (Android)
- Deep Linking —
tourgraph://URL scheme for tab navigation and tour detail
| Tour Roulette | Right Now | World's Most | Six Degrees | Tour Detail |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| Component | Technology |
|---|---|
| Web | Next.js 16 (App Router, TypeScript strict), Tailwind CSS v4 |
| iOS | Swift / SwiftUI (iOS 17+), GRDB.swift, WidgetKit |
| Android | Kotlin 2.1 / Jetpack Compose (Material 3), Glance, Coil 3 |
| Database | SQLite everywhere — better-sqlite3 (web), GRDB (iOS), raw SQLiteDatabase (Android) |
| Hosting | DigitalOcean ($6/mo droplet), PM2 + Nginx + Let's Encrypt |
| Data | Viator Partner API (136,000+ experiences, 2,700+ destinations) |
| AI | Claude API — Haiku 4.5 (captions), Sonnet 4.6 (city intelligence + chains) |
| CI/CD | GitHub Actions — automated Android release on tag push |
| Domain | tourgraph.ai |
TourGraph's value is built in layers, each adding original intelligence on top of raw tour data:
| Layer | What | Count |
|---|---|---|
| 1. Raw Viator Data | Tour listings, photos, ratings, prices | 136,256 tours |
| 2. AI One-Liners | Witty personality captions per tour | 136,256 (100%) |
| 3. City Intelligence | City profiles: personality, standout tours, themes | 910 cities |
| 4. Chain Connections | Thematic chains connecting cities | 491 chains |
479 MB database, 2,712 destinations, 205 countries, 7 continents.
tourgraph/
├── web/ # Next.js web app + data pipeline
│ ├── src/app/ # Pages + API routes
│ ├── src/components/ # React components
│ ├── src/lib/ # Database, types, formatting
│ └── src/scripts/ # Data pipeline (4 stages)
├── ios/TourGraph/ # SwiftUI iOS app
├── android/TourGraph/ # Kotlin + Jetpack Compose Android app
├── data/ # SQLite databases (Git LFS, shared)
├── docs/ # Architecture, design, data docs
├── deployment/ # Server deploy scripts + PM2 config
├── distribution/ # App Store, F-Droid, fastlane metadata
├── .github/workflows/ # CI/CD (Android release on tag push)
└── archive/ # Phase 0 work (preserved for reference)
cd web
node --version # 18+ required
npm install
cp .env.example .env.local # Add VIATOR_API_KEY + ANTHROPIC_API_KEY
npm run dev # http://localhost:3000Open ios/TourGraph/TourGraph.xcodeproj in Xcode and run on simulator or device (iOS 17+).
Open android/TourGraph/ in Android Studio and run on emulator or device (API 26+).
# Build debug APK
cd android/TourGraph && ./gradlew assembleDebug
# Build signed release APK
cd android/TourGraph && ./gradlew assembleRelease# Full rebuild from scratch (run from web/ directory)
cd web
npx tsx src/scripts/1-viator/seed-destinations.ts
npx tsx src/scripts/1-viator/indexer.ts
npx tsx src/scripts/2-oneliners/backfill-oneliners-batch.ts
npx tsx src/scripts/3-city-intel/build-city-profiles.ts
npx tsx src/scripts/4-chains/generate-chains-v2.ts- Weekly data refresh (drip indexer on schedule) + delta sync to mobile apps
- On-demand chain generation (user types two cities)
- iPad layout
- City discovery pages
- Theme browsing (filter by cuisine, sacred, adventure, etc.)
TourGraph started as AI-powered supply-side infrastructure for the tours & experiences industry. After competitive validation revealed that Peek, TourRadar, Magpie, and Expedia had all shipped live MCP servers, the original thesis was killed and the project pivoted to this consumer experience. The Phase 0 extraction work (83 products, 7 operators, 95% accuracy) is preserved in archive/ for reference.
Full story: docs/reference/thesis_validation.md
All tour data sourced from the Viator Partner API (Basic tier, free affiliate program). TourGraph is a Viator affiliate — booking links redirect to Viator. AI-generated one-liners, city intelligence, and chain connections are original content created with the Claude API.
MIT License. See LICENSE for details.




