feat: add trip selection modal, auto-scrape on hotel creation, on-demand stammdaten refresh, and update README

This commit is contained in:
2026-08-21 20:05:02 +00:00
parent 4efce7923a
commit 6225924c7b
4 changed files with 628 additions and 260 deletions

View File

@@ -0,0 +1,63 @@
# 📍 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.