9bae40b200cd9ac54b6f6945d4079caaa849ab55
📍 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)
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
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(ormode=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 inscraper-service.
POST /api/jobs/trigger-daily-check— Enqueue batch price updates for all active hotels.POST /api/webhooks/scraper— Webhook receiver for scraped metadata fromscraper-service.GET /api/trips/POST /api/trips— Manage trip entities.GET /api/attractions/POST /api/attractions— Manage central sights and hotel assignments.
Description
Languages
TypeScript
98.5%
Shell
1.3%