# 📍 Travel Dashboard & Hotel Ranking A Next.js web application for comparing hotels, planning travel stops, tracking historical Booking.com prices (including Genius discounts), and rating accommodations with friends using German school grades (1–6). --- ## 🌟 Key Features - **Trip Management & Hotel Assignment:** Organize hotels across multiple trips or unassigned stops. When adding a hotel, you can directly choose which trip to assign it to. - **Automated Metadata & Price Scraping:** Adding a Booking.com URL automatically triggers a background BullMQ job that fetches the hotel name, star rating, address, hero image, room size, and prices. - **On-Demand Stammdaten Refresh:** Each hotel card features a **"🔄 Stammdaten"** button to perform a fast re-scan of metadata and prices on demand. - **AI Review Summaries:** Integrates with local LLMs (via Ollama/n8n) to summarize up to 80+ guest reviews into categorized highlights (Positive, Neutral, Negative, Bathroom inspection). - **Bathroom Photos & Google Maps Inspection:** Upload manual bathroom photos or inspect Google Maps imagery to assess room cleanliness. - **Price History & Genius Tracking:** Records price changes over time with automatic detection of Genius discount badges (-10%). - **Sights & Attractions:** Manage points of interest and calculate distances/durations from each hotel. --- ## 🏗️ Architecture & Stack - **Frontend & API:** Next.js (App Router, TypeScript, React) - **Database:** PostgreSQL - **Task Queue:** BullMQ / Redis (shared with `scraper-service`) - **Containerization:** Docker & Docker Compose --- ## 🚀 Getting Started ### Prerequisites - Docker & Docker Compose - Running PostgreSQL & Redis instances ### Environment Variables (`.env`) ```env DATABASE_URL=postgresql://user:password@host:5432/travel_db REDIS_HOST=172.17.0.1 REDIS_PORT=6379 APP_WEBHOOK_URL=https://n8n.your-domain.de/webhook/scrape-reviews ``` ### Running with Docker Compose ```bash docker compose up -d --build ``` The app will be accessible at `http://localhost:3002`. --- ## 📡 API Endpoints - `GET /api/hotels` — List all hotels, current prices, and ratings. - `POST /api/hotels` — Create a new hotel and enqueue background metadata scraping. - `PATCH /api/hotels/[id]` — Update hotel properties (e.g. active/parked status). - `POST /api/hotels/[id]/scan` — Trigger on-demand scraping: - `?mode=stammdaten` (or `mode=quick`): Fast scan for name, address, rating, price, and images. - Default: Full review scan with n8n/LLM review summary. - `?debug=true`: Generates raw HTML and screenshot dumps in `scraper-service`. - `POST /api/jobs/trigger-daily-check` — Enqueue batch price updates for all active hotels. - `POST /api/webhooks/scraper` — Webhook receiver for scraped metadata from `scraper-service`. - `GET /api/trips` / `POST /api/trips` — Manage trip entities. - `GET /api/attractions` / `POST /api/attractions` — Manage central sights and hotel assignments.