Skip to content

Dan512/noadsweather

Repository files navigation

NoAdsWeather

Weather without the clutter. noadsweather.com

A fast, ad-free, privacy-respecting weather website. No tracking, no cookies, no bloat. Just weather.

Why?

Weather websites are some of the most bloated pages on the internet. A typical weather page loads 6-12MB of JavaScript, tracking scripts, and ads just to show you the temperature. NoAdsWeather loads in under 530KB total — that's 10-20x lighter.

Features

  • Current conditions with feels-like, humidity, dew point, wind, gusts, UV index, and air quality
  • Pollen data (Google Pollen API for non-European locations, Open-Meteo for Europe)
  • 24-hour hourly forecast
  • 10-day forecast with interactive charts (temperature, humidity/cloud/pressure, precipitation, wind)
  • Animated weather radar with play/pause and speed controls
  • Sunrise, sunset, solar noon, moonrise, moonset, and moon phase
  • NWS severe weather alerts (US)
  • Weather summary sentence generated from forecast data
  • Dark mode (auto-detects OS preference, manual toggle)
  • Fahrenheit/Celsius and 12H/24H toggles (auto-detects from country)
  • Customizable layout — drag to reorder sections, resize, minimize, or hide any section
  • Bookmarkable URLs with direct lat/lon for instant loading
  • Installable as a PWA (Progressive Web App)
  • International postal code support (60+ countries)
  • Zero cookies, zero tracking, zero analytics

Tech Stack

Running Locally

No build step is required to serve the site. Just serve the files:

npx http-server . -p 8080

Then open http://localhost:8080.

Regenerating city pages

There is one optional build script: scripts/build-cities.js. It regenerates the 77 static city pages under cities/ plus sitemap.xml. You only need to re-run it when you edit either:

  • scripts/cities.json (the city list), or
  • the city-page i18n keys in js/i18n.js (cityPageTitle, cityPageSeoBlurb, cityPageHideBlurb).
node scripts/build-cities.js

The generated cities/ directory is committed to the repo so GitHub Pages can serve it directly.

Project Structure

index.html          — Single-page app entry; also the template used by build-cities.js
privacy.html        — Standalone privacy page
about/              — Standalone about page
css/style.css       — All styles with CSS custom properties for theming
js/app.js           — All application logic (~3362 lines)
js/i18n.js          — TRANSLATIONS object (15 languages)
fonts/, img/        — Static assets
scripts/            — build-cities.js + cities.json (generates city pages + sitemap.xml)
cities/             — 77 generated city pages (committed)
alerts-proxy/       — Cloud Run proxy for NWS alerts
pollen-proxy/       — Cloud Run proxy for Google Pollen API
robots.txt, sitemap.xml
CNAME               — Custom domain config for GitHub Pages
LICENSE             — MIT License

How It Works

  1. User searches a city name or postal code
  2. Geocoding converts the search to lat/lon coordinates (Open-Meteo for cities, Zippopotam for postal codes)
  3. All weather APIs are called in parallel from the browser — no backend needed
  4. Sections render progressively as each API responds
  5. User preferences (layout, units, theme) are saved in localStorage
  6. Pollen data is fetched on-demand through a Cloud Run proxy to keep the API key private

Cost

  • Domain: ~$10/year
  • Hosting: Free (GitHub Pages)
  • APIs: Free (Open-Meteo, RainViewer, NWS, Zippopotam)
  • Pollen proxy: Free tier (Google Cloud Run)
  • Total: ~$10/year

License

MIT — see LICENSE

Support

If you find this useful, consider supporting us on Ko-fi.

About

Weather site - with no ads. What a concept.

Topics

Resources

License

Contributing

Stars

9 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors