explaingit

wallouo/flight-radar

12TypeScriptAudience · developerComplexity · 3/5ActiveSetup · moderate

TLDR

Headless Node service that polls Google Flights prices via SerpApi and Secret Flying RSS feeds, then posts cheap fare and business class deal alerts to a Discord webhook.

Mindmap

mindmap
  root((flight-price-radar))
    Inputs
      Flight routes
      SerpApi key
      Travel deal RSS feeds
      OpenAI API key
    Outputs
      Discord fare alerts
      Business deal embeds
      Turso price history
    Use Cases
      Track favourite routes
      Catch business class mistake fares
      Build a fare history database
      Run a personal travel bot
    Tech Stack
      TypeScript
      Node
      Turso
      SerpApi
      OpenAI

Things people build with this

USE CASE 1

Track a list of personal flight routes and get a Discord ping when a price hits the historical top three cheapest

USE CASE 2

Scrape Secret Flying and similar RSS feeds for business class mistake fares under a price threshold

USE CASE 3

Build a long-running fare history in a Turso libSQL database for later analysis

USE CASE 4

Run a self-hosted travel deal bot for a small Discord community

Tech stack

TypeScriptNode.jsTursoSerpApiOpenAIDiscord

Getting it running

Difficulty · moderate Time to first run · 1h+

You need accounts and keys for Turso, SerpApi, OpenAI, and Discord, plus correct cron and threshold env vars before the first run will be useful.

In plain English

flight-price-radar is a small background service that watches flight prices and travel deal feeds, then pings a Discord channel when something interesting comes up. It is written in TypeScript and runs on Node.js 20 or newer. There is no user interface: you set it up once with your own API keys, leave it running, and it posts to Discord on its own. It does two separate things. The first is normal fare tracking. You give it a list of flight routes you care about, and it queries SerpApi to read Google Flights prices for those routes on a schedule, by default every six hours. It saves each price in a Turso libSQL database so it can build up a history. When a new price for a route lands in the historical top three cheapest, it sends a Discord alert. A separate table records which alerts have already been fired so you do not get the same message twice. The second job watches travel deal RSS feeds, such as the public Secret Flying and Premium Deals feeds. Every two hours it reads the new items and asks an OpenAI compatible model, by default gpt-4o-mini, to pull out structured details from the description: origin, destination, price, and cabin class. If a deal looks like a business class fare that comes in under a configured price threshold, with the model's confidence above a chosen score, it gets posted to Discord as a formatted webhook embed. Setup is mostly environment variables. You need a Turso database URL and auth token, a SerpApi key, a Discord webhook URL, the RSS feed URLs in a comma separated format, and an OpenAI key for the deal extraction. There are also optional variables for the cron schedules, the price threshold which defaults to 1000 GBP, the minimum model confidence which defaults to 0.8, and a scheduler lease duration. Two SQL migration files set up the tables: tracked_destinations, fare_observations, fare_alerts, business_deals, and job_scheduler_state. The README also lists npm scripts for the common tasks: build, typecheck, test, init the database, seed and sync tracked destinations, backfill old fare data with a bootstrap script, and start the runtime. A troubleshooting section covers a specific Discord 400 error caused by RSS feeds that return dates in RFC 2822 format instead of the ISO 8601 format the Discord embed timestamp field requires.

Copy-paste prompts

Prompt 1
Set up flight-price-radar with my Turso, SerpApi, OpenAI, and Discord webhook env vars and run the database migrations
Prompt 2
Seed tracked_destinations with my preferred routes and run the backfill bootstrap to populate fare history
Prompt 3
Lower the business class price threshold to 700 GBP and raise the minimum model confidence to 0.9 in flight-price-radar
Prompt 4
Debug the Discord 400 error from RFC 2822 dates in RSS feeds by converting timestamps to ISO 8601 before posting
Open on GitHub → Explain another repo

Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.