ForecastBlend is a meteorological intelligence and multi-model ensemble platform that ingests, normalizes, evaluates, and dynamically blends predictions from global numerical weather prediction (NWP) models and cutting-edge machine learning weather models. It answers three essential questions for operational meteorology and data-driven planning:
- What is the expected weather at my location?
- How do competing forecast models disagree, and what does their synthesized blend indicate?
- How reliable is the forecast, and what empirical verification evidence supports that assessment?
- Interactive Dashboard: https://forecast-blend.vercel.app
- Production Serverless API: https://forecast-blend.vercel.app/api/v1/forecast/PUN
- API Health Check: https://forecast-blend.vercel.app/api/v1/health
| Blended Forecast & Station Network | Multi-Model Horizon Comparison Matrix |
|---|---|
![]() |
![]() |
| Empirical Verification Lab & Skill Benchmarking |
|---|
![]() |
ForecastBlend is designed with a strict, decoupled layered architecture separating raw weather ingestion, empirical skill verification, mathematical blending, and presentation.
graph TD
subgraph Data Sources
GFS[NOAA GFS 0.25° NWP]
ECMWF[ECMWF IFS 0.1° NWP]
GC[DeepMind GraphCast AI 0.25°]
OBS[IMD & Synoptic In-situ Ground Observations]
end
subgraph Backend / Engine [Node.js & TypeScript Server]
STORE[In-Memory / FS Data Store]
SCORER[Skill Scorer: Rolling 14-Day MAE / RMSE]
WEIGHTS[Regularized Inverse-MAE Softmax + Laplace Shrinkage]
BLENDER[Ensemble Blender: Weighted Mean + Spread + Agreement]
EXTREME[IMD Calibrated Extreme Weather Detector]
INSIGHTS[Rule-Based Data-Grounded Meteorological Insights]
API[Express REST API /api/v1]
end
subgraph Frontend [React 18 + TypeScript + Vite]
NAV[Brand & UTC Pipeline Status]
LOC[Location Bar & Station Geographic Metadata]
HERO[Blended Forecast Hero + 95% Uncertainty Bounds]
MATRIX[Comparative Multi-Model Horizon Matrix + Chart]
VERIF[Verification Lab: Empirical Skill & Error Reduction]
PANEL[Weather Insights Panel with Evidence Citations]
ALERTS[IMD Risk Indicators & Safety Advisory Stream]
CONSOLE[7-Stage Pipeline Execution Console]
end
GFS --> STORE
ECMWF --> STORE
GC --> STORE
OBS --> STORE
STORE --> SCORER
SCORER --> WEIGHTS
WEIGHTS --> BLENDER
BLENDER --> EXTREME
BLENDER --> INSIGHTS
STORE --> API
BLENDER --> API
EXTREME --> API
INSIGHTS --> API
API --> NAV
API --> LOC
API --> HERO
API --> MATRIX
API --> VERIF
API --> PANEL
API --> ALERTS
API --> CONSOLE
Rather than treating model consensus as an unweighted average or fabricating confidence scores, ForecastBlend implements a regularized inverse-error weighting scheme grounded in statistical ensemble forecasting.
For each model
where
To prevent single-model overfitting and guard against division by zero, raw skill weights are computed using an epsilon regularizer
Normalized initial probabilities:
To prevent extreme weight swings when sample sizes are small or when an individual model experienced temporary anomalies, Laplace Shrinkage is applied toward a uniform uninformative prior (
where
Physical non-negativity constraints are strictly enforced:
Ensemble variance is calculated as the weighted sample dispersion:
The Model Agreement Index
-
$A \to 1.0$ : Tight clustering between global models (high consensus). -
$A \to 0.0$ : High inter-model divergence (synoptic uncertainty).
Assuming an asymptotic normal error distribution around the ensemble mean:
ForecastBlend detects significant regional weather risks using official thresholds defined by the India Meteorological Department (IMD):
| Category | Variable | Threshold | IMD Classification | Severity |
|---|---|---|---|---|
| Precipitation | rainfall_mm |
Heavy Rainfall | Watch | |
| Precipitation | rainfall_mm |
Very Heavy Rainfall | Warning | |
| Precipitation | rainfall_mm |
Extremely Heavy Rainfall | Severe | |
| Heatwave | temp_c |
Heatwave Advisory | Watch | |
| Heatwave | temp_c |
Heatwave Condition | Warning | |
| Heatwave | temp_c |
Severe Heatwave Condition | Severe | |
| Gale Wind | wind_kmh |
Gusty Wind Watch | Watch | |
| Gale Wind | wind_kmh |
Gale Wind Warning | Warning | |
| Gale Wind | wind_kmh |
Severe Gale Condition | Severe |
Safety Advisory Notice: Indicators generated by ForecastBlend are rule-based decision support tools derived from numerical model blending and do not constitute official civil protection warnings. Always consult the India Meteorological Department for official life and property safety directives.
ForecastBlend monitors high-impact synoptic regions in Western and Central India:
| Station Code | City | Latitude | Longitude | Elevation | Climate Regime |
|---|---|---|---|---|---|
| PUN | Pune | 18.5204° N | 73.8567° E | 560 m | Semi-arid / Western Ghats Rain Shadow |
| MUM | Mumbai | 19.0760° N | 72.8777° E | 14 m | Tropical Wet & Dry / Coastal Maritime |
| NGP | Nagpur | 21.1458° N | 79.0882° E | 310 m | Tropical Wet & Dry / Central Continental |
ForecastBlend combines three structurally distinct forecasting paradigms:
- NOAA Global Forecast System (GFS)
- Type: Hydrostatic Primitive Equation Global NWP
- Resolution: 0.25° (~22 km), 6-hour cycles (00Z, 06Z, 12Z, 18Z)
- Characteristics: High skill at extended horizons (+72h to +96h); known orographic precipitation dispersion bias in steep coastal topography.
- ECMWF Integrated Forecasting System (IFS)
- Type: Non-hydrostatic Spectral Global NWP
- Resolution: 0.1° (~9 km), 12-hour cycles (00Z, 12Z)
- Characteristics: Gold-standard synoptic precipitation accuracy; conservative peak temperature estimations in convective regimes.
- DeepMind GraphCast AI Weather Model
- Type: Autoregressive Graph Neural Network (GNN) on Icosahedral Mesh
- Resolution: 0.25° (~25 km), trained on 40 years of ECMWF ERA5 reanalysis
- Characteristics: Extremely fast inference (<60s); superior mid-troposphere temperature tracking; smoother spatial precipitation gradients.
All endpoints return JSON and include security headers (X-Content-Type-Options: nosniff, CORS enabled).
GET /api/v1/forecast/:region
{
"region": "PUN",
"issued_at": "2026-10-22T06:00:00.000Z",
"location": {
"code": "PUN",
"name": "Pune",
"latitude": 18.5204,
"longitude": 73.8567,
"elevationM": 560,
"climateZone": "Semi-arid / Western Ghats Rain Shadow"
},
"current_observation": {
"region": "PUN",
"observedAt": "2026-10-22T06:00:00.000Z",
"temp_c": 28.5,
"rainfall_mm": 0.0,
"wind_kmh": 14.0,
"source": "In-situ Synoptic Weather Station & Reanalysis Baseline"
},
"forecast": {
"rainfall_mm": {
"24": {
"value": 14.2,
"confidence": 0.782,
"spread": 2.14,
"uncertaintyRange": { "min": 10.01, "max": 18.39 },
"weights": { "NWP_GFS": 0.28, "NWP_ECMWF": 0.44, "AI_GRAPHCAST": 0.28 },
"models": { "NWP_GFS": 12.0, "NWP_ECMWF": 15.5, "AI_GRAPHCAST": 14.8 }
}
}
}
}| Method | Endpoint | Description |
|---|---|---|
GET |
/api/v1/locations |
Returns all active meteorological stations with geographic metadata |
GET |
/api/v1/alerts?region=MUM |
Returns active IMD-calibrated extreme weather indicators |
GET |
/api/v1/insights/:region |
Rule-based meteorological insights with supporting model evidence |
GET |
/api/v1/verification/:region |
Empirical 14-day rolling MAE/RMSE comparisons and error reduction % |
GET |
/api/v1/weights/:region |
Active regularized model weights across horizons and weather regimes |
GET |
/api/v1/health |
Service uptime, version, and operational health status |
- Node.js
18.xor20.x - npm
9.xor later
# Clone the repository
git clone https://github.com/Avadhut-Pawar31/ForecastBlend.git
cd ForecastBlend
# Install root, server, and dashboard dependencies
npm install
# Copy environment example
cp .env.example .env# Start both Dashboard (Vite) and Server (Express) concurrently:
npm run dev:server # Runs server on http://localhost:3001
npm run dev:dashboard # Runs dashboard on http://localhost:5173# Execute Vitest test suite (Algorithms, Extreme Detector, API Integration)
npm test
# Build production bundles (TypeScript compilation & Vite bundle)
npm run buildForecastBlend includes comprehensive unit and integration tests using Vitest:
- Weight Normalization & Shrinkage: Validates that regularized weights strictly sum to 1.0, favor lower MAE models, and apply Laplace shrinkage toward equal priors on missing model data.
- Blending & Bounds: Validates weighted expectations, non-negative precipitation clamping, ensemble standard deviations, and Model Agreement Indices.
- Extreme Event Detection: Tests IMD thresholds for heavy rainfall, heatwaves, and gale winds with citations.
- Data-Grounded Insights: Verifies evidence generation from multi-model forecasts.
- HTTP API Integration: Tests status codes (200, 400, 404), JSON schema compliance, and parameter validation.
Run tests anytime with:
npm --prefix server run testThis project is licensed under the MIT License — see the LICENSE file for details.
Developed with passion for open meteorological science and reliable weather intelligence.


