• v2.1.1 b811da3cbe

    v2.1.1 Stable

    zaph0d released this 2026-04-01 04:27:19 +02:00 | 6 commits to main since this release

    📅 Originally published on GitHub: Wed, 01 Apr 2026 02:27:27 GMT
    🏷️ Git tag created: Wed, 01 Apr 2026 02:27:19 GMT

    Full Changelog: https://github.com/niels-emmer/wall-cast/compare/v2.1.0...v2.1.1

    Downloads
  • v2.1.0 fdb9edf3db

    v2.1.0 Stable

    zaph0d released this 2026-03-29 17:54:26 +02:00 | 12 commits to main since this release

    📅 Originally published on GitHub: Sun, 29 Mar 2026 15:54:32 GMT
    🏷️ Git tag created: Sun, 29 Mar 2026 15:54:26 GMT

    Full Changelog: https://github.com/niels-emmer/wall-cast/compare/v2.0.0...v2.1.0

    Downloads
  • v2.0.0 203f918dd5

    v2.0.0 Stable

    zaph0d released this 2026-03-28 18:55:09 +01:00 | 26 commits to main since this release

    📅 Originally published on GitHub: Sat, 28 Mar 2026 17:55:38 GMT
    🏷️ Git tag created: Sat, 28 Mar 2026 17:55:09 GMT

    New widgets

    • Air quality — European AQI, PM2.5/PM10/NO₂/O₃, 4-day pollen forecast (birch, grass, alder, mugwort, ragweed) via open-meteo CAMS — no API key
    • Market — crypto Fear & Greed gauge, four stock indices (S&P 500, Dow Jones, AEX, FTSE 100), five stock tickers, top 10 crypto coins — no API key
    • P2000 emergency alerts — Dutch emergency services paging feed, filtered by region and discipline; auto-skips in rotator when quiet; optional news ticker injection

    Notifications: ntfy + Matrix

    • Matrix channel — assistant notifications dispatched in parallel to ntfy and Matrix; bot setup via create-account, room invite, and one-time join; MATRIX_TOKEN in .env only
    • Config restructurednotify.ntfy.{enabled,url} and notify.matrix.{enabled,homeserver,room_id}; auto-migrated from old ntfy_url/ntfy_topic format on startup
    • Per-person Matrix room — each person can configure matrix_room_id alongside ntfy_topic
    • ntfy/Matrix reachability probes — landing page STATUS section shows live ok/offline/not-configured for both notification servers

    Assistant improvements

    • 10 new rule variables — weather (temperature, wind speed), rain (mm_now, minutes_until_rain), polestar (battery_pct, range_km, is_plugged_in), air quality (AQI, pollen_birch, pollen_grass)
    • Rules system rewrite — structured Rule list replaces flat dict; condition builder modal in admin panel; per-family and per-person rules; auto-migrated from old format
    • Per-person ntfy topics — each person has their own topic; global rules fan out to all personal topics
    • Personalised RSS feeds — per-person feeds appear only on screens they're assigned to

    Casting & device management

    • Apple TV pairing — full AirPlay pairing flow from the admin panel
    • Android TV Remote — wake and standby screens from the landing page power button
    • Auto-recover from IP changes — caster finds devices by name after a DHCP change
    • Post-cast verification — silently failed casts (e.g. rejected by Google Home after a voice command) are detected and retried
    • Per-screen power toggle — landing page has a power button per screen
    • Screen diagnostics — per-screen status, last log entries, and manual re-cast button in admin panel

    Landing page & admin panel

    • System STATUS section — services (backend/caster/scanner/assistant/ntfy/matrix) + all 13 API data sources with last-fetched age; replaces the old two binary pills
    • Cache health registry — all 13 API routers report per-fetch health; status endpoint aggregates
    • Rotator fade speed — configurable via admin panel (Slow → Fast); applies globally
    • Info widget editor — admin panel can configure info widget slots in the rotator

    Fixes

    • Caster recast loop — cooldown guard + reachability-based trust
    • Warnings expiry — cleared immediately on cache hits
    • Bus 500 errors — asyncio.CancelledError handling + 20s timeout
    • Rain source — switched from buienalarm.nl (blocked) to open-meteo minutely_15
    • Market quotes — switched from Yahoo Finance (blocked) to Stooq CSV
    • Weather icons — Meteocons SVGs replace broken emoji on Chromecast
    • On-route traffic filter — corridor proximity instead of road name only
    • Calendar — finished events hidden; colours resolved; 403 warnings suppressed
    • nginx — index.html never cached

    Upgrading

    git pull && docker compose up --build -d
    

    Config auto-migrates on startup — no manual changes needed. If you had notify.ntfy_url / notify.ntfy_topic in your YAML, the migration converts them to notify.ntfy.{enabled,url} automatically.

    If you're adding Matrix: set MATRIX_TOKEN=syt_... in .env, see docs/assistant.md for the full bot setup walkthrough.

    Downloads
  • v1.8.0 38f97de73e

    zaph0d released this 2026-03-28 14:44:44 +01:00 | 43 commits to main since this release

    📅 Originally published on GitHub: Sat, 28 Mar 2026 13:45:15 GMT
    🏷️ Git tag created: Sat, 28 Mar 2026 13:44:44 GMT

    What's new

    Market widget (type: market)

    A new large widget giving a live snapshot of financial markets:

    • Fear & Greed gauge — gradient bar (red → yellow → green) with needle showing current crypto sentiment score (0–100) and classification label
    • Indices — S&P 500, NASDAQ, AEX, FTSE with price + % change
    • Stocks — AAPL, MSFT, NVDA, TSLA, AMZN with price + % change
    • Top 10 crypto — ranked by market cap, with price and 24h % change

    All data sources are free with no API key required: alternative.me/fng (Fear & Greed), Yahoo Finance (stocks/indices), CoinGecko (crypto). Cache TTL: 5 minutes. Graceful degradation if any source is unavailable.

    Admin panel

    Selectable from the rotator slot picker: Add slot → Market. No per-widget config needed.

    Deploy

    git pull && docker compose up --build -d
    
    Downloads
  • v1.7.0 c97ec5387b

    zaph0d released this 2026-03-28 08:06:30 +01:00 | 45 commits to main since this release

    📅 Originally published on GitHub: Sat, 28 Mar 2026 07:07:08 GMT
    🏷️ Git tag created: Sat, 28 Mar 2026 07:06:30 GMT

    What's new in v1.7.0

    Bug fixes

    Caster — stop rapid recast loop on Cast OS devices
    Google Nest Hub and regular Chromecast never report DashCast/PLAYING in catt status output — they only return Volume: X. is_casting() now returns (confirmed, reachable). Within the cooldown window, a reachable device is trusted as still casting; the cooldown is only reset (triggering a recast) if the device is completely unreachable. This eliminates the cast_failed loop that previously appeared every 10 s on both screens.

    Warnings widget — clear expired warnings immediately
    The backend now calls _filter_expired() on every cache hit, so a warning that expires mid-cycle is dropped right away — not at the next 15-minute fetch. The RotatorWidget also gained a bidirectional onUnskip mechanism so the WarningsWidget can re-enter the rotation automatically when new warnings arrive, not just skip when there are none.

    Assistant — polestar.battery_pct rule and cache-key crash

    • Added the missing polestar.battery_pct handler (assistant/rules/polestar.py). Sends a notification when battery drops to a configured threshold.
    • Fixed ValueError: too many values to unpack in engine.py — the dedup cache key was converting (key, value) tuples to strings before sorting, making the subsequent unpack fail.

    ntfy — Unicode characters in notification titles
    Percent-encode the Title HTTP header before sending so characters outside Latin-1 (e.g. em-dash) no longer crash the notifier with UnicodeEncodeError.

    Features

    Landing page — power on/off button per screen
    Each screen card now has a power button. Amber = casting active, blue = paused. Calls PATCH /api/admin/config to toggle casting_active for that screen.

    Landing page — layout and style polish

    • Status pills (BACKEND OK, CASTER) moved from the Status card into the System card.
    • "Status" card renamed to "Live server logs".
    • Casting and power buttons are now equal width within each card.
    • Screen grid uses CSS grid (auto-fill, 190px) for consistent alignment.

    Admin panel — info widget editor in rotator slots
    Adding an info slot in a rotator now shows a full editor: title input and a key/value pair list with add/remove controls.

    Docs

    • docs/config-reference.md: added Screen casting fields table documenting casting_active, chromecast_ip, chromecast_name, chromecast_mac, and enabled.
    • docs/memory/records/decision-log.md: entries for all v1.7.0 architectural decisions.

    Generated with Claude Code

    Downloads
  • v1.6.0 476a16f567

    v1.6.0 Stable

    zaph0d released this 2026-03-26 19:16:18 +01:00 | 62 commits to main since this release

    📅 Originally published on GitHub: Thu, 26 Mar 2026 18:16:41 GMT
    🏷️ Git tag created: Thu, 26 Mar 2026 18:16:18 GMT

    What's new

    Features

    • Per-person ntfy topics — each person can have their own notification topic; global rules fan out to all personal topics
    • 10 new assistant rule variables — weather, rain, Polestar, air quality, and bus data now accessible in rules
    • Traffic jam total length — total km of jams shown right-aligned in the traffic widget header
    • Post-cast verification — caster detects silent cast failures (e.g. Google Home Hub after a voice command) and retries automatically
    • Landing page casting status — casting status line visible on the overview page

    Fixes

    • Rain data source — switched from buienalarm to open-meteo minutely_15 (more reliable, better coverage)
    • i18n — "piek" (rain peak) and calendar day/month abbreviations now respect the configured language; no more hardcoded Dutch in English mode
    • Calendar — hides already-finished timed events from today's list; suppresses spurious 403 log noise
    • Traffic — on-route jam filtering by route corridor; total km counts correctly; zero-length jams hidden
    • Admin panel — Chromecast IP pre-fills immediately after scan pick; test notification result shown inline; assistant descriptions clarified
    • nginxindex.html never cached; correct cache headers on SVG assets

    Developer experience

    • Claude Code hooks — five quality-guard hooks ship with the repo in .claude/settings.json:
      • Tailwind layout class guard (catches the silent prod-build breakage)
      • Translation parity check (nl/en keys must match)
      • TypeScript type check (async, wakes model on errors)
      • Docker Compose validation
      • Widget registry check
    • Docs overhauladding-a-widget.md now includes translations step and pre-commit checklist; multi-user.md clarified (phases 1–3 complete); future-ideas.md updated; new docs/claude-hooks.md explains the hooks system for forkers
    • Icons — replaced hand-drawn SVGs with Meteocons + Phosphor icons

    Updating

    git pull && docker compose up --build -d
    

    Your config/wall-cast.yaml is untouched — new config keys are added automatically with defaults on first run.

    If you use Claude Code on a fork: open /hooks once to load the new .claude/settings.json quality guards.

    Downloads
  • v1.5.0 f8c49fc86c

    v1.5.0 Stable

    zaph0d released this 2026-03-23 13:01:50 +01:00 | 103 commits to main since this release

    📅 Originally published on GitHub: Mon, 23 Mar 2026 12:01:57 GMT
    🏷️ Git tag created: Mon, 23 Mar 2026 12:01:50 GMT

    What's Changed

    Full Changelog: https://github.com/niels-emmer/wall-cast/compare/v1.4.0...v1.5.0

    Downloads
  • v1.4.0 8509867913

    v1.4.0 Stable

    zaph0d released this 2026-03-23 07:02:02 +01:00 | 114 commits to main since this release

    📅 Originally published on GitHub: Mon, 23 Mar 2026 06:02:18 GMT
    🏷️ Git tag created: Mon, 23 Mar 2026 06:02:02 GMT

    What's new

    Features

    • Admin → Screens: diagnostics box per screen — live status, caster & backend logs, and a "Re-cast now" button
    • Admin → Screens: chromecast_name field; auto-filled when selecting a device from the scanner
    • Caster: auto-recovery from dynamic IPs — when casting fails, the scanner sidecar searches the full /24 subnet for the device's new IP and updates the config automatically
    • Landing page: credit line added ("Prompts: 100% human · Writing & coding: 100% Claude"); version badge links to releases

    Fixes

    • Calendar: service account now auto-subscribes to configured calendars, resolving color lookup errors in the console
    • Weather: replaced emoji with SVG icons to fix rendering on Chromecast (Chromium)
    • Network widget: LAN host count font size matched to other values in the widget
    • Polestar widget: added spacing between the battery bar and the charging status row
    • Scanner: probes the full /24 subnet instead of only ARP cache entries, so rebooted devices with new IPs are found reliably

    Docs & admin

    • Admin panel General tab sections reordered
    • Added prompt-a-feature guide (docs/prompt-a-feature.md), linked from README
    Downloads
  • v1.3.0 4375936830

    v1.3.0 Stable

    zaph0d released this 2026-03-23 04:50:24 +01:00 | 127 commits to main since this release

    📅 Originally published on GitHub: Mon, 23 Mar 2026 03:50:33 GMT
    🏷️ Git tag created: Mon, 23 Mar 2026 03:50:24 GMT

    What's Changed

    Full Changelog: https://github.com/niels-emmer/wall-cast/compare/v1.2.0...v1.3.0

    Downloads
  • v1.2.0 f59cd923f7

    zaph0d released this 2026-03-22 22:09:25 +01:00 | 129 commits to main since this release

    📅 Originally published on GitHub: Mon, 23 Mar 2026 03:16:28 GMT
    🏷️ Git tag created: Sun, 22 Mar 2026 21:09:25 GMT

    What's new

    Assistant sidecar

    A new standalone Docker service that watches your data and pushes proactive notifications to your phone via ntfy.

    Rules:

    • Garbage — reminder when collection is within 18 h (configurable)
    • Calendar — reminder N minutes before timed events (configurable)
    • Bus — delay / cancellation alert, but only when you have an upcoming calendar event — avoids spam on days you're not travelling
    • Traffic — commute delay alert when travel time exceeds a configurable threshold above normal
    • Weather — orange and red KNMI warnings via MeteoAlarm

    Features:

    • Per-person ntfy topics — alerts go to the right phone
    • Optional AI formatting via Ollama (self-hosted) or OpenAI — rewrites template messages into natural language and cross-correlates related facts
    • Deduplication state persisted to /config/assistant-state.json — each notification fires once per event, not once per polling cycle
    • Fully opt-in — remove shared.assistant from the YAML to disable without restarting

    Assistant tab in admin panel

    New Assistant tab in /#admin covers all assistant settings: enable toggle, check interval, ntfy server/topic, AI provider and model, and all four rule thresholds. No manual YAML editing required.

    Upgrade

    git pull
    docker compose up --build -d
    

    Then open /#adminAssistant to enable notifications.

    Downloads