Weather Service AI
100% serverless global weather intelligence with continuous ETL, interactive maps, and Machine Learning forecasts.
Zero-cost full-stack weather service ingesting live telemetry across 160+ global cities via OpenWeatherMap API. Combines partitioned CSV historical storage, daily Scikit-Learn Linear Regression model retraining, and interactive frontend visualizations with time-series charts (Chart.js) and geospatial maps (Leaflet).
System Objectives
Design and implement a zero-cost 100% serverless global weather data harvesting and prediction architecture.
Build a daily batch ETL pipeline using GitHub Actions eliminating the need for dedicated servers or traditional SQL databases.
Implement deterministic Machine Learning prediction models (Scikit-Learn) to benchmark accuracy against official OpenWeatherMap 5-day forecasts.
Deliver a rich, fluid, and multilingual user experience with Leaflet maps, instant city filtering, and client-side CSV streaming via PapaParse.
Key Capabilities & Modules
Automated ETL Pipeline: GitHub Actions triggers the Python data harvester 3 times daily (06:00, 14:00, 22:00 UTC) unattended.
Machine Learning Forecasting: 3 Linear Regression models trained on lagged metrics (lag-1) and seasonal day-of-year features to predict tomorrow's temps.
Geospatial Interactive Map: real-time global weather stations and temperatures displayed via dynamic Leaflet.js markers.
Multivariate Time-Series: interactive Chart.js visualizations toggling temperature, humidity, wind, and cloudiness trends.
Client-Side Streaming via PapaParse: instant client-side parsing of partitioned historical CSV files directly in browser memory.
Bilingual UI & Netlify Deployment: dynamic language switching and transparent high-speed Netlify rewrite proxy in production.
Architecture & Design Specifications
Decoupled 3-tier architecture: ETL automation in GitHub Actions executing read_weather.py against OpenWeatherMap v2.5, partitioned static persistence in CSV and JSON files pushed to the repository, and monolithic SPA frontend hosted on Netlify with transparent 200! rewrite proxy routing from Datalaria.
🔍 Click diagram to enlarge to fullscreen
Invariant Architectural Principles:
- 100% Serverless Philosophy: zero idle compute costs via free scheduled cron workflows and static CDN hosting.
- Lightweight and portable persistence: each city is an isolated flat CSV file structured with 15 normalized meteorological variables.
- Deterministic quantitative modeling: linear regression trains strictly on observed empirical records without LLM API calls.
Technology Stack
FRONTEND
BACKEND
DEVOPS
APIS
Reference Articles & Architecture Series
This application is fully documented in an engineering series published on the blog:
Weather Service Project (Part 1): Building the Data Collector with Python and GitHub Actions or Netlify
We kick off our weather project by building the engine: a Python script that talks to an API, saves historical data, and runs …
Read full article →
Weather Service Project (Part 2): Building the Interactive Frontend with GitHub Pages or Netlify and JavaScript
After building the data collector, it’s time to visualize it! This post guides you through creating an interactive weather …
Read full article →
Weather Service Project (Part 3): Predicting the Future with AI and OpenWeatherMap
From data collection to dynamic dashboards, now it’s time to predict! This post explores integrating OpenWeatherMap’s 5-day …
Read full article →
Project Weather (Extras): Beyond AI - Building a Robust, User-Centric Dashboard
While Project Weather’s AI prediction model is a highlight, its true robustness lies in its meticulously designed infrastructure. …
Read full article →Evolutionary History & Versions (SemVer)
Formal record of releases, feature additions, and security patches:
Final release featuring Leaflet interactive map, multilingual support, and UX polish
- Geospatial map integration with Leaflet.js displaying interactive markers with live telemetry.
- Full bilingual support (ES/EN) with dynamic language toggle in the control bar.
- Advanced city search with Choices.js and coordinate normalization for over 160 global stations.
- Client-side CSV parsing optimization using asynchronous streaming in PapaParse.
Machine Learning module with Scikit-Learn and benchmarking vs OpenWeatherMap 5D
- Implementation of 3 Linear Regression models for 24-hour temperature forecasting (max, min, and mean).
- Feature engineering including lagged previous-day metrics (lag-1) and seasonal day-of-year indicators.
- Consolidated forecast export in predicciones.json and side-by-side comparative visualization in Chart.js.
Interactive frontend dashboard with Chart.js and PapaParse
- SPA frontend construction featuring multivariate dynamic charts in Chart.js.
- Direct client connection to partitioned historical CSV files per city.
Backend Python data harvester engine and automated pipeline with GitHub Actions
- Development of read_weather.py script connecting to OpenWeatherMap API v2.5.
- Historical dataset structuring partitioned in datos/ folders per city.
- Configuration of actualizar-clima.yml GitHub Actions workflow for 3x daily execution.