Files
jeremy 6e94a0c998 feat(hobbs-organizer): v1.4.0 per-TV morning routine (admin TVs tab) + photo app 1.2.1
- Admin TVs tab: wake time/days, YouTube Music playlist, Shield volume per TV,
  pushed via 5-min TV check-ins (/api/tv/config, /api/tv/report, LAN-only)
- com.dayline.photos 1.2.1: MorningActivity (screen on, volume, playlist),
  calendar alarm at wake time, Doze-safe chained check-ins
- Both TVs configured for 06:30 daily with the family playlist

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E9NnVEico3WvFxLyjy1iW3
2026-11-04 22:48:50 -06:00

68 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 1.4.0 (2026-11-04)
- Admin **TVs** tab: a morning routine for each TV.
- Wake time and days of the week.
- A YouTube Music playlist (paste any playlist link; the `si=` tracking part is dropped).
- The Shield's volume (0–100%).
- Settings are pushed to each TV on its next check-in (every 5 minutes). Each TV card shows when the TV has applied them and how its last morning routine went.
- TV endpoints, direct LAN only and refused through a proxy:
- `GET /api/tv/config?device=…` returns that TV's settings and records the check-in.
- `POST /api/tv/report` records the outcome of the morning routine.
- Check-in status lives in `/data/tv-status.json`, kept separate from the settings history.
- TVs that check in without being configured show up under "TVs found on the network" with an **Add** button.
- Settings history Restore leaves TV settings unchanged.
- Shield photo app `com.dayline.photos` 1.2.1 (versionCode 4) runs the routine:
- At the wake time minus 30 s, it turns the screen on (the TV follows over HDMI-CEC). After 5 s it sets the volume and starts the playlist in YouTube Music.
- At the wake time, a second alarm opens the calendar app (`com.dayline.tv`) on top while the music keeps playing (needs YouTube Music Premium).
- With music off, it opens the calendar straight away.
- It needs two one-time grants over ADB: `appops set com.dayline.photos SYSTEM_ALERT_WINDOW allow`, so it can open other apps from the background, and `dumpsys deviceidle whitelist +com.dayline.photos`, so check-ins keep network access while the Shield is in Doze.
# 1.3.0 (2026-11-04)
- `/photo/gallery`: a remote-driven photo grid for the Shield photo app's launcher tile.
- Arrows move between tiles, OK opens a photo full screen with a zoom-in, and ◀ ▶ browse while it is open.
- Back (or OK) returns to the grid, and a **Slideshow** button at the top starts `/photo`.
- Photos are shown newest first.
- After 10 minutes without a key press, the slideshow starts on its own. The app keeps the screen on, so the TV screensaver never would.
- Sync now also caches a 400px gallery tile (`<key>.m.jpg`) per photo. Existing albums backfill on their next sync.
- Admin uploads send a tile too. Older uploads without one use the full photo in the grid.
- `/api/photos` entries gain a `tile` field.
- Shield photo app `com.dayline.photos` 1.1 (versionCode 2):
- The launcher tile opens the gallery and takes D-pad input.
- Back steps back through the gallery's history (closing a full-screen photo) before exiting.
- The screensaver is unchanged (non-interactive slideshow).
# 1.2.0 (2026-11-04)
- `/photo`: full-screen photo frame with crossfade, a blurred backdrop or fill mode, shuffle, and the date taken.
- It picks up new settings and photos within about 30 seconds and reloads itself every 12 hours.
- Admin **Photos** tab:
- Google Photos shared albums: paste the share link, use **Check**, and **Sync now**. The tab shows sync status, stale warnings and errors.
- Slideshow options.
- Photo uploads. Each upload is resized in the browser to 1920px plus a 64px backdrop thumbnail.
- Albums sync every 6 hours (and 15 seconds after start).
- Each sync caches up to 500 photos per album at 1920px under `/data/photos`, skips videos, and removes photos deleted from the album.
- `/api/health/photos` returns 503 when an enabled album has not synced for 48 hours.
- History and Restore now cover photo settings too. A restore re-syncs any album it brings back.
- The minimum admin password length is now 6.
# 1.1.0 (2026-11-04)
- Password-protected, LAN-only `/admin` screen for calendar links (masked, test, history/restore).
- Calendars are read from `/data/settings.json` (seeded once from the calendar secret).
- The supervisor drops privileges right after reading secrets. A front proxy on :3000 records the real client IP.
- `/photo-admin` redirects to `/admin#photos`, a placeholder for the upcoming photo frame.
# Release 1.0.0
Built and validated on 2026-11-04.
- Replaced the hosted Cloudflare/Vinext runtime with a standard production Next.js container.
- Added runtime-only calendar secrets and optional bearer authentication.
- Added configurable timezone and weather settings, bounded feed responses, redirect validation, health checks, and hardened Compose settings.
- Included cross-platform configuration, backup, restore, and migration documentation.
- Included NVIDIA Shield wrapper v1.4 (`com.dayline.tv`, version code 5) with local URL support, exact-origin enforcement, optional bearer injection, controlled private-LAN HTTP, internal-CA support, and hosted rollback.
- Preserved the existing app identity, signing certificate, private app data, and per-device schedule flag during in-place upgrades.
The current hosted dashboard and installed Shield applications are not changed merely by extracting this package. Follow `MIGRATION.md` when the internal server URL is ready.