I wanted to build a flight compensation platform that would rank for thousands of long-tail keywords like "KL1234 delayed compensation" or "Brussels Airport cancelled flights today". The challenge: generating thousands of unique, high-quality pages that Google would actually want to index. Here's how I did it.
The Architecture
The stack is straightforward: Next.js 16 with App Router for the frontend, Supabase (PostgreSQL) for the database, Make.com for data pipeline automation, and Claude API for AI-generated content. The site serves five languages (NL, EN, DE, FR, ES) across three page types: flight detail pages, airport hub pages, and airline overview pages.
Data Pipeline
A Make.com scenario runs every eight hours, pulling delayed and cancelled flight data from the AviationStack API. For each flight, it enriches the record with airport details, weather context from OpenWeather, great-circle distance calculations for compensation amounts. Then it calls Claude API to generate a Dutch-language analysis with badges, summaries, and passenger tips. The enriched record is upserted into Supabase with a deterministic slug pattern: flight_iata-dep-arr-date.
Page Generation
Next.js dynamic routes with ISR (Incremental Static Regeneration) handle the rendering. Each flight page at /[locale]/vlucht/[slug] fetches its data from Supabase at request time, with a one-hour revalidation window. This means new flights appear automatically without a rebuild, and pages are cached at the edge for fast delivery.
The interesting part is the slug strategy. For delayed flights, the slug encodes the flight number, route, and date — making each URL unique and keyword-rich. Google can parse kl1234-ams-lhr-2026-02-15 and understand exactly what the page is about.
Multi-language SEO
Every page is generated in five languages using locale-based routing. The path structure differs by language (/nl/vlucht/ vs /en/flight/) to match local search patterns. Hreflang tags connect the variants, and a dynamic sitemap lists all published flights across all locales — currently around 5,700 URLs from 1,134 flights.
Internal Linking Strategy
Each airport page links to its recent flights. Each airline page shows flights from that carrier. The footer on every page includes cross-links to airports, airlines, and recent cancellations. This creates a dense internal link graph that helps Google discover and crawl all pages from just a few entry points.
Lessons Learned
Programmatic SEO on a new domain is a patience game. With zero backlinks, Google took weeks to even crawl beyond the homepage, despite having a complete sitemap. External backlinks are essential to kickstart crawling.
AI-generated content needs guardrails. Claude produces great Dutch-language summaries, but the prompt engineering took multiple iterations to get consistent badge assignments and appropriate tone.
ISR caching can be tricky. Pages won't update until someone visits them, which means airport pages with new flights might show stale data. A cron-based cache warming script solves this.
The Result
FlyClaim.AI now generates over 5,000 pages automatically, each targeting a specific delayed or cancelled flight with unique AI-written content in five languages. The entire system runs on Vercel's free tier, Supabase's free tier, and Make.com's starter plan.
If you're interested in programmatic SEO or building content engines with AI, I'm happy to answer questions in the comments.
Check it out: flyclaim.ai
Top comments (0)