Files
travel-app/README.md

64 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📍 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.