{"id":38101137,"url":"https://github.com/airframesio/flightboard","last_synced_at":"2026-01-16T21:13:20.417Z","repository":{"id":312479011,"uuid":"1047634947","full_name":"airframesio/flightboard","owner":"airframesio","description":"A dual-interface flight information display system featuring both a modern web UI and a terminal-based TUI, similar to airport departure/arrival boards.","archived":false,"fork":false,"pushed_at":"2025-08-30T23:02:11.000Z","size":104,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-30T23:31:32.524Z","etag":null,"topics":["acars","ads-b","flight-board","flight-tracking","flights","flights-api","flights-data","tui-app","vdl","vdl2","vdlm2","webapp"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/airframesio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-30T21:31:10.000Z","updated_at":"2025-08-30T23:02:14.000Z","dependencies_parsed_at":"2025-08-30T23:31:35.886Z","dependency_job_id":"8772c542-85ee-4a1f-a45b-e23f87ac1cb9","html_url":"https://github.com/airframesio/flightboard","commit_stats":null,"previous_names":["airframesio/flightboard"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/airframesio/flightboard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airframesio%2Fflightboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airframesio%2Fflightboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airframesio%2Fflightboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airframesio%2Fflightboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/airframesio","download_url":"https://codeload.github.com/airframesio/flightboard/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airframesio%2Fflightboard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28482586,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acars","ads-b","flight-board","flight-tracking","flights","flights-api","flights-data","tui-app","vdl","vdl2","vdlm2","webapp"],"created_at":"2026-01-16T21:13:19.633Z","updated_at":"2026-01-16T21:13:20.407Z","avatar_url":"https://github.com/airframesio.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FlightBoard\n\n[![CI](https://github.com/airframesio/flightboard/actions/workflows/ci.yml/badge.svg)](https://github.com/airframesio/flightboard/actions/workflows/ci.yml)\n[![Docker Publish](https://github.com/airframesio/flightboard/actions/workflows/docker-publish.yml/badge.svg)](https://github.com/airframesio/flightboard/actions/workflows/docker-publish.yml)\n[![Docker Image](https://img.shields.io/badge/docker-ghcr.io-blue?logo=docker\u0026logoColor=white)](https://github.com/airframesio/flightboard/pkgs/container/flightboard)\n![Node.js](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen)\n![TypeScript](https://img.shields.io/badge/typescript-%5E5.0.0-blue)\n![Next.js](https://img.shields.io/badge/next.js-15.5.2-black)\n![License](https://img.shields.io/badge/license-MIT-green)\n\nA dual-interface flight information display system featuring both a modern web UI and a terminal-based TUI, similar to airport departure/arrival boards.\n\n## 🚀 Recent Updates\n\n- **Enhanced CI/CD Pipeline**: Workflows now feature concurrency control and dependency chains for reliable releases\n- **Multi-Architecture Docker Support**: Images built for x86-64, Apple Silicon, and all ARM devices (Raspberry Pi, Orange Pi)\n- **Production Ready**: All TypeScript compilation errors resolved for successful Docker builds\n- **Automatic Route Enrichment**: Flights missing airport details are automatically enriched from adsb.im/adsb.lol\n- **Workflow Orchestration**: Docker publishing requires CI tests to pass first, ensuring quality releases\n- **Concurrency Control**: Duplicate workflow runs are automatically cancelled to save resources\n- **Complete Docker Support**: Multi-stage builds with Next.js standalone output for minimal image size\n- **Multi-Provider Route Checking**: Routes command intelligently queries all providers until success\n- **SBOM \u0026 Provenance**: Docker images include software bill of materials and build attestations\n- **Automatic GitHub Releases**: Version tags trigger full CI/CD pipeline and create releases\n\n## Features\n\n- **Web Interface**: Modern Next.js 15 application with photorealistic split-flap display animations\n- **Multiple Themes**: 7 unique themes including Airport Classic, Modern, Minimalist, Retro Terminal, High Contrast, Matrix (with animated digital rain), and Super Thin\n- **Theme Persistence**: User preferences saved in browser localStorage with light/dark/system mode support\n- **Terminal UI**: Blessed-based TUI for command-line flight monitoring\n- **Real-time Updates**: Auto-refreshing flight data with dynamic status changes\n- **Multiple Data Providers**: Support for 8+ flight data APIs with intelligent fallback\n- **Automatic Route Enrichment**: Missing flight details are automatically fetched from route providers\n- **Airport Information**: Detailed airport data including location, timezone, and local time\n- **Enhanced Display**: ICAO codes shown with city names, \"????\" for en-route flights, proper sorting by time and status\n- **Global CLI Tools**: Three installable command-line utilities for different use cases\n- **Production Docker Support**: Multi-stage builds with Next.js standalone output\n- **Complete CI/CD Pipeline**: Automated testing, Docker builds, and GHCR publishing\n- **Smart Provider Selection**: Configurable priority system with automatic fallback\n- **TypeScript Throughout**: Full type safety in both web and CLI applications\n\n## Requirements\n\n- Node.js 18.0.0 or higher\n- npm or yarn package manager\n- Docker and Docker Compose (optional, for containerized deployment)\n\n## Installation\n\n### From Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/airframes/flightboard.git\ncd flightboard\n\n# Install dependencies\nnpm install\n\n# Install CLI tools globally (optional)\nnpm link\n```\n\n### Using Docker\n\n#### Pull from GitHub Container Registry\n\n```bash\n# Pull the latest stable version (auto-selects architecture)\ndocker pull ghcr.io/airframes/flightboard:latest\n\n# Or pull a specific version\ndocker pull ghcr.io/airframes/flightboard:v1.0.0\n\n# Run the container\ndocker run -p 3000:3000 --env-file .env.local ghcr.io/airframes/flightboard:latest\n```\n\n**Supported Architectures:**\n- `linux/amd64` - Standard x86-64 (Intel/AMD processors)\n- `linux/arm64` - 64-bit ARM (Apple Silicon M1/M2/M3, AWS Graviton, newer Raspberry Pi)\n- `linux/arm/v7` - 32-bit ARM v7 (Raspberry Pi 2/3/4, Orange Pi, most 32-bit ARM boards)\n- `linux/arm/v6` - 32-bit ARM v6 (Raspberry Pi 1/Zero/Zero W, older ARM devices)\n\nDocker will automatically pull the correct image for your architecture.\n\n#### Build Locally\n\n```bash\n# Using Docker Compose (recommended)\ndocker-compose up\n\n# Or build and run manually\ndocker build -t flightboard:latest .\ndocker run -p 3000:3000 --env-file .env.local flightboard:latest\n```\n\n### Global Installation (when published)\n\n```bash\nnpm install -g flightboard\n```\n\n## Themes\n\nFlightBoard includes 7 beautifully crafted themes, each with light and dark mode support:\n\n1. **Airport Classic** - Traditional split-flap board aesthetic with mechanical animations\n2. **Modern** - Clean, contemporary design with smooth animations\n3. **Minimalist** - Focus on content with subtle design elements\n4. **Retro Terminal** - Green phosphor CRT terminal style\n5. **High Contrast** - Maximum readability with stark contrasts\n6. **Matrix** - Cyberpunk theme with animated digital rain background featuring golden airplane symbols\n7. **Super Thin** - Ultra-compact terminal style with minimal spacing\n\n### Theme Configuration\n\nSet available themes via environment variable:\n\n```bash\n# In .env.local\nAVAILABLE_THEMES=airport,modern,minimalist,retro,highcontrast,matrix,superthin\n\n# Or use a subset\nAVAILABLE_THEMES=airport,modern,matrix\n```\n\nThemes remember user preferences in browser localStorage including:\n- Selected theme\n- Light/dark/system color mode\n- Automatic theme application on page load\n\n## Usage\n\n### Command Line Tools\n\nAfter installation, three global commands are available:\n\n#### `flightboard-web` - Web Interface\n\nStart the web server:\n\n```bash\nflightboard-web\n# or during development\nnpm run flightboard-web\n```\n\nOpen [http://localhost:3000](http://localhost:3000) in your browser.\n\n**Web Interface Features:**\n- Theme selector dropdown with live preview\n- Light/dark/system mode toggle\n- Responsive split-flap displays\n- Real-time clock showing local, airport, and UTC time\n- Tabbed interface for departures and arrivals\n- Flight status badges with appropriate colors\n- Automatic sorting by time and status (active flights first)\n\n#### `flightboard-tui` - Terminal UI\n\nRun the TUI application:\n\n```bash\nflightboard-tui\n# or during development\nnpm run flightboard-tui\n```\n\nWith options:\n\n```bash\nflightboard-tui --airport=KLAX                     # Set airport\nflightboard-tui --theme=retro                      # Set theme\nflightboard-tui --minimal                          # Minimal mode (no version/help text)\nflightboard-tui --airport=KSFO --theme=matrix      # Multiple options\n```\n\n**TUI Features:**\n- **7 Color Themes**: Classic, Modern, Retro Terminal, Matrix, High Contrast, Ocean, Sunset\n- **Version Display**: Shows FlightBoard version and GitHub URL (hidden with `--minimal`)\n- **Real-time Updates**: Auto-refreshing flight statuses\n- **Theme Selection**: Set via `--theme` flag at startup\n\n**TUI Controls:**\n- `Tab` or `D`/`A`: Switch between Departures and Arrivals\n- `R`: Refresh flight data\n- `Q` or `Esc`: Quit\n- Arrow keys: Navigate through flights\n\n#### `flightboard-lookup` - Flight Data Lookup Tool\n\nQuery flight data from various providers:\n\n```bash\n# List configured providers\nflightboard-lookup list\n\n# Test all providers for an airport\nflightboard-lookup flights --airport=KSMF --provider=all\n\n# Test specific provider\nflightboard-lookup flights --airport=KLAX --provider=aviationstack\n\n# Get airport information\nflightboard-lookup airport --code=KSFO\n\n# Fetch flight route information via adsb.im or adsb.lol\nflightboard-lookup routes --flight UAL123                                      # Check all providers (default)\nflightboard-lookup routes --flight AAL456 --provider adsbim                   # Use only adsb.im\nflightboard-lookup routes --flight DAL789 --provider adsblol                  # Use only adsb.lol\nflightboard-lookup routes --flight SWA1234 --lat 37.7749 --lng -122.4194      # With position data\nflightboard-lookup routes --flight NKS246 --verbose                           # Show full details from all providers\n\n# Routes command options:\n#   --flight \u003ccallsign\u003e  Flight callsign (required)\n#   --lat \u003clatitude\u003e     Current latitude (optional, default: 0)\n#   --lng \u003clongitude\u003e    Current longitude (optional, default: 0)\n#   --provider \u003cprovider\u003e Provider to use: adsbim, adsblol, or all (default: all)\n#   --verbose, -v        Show full response data including request details\n\n# Make raw API request\nflightboard-lookup raw --url \"https://api.example.com/endpoint\" --method GET\n\n# Help\nflightboard-lookup --help\n```\n\n**Available Commands:**\n- `flights`: Test flight data providers for an airport\n- `airport`: Get detailed airport information\n- `list`: Show all configured providers and their status\n- `routes`: Query adsb.im or adsb.lol for flight route information (requires active flight callsign)\n- `raw`: Make custom API requests for testing\n\n## API Configuration\n\nCreate a `.env.local` file to configure flight data providers:\n\n```bash\ncp env.example .env.local\n```\n\n### Supported Providers\n\n1. **Airframes.io**\n   - Get API key: [app.airframes.io/user/dashboard](https://app.airframes.io/user/dashboard) - click API Key button\n   - Free for all feeders, Patreons, and paid Discord supporters\n   - `AIRFRAMES_API_KEY=your_key`\n   - Note: Paid API tiers coming in the future\n\n2. **AviationStack**\n   - Sign up: [Get your API key here](https://apilayer.com?fpr=kevin31\u0026fp_sid=flightbo) *\n   - Free tier: 100 requests/month\n   - `AVIATIONSTACK_API_KEY=your_key`\n   - \\* *Affiliate link - helps support FlightBoard development*\n\n3. **AirNav RadarBox**\n   - Sign up: [radarbox.com/api](https://www.radarbox.com/api)\n   - `AIRNAV_API_KEY=your_key`\n\n4. **adsb.im** (Free)\n   - Flight schedule and route lookup by callsign and position\n   - No API key required\n   - Endpoint: `POST /api/0/routeset`\n   - Parameters: `callsign` (required), `lat`, `lng` (optional, defaults to 0)\n   - Returns route information for active flights\n   - Use `flightboard-lookup routes` command for testing\n\n5. **adsb.lol** (Free)\n   - Real-time ADS-B data with geographic search\n   - No API key required\n   - Endpoints:\n     - `/v2/lat/{lat}/lon/{lon}/dist/{radius}` - Search aircraft by location\n     - `/api/0/routeset` - Look up flight routes (similar to adsb.im)\n     - `/api/0/airport/{icao}` - Airport information\n   - Max radius: 250 nautical miles for geographic search\n   - Use `flightboard-lookup routes --provider adsblol` for route testing\n\n6. **OpenSky Network** (Free)\n   - No configuration needed\n   - Rate limits apply\n\n7. **FlightAware AeroAPI** (v4) - Paid Only\n   - Sign up: [flightaware.com/commercial/aeroapi](https://flightaware.com/commercial/aeroapi/)\n   - Portal: [flightaware.com/aeroapi/portal](https://flightaware.com/aeroapi/portal)\n   - `FLIGHTAWARE_API_KEY=your_key`\n   - **Pricing**: Starting at $100/month (no free tier)\n   - Premium features from $1,000/month\n   - Provides real-time flight tracking, gate info, and accurate predictions\n\n8. **FlightRadar24** (Commercial API) - Paid Only\n   - Sign up: [fr24api.flightradar24.com](https://fr24api.flightradar24.com/)\n   - Commercial inquiries: business@fr24.com\n   - `FLIGHTRADAR24_API_KEY=your_key`\n   - **Pricing**: Commercial licenses only (no free tier)\n   - Sandbox available for testing with paid account\n   - Provides real-time aircraft positions and flight data\n   - Documentation: [fr24api.flightradar24.com/docs](https://fr24api.flightradar24.com/docs)\n\n### Provider Priority Configuration\n\nSet the order in which providers are tried:\n\n```bash\n# In .env.local\nFLIGHT_PROVIDER_PRIORITY=airframes,flightaware,aviationstack,flightradar24,airnav,adsbim,adsblol,opensky\n\n# Default if not specified:\n# airframes,flightaware,aviationstack,flightradar24,airnav,adsbim,adsblol,opensky\n```\n\nThe app will automatically try providers in the specified order until it finds available data. If all providers fail, it falls back to simulated mock data.\n\n### Provider Notes\n\n- **Free Providers**: \n  - Airframes.io (free for feeders/supporters)\n  - AviationStack (100 requests/month free)\n  - adsb.im, adsb.lol, OpenSky (no API key needed)\n- **Paid-Only Providers**: \n  - FlightAware ($100+/month)\n  - FlightRadar24 (commercial only)\n  - AirNav RadarBox (subscription required)\n- **Disabled Providers**: If a provider doesn't appear in `FLIGHT_PROVIDER_PRIORITY`, it's disabled\n- **Mock Data**: Automatically used when no providers return data\n\n## Airport Information\n\nBoth web and TUI interfaces display detailed airport information:\n- Airport name and ICAO/IATA codes\n- City and country\n- Current local time and UTC time\n- Timezone information\n\nData sourced from Airframes.io airport API when available.\n\n## Docker Support\n\nFlightBoard includes complete Docker support for easy deployment and development.\n\n### Quick Start with Docker\n\n```bash\n# Build the Docker image\nnpm run docker:build\n\n# Run the container\nnpm run docker:run\n\n# Or use docker-compose\nnpm run docker:compose\n```\n\n### Docker Compose\n\nThe included `docker-compose.yml` file makes it easy to run FlightBoard with all environment variables:\n\n```bash\n# Start with docker-compose (uses .env file)\ndocker-compose up\n\n# Build and start\ndocker-compose up --build\n\n# Run in background\ndocker-compose up -d\n```\n\n### Manual Docker Commands\n\n```bash\n# Build the image\ndocker build -t flightboard:latest .\n\n# Run with environment file\ndocker run -p 3000:3000 --env-file .env.local flightboard:latest\n\n# Run with individual environment variables\ndocker run -p 3000:3000 \\\n  -e AIRFRAMES_API_KEY=your_key \\\n  -e AVIATIONSTACK_API_KEY=your_key \\\n  flightboard:latest\n```\n\n## Building for Production\n\n```bash\n# Build everything\nnpm run build\n\n# Build only CLI tools\nnpm run build:cli\n\n# Start production server\nnpm start\n```\n\n## CI/CD Pipeline\n\nFlightBoard includes a comprehensive GitHub Actions workflow for continuous integration:\n\n### Workflow Features\n\n- **Multi-version Testing**: Tests against Node.js 18.x and 20.x\n- **Code Quality**: Runs ESLint and TypeScript type checking\n- **Automated Testing**: Executes test suite on every PR and push\n- **Docker Validation**: Builds Docker image to ensure containerization works\n- **Pull Request Checks**: Automatically runs on all pull requests\n- **Concurrency Control**: Cancels outdated workflow runs automatically\n- **Workflow Dependencies**: Docker publish requires CI tests to pass first\n- **Multi-Architecture Builds**: Creates images for x86-64, ARM64, ARMv7, and ARMv6\n- **Automatic Docker Publishing**: Tags trigger multi-platform image builds\n- **GitHub Container Registry**: Images published to ghcr.io/airframes/flightboard\n- **Release Automation**: Version tags create GitHub releases with changelogs\n- **Build Attestations**: Generates SBOM and provenance for supply chain security\n\n### GitHub Actions Workflows\n\nThe project includes two main workflows:\n\n1. **CI Pipeline** (`ci.yml`)\n   - Runs on all pull requests\n   - Pushes to `main` and `develop` branches\n   - Tests on Node.js 18.x and 20.x\n   - Validates Docker builds\n   - Concurrency control cancels outdated runs\n   - Can be called by other workflows\n\n2. **Docker Publish** (`docker-publish.yml`)\n   - Triggers on version tags (e.g., `v1.0.0`)\n   - **Requires CI workflow to pass first**\n   - Concurrency control prevents duplicate runs\n   - Builds multi-architecture images:\n     - `linux/amd64` (x86-64)\n     - `linux/arm64` (Apple Silicon, AWS Graviton)\n     - `linux/arm/v7` (Raspberry Pi 2/3/4, Orange Pi)\n     - `linux/arm/v6` (Raspberry Pi Zero/1)\n   - Publishes to GitHub Container Registry with automatic architecture detection\n   - Creates GitHub releases automatically\n   - Generates SBOM and provenance attestations\n\n### Creating a Release\n\nTo create a new release:\n\n```bash\n# Tag the version\ngit tag v1.0.0\ngit push origin v1.0.0\n```\n\nThis will automatically:\n1. Run the full CI test suite\n2. Build multi-architecture Docker images (only if CI passes)\n3. Publish images to GitHub Container Registry\n4. Create a GitHub release with changelog\n5. Tag images with semantic version numbers and `latest`\n\n**Note**: The Docker publish workflow will only proceed if all CI tests pass successfully.\n\n## Project Structure\n\n```\nflightboard/\n├── src/\n│   ├── app/           # Next.js app router pages\n│   ├── cli/           # CLI tools (TUI, lookup, web)\n│   ├── components/    # React components\n│   ├── lib/           # Shared libraries and providers\n│   └── types/         # TypeScript type definitions\n├── bin/               # CLI wrapper scripts\n├── dist/              # Compiled CLI tools\n├── .github/           # GitHub Actions workflows\n│   └── workflows/\n│       └── ci.yml     # CI/CD pipeline\n└── public/            # Static assets\n```\n\n## Technologies Used\n\n- **Next.js 15**: React framework with App Router\n- **TypeScript**: Type-safe development\n- **Tailwind CSS**: Utility-first styling with CSS variables for theming\n- **shadcn/ui**: High-quality UI components\n- **React Context API**: Theme state management\n- **Canvas API**: Matrix rain animation\n- **Blessed**: Terminal UI library\n- **Commander**: CLI argument parsing\n- **Chalk**: Terminal string styling\n- **Node-fetch**: HTTP client for Node.js\n\n## Mock Data\n\nWhen using mock data, the system generates realistic flight information including:\n- Major US airports\n- Real airline codes and names\n- Dynamic status updates (boarding, departed, delayed, etc.)\n- Gate and terminal assignments\n- Estimated and actual times\n- Aircraft types\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Run web dev server\nnpm run dev\n\n# Run TUI\nnpm run flightboard-tui\n\n# Test flight lookups\nnpm run flightboard-lookup -- list\n\n# Test route lookups\nnpm run flightboard-lookup -- routes --flight UAL123\n\n# Link for global development\nnpm link\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details\n\n## Troubleshooting\n\n### Docker Build Issues\nIf you encounter TypeScript compilation errors during Docker builds:\n1. Ensure all TypeScript types are properly defined\n2. Check that `next.config.ts` only contains valid Next.js configuration options\n3. Verify that all imported modules exist and are properly typed\n\n### Provider Connection Issues\n- Check API keys are correctly set in `.env.local`\n- Verify network connectivity to provider endpoints\n- Review provider-specific rate limits\n- Use `flightboard-lookup` to test individual providers\n\n### Port Conflicts\nIf the default port 3000 is in use:\n- Change the port in Docker: `docker run -p 3001:3000 ...`\n- For development: `PORT=3001 npm run dev`\n\n## Support the Project\n\nFlightBoard is open source and free to use. If you find it useful, consider:\n- Using our affiliate links when signing up for API services (marked with \\*)\n- Contributing code or documentation\n- Reporting bugs and suggesting features\n- Sharing the project with others\n\nAffiliate commissions help us maintain and improve FlightBoard. Thank you for your support!\n\n## Acknowledgments\n\n- Airport data provided by [Airframes.io](https://airframes.io)\n- Community ADS-B data from adsb.im and adsb.lol\n- Flight data from various commercial and open-source providers\n- UI inspiration from classic airport split-flap displays","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fairframesio%2Fflightboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fairframesio%2Fflightboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fairframesio%2Fflightboard/lists"}