Commit Graph
100 Commits
Author SHA1 Message Date
nmemmertandClaude Sonnet 5.5 46e686ce22 Music: Featured tab with a random artist and album, from the whole library or chosen playlists
build-container / build (push) Successful in 7m35s
- Featured is the first Music tab; picks stay for the day on a device, Pick again rolls new ones
- Based on: choose the playlists they come from (synced across devices)
- Play mix shuffles the artist's songs; Play plays the album

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 10:21:19 -04:00
nmemmertandClaude Sonnet 5.5 dc8265a850 Store: Smashwords as a family-filtered book source; free audiobooks stream through the hub; extensions and Sites on Home
build-container / build (push) Failing after 1m30s
- Smashwords: free EPUBs from its shelf feed, filtered (adult/erotica flags, LGBTQ+, keywords, unlabelled romance); admin saves a Smashwords sign-in (encrypted) used to download
- LibriVox chapter audio is fetched and streamed by the hub (with seeking) instead of redirecting the browser to archive.org
- Home: a My apps section with installed extensions and Sites, also in the command palette

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 10:14:13 -04:00
nmemmertandClaude Sonnet 5.5 3c42d1ecd5 Sidebar never scrolls: entries shrink to fit a short window, with tighter spacing under 700px tall
build-container / build (push) Successful in 7m11s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 09:44:50 -04:00
nmemmertandClaude Sonnet 5.5 a804f9a8db Radio starts empty and fills from the Store (Add to Radio, including The Journey FM); iCloud connect falls back to the calendar home beside the principal
build-container / build (push) Successful in 6m9s
- Store > Radio is the station finder with Add to Radio / Added; Radio under Listen lists only what was added
- Fix the Radio tab going blank (the router passed its arguments as the Store host)
- iCloud: when the account reports no calendar home, try /<id>/calendars/, and say what iCloud answered if that fails

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 09:37:04 -04:00
nmemmertandClaude Sonnet 5.5 a31fdcdabd Recipes: tick off ingredients and steps while cooking (remembered per device), ingredients beside steps on wide screens
build-container / build (push) Successful in 6m11s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 09:30:33 -04:00
nmemmertandClaude Sonnet 5.5 efd17f4263 Extensions: hub bridge for tasks, contacts and calendar (asked of the person once), Sites in My Store, and four example extensions
- hub.tasks / hub.contacts / hub.calendar in the extension sandbox; each kind of access is approved by the person and remembered per extension
- My Store: Sites kind (any web link, optionally shown inside the hub)
- Examples: notes and checklists, habit tracker, kitchen converter and scaler, weather and verse of the day

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 09:25:39 -04:00
nmemmertandClaude Sonnet 5.5 f292294ad7 Store: one tab combining books, free audiobooks and radio, plus My Store for your own books, music, apps and sandboxed extensions
build-container / build (push) Successful in 7m39s
- Store tab with sections; the book store, LibriVox and radio finder are shown inside it (old entry points redirect)
- My Store: admin uploads files or copies from Seafile; books go to a person's shelf, music plays in the player, apps download
- Extensions: one HTML file run in a sandboxed frame with a small storage/toast/user bridge; example in docs/extensions

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 09:08:41 -04:00
nmemmertandClaude Sonnet 5.5 176b1b8169 Open Library in the book store; podcast topic search and transcript search; Recipes (Mealie) with a shopping list synced to Tasks; Contacts linked to Mail and the Calendar
build-container / build (push) Successful in 7m21s
- Store: Open Library search, books fetched from the Internet Archive (free editions only)
- Podcast: Podcast Index discovery by name and topic (optional key); search what is said across transcripts and play from that moment
- Recipes: browse, import from a link, add ingredients to Mealie's shopping list, mirrored two ways with a Shopping list in Tasks
- Contacts: per-person address book, vCard import/export, recipient suggestions in Mail, birthdays in the Calendar

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 08:55:32 -04:00
nmemmertandClaude Sonnet 5.5 1c089c4a10 Transcripts: new and existing episodes are transcribed in the background (published transcript first, else whisper), with a status line in Health
build-container / build (push) Successful in 3m29s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 11:46:15 -04:00
nmemmert e7bd24bbaa Transcripts: a podcast episode gets its transcript going as soon as you play it (published, else made on your server)
build-container / build (push) Successful in 4m6s
2026-10-23 11:43:34 -04:00
nmemmert 747002924d Transcripts: say why a show's own transcript was not found; read Podgrab fields whatever their capitals
build-container / build (push) Successful in 4m2s
2026-10-23 11:42:43 -04:00
nmemmert ae00f61711 CI: build the Lyrica image only when ./lyrica changes (its own workflow), so a Docker Hub timeout cannot fail the main build
build-lyrics-container / build (push) Successful in 6m56s
build-container / build (push) Successful in 3m10s
2026-10-23 11:37:39 -04:00
nmemmert c82bd7cae9 Transcripts: check the whisper model is installed, download it (trying each form the service has used), and say what came back if it will not
build-container / build (push) Failing after 6m18s
2026-10-23 11:25:50 -04:00
nmemmert 05e6b19bfa Transcripts: ask the whisper service to download its model first
build-container / build (push) Failing after 6m42s
2026-10-23 11:20:31 -04:00
nmemmert 40a74e6cbe Transcripts: errors say which step failed and why
build-container / build (push) Successful in 12m23s
2026-10-23 11:17:49 -04:00
nmemmertandClaude Sonnet 5.5 0534bf7c4b Transcripts for podcasts and audiobooks: the show's own, or speech-to-text on your server (whisper service)
build-container / build (push) Successful in 13m20s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 10:52:59 -04:00
nmemmertandClaude Sonnet 5.5 e984f11a94 Mail: a button per account with its own unread count (kept fresh), instead of a dropdown
build-container / build (push) Successful in 14m15s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 10:31:58 -04:00
nmemmertandClaude Sonnet 5.5 7198efaccd Movies & TV: arrows and drag to slide rows (no scrollbar needed), Trailer button (Plex extras, else a YouTube search)
build-container / build (push) Successful in 11m18s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 10:30:24 -04:00
nmemmert d598501393 Home: the Tasks card lists what is overdue or due this week from every list, with a tick
build-container / build (push) Successful in 10m51s
2026-10-23 09:55:23 -04:00
nmemmertandClaude Sonnet 5.5 2b79160f95 Tasks: an All view with every list, NE Hub and iCloud, together
build-container / build (push) Successful in 12m21s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 09:54:33 -04:00
nmemmertandClaude Sonnet 5.5 732906bc7a Movies & TV: posters in a row are all the same size
build-container / build (push) Successful in 12m23s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 09:47:32 -04:00
nmemmertandClaude Sonnet 5.5 3166a7b1ab Mail in Search, Pick up where you left off on Home (evening first), Cast/AirPlay buttons
build-container / build (push) Successful in 13m46s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 09:34:51 -04:00
nmemmert 1981e66b8a Admin health report (Plex, mail accounts, disk, last backup) 2026-10-23 09:33:33 -04:00
nmemmert 2c8afdef79 Keyboard shortcuts for mail and a shortcut list, offline help and refresh on return, push alerts for new mail 2026-10-23 09:32:56 -04:00
nmemmert 93ae8f8840 Movies & TV: Watch later (a Plex playlist), Collections, who-is-watching switch 2026-10-23 09:32:00 -04:00
nmemmertandClaude Sonnet 5.5 92cf86bf5c Movies & TV: Resume banner, poster-tinted detail page, friendlier empty state
build-container / build (push) Successful in 9m53s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 09:23:13 -04:00
nmemmertandClaude Sonnet 5.5 2de5e343b2 Polish: card hover lift, fade-in posters, skeleton loading, snap rows, glowing progress, stronger detail backdrop, lyrics glow
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 09:22:02 -04:00
nmemmertandClaude Sonnet 5.5 c49693bac6 Movies & TV: remove or clear Continue watching, time left, Recently added and Unwatched rows kept on device, sort/genre/unwatched filters, hold-for-actions, Skip intro/credits
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 09:21:03 -04:00
nmemmertandClaude Sonnet 5.5 bbbb8ef5d5 Mail: faster open/delete (instant delete and archive, separate background IMAP connection, one-fetch message read, bodies saved on device with prefetch); Lyrics: no sweep across line-synced lines
build-container / build (push) Successful in 10m28s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 08:40:17 -04:00
nmemmertandClaude Sonnet 5.5 3f57e4bde1 Audiobooks: each person's listening positions are their own (the whole library stays shared)
build-container / build (push) Successful in 9m2s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 16:52:38 -04:00
nmemmertandClaude Sonnet 5.5 2635e4615d Fix: Podcast screen failed to load (its script ran before the player's); load it after the player
build-container / build (push) Successful in 12m24s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 16:25:55 -04:00
nmemmertandClaude Sonnet 5.5 eb64e4964d Signal: a sent message appears at once (dimmed while Signal takes it), in order, and comes back to the box if it fails
build-container / build (push) Successful in 9m21s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 16:22:05 -04:00
nmemmertandClaude Sonnet 5.5 4468c2e025 Podcast: each person has their own list of shows
build-container / build (push) Successful in 7m29s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 16:12:04 -04:00
nmemmertandClaude Sonnet 5.5 b3494b9720 Podcast: resume where you left off, synced between devices (shared progress store with audiobooks)
build-container / build (push) Successful in 9m26s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 15:37:51 -04:00
nmemmertandClaude Sonnet 5.5 aa2133ed9a Audiobooks: talk to OpenAudible directly with its own username and password (OPENAUDIBLE_URL)
build-container / build (push) Successful in 9m46s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 15:12:34 -04:00
nmemmertandClaude Sonnet 5.5 9231315186 Build: x86 (amd64) only, and run the podcast and audiobook tests
build-container / build (push) Successful in 9m17s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 14:52:44 -04:00
nmemmertandClaude Sonnet 5.5 62ff4d815d Audiobooks: built-in library, playback and synced progress through the audiobook player (classic frame kept)
build-container / build (push) Canceled after 2m57s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 14:48:05 -04:00
nmemmertandClaude Sonnet 5.5 66a376d22c Podcast: search for new shows and add them
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 14:42:28 -04:00
nmemmertandClaude Sonnet 5.5 675df5710b Podcast: built-in screen for Podgrab (shows, episodes, playback, search)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 14:41:59 -04:00
nmemmertandClaude Sonnet 5.5 7f38ac5366 Home: no sideways scrolling on phones
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 14:41:56 -04:00
nmemmertandClaude Sonnet 5.5 fa4b562fcc Reminders: Clear all notifications on this device
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 14:41:56 -04:00
nmemmertandClaude Sonnet 5.5 05e2a2ec7b Search: movies and TV from Plex
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 14:41:56 -04:00
nmemmertandClaude Sonnet 5.5 bf22aba9dd Maintenance: mail libraries to latest patch versions, badge polling only while the app is visible
build-container / build (push) Successful in 21m26s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 13:50:17 -04:00
nmemmertandClaude Sonnet 5.5 06300578be Home: tiles stack title over subtitle, phone header keeps Quick add beside the greeting
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 13:50:17 -04:00
nmemmertandClaude Sonnet 5.5 668c7241a1 Settings: General, Connections, Security and Admin tabs (last one remembered); Reminders no longer hangs when the service worker does not start
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 13:50:17 -04:00
nmemmertandClaude Sonnet 5.5 a3010299d0 Mail: folder unread counts refresh at once after a change, read state survives a late list, no wrong message after quick clicks, mark unread keeps the message in the list
build-container / build (push) Successful in 21m39s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 13:19:45 -04:00
nmemmertandClaude Sonnet 5.5 89fd595809 Home: header with date and quick actions, compact app launcher, two-column cards on wide screens, apps first on phones
build-container / build (push) Successful in 20m46s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 13:11:46 -04:00
nmemmertandClaude Sonnet 5.5 924a024b0b PWA: install button, one icon badge for Signal, mail and tasks due, share target for files, manifest launch handler
build-container / build (push) Successful in 22m24s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 13:06:19 -04:00
nmemmertandClaude Sonnet 5.5 5c5a7b5155 Plex: edit a title's details (fields locked on save) and choose its poster or background, owner only, through a narrow write rule in the proxy
build-container / build (push) Successful in 19m31s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 12:42:32 -04:00
nmemmertandClaude Sonnet 5.5 b171f35be6 Plex Home: the owner's PIN is asked for and checked by plex.tv when switching back, wrong guesses are slowed down
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 12:39:24 -04:00
nmemmertandClaude Sonnet 5.5 d813884074 Calendar: several NE Hub calendars with colors, per-person view/edit sharing and per-calendar subscribe links; Movies & TV: converted video keeps the right time and seeks inside what the stream has
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 12:38:15 -04:00
nmemmertandClaude Sonnet 5.5 d25eae5920 Movies & TV: scrubbing the bottom-bar line previews and seeks once on release, Space on a focused button no longer toggles twice, skip updates the bar at once
build-container / build (push) Successful in 20m6s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 11:26:39 -04:00
nmemmertandClaude Sonnet 5.5 79dcd5cdf3 Movies & TV: the video controls live in the bottom bar like Music; the floating picture has no controls; tools along the top of the player page
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 11:24:05 -04:00
nmemmertandClaude Sonnet 5.5 2bde697955 Office: search, kind filter, sorting, pinned and recent documents, saved list, upload and drag-and-drop, document menu; Movies & TV mini player keeps its controls visible
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 11:18:48 -04:00
nmemmertandClaude Sonnet 5.5 1f08443c38 Mail: moving between messages no longer rebuilds the whole page (only the reader and the selected row change)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 11:12:59 -04:00
nmemmertandClaude Sonnet 5.5 0f324bbf60 Movies & TV: the video keeps playing in a mini player when you leave the player page, and comes back to the full player without restarting
build-container / build (push) Successful in 22m14s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 11:07:01 -04:00
nmemmertandClaude Sonnet 5.5 f232dc32d3 Movies & TV: custom player controls (seek bar, skip 10 s, previous and next episode, volume, speed, picture in picture), breadcrumbs and library pills on every page
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 11:04:11 -04:00
nmemmertandClaude Sonnet 5.5 2b79026157 Movies & TV: own full-screen button with a full-window fallback, first-episode button for unstarted shows; Plex sign-in survives plex.tv taking over the tab
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 11:00:20 -04:00
nmemmertandClaude Sonnet 5.5 f3216b2f3b Movies & TV: browse and play your Plex movies and shows (resume, progress to Plex, next episode, quality, audio and subtitles, direct play or HLS conversion)
build-container / build (push) Successful in 20m38s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 10:49:53 -04:00
nmemmertandClaude Sonnet 5.5 84a0ea10e9 Mail: instant first paint from the last saved accounts, folders and list; Outlook folders in one batched call; gzip for app files and large mail responses
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 10:39:40 -04:00
nmemmertandClaude Sonnet 5.5 fb7aabff61 Mail opens faster: the page draws at once from a no-network status, the list, folders and unread counts load side by side, unread counts are cached and time-limited per account, IMAP keeps connections warmer and limits folder counting, messages are prefetched on hover
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 10:33:25 -04:00
nmemmertandClaude Sonnet 5.5 833342fced Podcast Admin is now a built-in link on the Links page instead of its own menu entry
build-container / build (push) Successful in 19m43s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 09:36:31 -04:00
nmemmertandClaude Sonnet 5.5 dae19176cd Music: use Plex as another person in your Plex Home (list, PIN, switch back), shown as Playing as <name>
build-container / build (push) Successful in 19m30s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 09:31:47 -04:00
nmemmertandClaude Sonnet 5.5 cedd6845ce Files: sturdier Seafile pass-through (timeouts, retries, stop on disconnect), in-place sign-in, saved folder lists, upload name clashes, undo and recycle bin, library search, zip downloads, share link options, text viewer and editor
build-container / build (push) Successful in 20m19s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 09:16:40 -04:00
nmemmertandClaude Sonnet 5.5 004209ed4f Mail: Gmail and iCloud (IMAP/SMTP with app passwords) alongside Outlook.com, several accounts per person with an account switcher, From choice and combined unread
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 09:06:52 -04:00
nmemmertandClaude Sonnet 5.5 4173d2c058 Planner: one compact toolbar (title, Calendar | Tasks, view switch, agenda range, Add event)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 08:59:29 -04:00
nmemmertandClaude Sonnet 5.5 b8ab84a009 Planner: Add event sits on the same row as the Calendar | Tasks switch
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 08:57:18 -04:00
nmemmertandClaude Sonnet 5.5 8d38584d37 Planner: Calendar and Tasks in one menu entry, due tasks shown on the calendar; menu, More sheet and Home tiles grouped by kind
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 08:56:31 -04:00
nmemmertandClaude Sonnet 5.5 b305ccac51 Reminders: style the morning time box like the other inputs (it was unreadable in dark mode)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 08:53:01 -04:00
nmemmertandClaude Sonnet 5.5 7ac843fea8 Settings: fix a stray closing tag that made the lower sections wider than the rest
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 08:52:11 -04:00
nmemmertandClaude Sonnet 5.5 5f639eec3c Mail: fix opening messages (contentId is not selectable on the attachment list; fetch inline pictures whole)
build-container / build (push) Successful in 20m42s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 08:43:27 -04:00
nmemmertandClaude Sonnet 5.5 2d8d4f4d82 Mail setup inside the app: admins save the Microsoft app ID, secret and expiry in Settings, with the redirect address to copy, an expiry warning, and plain-language Microsoft errors
build-container / build (push) Successful in 20m34s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 08:17:40 -04:00
nmemmertandClaude Sonnet 5.5 5c224521d3 Add step-by-step Microsoft app registration guide for Mail
build-container / build (push) Successful in 21m40s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 08:12:18 -04:00
nmemmertandClaude Sonnet 5.5 a9c277b497 Mail: Outlook.com inside the app through Microsoft Graph (folders, reader, compose, reply, unread badge); Cypht webmail removed
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 08:09:11 -04:00
nmemmertandClaude Sonnet 5.5 1564941ea5 Split app.js into one script per feature; versioning covers every public file; README for the new features
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 07:57:51 -04:00
nmemmertandClaude Sonnet 5.5 c1f4a220f9 Web Push reminders for tasks and events (Settings -> Reminders)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 07:56:01 -04:00
nmemmertandClaude Sonnet 5.5 a0f1efc4ef Version history in the file row menu too
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 07:54:10 -04:00
nmemmertandClaude Sonnet 5.5 70d69e7441 File version history (list, download, restore) for Seafile files
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 07:54:06 -04:00
nmemmertandClaude Sonnet 5.5 561b6181a0 Audit log (admin Activity list) and passkey recovery codes
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 07:53:41 -04:00
nmemmertandClaude Sonnet 5.5 c8399ccaa7 Plex playlists you can edit (create, add, remove, rename, delete, save queue), sleep timer
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 07:52:29 -04:00
nmemmertandClaude Sonnet 5.5 fa1452d23d Calendar week and day views
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 07:50:38 -04:00
nmemmertandClaude Sonnet 5.5 e26b38a119 Repeating tasks and subtasks
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 07:49:03 -04:00
nmemmertandClaude Sonnet 5.5 4625848048 Offline shell (precache, offline notice) and accessibility layer (skip link, button names, sheet focus and Escape)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 07:46:10 -04:00
nmemmertandClaude Sonnet 5.5 df8c6ce586 Command palette (Ctrl/Cmd-K), quick add with natural dates, links in search; links.js split out of app.js
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 07:45:33 -04:00
nmemmertandClaude Sonnet 5.5 1f8c9493b7 Harden the server and add a Links page
Security headers, cross-site write refusal, atomic JSON writes, admin backup download, /healthz and Docker health check, OnlyOffice requires a JWT secret, npm test, CI audit, arm64 hub image. New Links tab for personal bookmarks, saved with per-person settings.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 07:43:34 -04:00
nmemmertandClaude Sonnet 5.5 b0d3aec811 Home dashboard: live Now Playing card; report playback to Plex so it shows in the Plex dashboard
build-container / build (push) Successful in 12m40s
The Home Now Playing block is now the same live card as the Music tab.
The player sends Plex timeline updates (playing/paused/stopped, position every 10 s).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 15:14:34 -04:00
nmemmertandClaude Sonnet 5.5 fc0ae05415 Lyrics and karaoke for the music player
build-container / build (push) Successful in 12m8s
- full-screen lyrics view that follows the song: highlighted current line with a colour sweep (word by word when the source has word timing), tap a line to jump, text size, timing nudge, 'Wrong lyrics?' search
- Karaoke mode: the current line large and centered
- lyrics from Plex first, then the bundled Lyrica service (LRCLIB, Musixmatch via Lrcmux, NetEase, Megalobiz); YouTube captions never used; wrong-length recordings refused; answers kept in /data/lyrics
- lyrica/: Lyrica pinned to one commit, built by the workflow as hub-lyrica; compose service sharing the hub's network
- tools/lyrics-test.js

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 11:13:00 -04:00
nmemmertandClaude Sonnet 5.5 bfd37967c3 Signal: keep messages that arrive glued together, one chat per person, receipts by time, faster reconnect; edit contacts, clear and remove chats; debug list
build-container / build (push) Successful in 7m31s
- read every JSON value in a frame (lines, arrays), binary frames too
- a person seen by number and by private id is one conversation (merged)
- delivery/read receipts match on message time, not on who sent them
- reconnect every 1-5 s; the chat list says when the link was down
- /api/signal/debug: kinds of messages seen lately (no text)
- edit a contact (kept in the app and sent to Signal), clear messages, remove a chat; right-click menu in the list; name for a new number
- tests: 54 checks

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 11:00:34 -04:00
nmemmertandClaude Sonnet 5.5 522fdba4cd Now Playing card on the Music tab; Signal alerts (chime, desktop notification, unread count in tab title and app icon)
build-container / build (push) Successful in 7m4s
- Music: a card with art, seek bar and controls above the albums, artists and playlists
- Signal: chime, optional desktop notification when the app is in the background, (n) in the tab title, app badge; Settings -> Signal alerts (per device)
- README, player test stand-in updated

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 10:47:15 -04:00
nmemmertandClaude Sonnet 5.5 d0070aa0bb Signal chats in the app (desktop only) with a chat button on every screen
build-container / build (push) Successful in 6m44s
- signal.js: talks to signal-cli-rest-api (a linked device of your Signal account); keeps conversations in /data/signal; live updates; send/receive text, files, replies, reactions, groups, receipts
- Signal tab and a floating chat panel on every screen, shown only on desktop-class windows; new Signal permission per person
- compose: signal bridge container sharing the hub's network
- tools/signal-test.js (fake bridge), README

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 10:18:02 -04:00
nmemmertandClaude Sonnet 5.5 5157e42bc4 Mail opens the provider shortcuts by default; the webmail is one button away
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 10:03:34 -04:00
nmemmertandClaude Sonnet 5.5 f0df84bc5e Cypht shares the hub's network so the hub reaches it at 127.0.0.1 on any network mode
Fixes 'cannot reach the webmail: ENOTFOUND' on hosts (ZimaOS/CasaOS) that keep network_mode: bridge, where container names do not resolve.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 09:46:21 -04:00
nmemmertandClaude Sonnet 5.5 7823bbcb03 Webmail is now Cypht (several accounts in one place) instead of Roundcube
build-container / build (push) Successful in 6m58s
- cypht/: official Cypht 2.13.0 on a SQLite file, served under /webmail/; workflow builds git.necloud.us/nate/hub-cypht
- the hub passes /webmail/ through behind the passkey sign-in and signs in to Cypht for you (CYPHT_PASSWORD)
- provider sign-in pages (Google, Microsoft) open in the whole window and return to the Mail tab; other links open in a new tab
- Gmail / Outlook.com / Office365 OAuth settings (Microsoft permissions patched to the current ones)
- Roundcube removed; README, compose and webmail tests updated

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 09:28:50 -04:00
nmemmertandClaude Sonnet 5.5 a7a5b155e3 Roundcube as its own image built by the workflow (no config file or newer Compose needed)
build-container / build (push) Successful in 6m6s
- roundcube/: official Roundcube plus hub.php settings
- workflow builds and pushes git.necloud.us/nate/hub-roundcube, and runs the player and webmail tests
- compose uses the image instead of an inline config

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 08:59:50 -04:00
nmemmertandClaude Sonnet 5.5 cdf862427e Bundled Roundcube webmail in the Mail tab, optional Microsoft 365 OAuth sign-in, collapsible menu
build-container / build (push) Successful in 2m42s
- docker-compose: roundcube service with inline config (Gmail/iCloud/Yahoo presets, framing allowed, persistent key); only reachable through the hub
- hub passes /webmail/ through to Roundcube behind the passkey sign-in; Microsoft's sign-in page opens in the whole window and returns to the Mail tab
- M365_* settings add 'Login with Microsoft 365' (README has the Entra app registration steps)
- Side menu collapses to icons or hides completely (remembered per device, Ctrl/Cmd+B)
- tools/webmail-test.js

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 08:56:13 -04:00
nmemmertandClaude Sonnet 5.5 318006dba3 Mail: account cards, choose which mail apps to show, optional framed webmail
- Mail page redesigned as one card per account (inbox + compose)
- Settings -> Mail apps: tick the apps you use; saved on the server per person
- WEBMAIL_URL shows your own webmail (e.g. Roundcube) inside the Mail tab; provider shortcuts one tap away
- README: Roundcube setup and framing headers

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 08:43:12 -04:00
nmemmertandClaude Sonnet 5.5 de1430928a Files like Finder, richer mini player, in-app Back/Forward, Audio tab renamed Audiobooks
- Files: multi-select, batch move/copy/delete, rename checks, sort, filter, shortcuts, drag in (files and folders) to upload with progress and retries, drag to move, drag a file out to download
- Mini player: previous, seek bar with buffered range, time, shuffle/repeat, buffering spinner, swipe for next/previous, close
- Back/Forward bar that knows what history is possible
- Audio tab is now Audiobooks

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 08:37:58 -04:00
nmemmertandClaude Sonnet 5.5 bc3710807d Seafile sign-in follows the person across devices; sturdier Plex player; audiobooks frame with server-side secret sign-in
build-container / build (push) Successful in 3m16s
- Seafile token is saved on the server (encrypted) so Settings shows the real signed-in state everywhere
- Player: whole-track cache for current and next two, stall recovery, instant track changes, shuffle/repeat, Plex play counts, transcode fallback, Plex request timeout
- Audio tab: toolbar, full-height kept-alive frame; /api/audiobooks/enter adds the secret login link on the server

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 08:26:18 -04:00
nmemmertandClaude Sonnet 5.5 1a29d500d3 Link the app's code with a build number so a proxy cache cannot serve an old copy
build-container / build (push) Successful in 2m55s
The People screens did not appear after the redeploy even after a hard refresh: a caching layer
(for example Nginx Proxy Manager's "Cache Assets") was still serving the old app.js. The pages now
reference /app.js?v=<build>, /style.css?v=<build> etc., where the build changes with every release,
so a stale cached file at the old address is never used. The service worker no longer precaches
unversioned app code.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 17:00:36 -04:00
nmemmertandClaude Sonnet 5.5 12a1e50a0e Always revalidate the app's files, tell open pages when a newer version exists, and log why a session is refused
build-container / build (push) Successful in 1m58s
An open page kept running the old version after a deploy (the single page never reloads), so the new
People screens did not appear. Static files are now sent with no-cache + ETag (304 when unchanged), icons
are cached for a week, /api/config reports a build stamp, and the app shows "A new version is available -
Reload" when it comes back into view or every 10 minutes. The service worker cache name is bumped.

The server also logs, at most once a minute per reason, why it refused a session cookie (unknown account,
turned off, signed out everywhere, bad signature, expired) without printing the cookie.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 16:55:44 -04:00