BetterFrame/kiosk
Mitchell R 1c0fe02fcf feat: layout switch push + idle/sleep timer + offline bundle cache
Layout switch push:
- POST /admin/kiosks/:id/layout/:layoutId — coordinator sends
  {type:"layout-switch", layout_id} via WS
- Kiosk renders specified layout from cached bundle
- KioskEditPage adds Switch Layout dropdown + button

Idle/sleep timer:
- thread_local LAST_ACTIVITY + IS_ASLEEP + CURRENT_LAYOUT_ID
- mark_activity() on render/switch/wake; wakes if asleep
- glib timeout_add_local every 1s checks elapsed:
  - elapsed >= idle_timeout AND not on default + resets_idle_timer
    → switch to default layout
  - elapsed >= sleep_timeout AND !asleep → cec::standby()
- Display idle/sleep timeouts from bundle.display

Offline cache:
- server::save_bundle → ~/.betterframe-kiosk/bundle.json
- server::load_cached_bundle on offline boot
- fetch_bundle no longer panics; returns Option
- 30s retry loop until server reachable
- Reload-bundle gracefully handles fetch failures
2026-05-13 01:00:11 +02:00
..
src feat: layout switch push + idle/sleep timer + offline bundle cache 2026-05-13 01:00:11 +02:00
Cargo.lock refactor: Nx-Witness layout builder + drop regions/is_default 2026-05-10 21:55:19 +02:00
Cargo.toml feat: WebKit for web/html cells + display auto-discovery via heartbeat 2026-05-10 22:39:53 +02:00
prototype.sh fix(deploy): require proxied local services 2026-05-11 09:51:00 +02:00