Open source. This project is licensed under the MIT License — see the LICENSE file in the root of the repository for the full text. You may use, copy, modify, and distribute this software under the terms of that license.
Your AI-powered airport food concierge. Enter your flight number and get time-aware, gate-smart food recommendations with an AI guide. Built for the DigitalOcean Gradient AI Hackathon 2026.
- Flight lookup — Enter flight number (e.g. AA 203); get airline, terminal, gate, and boarding time (AviationStack API or stub).
- Time-aware recommendations — Food options ranked by walk time with green/yellow/red confidence.
- Preference filters — Dietary, cuisine, price, service, and meal filters (stored in session or DigitalOcean Managed DB).
- Terminal map — Mapbox GL map with gate and vendor markers (when token is set).
- Chat with Concourse — AI persona powered by DigitalOcean Gradient (when configured).
- Trip planner — Plan pre-boarding steps with your available time.
- DigitalOcean Gradient (AI Platform): model inference for chat and agent workflows.
- Gradient Knowledge Bases (RAG): airport + vendor dataset loaded for retrieval.
- DigitalOcean Functions: tool endpoints the agent can call (forwarding into the app’s API routes).
- DigitalOcean App Platform: deployment target for the Next.js web app.
- DigitalOcean Managed PostgreSQL (optional): persistence for searches and recommendation analytics via
DATABASE_URL. - DigitalOcean Spaces (optional): object storage for static assets and future dataset hosting.
- Node.js 18.x or 20.x
- npm (comes with Node)
git clone https://github.com/YOUR_USERNAME/concourse.git
cd concourse(Replace YOUR_USERNAME with the actual GitHub org or username.)
npm installCopy the example env file and edit it with your values (all variables are optional for local run; the app uses stubs when keys are missing):
cp .env.example .env.localEdit .env.local and add any keys you have. See Environment variables below for a full list.
Development (local):
npm run devThen open http://localhost:3000 in your browser.
Production build (run locally):
npm run build
npm startThe app will be available at http://localhost:3000.
| Variable | Required | Description |
|---|---|---|
AVIATIONSTACK_API_KEY |
Yes | aviationstack.com — live flight lookup. If unset, stub flight data is used. |
NEXT_PUBLIC_MAPBOX_TOKEN |
Yes | Mapbox — terminal map. If unset, map shows a placeholder. |
DATABASE_URL |
No | PostgreSQL connection string (e.g. DigitalOcean Managed Database). If unset, search/analytics persistence is skipped. |
NEXT_PUBLIC_SUPABASE_URL |
No | Supabase project URL (if using Supabase for preferences). |
SUPABASE_SERVICE_ROLE_KEY |
No | Supabase service role key. |
DO_GRADIENT_API_KEY or GRADIENT_MODEL_ACCESS_KEY |
Yes | DigitalOcean Gradient — AI chat. If unset, chat uses stub responses. |
GRADIENT_AGENT_ENDPOINT |
Yes | Gradient agent API endpoint (for agent orchestration). |
GRADIENT_AGENT_ACCESS_KEY |
Yes | Gradient agent access key. |
GRADIENT_TRIP_PLANNER_ENDPOINT |
Yes | Trip planner agent endpoint. |
GRADIENT_TRIP_PLANNER_ACCESS_KEY |
Yes | Trip planner agent access key. |
CONCOURSE_APP_URL |
Yes | Public URL of your app (for DigitalOcean Functions / webhooks). |
GPU_RERANK_URL |
No | Optional GPU inference server URL for reranking (see docs/GPU_INFERENCE_DROPLET.md). |
Without any of these, the app still runs with stub or mock data so you can use it locally immediately after npm install and npm run dev.
- Push the repo to GitHub (ensure it is public if you want it detectable as open source).
- In DigitalOcean, go to Apps → Create App → connect the GitHub repo and branch.
- Configure as a Web Service:
- Build command:
npm run build - Run command:
npm start
- Build command:
- In Settings → App-Level Environment Variables, add the same variables you use in
.env.local(e.g.AVIATIONSTACK_API_KEY,NEXT_PUBLIC_MAPBOX_TOKEN,DATABASE_URL, Gradient keys, etc.). - Deploy. The app will be available at the URL DigitalOcean provides.
To persist flight searches and recommendation analytics:
- Create a DigitalOcean Managed Database (PostgreSQL) or use any PostgreSQL instance.
- Set
DATABASE_URLin.env.local(or in App Platform env) to the connection string. - On first use, the app creates the required tables automatically (see
src/lib/db.ts).
To persist user preference filters in Supabase:
- Create a project at supabase.com.
- Run the schema in
supabase/schema.sql(if present) in the SQL Editor. - Set
NEXT_PUBLIC_SUPABASE_URLandSUPABASE_SERVICE_ROLE_KEYin.env.local.
- Enter a flight number (e.g.
AA 203) and click Search. - Confirm flight details; edit gate if needed.
- Adjust preference filters; recommendations update.
- Use the terminal map and trip planner to plan your time.
- Ask Concourse questions in the chat (stub or Gradient, depending on config).
- Frontend: Next.js 16 (App Router), React 19, Tailwind CSS, Shadcn-style UI
- APIs: Next.js API routes, AviationStack (flight data), optional Supabase / PostgreSQL
- AI: DigitalOcean Gradient (chat + agents)
- Map: Mapbox GL JS
This project is open source under the MIT License. See LICENSE in the repository root for the full text.