How Concourse Works

Here is a technical overview of my app, covering the tech stack, APIs, architecture, user flow, and integrations.

Project Overview

Concourse is an AI-powered airport food concierge for first-time and infrequent travelers. It combines real-time flight data with a curated RAG knowledge base of terminal and dining information to deliver time-aware, personalized food recommendations through a witty, experienced AI persona — like having a seasoned frequent flyer friend who knows every airport by heart.

User Flow

  1. Enter flight — User enters flight number on the homepage.
  2. Flight confirmed — App shows airline, gate, terminal, boarding time; user can adjust gate if needed.
  3. Set preferences — User selects dietary preferences (vegetarian, vegan, etc.); stored in Supabase.
  4. Recommendations — Concourse shows food options with walk times and a time-confidence indicator (green / yellow / red).
  5. Map view — Interactive terminal map (Mapbox) shows gate and nearby food with a suggested walking route.
  6. Chat — User can ask follow-up questions; the Concourse agent responds in persona.
  7. Gate change alert — If the gate changes (live or simulated), the app alerts the user and re-routes recommendations.

Tech Stack

  • Frontend: Next.js 16 (App Router), React 19, Tailwind CSS 4, shadcn/ui, Lucide icons, Cobe (WebGL globe), custom bento layout, and a global light/dark theme driven by next-themes.
  • Maps: Mapbox GL JS for terminal visualization and gate/vendor overlays.
  • Backend: Next.js API Routes (in this repo) deployed to DigitalOcean App Platform.
  • AI & agents: DigitalOcean Gradient — multi-agent orchestration, RAG knowledge bases, serverless inference, and tool calling for flight + food agents.
  • Flight data: AviationStack API (free tier) for live schedules, gates and delays.
  • Database: DigitalOcean Managed PostgreSQL (target) or Supabase in this demo — stores preference filters, sessions, and analytics events.
  • Object storage: DigitalOcean Spaces for static assets (airport JSON, map overlays, marketing images) and future export/report files.
  • Deployment & infra: DigitalOcean App Platform for the web app, Functions for lightweight webhooks/utilities, Gradient for AI workloads, and Spaces + Managed DB for data.

APIs & Integrations

Next.js API Routes (internal)
  • POST /api/flight/lookup — Flight number → AviationStack → airline, terminal, gate, boarding time, delay status (optionally cached in a DigitalOcean Managed DB).
  • POST /api/recommendations — Terminal, gate, and preferences → ranked food options with walk times using in-repo JSON and Gradient RAG knowledge bases.
  • POST /api/chat — User message → DigitalOcean Gradient lead agent → persona response, with calls out to flight + food tools as needed.
  • GET /api/gate/status — Gate change polling / simulation endpoint used by the app and agents.
  • POST /api/preferences — Persist dietary preferences to Supabase / DigitalOcean Managed PostgreSQL.
  • GET /api/preferences — Retrieve stored preferences per session.

External & cloud: AviationStack (flight lookup), DigitalOcean Gradient (agents + RAG), DigitalOcean App Platform (app + API), DigitalOcean Spaces (static assets), Mapbox (maps), and Supabase / DigitalOcean Managed PostgreSQL (preferences and session state).

Architecture: AI & Agents

The app uses DigitalOcean Gradient for agent orchestration. Three agents work together:

  • Lead agent (Concourse) — Handles all user-facing chat, persona, and synthesis. Routes to sub-agents and formats final answers.
  • Flight sub-agent — Calls a DigitalOcean Function that forwards to the app’s /api/flight/lookup (AviationStack). Returns gate, terminal, boarding time.
  • Food / RAG sub-agent — Uses a knowledge base (airport terminals, vendors, dietary tags, walk times) and a function that calls /api/recommendations. Returns ranked food options.

The RAG knowledge base is seeded with structured data for JFK, LGA, EWR (A, B, C), and RDU: terminal zones, vendor names, cuisines, dietary tags, opinions, and walk-time estimates. The Food agent uses it to answer questions and enrich tool results.

Core Features

  • Flight lookup & gate detection — AviationStack API; user can override gate if needed.
  • Time-aware recommendations — Options ranked by walk distance; green/yellow/red confidence so users know if they have enough time.
  • Dietary filtering — Vegetarian, vegan, gluten-free, etc.; preferences persisted in Supabase.
  • Terminal map — Mapbox map with gate, nearby vendors, and a suggested route (50+ airports supported).
  • Gate change alerts — Simulated or live; recommendations re-routed and user notified in Concourse’s voice.
  • Concourse AI persona — Witty, opinionated, time-aware responses across chat, recommendations, and alerts.

Data Strategy

  • Flight data: Live via AviationStack (free tier), with results cached for a short TTL in the app/DB to avoid rate limits.
  • Food/vendor data: Curated JSON in-repo plus a Gradient RAG knowledge base (JFK, LGA, EWR, RDU) stored in DigitalOcean infrastructure for low-latency retrieval.
  • Maps: Mapbox with seeded coordinates per airport/terminal and optional static overlays served from DigitalOcean Spaces.
  • Preferences: Supabase / DigitalOcean Managed PostgreSQL keyed by anonymous session ID.
  • Gate changes: Demo supports simulation and polling via /api/gate/status; in production this would be wired to airline/webhook feeds and Gradient background agents.

Hackathon & Judging

Concourse is built for the DigitalOcean Gradient AI Hackathon 2026. It demonstrates:

  • Multi-agent orchestration — Lead agent + Flight and Food sub-agents with function calling.
  • RAG — Knowledge base of airport/vendor data used by the Food agent.
  • Full-stack app — Next.js front end and API routes, deployed on DigitalOcean App Platform.
  • AI persona — Concourse speaks consistently across chat, recommendations, and alerts with opinions and time-awareness.