diff --git a/README.md b/README.md
index ba7d2e7..ec3fd9b 100644
--- a/README.md
+++ b/README.md
@@ -178,3 +178,5 @@ Files are kept in the data folder under `mystore/` (up to 1 GB each; extensions
- **Also:** reorder the queue with the arrows; *More like this* on an artist or song; an About note on albums and artists (Plex's own summary); **Save offline** on an album (plays with no signal); the player takes its colors from the album cover; **Share a line** in the lyrics makes a picture of the lyric over the cover; Featured shows a verse of the day when you have the Bible tab.
- Not included: crossfade or gapless (the player already keeps the next songs downloaded for quick changes), searching lyrics by a line, and a speaker picker.
+**iPad and Screen Time:** Settings, Admin, *iPad and Screen Time* explains the simple setup (Screen Time, Content Restrictions, Web Content: **Limit Adult Websites**, and add only the hub's address under *Always Allow*), lists the web addresses the app needs (the hub, plus the document editor for the Office tab) for anyone using **Allowed Websites Only**, shows other addresses devices were actually seen reaching, and has a *Check this device* button to run on the iPad. The hub sends a report-only Content-Security-Policy (nothing is blocked) so devices report any other address a page loads, and pictures from other sites (podcast search covers, Plex Home pictures, a Verse By Verse cover, search answers) are passed through the hub (`/api/img`) so the browser only talks to the hub for them. Extensions and Sites you add may still reach their own addresses. If the document editor is put behind the same address as the hub (a reverse proxy path), even that one drops off the list.
+
diff --git a/docs/v2-roadmap.md b/docs/v2-roadmap.md
new file mode 100644
index 0000000..d7fa5d9
--- /dev/null
+++ b/docs/v2-roadmap.md
@@ -0,0 +1,91 @@
+# NE Hub 2.0 roadmap
+
+A family-first hub. Status: `[ ]` planned, `[~]` in progress, `[x]` done. Size: S (a day or less), M (a few days), L (a week or more).
+Decided: no photos tab, no voice or video calling (text messaging only).
+
+## 1. Family Chat (a built-in messenger; text only)
+A messenger inside the hub for the family, so family chats do not need Signal. Every hub account is a contact, and a "Family" group exists from the start. Family chats and Signal chats show in one inbox (labelled by source); people outside the family still use Signal. Messages are kept on the family's own server.
+
+**Phase 1: the basics (L)**
+- [ ] Direct chats and group chats (names, members, add and remove people)
+- [ ] Text with links, emoji and line breaks
+- [ ] Attachments: photos, video, files (stored on the server)
+- [ ] Replies (quote), reactions
+- [ ] Unread counts, search, drafts that survive closing the app
+- [ ] Live delivery in the open app, push notifications in the background
+- [ ] Mute and archive per chat
+
+**Phase 2: feels like Signal (M)**
+- [ ] Edit and delete for everyone
+- [ ] Sent, delivered and read ticks
+- [ ] Typing indicators and online presence
+- [ ] Disappearing messages (a timer per chat)
+- [ ] @mentions in groups, pinned messages, forward a message
+
+**Phase 3: richer messages (M)**
+- [ ] Voice notes (record and play, with a waveform)
+- [ ] Link previews (fetched safely by the server)
+- [ ] Polls
+- [ ] GIF or sticker picker (optional)
+- [ ] Share a place as a link
+
+**Family extras (M)**
+- [ ] Turn a message into a task, an event or a shopping item in one tap
+- [ ] Share a song, recipe, book or podcast episode from the hub into a chat
+- [ ] Pinned family announcement on Home ("dinner at 6")
+- [ ] Kid accounts can only message family; parents can set quiet hours
+
+**Privacy (decide first)**
+- [ ] Open question: server-side storage on the family's own machine to start (TLS + encrypted disk), or end-to-end encryption from day one? Starting without E2EE and adding it later is much harder than choosing now.
+- [ ] Per-person notification and privacy settings
+
+Not planned: voice and video calls, stories, usernames and phone-number lookup, sealed sender.
+
+## 2. Family core
+- [ ] **Family Home (M):** one shared start page: who is around, today's family calendar, shared shopping list and chores, what everyone is listening to or reading
+- [ ] **Shared lists and notes (M):** a real Notes and Lists tab the whole family edits (grocery, packing, gift ideas, house to-dos)
+- [ ] **Chores and routines (M):** recurring chores per person, check-offs, optional points and a weekly summary; kids see their own
+- [ ] **Family calendar (M):** a colour per person, a shared week view, birthdays from Contacts, event invitations inside the family
+- [ ] **Meal planning (M):** a weekly plan from Recipes that builds the shopping list (and can flag what is already in the pantry)
+- [ ] **Worship and devotion (S):** a shared daily verse, a Bible reading plan with check-ins, a family prayer list
+
+## 3. Kids and safety
+- [ ] **Kid profiles (M):** tabs limited per child, content filters (the Smashwords-style filter, Store, podcasts and music in a clean mode), screen-time limits
+- [ ] **Approvals (S):** a child asks to add a book, app or extension and a parent approves
+- [ ] **Simple mode (S):** a big-button layout with few tabs for young kids or grandparents
+
+## 4. Everyday convenience
+- [ ] **Search everywhere (M):** one search across mail, tasks, notes, recipes, contacts, books, songs, chats and Bible verses
+- [ ] **Continue row (S):** the last audiobook, episode, book, movie and song on Home
+- [ ] **Notifications center (M):** one inbox for reminders, chores, new episodes, mail and chat, with quiet hours per person
+- [ ] **Tasks 2.0 (M):** projects, subtasks everywhere, due-time reminders, Today and Upcoming views
+- [ ] **Mail 2.0 (L):** unified inbox, snooze, templates, attachments saved to Files
+- [ ] **Contacts 2.0 (S):** anniversaries and reminders, gift ideas
+
+## 5. Media
+- [ ] **Movies & TV 2.0 (L):** mixes, favorites and stats like Music; a shared watchlist and a "movie night" vote
+- [ ] **Podcast and audiobook stats (S):** listening history like Music has
+- [ ] **Reading goals (S):** a family reading challenge with streaks; export notes and highlights
+- [ ] **Casting (M):** pick AirPlay or Cast targets for audio
+
+## 6. Reliability (the admin's side)
+- [ ] **Browser smoke tests in CI (M):** many bugs this year showed only in the interface
+- [ ] **Admin health page (S):** all good or something is down: Seafile, Plex, Mealie, mail, storage
+- [ ] **Backup and restore screen (S):** one-click restore, per-person export
+- [ ] **Offline mode (L):** tasks, lists, recipes, saved books and music keep working with no signal (worth it if the family travels)
+- [ ] **Performance pass (S):** lazy-load the big pieces (the Bible text, the reader libraries)
+- [ ] **Accessibility (M):** larger text and high-contrast settings, keyboard navigation everywhere, reduced motion
+
+## 7. Platform (later)
+- [ ] **Extensions 2.0 (L):** more hub data in the bridge (notes, music, recipes), a permissions screen, extension updates
+- [ ] **Automations (L):** "when X then Y" rules (a new episode adds a task, a low pantry item adds to Shopping)
+- [ ] **Themes (S):** accent colours and an AMOLED dark mode per person
+
+## Suggested order
+1. Family Chat phase 1, Family Home, Shared lists and notes, Chores
+2. Kid profiles, Search everywhere, Notifications center, Family Chat phase 2
+3. Meal planning, Family calendar, Family Chat phase 3 and family extras
+4. Reliability items alongside everything, so each step stays safe to ship
+
+## Done already (for reference, 1.x)
+Store (books, audiobooks, radio, My Store, extensions), Recipes with a shared shopping list, Contacts, Music (Featured, Mixes, Favorites, Stats, smart and Family playlists), podcast discovery and transcript search, Smashwords with a family filter, and the sidebar and Radio fixes.
diff --git a/package.json b/package.json
index 76a2662..e4202a7 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
"main": "server.js",
"scripts": {
"start": "node server.js",
- "test": "for t in smoke tasks push users cal plex player lyrics signal mail mail-imap files podcast abapi abdirect books store librivox radio vbv savefiles bible lrclib visualizer body transcript recipes contacts mystore caldav musicdata; do node tools/$t-test.js || exit 1; done",
+ "test": "for t in smoke tasks push users cal plex player lyrics signal mail mail-imap files podcast abapi abdirect books store librivox radio vbv savefiles bible lrclib visualizer body transcript recipes contacts mystore caldav musicdata screentime; do node tools/$t-test.js || exit 1; done",
"audit": "npm audit --omit=dev --audit-level=high"
},
"keywords": [],
diff --git a/public/index.html b/public/index.html
index 2aab080..dae4cde 100644
--- a/public/index.html
+++ b/public/index.html
@@ -60,6 +60,7 @@
+
diff --git a/public/music-extras.js b/public/music-extras.js
index ca18f65..ca1c00c 100644
--- a/public/music-extras.js
+++ b/public/music-extras.js
@@ -82,7 +82,7 @@ async function plexHomeBadge(st) {
}
function plexSwitchSheet(users) {
const el = openSheet('Who is listening?', 'People in your Plex Home. Playlists, ratings and what you have played follow the person you pick.',
- `