Project Info
Airline Said No Every year, thousands of travellers receive airline compensation refusals that are difficult to interpret. The response often contains legal terminology or generic statements such as "extraordinary circumstances" without explaining what actually happened or whether there is enough information to justify the decision. I wanted to build something that helps people understand these letters before deciding what to do next. Rather than acting as a legal advisor or trying to predict whether someone will win a claim, Airline Said No provides an explainable second opinion. It reconstructs the facts, explains the airline's reasoning in plain language, highlights missing or contradictory evidence, and suggests one realistic next step. One design principle guided the entire project: Facts β Interpretation β Recommendation The application never jumps directly to conclusions. It first establishes what can actually be confirmed from the evidence, then explains what those facts appear to mean, and only afterwards recommends a course of action. If the traveller wishes to continue, GPT-5.6 generates a calm, grounded reply based on the validated analysis rather than re-analysing the original document. The draft is fully editable and nothing is ever sent automatically, ensuring the user remains in control. How I built it The application was built with Next.js 16, React 19, TypeScript, and Tailwind CSS. GPT-5.6 powers two distinct stages of the experience: structured document analysis; grounded draft generation. Users can either paste the text of a rejection or upload a PDF, PNG, JPG, or JPEG document. Uploaded files remain request-scoped and are processed only for the current request. Throughout development I worked closely with Codex, which helped me move from an initial product concept to a production-ready application. Codex accelerated implementation, testing, accessibility improvements, refactoring, production hardening, and documentation, while I remained responsible for the product vision, interaction design, UX decisions, and iterative refinement. Challenges One of the biggest challenges was resisting the temptation to make the application overly confident. Early on I realised that simply generating persuasive replies was not enough. The application needed to distinguish between confirmed facts, passenger claims, airline assertions, and genuinely missing information. Another challenge was keeping the interface approachable despite analysing documents that may contain legal terminology. Captain WorthATry was introduced to make the experience feel friendly without distracting from the seriousness of the analysis. What I learned This project reinforced something I find particularly exciting about modern AI systems. Large language models are most useful when they help people reason more clearly rather than replacing their judgement. Building Airline Said No also showed me how powerful the collaboration between a human product designer, Codex, and GPT-5.6 can be. By combining structured reasoning with careful UX design, it became possible to build an application that is both technically capable and reassuring to use.
What is Airline Said No?
We've all been there.
You receive an email explaining that your compensation claim has been rejected. The explanation is often brief, sometimes vague, and it's not always clear whether the decision is justified or worth challenging.
Airline Said No doesn't promise compensation, and it doesn't replace legal advice.
Instead, it helps travellers understand what actually happened by reconstructing the facts, explaining the airline's reasoning, highlighting missing or contradictory information, and suggesting one realistic next step.
If appropriate, it can then draft a calm, editable reply that the traveller remains completely free to modify before sending.
Every analysis follows the same order:
- Facts
- Interpretation
- Recommendation
Built with Codex & GPT-5.6
Airline Said No was developed collaboratively with Codex and GPT-5.6 throughout OpenAI Build Week.
GPT-5.6
GPT-5.6 powers the core intelligence of the application by:
- extracting structured facts from airline correspondence;
- distinguishing confirmed facts from uncertainty;
- identifying missing or contradictory evidence;
- generating explainable recommendations;
- drafting calm, grounded, fully editable replies.
Codex
Rather than treating Codex as a code generator, I used it as an engineering partner throughout the project.
Codex helped me:
- design the application architecture;
- implement the Next.js application;
- refine prompts and interaction flows;
- improve accessibility and keyboard support;
- harden privacy and security;
- write and expand automated tests;
- review production readiness;
- prepare deployment;
- improve documentation and developer experience.
While Codex accelerated implementation, I remained responsible for the product vision, interaction design, user experience, prompt direction, and iterative refinement.
Gallery
| Landing page | Analysis | Draft reply |
|---|---|---|
![]() | ![]() | ![]() |
π¬ Demo Video
Watch a short demonstration of Airline Said No in action.
βΆοΈ https://youtu.be/RR64KEt8Miw
Features
- βοΈ Explain airline compensation refusals in plain language
- π Analyse PDF, PNG, JPG/JPEG and pasted text
- π§ Structured reasoning powered by GPT-5.6
- π Separate confirmed facts from uncertainty
- β οΈ Highlight missing and contradictory evidence
- βοΈ Draft a professional, fully editable follow-up reply
- π Privacy-first request-scoped document processing
Trying it yourself
Requirements
- Node.js 22.x
- npm
- Your own OpenAI API key
Clone the repository, copy .env.example to .env.local, add your API key, then run:
npm install
npm run dev
The application will be available at:
http://localhost:3000
Sample documents
The samples/ folder contains fictional airline correspondence designed to exercise different reasoning paths.
Included scenarios cover:
- potentially compensable delays;
- extraordinary circumstances;
- non-EU261 journeys;
- weak claims;
- contradictory information.
All sample documents were created specifically for this project. No real passenger data is included.
Environment variables
| Variable | Required | Description |
|---|---|---|
OPENAI_API_KEY | β | Your OpenAI API key. Never exposed to the browser. |
OPENAI_MODEL | Optional | Defaults to gpt-5.6. |
Available scripts
| Command | Description |
|---|---|
npm run dev | Start the development server |
npm run build | Create a production build |
npm run start | Run the production build locally |
npm test | Run the automated test suite |
npm run test:watch | Watch mode |
npm run lint | ESLint |
npm run typecheck | Strict TypeScript |
npm run format | Format files |
npm run format:check | Check formatting |
npm run check | Run formatting, linting and type checking |
Project structure
src/
βββ app/
βββ components/
β βββ mascot/
β βββ ui/
βββ config/
βββ features/
βββ styles/
samples/
docs/
Architecture
Key engineering decisions include:
- Next.js App Router
- Server Components by default
- OpenAI Responses API
- Structured Outputs with Zod validation
- Request-scoped document processing
- No document persistence
store: falseon OpenAI requests- Strict TypeScript
- Comprehensive automated testing
- Accessibility-first interface
- Keyboard navigation
- Reduced-motion support
Deployment
The application is ready for deployment on Vercel.
For this Build Week submission it is intentionally demonstrated locally, allowing judges to use their own OpenAI API key when running the project.
Everything required for deployment is already included in the repository.
Acknowledgements
Created for OpenAI Build Week 2026 with Codex and GPT-5.6.
Special thanks to Captain WorthATry for flying through an alarming amount of paperwork.
Analysis
View
Metric
- 13
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- Next.jsIn code
- OpenAIIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
- Node.jsClaimed
- VercelClaimed
6 of 8 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeConfig
- CodexConfig
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
146 KB
Source files
71
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
MinervaRose/airline-said-no
92 files Β· 7.5 MB Β· @ 454e4eb
Structure
Interface
22 files Β· 24%Screens, components and styles rendered to the user.
API & routing
2 files Β· 2%Request entry points: routes, handlers and controllers.
Application logic
26 files Β· 28%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here β open the file browser to check anything the diagram implies.
Languages
- TypeScript65%
- CSS29%
- Markdown6%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm Β· 23- @fontsource-variable/inter
- @fontsource-variable/space-grotesk
- next
- openai
- react
- react-dom
- server-only
- zod
- +15 more
Declared in the repositoryβs manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This projectβs features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.



