Try it
- Public demo (recorded live run, no keys, free): https://groundcontrol-lyart.vercel.app
- Live mode for judges (real Nemotron + Tavily calls on your own flight story): https://server.tail113e81.ts.net — the judge access code is in the file attached to this submission for judges (JUDGE_ACCESS.txt); enter it in the "Judge access code" field and press Unlock.
- Code (MIT): https://github.com/LevAdamenko/groundcontrol
Inspiration
Many passengers in Europe are owed €250–€600 under Regulation 261/2004 and never claim it. The rules are short, but applying them is not: great-circle distance bands, the 3-hour arrival threshold from the Sturgeon judgment, notice periods for cancellations, 50 % reductions for re-routing, and "extraordinary circumstances". Claim agencies keep up to a third of the payout. Chatbots are worse: they are confidently wrong about the money. I wanted an assistant that never guesses the amount and shows its proof.
What it does
Paste what happened: your notes, the airline's email, a boarding-pass text. GroundControl:
- Extracts the flight facts with NVIDIA Nemotron (strict JSON, validated airport codes).
- Calculates your rights in plain, tested Python: distance, delay band, notice period, 50 % reduction, care (meals, hotel), refund or re-routing.
- Verifies each entitlement with Tavily, but only on allow-listed official domains (EUR-Lex, CURIA, europa.eu, the Polish Civil Aviation Authority). A result counts only if the source text contains the exact anchor for that rule, e.g.
EUR 600or the Sturgeon case. No proof, no claim: anything without both a calculation and an official source is shown as unverified, and the letter says so in words. - Drafts a claim to the airline and a complaint to the national enforcement body. Nemotron writes the narrative. A guard deletes any euro amount the model invents and uses the calculated figure instead.
- Flags disputed cases honestly. A thunderstorm delay still shows €600, marked as disputed, with the burden of proof on the airline.
How I built it
- NVIDIA Nemotron (
nvidia/nemotron-3-super-120b-a12b) via Nebius Token Factory (OpenAI-compatible API) handles fact extraction and claim prose. It is never used for arithmetic or legal eligibility. - Tavily search with
include_domainsrestricted to official EU and national sources, plus an anchor check on the returned content. - A Python rules engine (
eu261.py) with Articles 3, 5, 6, 7, 8 and 9 and the Sturgeon line of case law. - FastAPI backend and a single-page "departure board" UI.
- An offline replay mode with recorded request/response fixtures. The demo is deterministic, and judges can run it without keys.
- 133 tests, including mutation checks: I deliberately broke the allow-list, the 180-minute threshold, the 4-hour re-routing rule, the 14-day notice rule and the amount guard, and confirmed that the tests catch each one.
Challenges
- Making the model's job small enough to trust. Extraction runs in JSON mode with one retry, and every field is validated before it reaches the rules.
- Keeping "verified" honest: a source counts only if its text contains the rule's own anchor, not just if it is on europa.eu.
- Edge cases in scope: non-EU carriers departing from outside the EU, the UK after Brexit, re-routing reductions.
Accomplishments
- The amount on screen is always the calculated one. The model cannot change it.
- Each verified line links to the paragraph of EUR-Lex that supports it.
- The whole pipeline runs offline from a clean clone in one command, and the hosted demo replays real recorded Nemotron and Tavily calls, so it costs nothing to open.
- Honest gaps stay visible: when Tavily finds no official text with the exact Article 8 anchor, re-routing is shown as unverified instead of being quietly promoted.
What I learned
LLMs are excellent at turning messy human text into structure and structure back into polite prose. The legal arithmetic in between belongs in code, and the evidence belongs in official sources.
What's next
More enforcement bodies and languages (the ULC complaint form first), the UK261 variant, and reading the airline's PDF reply to suggest the next step.
Built With
- fastapi
- httpx
- nebius-token-factory
- nvidia-nemotron
- python
- tavily
Log in or sign up for Devpost to join the conversation.