Skip to content

Player redesign 8: household profiles, kids mode, listening in the house, Chromecast (docs) - #129

Merged
KodeStar merged 20 commits into
mainfrom
docs/player-8
Oct 13, 2026
Merged

KodeStar merged 20 commits into
mainfrom
docs/player-8

Conversation

@KodeStar

Copy link
Copy Markdown
Owner

Player redesign Phase 8 (Household) documentation, plus CarPlay availability. Pairs with KodeStar/audiosilo-server#125, KodeStar/audiosilo-frontend#97 (CarPlay) and the Phase 8 frontend PR; merge after them.

User Guide

  • New: Sharing a device with your household (profiles, Who's listening?, Add someone, the optional device-local PIN), Kids mode, Listening in the house (what is shared, off by default, reciprocal opt-in), Chromecast (what you need, what doesn't apply while casting).
  • Updated: Settings (Household and sharing), browsing (profile menu), book page (In the house card), downloads (per person, "Not signed in" group), playback (Audio output), in the car / mobile apps / troubleshooting (CarPlay approved, on in the next app release), remote access (casting needs a trusted certificate or plain HTTP at home), admin Activity (household + casting records), FAQ.

Developer Docs

  • New: frontend profiles, kids mode, listening in the house, Chromecast; connection identity + its one-time migration in state-and-data.
  • API reference: GET/PUT /me/household, GET /household/listening, POST /cast/token, cast tokens as media auth; capabilities household and cast.
  • Server: auth-and-security (cast tokens as a tokens kind with sender revocation, household privacy rules), data model (0042 household_sharing, 0043 cast tokens), web UI CSP (three Cast sender paths); cross-repo contract.

Screenshots

Seven new web-player shots captured for real (profiles, Household settings, kids desktop + phone, house row, book card, Cast button via a local https proxy) and the web-player set retaken. The capture script gained a household pass (accounts via the admin API, people/PIN/kids driven through the UI, cleanup). Its later review cleanups were syntax-checked but not re-run; connect.png is main's (served player, no address field), and other retaken shots may predate that frontend change: retake on the next run.

Quality passes

/simplify (one home per fact, plain wording, accuracy vs code) then /code-review max --fix (15 fixed). npm run build passes.

…usehold, the car and links per person, manifest entries for Phase 8
… the Cast sender's three scripts; the web Cast button needs https
…Phase 8

capture-web.mjs gets a household pass. It provisions four accounts through
the admin API (ellen the viewer; jamie and rosa, who share, from progress
saves as the apps make them, jamie live and rosa paused; leo, limited to a
Stories share) and drives the UI on a fresh browser: Add someone, rename,
a PIN for Jamie, kids mode for Leo on one library, sharing on in Settings >
Household. It captures profiles, settings-household (1440x1000),
home-house, book-in-the-house, kids and phone-kids (in a fixed 8 pm time
zone, so the bedtime card is the same every run), then deletes the
accounts and the share so the admin shots never show them.

player-cast needs an https page: a local https proxy with a throwaway
self-signed certificate (openssl, .cache/cast-tls) on a free port, opened
under a made-up name a separate Chromium maps to 127.0.0.1. The connect
step shares the new probeServer / signInWithPassword helpers.

The pages for profiles, kids mode, the house, Chromecast and Settings embed
the new shots; the rest of web-player/ is retaken (profile menu, Settings).
The identity migration is forward-only once its plan is stored (five held
retries, then identityMovePending), moves no web files and never reverses a
native move; a re-pair retires only the re-pairing person's stale identity;
mayActFor is enforced in the playback store and useRouteConnection is the
route rule; the profiles read retries and its failed states; the secure
store is the PIN authority; mayAddPerson and mayTurnOnKids; kids mode's one
list, startBookInPlace and effectiveAutoSleepConfig; the Cast route's guards
(generations, foreign media, early transcode ends, the car, one tab owns a
session) and the AirPlay-only picker; houseWhen/houseCopy take today and
useHousehold never goes stale; Downloads lists the person listening's and
the Not signed in group. The first profiles document and cast token policy
now live on their owner pages.
Cast token policy lives in auth-and-security (Cast tokens) and the schema in
data-model; the reference keeps the wire, the status table and the media
routes' accept conditions. The household privacy rules live in
auth-and-security; the reference keeps the endpoints and shapes. Cross-repo
section 15 keeps the wire lines and the invariants and links the rest.
Times in the reader's clock format (kids mode, Settings, Activity's busiest
hour); the cast token is a temporary pass in Activity; shorter Cast
certificate sentences; kids mode can't add a person while a grown-up is on
the device and never turns on for the last grown-up; Downloads shows the
person listening's and a Not signed in group. The FAQ and Activity link to
Listening in the house instead of restating it; Settings links to the PIN
section.
Clean up a partial provision (and a killed run's leftovers at startup), wait
on the server's paused state instead of a fixed sleep, re-save rosa when Home
comes late, close the proxy's connections, reuse a fresh certificate, one
context factory over DESKTOP_CONTEXT, one play/pause helper, a clearer Cast
button timeout, and an Ellen-only run for the Cast shot.
PIN authority and its unreadable-store case, cast token disable vs revoke and the full status table, what sharing reveals (exact position, length, save time), admins always see listening, CarPlay availability, security-page statements (API-key refusals, requireBookMediaAuth, two CSP relaxations, household demo fences), one-way house visibility and the 24-hour window, kids set-up order, Chromecast behaviour (web casts the page address over https only, remote stop pauses, notification buttons), per-person downloads and servers, identity migration details, stale frontend symbols and pages not yet updated for Phase 8, clock formats. Capture script: household sign-in events removed, in-memory phone storage, failed people step skips household shots, evening time zone for the Cast shot, probeServer guard from main.
Conflicts kept both sides: the series-key work (0041_series_key, Library >
Series grouping) beside Phase 8's household and Cast content; the served
player's no-address connect flow beside profiles in the menu and Settings;
Android on Google Play with Phase 8's CarPlay status. connect.png is main's
(the served player with no address field).
Main took 0041 for series_key, so the server renumbered the Phase 8
migrations (KodeStar/audiosilo-server#125).
@KodeStar
KodeStar merged commit 4fe917b into main Oct 13, 2026
1 check passed
@KodeStar
KodeStar deleted the docs/player-8 branch October 13, 2026 08:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant