e8bb117568eb3e2074ecf084fc7c747c502e9a61
* Add Ecobee thermostat integration to dashboard - Server: PIN-based OAuth flow to authorize Ecobee access without exposing redirect URIs; tokens stored server-side and auto-refreshed - Server: /api/ecobee/config, /api/ecobee/auth/pin, /api/ecobee/auth/complete, /api/ecobee/data, /api/ecobee/runtime endpoints behind dashboard auth - Dashboard: Ecobee section card showing indoor temp, humidity, heat/cool setpoints, HVAC mode, equipment status badge, and per-sensor temperature readings from remote sensors - Dashboard: stacked bar chart of daily heating/cooling runtime hours for the past 7 days - Dashboard: Ecobee setup panel with API key entry and step-by-step PIN authorization flow Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YMhuFaecxraQzUPN4h9nsB * Replace ecobee API integration with HomeKit push endpoint Ecobee removed public developer API access, so pivot to HomeKit: - Add POST /api/homekit/push accepting thermostat data from iOS Shortcuts - Add GET /api/homekit/data returning latest reading to dashboard - Add GET /api/homekit/config and POST /api/homekit/config/regenerate for token management - Auto-generate auth token on first run, persist to data/homekit-config.json - Auto-convert Celsius→Fahrenheit if temp < 50 (HomeKit always returns Celsius) - Update dashboard section card to show temp, setpoints, humidity, mode, HVAC state - Replace ecobee settings panel with push URL, token copy, and Shortcut setup instructions - Remove runtime chart (not available without API access) --------- Co-authored-by: Claude <noreply@anthropic.com>
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;
}
}
Languages
JavaScript
55.3%
HTML
26.4%
CSS
18.3%