An accessible, full-stack dashboard for exploring recent NASA FIRMS satellite thermal detections across New York State, excluding the five New York City boroughs.
π Live: New York State Fires
Important
NASA FIRMS detections represent satellite-observed thermal anomalies, not confirmed wildfires or emergency alerts. They may reflect wildfires, prescribed burns, industrial activity, or other heat sources.
- π°οΈ NASA FIRMS integration β Retrieves recent satellite-observed thermal detections.
- π Rolling 48-hour window β Displays detections acquired during the previous 48 hours.
- πΊοΈ Interactive map β Explore detection locations throughout New York State.
- ποΈ New York City exclusion β Removes detections located within the five NYC boroughs.
- π₯ FRP severity levels β Categorizes detections using Fire Radiative Power:
- Moderate: 2β14.9 MW
- High: 15 MW or higher
- π Detection statistics β Displays total detections and the newest acquisition time.
- π Detailed map markers β View FRP, confidence, brightness, satellite, detection time, and coordinates.
- π Manual reload control β Request the latest stored detection data directly from the dashboard.
- π Light and dark modes β Includes an accessible theme toggle with saved preferences.
- π± Responsive layout β Designed for desktop, tablet, and mobile screens.
- βΏ Accessibility features β Includes keyboard-accessible controls, dialogs, map markers, skip links, status updates, and reduced-motion support.
- β‘ Browser caching β Uses a 15-minute cache to reduce unnecessary requests and provide a temporary fallback during API interruptions.
- βοΈ Vercel deployment β Hosts the frontend and backend with a scheduled data refresh.
The dashboard uses data from NASA's Fire Information for Resource Management System (FIRMS), which distributes satellite-observed fire and thermal-anomaly data from Earth-observing instruments.
The application currently retrieves near-real-time VIIRS data from:
- Suomi National Polar-orbiting Partnership (S-NPP)
- NOAA-20
- NOAA-21
Detections usually include:
- Latitude and longitude
- UTC acquisition date and time
- Satellite and instrument
- Brightness temperature
- Detection confidence
- Fire Radiative Power
- Day or night designation
The backend processes the FIRMS data before it appears on the map:
- Retrieves recent VIIRS detections from NASA FIRMS.
- Keeps detections located within the New York State boundary.
- Removes detections located within the five New York City boroughs.
- Excludes records below 2 MW Fire Radiative Power.
- Stores the processed records in PostgreSQL through Supabase.
- Returns detections from the latest 48-hour window to the frontend.
The backend is scheduled to retrieve updated FIRMS data once per day through Vercel Cron. The frontend requests the latest stored data when the dashboard opens and whenever the user selects Reload.
Note
Satellite observations may be delayed, duplicated, obscured by cloud cover, or caused by non-wildfire heat sources.
- React.js β Builds the dashboard interface.
- React Leaflet β Provides React components for the interactive map.
- Leaflet β Handles map controls, markers, popups, and geographic layers.
- OpenStreetMap and CARTO β Supply the map tile layers.
- Axios β Sends requests to the backend API.
- Create React App β Provides the frontend build and development environment.
- Node.js β Runs the backend application.
- Express.js β Handles API routes and local server requests.
- NASA FIRMS API β Supplies near-real-time satellite thermal-detection data.
- Turf.js β Performs geographic point-in-polygon filtering.
- Axios β Retrieves data from NASA FIRMS.
- Supabase PostgreSQL β Stores processed thermal-detection records.
- Vercel Serverless Functions β Hosts the production backend API.
- Vercel Cron β Schedules the daily FIRMS data refresh.
- Vercel β Hosts the production frontend.
NEWYORKSTATEFIRES/
βββ backend/
β βββ api/
β β βββ fires.js
β βββ database.js
β βββ fireService.js
β βββ newyork.geojson
β βββ newyorkcity.geojson
β βββ server.js
β βββ vercel.json
β βββ package.json
βββ frontend/
β βββ public/
β β βββ favicon.ico
β β βββ index.html
β β βββ logo192.png
β β βββ logo512.png
β β βββ manifest.json
β β βββ newyork.geojson
β β βββ newyorkcity.geojson
β β βββ robots.txt
β βββ src/
β β βββ components/
β β β βββ FireMap.js
β β β βββ high_fire.png
β β β βββ medium_fire.png
β β βββ App.css
β β βββ App.js
β β βββ App.test.js
β β βββ Index.css
β β βββ index.js
β β βββ setupTests.js
β βββ package.json
| βββ .env.example
βββ .env.example
βββ .gitignore
βββ index.js
βββ LICENSE
βββ package.json
βββ README.md
git clone https://github.com/jillmpla/newyorkstatefires.git
cd newyorkstatefiresInstall the root dependencies:
npm installInstall the backend and frontend dependencies:
npm run install:allYou can also install them individually:
npm install --prefix backend
npm install --prefix frontendCreate a root .env file based on .env.example:
DATABASE_URL=your_supabase_postgres_url
DATABASE_SSL=true
PG_POOL_MAX=1
NASA_API_KEY=your_nasa_firms_api_key
CRON_SECRET=your_long_random_secret
FIRMS_DAYS=2
FIRMS_PRODUCTS=VIIRS_SNPP_NRT,VIIRS_NOAA20_NRT,VIIRS_NOAA21_NRT
CORS_ORIGINS=http://localhost:3000Create frontend/.env based on frontend/.env.example:
REACT_APP_API_URL=http://localhost:5000
REACT_APP_CARTO_KEY=your_carto_basemap_keyNever commit real
.envfiles, database credentials, API keys, or cron secrets to GitHub.
From the repository root, run:
npm run backend:devThe backend normally runs at:
http://localhost:5000
In a second terminal, run:
npm run frontend:startThe frontend normally runs at:
http://localhost:3000
npm run check --prefix backendnpm run test:ci --prefix frontendnpm run build --prefix frontendThe optimized production files will be created in:
frontend/build
GET /api/fires?hours=48&limit=5000| Parameter | Description | Example |
|---|---|---|
hours |
Number of previous hours to include | 48 |
limit |
Maximum number of detections to return | 5000 |
{
"fires": [
{
"id": 26,
"latitude": 42.6526,
"longitude": -73.7562,
"brightness": 329.96,
"confidence": "n",
"acq_date": "2026-07-21",
"acq_time": "1834",
"satellite": "N",
"frp": 2.66,
"daynight": "N",
"acq_ts": "2026-07-21T18:34:00.000Z"
}
],
"count": 1,
"meta": {
"lookback_hours": 48,
"start_utc": "2026-07-19T18:56:00.000Z",
"end_utc": "2026-07-21T18:56:00.000Z"
}
}NASA FIRMS provides valuable near-real-time satellite observations, but several limitations should be considered:
- A thermal detection does not automatically indicate a wildfire.
- Clouds, smoke, terrain, and satellite timing can affect detection coverage.
- Multiple observations may represent the same thermal event.
- Industrial facilities and other persistent heat sources may produce detections.
- Small or short-lived fires may not be detected.
- Detection information may not appear immediately after an event begins.
For emergency information, consult official state and local public-safety agencies.
This project is licensed under the MIT License. See LICENSE for details.
If you find New York State Fires useful or interesting, consider giving the repository a star.