# 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) ```