mirror of
https://github.com/mblanke/holiday-travel-app.git
synced 2026-03-01 05:20:22 -05:00
Initial commit: Holiday Travel App with resort comparison, trip management, and multi-provider search
This commit is contained in:
71
README.md
Normal file
71
README.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# Holiday Deal Finder
|
||||
|
||||
A clean, Dockerable Next.js app that helps you search across **multiple sites** for the best flight dates and deals once you provide **where** and **when**.
|
||||
|
||||
- Curated **deal sites** (e.g., yowdeals/yyzdeals/yul/yvr)
|
||||
- Smart **deep links** to Skyscanner, Google Flights, and Air Canada based on your date window & trip length
|
||||
- Simple scoring & sorting (price, non-stop, nights)
|
||||
- Optional **n8n** webhook to push top results into your automations
|
||||
|
||||
> Built to slot into your *Holiday Travel App* project and your existing Docker/Portainer workflow.
|
||||
|
||||
---
|
||||
|
||||
## Quick start (local)
|
||||
|
||||
```bash
|
||||
npm i
|
||||
npm run dev
|
||||
# open http://localhost:3000
|
||||
```
|
||||
|
||||
## With Docker
|
||||
|
||||
```bash
|
||||
docker compose up --build -d
|
||||
# open http://localhost:3000
|
||||
```
|
||||
|
||||
## Configure
|
||||
|
||||
Copy `.env.example` to `.env.local` (or supply env vars in Docker):
|
||||
|
||||
```
|
||||
HOME_AIRPORT=YOW
|
||||
DEFAULT_CURRENCY=CAD
|
||||
# Turn on stubbed demo results (useful if sites are blocked from the environment):
|
||||
DEMO=false
|
||||
# Optional: push top results to n8n
|
||||
N8N_WEBHOOK_URL=
|
||||
```
|
||||
|
||||
## Notes & Sources
|
||||
|
||||
- **Deal sites** are parsed from public HTML (no authentication or paywalls). We only collect titles/links and try to infer a price if included in the title.
|
||||
- **Deep-link providers** do **not** scrape prices. They generate **targeted search links** to Skyscanner, Google Flights, and Air Canada using your origin, destinations, and date pairs. Click through to price & book.
|
||||
- You can add more providers under `lib/providers/` (e.g., WestJet, Porter, Expedia). Each provider returns a normalized `Deal[]`.
|
||||
|
||||
## File map
|
||||
|
||||
```
|
||||
app/
|
||||
api/search/route.ts # Aggregation API
|
||||
page.tsx # UI
|
||||
components/
|
||||
DealCard.tsx, Section.tsx
|
||||
lib/
|
||||
providers/ # Deal-site + Link-builder providers
|
||||
date.ts, score.ts, types.ts
|
||||
styles/
|
||||
globals.css
|
||||
```
|
||||
|
||||
## Roadmap ideas
|
||||
|
||||
- Hotel + package deal adapters (Air Canada Vacations, Transat, Expedia)
|
||||
- Configurable weights for price vs. stops vs. nights
|
||||
- Saved searches with SQLite or your existing Nextcloud/MariaDB
|
||||
- Headless browser (Playwright) adaptor for sites that need JS
|
||||
- n8n two-way sync (pull queries from n8n, push results back to a Google Sheet)
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user