nmemmertandClaude b9e2b463f5 Add Ambient Weather personal station integration
* Add Ambient Weather personal station integration

Fetches live data from the user's Ambient Weather station via their
REST API and displays it as a "My Station" card in the conditions tab.

- server.js: add /api/ambient endpoint with 60s cache using
  AMBIENT_API_KEY and AMBIENT_APP_KEY env vars
- docker-compose.yml: expose AMBIENT_API_KEY/AMBIENT_APP_KEY env vars
- index.html: add collapsible "My Station" drawer to conditions tab
  showing temp, humidity, wind, gusts, daily rain, pressure, UV,
  solar radiation, and indoor readings
- app.js: add fetchAmbientStation() and renderAmbientStation(),
  auto-refresh every 60s, peek text summary in drawer header
- style.css: station drawer styles
- .gitignore: add .env so API keys stay off git

Co-Authored-By: Claude <noreply@anthropic.com>

* Move Ambient Weather keys to Settings panel

Users can now enter their API Key and Application Key directly in the
Settings tab under "Ambient Weather Station". Keys are saved to
localStorage and sent per-request to the server proxy.

- index.html: add API Key + Application Key inputs with Save button
- app.js: persist keys in localStorage, populate inputs on load,
  wire Save button (validates by testing the connection), pass keys
  as query params in fetchAmbientStation and its auto-refresh loop
- server.js: accept apiKey/appKey from query params with env var
  fallback; cache keyed per-user so multiple callers don't collide

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-08-19 11:35:16 -04:00

Weather App

Self-hosted weather app with animated radar. No API keys required.

Data Sources

  • Weather: Open-Meteo — free, no key
  • Radar: RainViewer — free, no key
  • Map tiles: CartoDB Dark Matter (free, no key)

Features

  • Current conditions (temp, feels-like, wind, humidity, pressure, visibility, UV, clouds)
  • 24-hour hourly forecast
  • 7-day daily forecast
  • Embedded radar panel on the conditions page
  • Full-page radar tab with animated past frames + nowcast
  • Animated radar timeline with play/pause controls
  • City search with autocomplete + GPS geolocation
  • Auto-pans radar to searched city
  • Dark mode (follows system preference)
  • Responsive / mobile-friendly

Quick Start

docker compose up -d

App runs at http://localhost:3000

Pull prebuilt image

docker pull ghcr.io/nmemmert/weather:latest
docker run -d --name weather-app -p 3000:3000 ghcr.io/nmemmert/weather:latest

If the package is private, log in first:

echo "<GITHUB_PAT>" | docker login ghcr.io -u nmemmert --password-stdin

Change the port

Edit docker-compose.yml:

ports:
  - "8080:3000"

Run without Docker

cd app
npm install
node server.js

Project structure

weather-app/
├── docker-compose.yml
└── app/
    ├── Dockerfile
    ├── package.json
    ├── server.js           # Express — proxies Open-Meteo, RainViewer
    └── public/
        ├── index.html
        ├── style.css
        └── app.js          # Weather render + dual Leaflet radar

Nginx reverse proxy

server {
    listen 80;
    server_name weather.yourdomain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
S
Description
No description provided
Readme
3.2 MiB
0 Stars 1 Watchers 0 Forks
Languages
JavaScript 55.3%
HTML 26.4%
CSS 18.3%