Aircraft Transponder (ADS-B) Template
This template demonstrates how to build a modern full-stack application that ingests and analyzes aircraft transponder data (ADS-B) from military aircraft. It showcases a complete architecture combining a Next.js frontend with a Moose backend for real-time data processing and storage.
Aircraft have transponders, and there are a group of folk around the world that open-source record the transponder data and push it to ADSB.lol. Lets grab that data and create something interesting.
Getting Started
Prerequisites
Before getting started, make sure you have the following installed:
Requirements
Install Moose and Aurora
To get started, install Moose (open source developer platform for data engineering) and Aurora (AI data engineering product).
bash -i <(curl -fsSL https://fiveonefour.com/install.sh) moose,aurora
Anthropic API Key
This installation will ask for your Anthropic API key if you want to use the AI features. If you don’t have one, you can follow the setup guide at Anthropic’s website.
Create a new project using the ADS-B template
moose init aircraft ads-b-frontend
This template creates a project “aircraft” with two subdirectories:
project/
├── frontend/ # Next.js frontend application
│ ├── src/
│ └── package.json
│
├── moose/ # Moose backend
│ ├── app/
│ │ ├── datamodels/ # Data models for aircraft tracking
│ │ ├── functions/ # Processing functions
│ │ └── scripts/ # Workflow scripts
│ ├── moose.config.toml # Moose configuration
│ └── package.json
The frontend—a template NextJS application to be used by the LLM for generating a frontend. Moose—the backend ingesting the data, processing and storing it.
Set up the project
Navigate to the moose subdirectory and install dependencies:
cd aircraft/moose
npm install
Start the Docker services
Make sure Docker Desktop is running, then start the Moose development server:
moose dev
This will start all necessary local infrastructure including ClickHouse, Redpanda, Temporal, and the Rust ingest servers.
Thiw will also start the ingestion workflow, retrieve data from the adsb.lol military aircraft tracking API, process it according to the data model, and ingest it into ClickHouse.
You should see a large amount of data being ingested in the Moose CLI.
[POST] Data received at ingest API sink for AircraftTrackingData
Received AircraftTrackingData -> AircraftTrackingProcessed - 1 1 message(s)
POST ingest/AircraftTrackingData
[POST] Data received at ingest API sink for AircraftTrackingData
POST ingest/AircraftTrackingData
Received AircraftTrackingData -> AircraftTrackingProcessed - 1 1 message(s)
[POST] Data received at ingest API sink for AircraftTrackingData
Received AircraftTrackingData -> AircraftTrackingProcessed - 1 1 message(s)
POST ingest/AircraftTrackingData
[DB] 136 row(s) successfully written to DB table (AircraftTrackingProcessed)
[POST] Data received at ingest API sink for AircraftTrackingData
Test Moose deployment and data ingestion
To see what infrastructure has been set up, run moose ls
or moose ls --json
.
If you connect to the locally deployed ClickHouse table, query it! Here’s a query that will return unique types of aircraft in the dataset.
SELECT DISTINCT aircraft_type
FROM aircraft_tracking_data;
Explore the Data
Using Aurora’s MCP tools, you can explore the ingested aircraft data using AI tools like Claude Desktop or Cursor. We recommend using Claude for exploring your data and ad-hoc analytics, and Cursor for productionizing your results.
Explore with Claude Desktop
Claude Desktop can help you analyze the data through natural language queries.
Initialize the Aurora MCP for your project with the Claude Client
cd /path/to/your/project/moose
aurora setup --mcp claude-desktop
Explore your data in Claude
Example Questions for Claude
Try asking Claude exploratory questions like:
- “Tell me about the data in my ClickHouse tables”
- “Tell me about the flow of data in Moose project”
- “Create a pie chart of the types of aircraft in the air right now”
- “Create a visualization of aircraft type against altitude”
Productionize Your Results with Cursor
For a code-forward workflow, Cursor provides a great environment to productionize your queries.
Initialize the Aurora MCP for your project with the Claude Client
aurora setup --mcp cursor-global
This will create a /.cursor/mcp.json
file with Aurora’s MCP configuration.
Enable the Aurora Cursor MCP
Enable the MCP in Cursor by going to:
cursor > settings > cursor settings > MCP
and clicking enable
and refresh
.
Example Question for Cursor
Try asking Cursor to help you productionize your analysis:
- “Could you create a query that returns all the aircraft types that are currently in the sky?”
- “Could you create an egress API to furnish that data to a frontend?”
Integration Points
You If you create an egress API above, you can create a frontend using the provided NextJS project.
Install NextJS dependencies
cd path/to/your/project/frontend
npm i
Run the local development server
npm run dev
Example Prompts for generating a frontend
Drag the frontend folder to the chat as context, as well as the file containing the generated egress API, and prompt:
- “using the packagages you’ve been given, generate a frontend showing the data offered by the API.”