Commit Graph
41 Commits
Author SHA1 Message Date
Claude 239730fd3b Book store: Project Gutenberg through its own catalogue feed (Gutendex timed out), Standard Ebooks through its public pages (its OPDS feed needs a paid sign-in)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaC9HmtHMdRP8dAbN4wAKj
2026-10-25 03:11:35 +00:00
Claude 60291c0e21 Save to Files: copy books, free audiobooks and Verse By Verse lessons and handouts into Seafile (background job, progress, skips what is there)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaC9HmtHMdRP8dAbN4wAKj
2026-10-25 02:34:35 +00:00
Claude af51b37ae4 Verse By Verse: handouts open as a plain link (no pop-up blocking), friendly page when a lesson has none; studies with an empty or partial feed are read from their page
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaC9HmtHMdRP8dAbN4wAKj
2026-10-25 02:27:59 +00:00
Claude eed07bb1ee Podcast: Verse By Verse Ministry studies (browse, play lesson after lesson, handouts, synced place)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaC9HmtHMdRP8dAbN4wAKj
2026-10-25 02:11:17 +00:00
Claude 04b16b6432 Radio: internet radio with The Journey FM featured, Radio Browser search, saved stations and now playing
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaC9HmtHMdRP8dAbN4wAKj
2026-10-25 02:06:26 +00:00
Claude 27df8031ca Audiobooks: free audiobooks you saved or started now show in the main Audiobooks list (and under Continue listening), even when the audiobook library cannot be reached
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaC9HmtHMdRP8dAbN4wAKj
2026-10-25 01:28:49 +00:00
Claude c59ff51361 Audiobooks: free audiobooks from LibriVox (search, shelf, chapters, synced listening position)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaC9HmtHMdRP8dAbN4wAKj
2026-10-25 01:15:31 +00:00
Claude 84ba0000b8 Books: book store with Project Gutenberg, Standard Ebooks, Internet Archive and OPDS catalogues
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaC9HmtHMdRP8dAbN4wAKj
2026-10-25 01:07:39 +00:00
Claude b6944b4ee1 Mail: select several messages (long press, Ctrl/Cmd or Shift click, or the select button) to mark read or unread, flag, archive, move or delete
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaC9HmtHMdRP8dAbN4wAKj
2026-10-24 20:22:08 +00:00
Claude 8acf9418dc Mail: swipe a message left to delete, right to archive. Books: page flip by tap and swipe works on touch screens
The page frame is wider than the screen (pages sit side by side inside it), so tap positions
were measured against the wrong width and taps on touch devices never turned the page.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaC9HmtHMdRP8dAbN4wAKj
2026-10-24 20:15:53 +00:00
Claude 07c16ddc25 Books: EPUB, PDF and DOCX reader with synced position, bookmarks, notes and highlights
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaC9HmtHMdRP8dAbN4wAKj
2026-10-24 02:40:36 +00: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 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
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
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 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 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 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 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 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 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 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 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 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
nmemmertandClaude Sonnet 5.5 044589686c PWA for iPhone and iPad: PNG icons, splash screens, manifest; stay signed in for 180 days
build-container / build (push) Successful in 1m56s
- iOS ignores SVG touch icons: add 120/152/167/180 apple-touch-icons, 192/512 and maskable manifest icons,
  and 25 splash screens (every iPhone size, iPad portrait+landscape incl. 12.9")
- Icons and splash screens are public so iOS can fetch them without a session
- Manifest: id, scope, categories, shortcuts; iOS standalone polish (no callout, no overscroll)
- Sessions last SESSION_DAYS (default 180) and renew daily while in use
- tools/make-icons.py regenerates the artwork

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 15:44:39 -04:00
nmemmertandClaude Sonnet 5.5 55e0c39171 NE Hub: Seafile, OnlyOffice, Plex, calendar and mail in one PWA
build-container / build (push) Canceled after 4m16s
- Mobile-first PWA (phone tab bar with More menu, iPad/desktop rail)
- Passkey (WebAuthn) sign-in gates the whole app; first passkey via setup code
- Files: Seafile browse/upload/new doc/rename/move/share link/preview/delete
- In-app OnlyOffice editing with JWT-signed configs and save-back to Seafile
- Plex music player via plex.tv sign-in and a server-side proxy
- Calendar agenda from private ICS links (recurrence + time zones)
- Search, Home dashboard, webmail deep links, audiobooks frame
- Dockerfile, compose, and a Gitea Actions workflow that builds the image

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 13:22:03 -04:00