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)

npm i
npm run dev
# open http://localhost:3000

With Docker

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)

Description
No description provided
Readme 21 MiB
Languages
JavaScript 98.3%
TypeScript 1%
PowerShell 0.5%
CSS 0.2%