{"id":48810580,"url":"https://github.com/syntax-error-1337/radar","last_synced_at":"2026-04-14T07:04:46.150Z","repository":{"id":343370570,"uuid":"1166430260","full_name":"Syntax-Error-1337/radar","owner":"Syntax-Error-1337","description":"RADAR is a real time geospatial intelligence platform that aggregates aircraft, maritime, cyber, OSINT, GPS interference, and threat alert data to provide global situational awareness through an interactive intelligence dashboard","archived":false,"fork":false,"pushed_at":"2026-04-09T01:55:21.000Z","size":41434,"stargazers_count":10,"open_issues_count":0,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-09T03:29:13.824Z","etag":null,"topics":["adsb","aviation","cyber-intelligence","dashboard","flight-tracking","geopolitics","geospatial-intelligence","gps-jamming","maritime","monitoring","opensource","osint","palantir","radar","vessel-tracking"],"latest_commit_sha":null,"homepage":"https://radar.army","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/Syntax-Error-1337.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-25T08:06:34.000Z","updated_at":"2026-04-09T01:55:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Syntax-Error-1337/radar","commit_stats":null,"previous_names":["syntax-error-1337/radar"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Syntax-Error-1337/radar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Syntax-Error-1337%2Fradar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Syntax-Error-1337%2Fradar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Syntax-Error-1337%2Fradar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Syntax-Error-1337%2Fradar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Syntax-Error-1337","download_url":"https://codeload.github.com/Syntax-Error-1337/radar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Syntax-Error-1337%2Fradar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31785682,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T02:24:21.117Z","status":"ssl_error","status_checked_at":"2026-04-14T02:24:20.627Z","response_time":153,"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":["adsb","aviation","cyber-intelligence","dashboard","flight-tracking","geopolitics","geospatial-intelligence","gps-jamming","maritime","monitoring","opensource","osint","palantir","radar","vessel-tracking"],"created_at":"2026-04-14T07:04:32.886Z","updated_at":"2026-04-14T07:04:46.144Z","avatar_url":"https://github.com/Syntax-Error-1337.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RADAR — Geospatial Intelligence Platform\n\n\u003cdiv align=\"center\"\u003e\n\n![Version](https://img.shields.io/badge/version-2.0.0-blue?style=flat-square)\n![React](https://img.shields.io/badge/React-19-61DAFB?style=flat-square\u0026logo=react)\n![TypeScript](https://img.shields.io/badge/TypeScript-5.9-3178C6?style=flat-square\u0026logo=typescript)\n![Node.js](https://img.shields.io/badge/Node.js-20-339933?style=flat-square\u0026logo=nodedotjs)\n![MapLibre](https://img.shields.io/badge/MapLibre_GL_JS-5.x-396CB2?style=flat-square)\n![License](https://img.shields.io/badge/license-MIT-green?style=flat-square)\n\n**A real-time geospatial intelligence platform for tracking aircraft, maritime vessels, GPS interference, conflict zones, and active threat alerts.**\n\n[Features](#-features) • [Architecture](#-architecture) • [Quick Start](#-quick-start) • [API](#-api-reference) • [Contributing](CONTRIBUTING.md)\n\n\u003c/div\u003e\n\n---\n\n## Overview\n\n**RADAR** is a full-stack geospatial intelligence dashboard that aggregates real-time data from multiple sources to provide comprehensive situational awareness across six intelligence domains:\n\n- **✈️ Flight Tracking** — Live aircraft positions via ADS-B data\n- **🚢 Maritime Tracking** — Global vessel tracking via AIS streams\n- **🛡️ Cyber Intelligence** — Internet security metrics via Cloudflare Radar\n- **🌍 OSINT Monitor** — Geo-located news feeds and AI-powered intelligence briefs\n- **📡 GPS Jamming** — Global GPS interference heatmap using H3 hex cells\n- **🚨 Threat Alerts** — Live rocket/UAV alerts (Israel) and UAE regional threat alerts (GulfWatch)\n\nBuilt with React 19, TypeScript, Express.js, and MapLibre GL JS — delivering a high-performance, military-styled interface with three visual modes (EO/FLIR/CRT).\n\n---\n\n## ✨ Features\n\n### ✈️ Flight Tracking Module\n\n- **Live ADS-B data** from ADSB.lol (community-fed, no auth required) or OpenSky Network\n- **Rich telemetry** — altitude (barometric/geometric), speed, heading, vertical rate, squawk codes, Mach, IAS, TAS, roll angle, wind speed/direction, OAT/TAT, navigation modes, RSSI\n- **Aircraft enrichment** — registration, manufacturer, model, operator, type code, year built (DuckDB + Parquet database)\n- **Route history visualization** with origin airport data\n- **Geographic filtering** via configurable bounding box\n- **On-ground/airborne detection** with visual distinction\n- **Emergency squawk highlighting** (7500, 7600, 7700)\n- **Globe \u0026 Mercator projections** — toggle between 3D and flat views\n\n### 🚢 Maritime Tracking Module\n\n- **Live AIS streams** via persistent WebSocket to `wss://stream.aisstream.io`\n- **Full AIS message support** — Position Reports (Class A/B), Ship Static Data, Base Station Reports, SAR Aircraft, Aids to Navigation, Safety Broadcasts\n- **Vessel details** — MMSI, name, call sign, ship type, destination, SOG, COG, heading, navigational status\n- **Historical trail rendering** — last 150 position points per vessel\n- **Stale vessel purging** — automatic cleanup after 30 minutes of inactivity\n- **Auto-reconnect** — 5-second backoff on WebSocket disconnect\n- **Status endpoint** — live connection health, vessel count, message stats\n\n### 📡 GPS Jamming Module\n\n- **Global interference heatmap** using H3 resolution-4 hex cells\n- **Daily datasets** auto-downloaded from GPSJam.org (local CSV cache)\n- **Interference ratio visualization** — good vs. bad aircraft signal counts per cell\n- **Date selector** — browse historical datasets going back weeks\n- **Auto-backfill** — server downloads missing daily datasets on startup\n- **Stats endpoint** — per-date summary (total cells, suspect flag, high-interference cell count)\n\n### 🚨 Threat Alerts — OSINT Monitor Module\n\nA live threat monitoring dashboard with four real-time intelligence panels:\n\n#### GPS Jamming Widget\n\n- Real-time interference stats from latest dataset\n- High-interference cell count and coverage area\n\n#### Rocket Alert Widget (Israel)\n\n- **Source**: `agg.rocketalert.live` — live rocket and UAV alert bursts\n- Shows active areas, alert type (rocket vs. UAV), countdown seconds, Hebrew and English names\n- **Map layer**: Circle markers positioned by alert coordinates, colored red (rocket) / orange (UAV)\n- Click any marker for full popup: EN/HE names, area, countdown, coordinates, timestamp\n- 24-hour totals and 7-day daily trend chart\n\n#### GulfWatch Widget (UAE)\n\n- **Source**: `gulfwatch-api.onrender.com` — regional threat alerts for UAE emirates\n- Shows active emirate, alert type, severity (warning/watch), description, start/expiry time\n- **Map layer**: Emirate polygon fills + centroid markers; colored by severity\n- Click any polygon or marker for full popup: EN/AR names, description, severity, source count, timeline\n\n#### AI Insights Panel\n\n- **LLM-powered intelligence briefs** via OpenRouter API\n- Generates military-styled summaries from intercepted news headlines\n- Regional context-aware analysis using Google Gemini 2.5 Flash\n\n#### Live News Panel\n\n- **Geo-located RSS feeds** from a 56,000+ line database (190+ countries)\n- Fetches region-specific news (geopolitical, defense, local sources)\n- Falls back to international feeds (Reuters, AP, BBC) if no local match\n\n### 🛡️ Cyber Intelligence Module\n\nPowered by **Cloudflare Radar API**:\n\n- **DDoS attack origins** — top countries launching Layer 7 attacks\n- **Traffic anomalies** — internet routing anomalies and BGP events\n- **Top domains** — most popular websites by traffic\n- **Attack vectors** — HTTP method distributions, bot classifications\n- **ASN rankings** — autonomous system activity\n- **Time-series visualization** — interactive charts and heatmaps\n\n### 🎨 Display Modes\n\nThree visual themes selectable from the navigation bar:\n\n| Mode     | Description                                       |\n| -------- | ------------------------------------------------- |\n| **EO**   | Electro-optical — clean dark interface (default)  |\n| **FLIR** | Forward-looking infrared — thermal color palette  |\n| **CRT**  | Cathode-ray tube — retro phosphor green aesthetic |\n\n---\n\n## 🏗️ Architecture\n\n### Project Structure\n\n```\nintelmap/\n├── client/               # React 19 + Vite frontend (port 5173)\n│   └── src/\n│       ├── app/          # Entry point, routes, providers\n│       ├── modules/\n│       │   ├── flights/        # ADS-B aircraft tracking\n│       │   ├── maritime/       # AIS vessel tracking\n│       │   ├── monitor/        # OSINT + threat alert hub\n│       │   │   ├── components/ # Map layers \u0026 widgets\n│       │   │   │   ├── GPSJammingLayer.tsx\n│       │   │   │   ├── RocketAlertLayer.tsx\n│       │   │   │   ├── GulfWatchLayer.tsx\n│       │   │   │   ├── layerIds.ts        # shared layer ID constants\n│       │   │   │   └── widgets/           # dashboard panel components\n│       │   │   └── hooks/      # React Query data hooks\n│       │   ├── cyber/          # Cloudflare Radar integration\n│       │   └── osint/          # Shared OSINT components\n│       ├── ui/\n│       │   ├── layout/         # TopNav, shell components\n│       │   └── theme/          # EO/FLIR/CRT mode + projection state\n│       └── core/               # Query client, providers\n│\n└── server/               # Express.js backend (port 3001)\n    └── src/\n        ├── core/\n        │   ├── source/\n        │   │   ├── adsblol.ts       # ADSB.lol polling + cache\n        │   │   ├── opensky.ts       # OpenSky fallback\n        │   │   ├── aisstream.ts     # AISStream WebSocket singleton\n        │   │   ├── cloudflare.ts    # Cloudflare Radar API client\n        │   │   ├── gpsjam.ts        # GPSJam CSV ingestion + H3 query\n        │   │   ├── rocketalert.ts   # Rocket/UAV alert polling\n        │   │   └── gulfwatch.ts     # UAE GulfWatch alert polling\n        │   ├── aircraft_db.ts       # DuckDB/Parquet aircraft enrichment\n        │   ├── scheduler.ts         # Cron-like job runner for data ingestion\n        │   └── cache.ts             # TTL cache utility\n        ├── routes/\n        │   ├── flights.ts           # GET /api/flights/*\n        │   ├── maritime.ts          # GET /api/maritime/*\n        │   ├── monitor.ts           # GET /api/monitor/* (GPS jamming, alerts)\n        │   ├── geo.ts               # GET /api/geo/* (news, intel briefs)\n        │   └── cyber.ts             # GET /api/cyber/* (Cloudflare proxy)\n        ├── Data/\n        │   └── gpsjam/              # Daily GPS interference CSVs + manifest\n        ├── types/                   # TypeScript definitions\n        ├── news_feeds.json          # 56k+ line RSS database (190+ countries)\n        └── index.ts                 # Server entry point + scheduler bootstrap\n```\n\n### Tech Stack\n\n| Layer              | Technology                           |\n| ------------------ | ------------------------------------ |\n| Frontend framework | React 19 + Vite 7 + TypeScript 5.9   |\n| Map rendering      | MapLibre GL JS 5 via react-map-gl 8  |\n| State management   | Zustand 5                            |\n| Data fetching      | TanStack Query v5                    |\n| Styling            | Tailwind CSS v4                      |\n| Icons              | Lucide React                         |\n| Backend runtime    | Node.js 20 + Express 4               |\n| Aircraft database  | DuckDB + Parquet                     |\n| Maritime stream    | WebSocket (`ws` library)             |\n| H3 spatial index   | H3-js (Uber H3 hex grid)             |\n| RSS parsing        | rss-parser                           |\n| Geolocation        | which-country + i18n-iso-countries   |\n| Build tooling      | `concurrently` (monorepo dev runner) |\n\n---\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n- **Node.js** v20 or later\n- **npm** v9 or later\n\n### 1. Install Dependencies\n\n```bash\nnpm run install:all\n```\n\nThis installs dependencies for both `client` and `server` workspaces.\n\n### 2. Configure Environment Variables\n\n#### Server — `server/.env`\n\n```bash\ncp server/.env.example server/.env\nnano server/.env\n```\n\n**Required API Keys:**\n\n| Service          | Variable                 | Where to get                 | Cost          |\n| ---------------- | ------------------------ | ---------------------------- | ------------- |\n| AISStream        | `AISSTREAM_API_KEY`      | https://aisstream.io         | Free tier     |\n| OpenRouter (LLM) | `OPENROUTER_API_KEY`     | https://openrouter.ai/keys   | Pay as you go |\n| Cloudflare Radar | `CLOUDFLARE_RADAR_TOKEN` | https://dash.cloudflare.com/ | Free          |\n\n**Optional:**\n\n```ini\n# Flight data source (default: adsblol — no key required)\nFLIGHT_DATA_SOURCE=adsblol\n\n# Geographic center for ADSB.lol queries\nADSB_LOL_LAT=0\nADSB_LOL_LON=0\nADSB_LOL_RADIUS=25000  # nautical miles (25000 ≈ global)\n\n# OpenSky fallback (optional, requires account)\n# OPENSKY_CLIENT_ID=your_email@example.com\n# OPENSKY_CLIENT_SECRET=your_secret_here\n```\n\n\u003e **Note:** GPS jamming data is fetched automatically from GPSJam.org — no API key required.\n\u003e Rocket alerts and GulfWatch alerts are fetched from public endpoints — no key required.\n\n#### Client — `client/.env`\n\n```bash\ncp client/.env.example client/.env\n```\n\n```ini\n# Flight data provider: \"adsblol\" | \"opensky\" | \"mock\"\nVITE_FLIGHT_PROVIDER=adsblol\n```\n\n### 3. Run Development Server\n\n```bash\nnpm run dev\n```\n\nThis starts:\n\n- **Frontend** → http://localhost:5173\n- **Backend** → http://localhost:3001\n- **Health check** → http://localhost:3001/health\n\n---\n\n## 🌐 API Reference\n\nAll routes served by Express backend on port `3001`.\n\n### Flights\n\n| Method | Endpoint                     | Description                                    |\n| ------ | ---------------------------- | ---------------------------------------------- |\n| `GET`  | `/api/flights/states`        | All tracked aircraft as `AircraftState[]`      |\n| `GET`  | `/api/flights/track/:icao24` | Route path for specific aircraft by ICAO24 hex |\n\n### Maritime\n\n| Method | Endpoint                     | Description                                     |\n| ------ | ---------------------------- | ----------------------------------------------- |\n| `GET`  | `/api/maritime/snapshot`     | All live vessels (position/heading, no history) |\n| `GET`  | `/api/maritime/vessel/:mmsi` | Full vessel detail including position history   |\n| `GET`  | `/api/maritime/status`       | WebSocket health, vessel count, message stats   |\n\n### Monitor — GPS Jamming\n\n| Method | Endpoint                            | Description                                                   |\n| ------ | ----------------------------------- | ------------------------------------------------------------- |\n| `GET`  | `/api/monitor/gps-jamming`          | H3 interference cells (`?date=`, `?minInterference=`, `?h3=`) |\n| `GET`  | `/api/monitor/gps-jamming/dates`    | Available dataset dates                                       |\n| `GET`  | `/api/monitor/gps-jamming/stats`    | Per-date interference statistics (`?date=`)                   |\n| `POST` | `/api/monitor/gps-jamming/backfill` | Manually trigger dataset backfill (`{limit?}`)                |\n\n### Monitor — Rocket Alerts\n\n| Method | Endpoint                             | Description                                         |\n| ------ | ------------------------------------ | --------------------------------------------------- |\n| `GET`  | `/api/monitor/rocket-alerts`         | Live burst summary + 24h total + 7-day daily counts |\n| `GET`  | `/api/monitor/rocket-alerts/history` | Per-alert records (`?hours=24\u0026alertTypeId=-1`)      |\n| `GET`  | `/api/monitor/rocket-alerts/daily`   | Per-day counts (`?days=7\u0026alertTypeId=-1`)           |\n\n### Monitor — GulfWatch (UAE)\n\n| Method | Endpoint                                 | Description                          |\n| ------ | ---------------------------------------- | ------------------------------------ |\n| `GET`  | `/api/monitor/gulf-watch/alerts`         | Active UAE threat alert summary      |\n| `GET`  | `/api/monitor/gulf-watch/alerts/history` | Alert history (`?limit=50\u0026offset=0`) |\n| `GET`  | `/api/monitor/gulf-watch/geojson`        | UAE emirates GeoJSON (1-hour cache)  |\n\n### Geo (OSINT)\n\n| Method | Endpoint               | Description                                                         |\n| ------ | ---------------------- | ------------------------------------------------------------------- |\n| `GET`  | `/api/geo/news`        | Geo-located RSS news feeds (`?lat=\u0026lon=\u0026category=`)                 |\n| `POST` | `/api/geo/intel-brief` | LLM intelligence brief from news headlines (`{news: [], lat, lon}`) |\n\n### Cyber\n\n| Method | Endpoint             | Description                                                            |\n| ------ | -------------------- | ---------------------------------------------------------------------- |\n| `GET`  | `/api/cyber/radar/*` | Proxy for Cloudflare Radar API (e.g., `/attacks/layer7/top/locations`) |\n\n### System\n\n| Method | Endpoint  | Description                |\n| ------ | --------- | -------------------------- |\n| `GET`  | `/health` | Returns `{ status: \"ok\" }` |\n\n---\n\n## 🔌 Data Sources\n\n### ADSB.lol (Flights)\n\n- **URL**: `https://api.adsb.lol/v2/point/{lat}/{lon}/{radius}`\n- **Auth**: None required (community-operated, free)\n- **Polling**: 3-second TTL cache on backend\n\n### AISStream.io (Maritime)\n\n- **URL**: `wss://stream.aisstream.io/v0/stream`\n- **Auth**: API key required (free tier)\n- **Coverage**: Global bounding box `[[-90, -180], [90, 180]]`\n- **Memory**: Up to 150 history points per vessel; stale vessels purged after 30 min\n\n### GPSJam.org (GPS Jamming)\n\n- **URL**: `https://gpsjam.org/data/{date}-h3_4.csv`\n- **Auth**: None required (public dataset)\n- **Format**: CSV with H3 hex index, good/bad aircraft counts per cell\n- **Schedule**: New dataset auto-downloaded daily via server scheduler\n\n### Rocket Alert Live (Threat Alerts — Israel)\n\n- **URL**: `https://agg.rocketalert.live/api/v1/`\n- **Auth**: None required (public API)\n- **Data**: Live rocket and UAV alert bursts with coordinates, Hebrew/English names, countdown\n\n### GulfWatch (Threat Alerts — UAE)\n\n- **Alerts API**: `https://gulfwatch-api.onrender.com/api`\n- **GeoJSON**: `https://gulfwatch.ai/data/uae-emirates.geojson`\n- **Auth**: None required\n- **Data**: Active emirate-level threat alerts with severity, type, description\n\n### Cloudflare Radar (Cyber)\n\n- **URL**: `https://api.cloudflare.com/client/v4/radar/*`\n- **Auth**: Bearer token (free)\n- **Endpoints**: 50+ metrics (DDoS, BGP, DNS, HTTP, email security)\n\n### RSS News Feeds (OSINT)\n\n- **Source**: `server/src/news_feeds.json` (56,934 lines)\n- **Coverage**: 190+ countries, categorized by defense, geopolitical, economic, local\n- **Fallback**: Reuters, AP, BBC for uncovered regions\n\n---\n\n## 🐳 Docker Deployment\n\n```bash\n# Build image\nnpm run docker:build\n\n# Run container\nnpm run docker:run\n\n# Or use docker-compose\nnpm run docker:compose:build\n```\n\n```yaml\nservices:\n  intelmap:\n    build: .\n    ports:\n      - '3001:3001'\n    env_file:\n      - ./server/.env\n    restart: unless-stopped\n```\n\n---\n\n## 🛠️ Available Scripts\n\n| Command                  | Description                                      |\n| ------------------------ | ------------------------------------------------ |\n| `npm run dev`            | Start both client and server in development mode |\n| `npm run install:all`    | Install all workspace dependencies               |\n| `npm run build`          | Build production bundles (client + server)       |\n| `npm run build:client`   | Build frontend only                              |\n| `npm run build:server`   | Build backend only                               |\n| `npm run start`          | Run production server (after building)           |\n| `npm run lint`           | Run ESLint on client                             |\n| `npm run format`         | Format all files with Prettier                   |\n| `npm run type-check`     | Run TypeScript type checking (no emit)           |\n| `npm run docker:build`   | Build Docker image                               |\n| `npm run docker:compose` | Start with docker-compose                        |\n\n---\n\n## 📁 Key Files\n\n| File                         | Description                             |\n| ---------------------------- | --------------------------------------- |\n| `package.json`               | Monorepo workspace configuration        |\n| `client/.env.example`        | Frontend environment template           |\n| `server/.env.example`        | Backend environment template            |\n| `server/src/news_feeds.json` | 56k+ line RSS database (190+ countries) |\n| `server/src/Data/gpsjam/`    | Daily GPS interference CSV datasets     |\n| `Dockerfile`                 | Multi-stage production build            |\n| `docker-compose.yml`         | Orchestration config                    |\n\n---\n\n## 🧪 Mock/Offline Mode\n\nTo run the flight module without API dependencies:\n\n1. Edit `client/.env`:\n   ```ini\n   VITE_FLIGHT_PROVIDER=mock\n   ```\n2. Restart dev server. Uses bundled `flights_sample.json` fixture.\n\n**Note:** Maritime, GPS jamming, alert, and cyber modules require live API connections.\n\n---\n\n## 🗺️ Map Projections\n\nToggle between two rendering modes via the **VIEW** button:\n\n- **Mercator** — Standard flat 2D projection (best for regional detail)\n- **Globe** — 3D spherical projection (best for global awareness)\n\n---\n\n## 🔒 Security Notes\n\n- **Never commit `.env` files** — use `.env.example` templates only\n- **All secrets are server-side** — the frontend receives pre-processed data only\n- **CORS**: Currently permissive for development; restrict in production\n- **Rate limiting**: Not yet implemented; add middleware before public deployment\n- **Rotate keys immediately** if you accidentally expose them in git history\n\nSee [SECURITY.md](SECURITY.md) for vulnerability reporting.\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n**Quick checklist:**\n\n- Fork the repo\n- Create a feature branch (`git checkout -b feature/amazing-feature`)\n- Commit changes (`git commit -m 'feat: add amazing feature'`)\n- Push to branch (`git push origin feature/amazing-feature`)\n- Open a Pull Request\n\n---\n\n## 📄 License\n\nThis project is licensed under the **MIT License** — see [LICENSE](LICENSE) for details.\n\n---\n\n## 🙏 Acknowledgments\n\n- **ADSB.lol** — Community-fed ADS-B network\n- **AISStream.io** — Free maritime AIS WebSocket API\n- **GPSJam.org** — Open GPS interference dataset\n- **Rocket Alert Live** — Real-time Israeli alert API\n- **GulfWatch** — UAE regional threat monitoring\n- **Cloudflare Radar** — Internet security metrics\n- **MapLibre GL JS** — Open-source map rendering\n\n---\n\n## 📞 Support\n\n- **Issues**: [GitHub Issues](https://github.com/Syntax-Error-1337/radar/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/Syntax-Error-1337/radar/discussions)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Built for the open-source OSINT community**\n\n[⬆ Back to top](#intelmap--geospatial-intelligence-platform)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyntax-error-1337%2Fradar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsyntax-error-1337%2Fradar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyntax-error-1337%2Fradar/lists"}