A full-stack platform to discover destinations, plan trips, and share journeys—with multilingual semantic search, personalized recommendations, and LLM-assisted itinerary and content tools.
Tourism Together is a full-stack monorepo: a Next.js web app talks to a Node.js (Express + TypeScript) API for core product data, and to a Python FastAPI “AI service” for vector search and recommendations over PostgreSQL + pgvector (via Supabase). Optional LLM flows (itinerary, diary, forum drafts) are integrated through the backend.
The goal is to go beyond keyword search: users can describe trips in natural language (including Vietnamese) and get relevant destinations, trips, and routes, plus personalized suggestions based on behavior and reviews.
graph TB
WEB[Next.js frontend]
BE[Express API TypeScript]
AI[FastAPI AI service Python]
PG[(PostgreSQL + pgvector / Supabase RPC)]
WEB -->|REST CRUD auth| BE
WEB -->|semantic search recommend| AI
BE --> PG
AI --> PG
| Layer | Responsibility |
|---|---|
| Frontend | UI: dashboard, destinations, trips, maps, diaries, forum; calls backend + AI service |
| Backend | Users, destinations, trips, routes, auth, uploads; AI helpers (e.g. diary / forum / itinerary endpoints) |
| AI service | Embeddings (Sentence Transformers), top‑K similarity, user-context recommendations |
| Database | Relational data + vector columns and Supabase RPC for similarity search |
| Path | Stack | Description |
|---|---|---|
frontend/ |
Next.js 16, React 19, TypeScript, Tailwind, Leaflet | Web client |
backend/ |
Express5, TypeScript, PostgreSQL (pg) |
REST API |
ai-service/ |
FastAPI, sentence-transformers, Supabase | Semantic search & recommendations |
Each package can be developed and deployed independently. See ai-service/README.md for retrieval benchmarks, screenshots, and ML-focused documentation.
- Destinations & trips — Browse, filter, and plan multi-day trips with map-based routes
- Semantic search — Natural-language queries for destinations, trips, and routes (AI service + pgvector)
- Personalized recommendations — Suggestions from encoded user context (ratings, trip history)
- Community — Forum posts and travel diaries
- AI assists — Itinerary generation, diary/forum drafting (backend + external LLM providers where configured)
| Area | Technologies |
|---|---|
| Frontend | Next.js, React, TypeScript, Tailwind CSS, Leaflet, Framer Motion |
| Backend | Node.js, Express, TypeScript, PostgreSQL, bcrypt, JWT-related flows |
| AI / ML | FastAPI, Uvicorn, Sentence Transformers (paraphrase-multilingual-mpnet-base-v2), Supabase client, pgvector |
| Platform | Supabase-compatible Postgres, Vercel-friendly frontends |
- Node.js 18+ (20+ recommended for Next.js 16)
- Python 3.10+
- PostgreSQL (or managed DB compatible with the backend schema)
- Supabase project with pgvector + RPC functions for the AI service (
ai-service/migrations/)
git clone https://github.com/TourismTogether/Tourism.git
cd Tourismcd backend
npm install
# Configure .env (database URL, secrets, etc.) — see backend/README.md
npm run devDefault API URL used by the frontend is often http://localhost:8081 (override with NEXT_PUBLIC_API_URL).
cd ai-service
python -m venv .venv
# Windows: .venv\Scripts\activate | macOS/Linux: source .venv/bin/activate
pip install -r requirements.txt
# Set SUPABASE_URL, SUPABASE_KEY in ai-service/.env
uvicorn app.main:app --reload --host 0.0.0.0 --port 8080Optional: python scripts/build_embeddings.py to backfill vectors.
Optional: python scripts/benchmark_retrieval.py for latency / speedup metrics.
cd frontend
npm installCreate .env.local as needed, for example:
NEXT_PUBLIC_API_URL=http://localhost:8081
NEXT_PUBLIC_AI_SERVICE_URL=http://127.0.0.1:8080npm run dev| Variable | Where | Purpose |
|---|---|---|
NEXT_PUBLIC_API_URL |
Frontend | Express backend base URL |
NEXT_PUBLIC_AI_SERVICE_URL |
Frontend | FastAPI AI service base URL |
SUPABASE_URL, SUPABASE_KEY |
ai-service |
Supabase / pgvector RPC access |
| DB + secrets | backend |
See backend/README.md and local .env |
| Name | Role |
|---|---|
| Trần Hải Đức | Leader & project management |
| Bùi Nam Việt | AI engineer |
| Nguyễn Đình Duy Phú | Frontend, database & security |
| Trương Hoàng Lâm | Backend, network & performance |
| Bùi Quang Sơn | QA / testing |
Work is split across idea, UI/UX, features, and testing. Open issues or PRs against the relevant package (frontend, backend, or ai-service).
Traveling together makes memories last longer.