64 lines
2.9 KiB
Markdown
64 lines
2.9 KiB
Markdown
# 📍 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.
|
||
|