尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
India's smartest travel companion. AI itineraries, booking aggregation, destination deep-dives, and a gamified digital passport — all in one platform.
Data flow: Frontend → Next.js API route (proxy) → Python backend → AI/DB → Response.
Copy the example file and fill in your keys:查看完整 README ↗India's smartest travel companion. AI itineraries, booking aggregation, destination deep-dives, and a gamified digital passport — all in one platform.
┌──────────────────────────────────┐
│ Next.js Frontend │
│ (React 19 + TypeScript + TW) │
│ │
│ app/api/* ── proxy routes ──────┼──────┐
│ components/ ── UI layer │ │
│ lib/ ── auth, firestore, utils │ │
└──────────────────────────────────┘ │
▼
┌──────────────────────────────────┐
│ Python FastAPI Backend │
│ │
│ routers/ ── API endpoints │
│ services/ ── AI engines │
│ ├── itinerary_engine.py │
│ ├── chat_engine.py │
│ ├── recommendation_engine.py │
│ ├── deep_dive_engine.py │
│ └── taste_engine.py │
│ │
│ Gemini AI ── LLM generation │
│ Pinecone ── vector search │
│ Redis ── response caching │
└──────────────────────────────────┘
Data flow: Frontend → Next.js API route (proxy) → Python backend → AI/DB → Response.
| Tool | Version | Required |
|---|---|---|
| Node.js | 18+ (LTS recommended) | ✅ Yes |
| Python | 3.10+ | ✅ Yes |
| npm | 9+ | ✅ Yes |
| Firebase project | — | ✅ Yes (Auth + Firestore) |
| Google Gemini API key | — | ✅ Yes |
| Redis | 7+ | ⚠️ Optional (file cache fallback) |
| Pinecone account | — | ⚠️ Optional (for vector search) |
git clone https://github.com/your-org/naviigo-web.git
cd naviigo-web/NaviiGo-Website
npm install
cd backend
pip install -r requirements.txt
cd ..
Copy the example file and fill in your keys:
cp .env.local.example .env.local
Required variables in .env.local:
# ── AI (required) ─────────────────────────
GEMINI_API_KEY=your_gemini_api_key
# ── Firebase (required) ───────────────────
NEXT_PUBLIC_FIREBASE_API_KEY=your_firebase_api_key
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your-project-id
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your-project.appspot.com
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=123456789
NEXT_PUBLIC_FIREBASE_APP_ID=1:123456789:web:abc123
# ── Python backend URL ────────────────────
NEXT_PUBLIC_PYTHON_API_URL=http://localhost:8000
# ── Google APIs (optional) ────────────────
# Powers place photos, nearby/typed search and the itinerary place lookup.
# Enable "Places API (New)" on the key — the code targets places.googleapis.com/v1
# only and does not call the legacy maps.googleapis.com/maps/api/place/* endpoints.
# The calls are server-side, so restrict the key by IP (or leave unrestricted);
# an HTTP-referrer restriction will make every request fail with "API key not valid".
GOOGLE_PLACES_API_KEY=your_places_key
GOOGLE_DISTANCE_MATRIX_KEY=your_distance_matrix_key
# ── Pinecone (optional) ──────────────────
PINECONE_API_KEY=your_pinecone_key
# ── Redis (optional) ─────────────────────
REDIS_URL=redis://localhost:6379
# ── Sentry (optional) ───────────────────
# Error tracking. Completely optional — without a DSN the SDKs never init
# (no network calls, no console noise) and the app falls back to plain
# console.error. When set, errors from client, server and edge all report.
# Source-map uploads need SENTRY_AUTH_TOKEN (CI env) too.
NEXT_PUBLIC_SENTRY_DSN=your_sentry_dsn
SENTRY_DSN=your_sentry_dsn
SENTRY_AUTH_TOKEN=your_sentry_auth_token
# ── CORS for backend (production) ────────
CORS_ORIGINS=http://localhost:3000,https://your-domain.com
For Firestore access from the Python backend, place your Firebase service account JSON at:
backend/firebase-service-account.json
Download from: Firebase Console → Project Settings → Service Accounts → Generate new private key
You need two terminals — one for the frontend, one for the backend.
npm run dev
# → http://localhost:3000
cd backend
uvicorn main:app --reload --port 8000
# → http://localhost:8000
The frontend proxies AI requests to the backend via /app/api/* routes.
cd backend
python -m pytest test_all.py -v
Tests use FastAPI's TestClient — no running server needed.
npm run lint
npm run build
NaviiGo-Website/
├── app/ # Next.js App Router pages
│ ├── api/ # API proxy routes (→ Python backend)
│ │ ├── chat/ # AI chat proxy
│ │ ├── itinerary/ # Itinerary generate + from-link
│ │ ├── explore/ # Deep dive + events proxy
│ │ ├── recommendations/# AI recommendations proxy
│ │ ├── search/ # Booking search (flights/trains/cabs/hotels)
│ │ └── taste/ # Taste vector update
│ ├── about/ # About page
│ ├── bookings/ # Booking aggregation UI
│ ├── deals/ # TravelPayouts widget
│ ├── explore/ # Destination grid + [destId] deep dive
│ ├── itinerary/ # Trip planner wizard + result
│ ├── passport/ # Digital passport + leaderboard
│ ├── saved/ # Saved itineraries
│ ├── support/ # FAQ + contact
│ ├── layout.tsx # Root layout (providers, fonts, metadata)
│ └── page.tsx # Landing page
├── backend/ # Python FastAPI backend
│ ├── routers/ # API endpoint definitions
│ ├── services/ # AI engine implementations
│ ├── cache/ # File-based cache fallback
│ ├── data/ # CSV destination data
│ ├── main.py # FastAPI app entry point
│ ├── test_all.py # Pytest test suite
│ └── requirements.txt # Python dependencies (pinned)
├── components/
│ ├── features/ # Feature-specific components
│ │ ├── explore/ # Explore page components + data
│ │ ├── itinerary/ # Setup wizard, result, sharing
│ │ ├── reviews/ # Review section
│ │ └── tracking/ # Trip tracking UI
│ ├── shared/ # Navbar, Footer, ThemeToggle
│ └── ui/ # Base UI primitives
├── context/ # React context providers (AIContext)
├── lib/ # Utilities & services
│ ├── api/ # API client helpers
│ ├── ai/ # Gemini client + embeddings
│ ├── AuthContext.tsx # Firebase auth provider
│ ├── firebase.ts # Firebase init
│ ├── firestore.ts # Firestore CRUD operations
│ ├── rateLimit.ts # IP-based rate limiting
│ └── browsingSignals.ts # User behavior tracking
├── public/
│ ├── sw.js # Service worker (PWA)
│ └── manifest.json # PWA manifest
├── .env.local.example # Environment variable template
├── next.config.js # Next.js configuration
├── tailwind.config.ts # Tailwind CSS configuration
├── firestore.rules # Firestore security rules
└── package.json # Node.js dependencies
| Feature | Status | Tech |
|---|---|---|
| AI Itinerary Generator | ✅ | Gemini + CSV data + deterministic fallback |
| Social Link → Itinerary | ✅ | Gemini link/caption parsing |
| AI Chat Assistant | ✅ | Gemini with itinerary context |
| Destination Deep Dive | ✅ | Gemini + Reddit consensus |
| Booking Aggregation | ✅ | Flights, trains, cabs, hotels |
| Digital Passport | ✅ | Firebase + gamification (XP, stamps) |
| Taste Profiling | ✅ | Vector embeddings + Pinecone |
| AI Recommendations | ✅ | Taste vector + seasonal scoring |
| Live Events | ✅ | Google Events scraping + caching |
| Weather Integration | ✅ | Open-Meteo (free, no key) |
| PWA / Offline | ✅ | Service worker + offline page |
| Auth | ✅ | Firebase Google Auth |
| Dark Mode | ✅ | next-themes + system preference |
| Error Tracking | ✅ | Sentry (client + server + edge) |
| Security | ✅ | CSP, HSTS, rate limiting, Firestore rules |
.env.local in the Vercel dashboardbackend/ directory as a Python serviceGEMINI_API_KEY, CORS_ORIGINS, and other env varsuvicorn main:app --host 0.0.0.0 --port $PORTCORS_ORIGINS to your Vercel domain (e.g., https://naviigo.vercel.app)firebase deploy --only firestore:rulesmainnpm run lint and python -m pytest backend/test_all.py -v before submittingProprietary — NaviiGo © 2026. All rights reserved.