Commit Graph

32 Commits

Author SHA1 Message Date
201e5441cb feat: add OWM alerts, UV index support, and provider info UI
- Parse OWM One Call 3.0 weather alerts and map to Warning structs
- Map hourly UVI from OWM response to HourlyForecast.UVIndex
- Add severity helper mapping OWM alert tags to severity levels
- Extract UVIndex through compute layer to timeline slots
- Smart warnings: use provider-supplied alerts, fall back to DWD
- Show UV index in dashboard timeline tooltips
- Add provider description below forecast dropdown with i18n
2026-02-11 01:56:09 +01:00
41649380e2 fix: clarify OpenWeatherMap requires One Call 3.0 subscription 2026-02-11 01:30:27 +01:00
a3d2867b40 feat: fix favicon embed, add impress and privacy pages
Include favicon.svg in go:embed directive to fix 404 in production.
Add legal notice (impress) and privacy policy pages with full EN/DE
translations, route handlers, and footer links.
2026-02-11 01:09:56 +01:00
b30c0b5f36 feat: add OpenWeatherMap provider, retry transport, and forecast config UI
Add OpenWeatherMap One Call API 3.0 as alternative weather provider with
configurable selection in the Forecast tab. Includes server-side retry
transport with exponential backoff for all weather providers, structured
error responses with type classification, auto-fetch on stale dashboard
data, and improved error UX with specific messages.
2026-02-11 01:02:48 +01:00
4a119a6dde feat: add docker-build, docker-push, and docker-deploy commands to Makefile 2026-02-11 00:59:57 +01:00
cce3644b90 fix: use step=any on AC form fields to accept bettervent values 2026-02-11 00:39:55 +01:00
a334dd57a0 feat: integrate bettervent.me device database and add BTU/kW unit switcher
Add bettervent.me provider with lazy-cached device list (~6,700 Eurovent-certified
heat pumps), search API endpoint, device search UI with auto-populate, BTU/kW unit
switcher for European users, and extended AC fields (SEER, SCOP, COP, TOL, Tbiv,
refrigerant). Closes #2.
2026-02-11 00:31:39 +01:00
21154d5d7f feat: add heating support with heat pump modeling and cold risk detection
Model heating mode when rooms have net heat loss in cold weather (<10°C).
AC units with heat pump capability (canHeat) provide heating capacity,
with the same 20% headroom threshold used for cooling. Adds cold risk
detection, cold-weather actions, and full frontend support including
heating mode timeline colors, room budget heating display, and i18n.
2026-02-11 00:00:43 +01:00
94798631bc refactor: replace innerHTML with HTML template cloning and event delegation
Move dynamic HTML generation from JS template literals to native
<template> elements rendered server-side with i18n. JS now clones
templates, fills data-slot attributes via textContent (auto-escaped),
and uses event delegation instead of inline onclick/window globals.
2026-02-10 23:17:31 +01:00
0bc73dbef7 chore: update .gitignore to exclude IDE and Playwright files 2026-02-10 22:17:17 +01:00
71bbc3e83e feat: add Docker build, tag, push, and deploy commands to Makefile 2026-02-10 22:16:57 +01:00
961fbed6c3 feat(helm): update image registry, enable HTTPRoute, autoscaling, and refactor Dockerfile
- Use custom image registry (somegit.dev) with pull secrets and "latest" tag.
- Enable HTTPRoute with hostname "heatguard.dev" and TLS via cert-manager.
- Activate autoscaling with min/max replicas and resource metrics.
- Switch Dockerfile to Alpine runtime with nonroot user.
- Add helm directory to .dockerignore.
2026-02-10 20:25:34 +01:00
e9703e49b9 feat: add SVG favicon with brand thermometer icon 2026-02-10 19:16:40 +01:00
88813c8d80 feat(helm): replace Ingress with Gateway API HTTPRoute for ITSH Cloud
- Replace Ingress template with HTTPRoute (gateway.networking.k8s.io/v1)
- Add cert-manager.io/cluster-issuer annotation for auto TLS
- Add imagePullSecrets, env, envFrom support to deployment
- Update NOTES.txt with ITSH Cloud DNS records
2026-02-10 19:09:34 +01:00
667bc2e04a fix: add make to Dockerfile build dependencies 2026-02-10 05:14:25 +01:00
e2da14a604 fix: improve CLI help output with usage header and examples 2026-02-10 05:12:46 +01:00
528a249009 feat: add AI configuration step to guide
Insert step 5 (Configure AI) into the getting-started guide with
mentions of Setup > AI Summary, --llm-provider/--llm-model CLI flags,
and Ollama local support. Renumber Fetch Forecast to step 6 and View
Dashboard to step 7.
2026-02-10 05:07:14 +01:00
8c54852cae refactor: remove dead code, add LLM CLI flags, rewrite README
Remove unused crypto module, DataDir/DefaultDBPath (SQLite remnant),
and ListenAndServe (replaced by direct http.Server in main). Strip 17
unreferenced i18n keys from en/de translations. Add --llm-provider,
--llm-model, and --llm-endpoint CLI flags for runtime LLM override
without a config file. Rewrite README with correct Go 1.25 version,
shields, LLM providers table, Docker/Helm deployment docs. Fix
.gitignore pattern to not match cmd/heatguard/ directory.
2026-02-10 05:05:53 +01:00
d07f96fb91 chore: ignore heatguard binary in project root 2026-02-10 04:47:28 +01:00
00c8b0f18c feat: add Kubernetes deployment support with Helm chart
Add health endpoints (/healthz, /readyz), graceful shutdown with
SIGTERM/SIGINT handling, multi-stage Dockerfile with distroless
runtime, and a full Helm chart with security-hardened defaults.
2026-02-10 04:45:14 +01:00
80466464e6 feat: add timeline current-hour highlight and comfort risk card
Pass profile timezone through DashboardData so the frontend can
compute the current hour and highlight it on the heatmap (white ring +
orange triangle marker). Only activates when the dashboard date matches
today in the profile timezone.

In cold weather (peak < 22°C, risk low), the risk card now shows a
teal "Comfortable" presentation with a checkmark icon instead of the
generic green "Low" shield.
2026-02-10 04:36:04 +01:00
84d645ff21 feat: fix cold-weather thermal logic, add comfort mode, and dashboard forecast refresh
- Fix ComputeRoomBudget: no-AC rooms check if open-window ventilation
  can offset gains instead of defaulting to Overloaded. Net-cooling
  rooms are now Comfortable; ventilation-solvable rooms are Marginal.
- Add "comfort" cool mode for hours where outdoor is >5°C below indoor
  and budget is not overloaded (winter/cold scenarios).
- Reorder determineCoolMode: sealed now before overloaded, fixing
  humid+cold+no-AC giving "overloaded" instead of "sealed".
- Update LLM prompts: document comfort coolMode, add cold-weather
  guidance for summary and actions generation.
- Add dashboard forecast refresh button: fetches fresh forecast +
  warnings, then re-runs compute and LLM pipelines.
- Extract forecast fetch into shared fetchForecastForProfile() in db.js,
  deduplicating logic between setup.js and dashboard.js.
- Add indoor humidity support, pressure display, and cool mode sealed
  integration test.
2026-02-10 04:26:53 +01:00
5e6696aa42 feat: add AI-powered actions endpoint and timeline annotations
Add LLM actions endpoint that generates hour-specific heat
management recommendations. Replace static action engine with
AI-driven approach. Add cool mode logic (ventilate/ac/overloaded),
indoor temperature tracking, and timeline legend with annotations.
2026-02-10 03:54:09 +01:00
277d1c949f feat: improve setup page UX with SVG icons, edit state, and global max-width
Replace Unicode edit/delete characters with SVG pencil/trash icon buttons,
add edit mode visual feedback (orange ring + Save/Cancel buttons), group
action buttons consistently across all entity types, add hover effects to
list items, and constrain all pages to 1800px max-width via layout template.
2026-02-09 15:24:51 +01:00
c23ac1611a feat: gate AI actions on heat threshold and restructure dashboard layout
Skip LLM actions call when peakTempC < 22°C and risk is low. Add
low-risk guidance to both summary and actions system prompts so the
LLM returns appropriate responses on mild days. Restructure dashboard
into a top-level two-column grid with sidebar beside all main content
and remove max-w-7xl cap for full-width layout.
2026-02-09 15:14:01 +01:00
f7f77f45b4 feat: replace SVG timeline with heatmap grid
Replace the 720x200 SVG line chart and separate cooling strip with a
compact two-row heatmap: 24 colored temp cells (48px tall) with a thin
cooling mode row below. Hour labels every 3h, tooltip on hover/click,
responsive mobile layout (temp values hidden <640px, color-only).
2026-02-09 15:01:09 +01:00
2cc08beb30 docs: add README with deploy instructions 2026-02-09 13:35:25 +01:00
6a5fe64c88 chore: add GPL-3.0 license 2026-02-09 13:31:45 +01:00
d5452409b6 feat: rewrite to stateless web app with IndexedDB frontend
Replace CLI + SQLite architecture with a Go web server + vanilla JS
frontend using IndexedDB for all client-side data storage.

- Remove: cli, store, report, static packages
- Add: compute engine (BuildDashboard), server package, web UI
- Add: setup page with CRUD for profiles, rooms, devices, occupants, AC
- Add: dashboard with SVG temperature timeline, risk analysis, care checklist
- Add: i18n support (English/German) with server-side Go templates
- Add: LLM provider selection UI with client-side API key storage
- Add: per-room indoor temperature, edit buttons, language-aware AI summary
2026-02-09 13:31:38 +01:00
a89720fded feat: add LLM provider settings to web UI with encrypted API key storage
Add full LLM configuration section to the setup page with provider
dropdown, model/API key fields for cloud providers (Anthropic, OpenAI,
Gemini), and endpoint/model fields for Ollama. API keys are encrypted
with AES-256-GCM and stored in the database.
2026-02-09 11:41:16 +01:00
c63e70cab0 feat: add Google Gemini LLM provider
Add Gemini provider using the generativelanguage.googleapis.com API
with systemInstruction support. Activated via --llm gemini with
GEMINI_API_KEY env var. Default model: gemini-2.0-flash.
2026-02-09 10:50:48 +01:00
1c9db02334 feat: add web UI with full CRUD setup page
Add server-side rendered setup UI accessible via `heatwave web`.
The dashboard is now re-rendered per request and includes a nav bar
linking to the new /setup page. Setup provides full CRUD for profiles,
rooms, devices, occupants, AC units (with room assignment), scenario
toggles, and forecast fetching — all via POST/redirect/GET forms.

- Add ShowNav field to DashboardData for conditional nav bar
- Extract fetchForecastForProfile() for reuse by web handler
- Create setup.html.tmpl with Tailwind-styled entity sections
- Create web_handlers.go with 15 route handlers and flash cookies
- Switch web.go from pre-rendered to per-request dashboard rendering
- Graceful dashboard fallback when no forecast data exists
2026-02-09 10:39:00 +01:00