Add Favorites, storage drill-down, keyboard shortcuts, and What's New

- Favorites: star toggle on course rows, the course page, and a new
  dashboard card; rebased on rename/move, backed up/restored, and
  caught by stale-reference cleanup (also fixed a pre-existing gap
  where favorites.json wasn't in the backup file list).
- Storage Usage: click a folder row to drill into its contents one
  level at a time, with a Back button.
- Lesson player: added ,/. (speed step), [/] (prev/next lesson), and
  F (fullscreen) keyboard shortcuts.
- Settings: a CHANGELOG.md-backed "What's New" list, since VERSION
  alone only ever shows the current build.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-24 19:23:40 -04:00
co-authored by Claude Sonnet 5
parent 1fbf0c9312
commit fc83876abe
10 changed files with 404 additions and 39 deletions
+22 -10
View File
@@ -53,7 +53,10 @@ guessing. Deliberately not derived from `git rev-parse` at Docker build
time - Dockhand's build context doesn't reliably have `.git` available,
which silently produced "unknown" instead of an actual commit. Reads as
`dev` outside Docker (no `VERSION` file to read, e.g. before the first
commit that adds one).
commit that adds one). `CHANGELOG.md` at the repo root accumulates that
same line on every commit (newest first) instead of overwriting it, and
shows as a "What's New" list under the version line in Settings - so you
can see recent history, not just the current build.
---
@@ -186,18 +189,22 @@ silently stay blank instead of erroring.
listed (and reversible) under "Ignored matches," and persist through
backup/restore alongside hidden paths and Next Up.
- *Clean Up Stale References*: finds entries in the hidden-paths list,
Next Up queue, or Recently Viewed history that point at a path no longer
on disk - normally from renaming/moving/deleting a course directly on
the NAS instead of through the app (doing it through the app already
keeps these in sync). Review individually or clear them all at once;
course files themselves are never touched.
Next Up queue, Favorites, or Recently Viewed history that point at a path
no longer on disk - normally from renaming/moving/deleting a course
directly on the NAS instead of through the app (doing it through the app
already keeps these in sync). Review individually or clear them all at
once; course files themselves are never touched.
- *Storage Usage*: disk usage per top-level library folder, largest
first, with a simple proportional bar per entry - manually triggered
(it reads every file's size) rather than run automatically.
(it reads every file's size) rather than run automatically. Click any
folder row to drill into its own contents one level at a time, with a
Back button to climb back out.
**Dashboard**
- Library-wide stats (courses, lessons completed, time watched, time
remaining, day streak) and a 90-day activity heatmap
- Favorites — star any course from its list row or its own page for quick
access from the dashboard, independent of recency or curated queues
- Next Up queue (manually curated, reorderable)
- Pick Back Up (courses with progress that have gone stale)
- Recently Added / Recently Viewed
@@ -207,6 +214,10 @@ silently stay blank instead of erroring.
**Playback & progress**
- Video/audio player with resize, playback-speed presets, and resume-from-
last-position
- Keyboard shortcuts on the lesson page: Space (play/pause), ←/→ (seek
10s), ↑/↓ (volume), `,`/`.` (step playback speed), `[`/`]` (previous/next
lesson), `F` (fullscreen), `N` (quick-capture a note) - see Help for the
full list
- Auto-tracks watch progress and completion per lesson
- Video/audio durations read via `ffprobe` and cached persistently per
course (`.offlineu_duration_cache.json`), so total runtime and per-lesson
@@ -236,9 +247,9 @@ silently stay blank instead of erroring.
**Backup & integrations**
- One-click backup export and restore: settings, hidden-path choices, the
Next Up queue, recent-view history, ignored-duplicate pairs, Outline
config, and every course's progress/notes as a zip (not the course files
themselves). Restore
Next Up queue, Favorites, recent-view history, ignored-duplicate pairs,
Outline config, and every course's progress/notes as a zip (not the
course files themselves). Restore
overwrites current data and needs a matching course folder to already
exist for each course's progress to land - it's a "put my data back"
action, not a merge
@@ -256,6 +267,7 @@ Everything under `OFFLINEU_DATA_DIR` (app-wide, not tied to a course):
| `settings.json` | Theme, layout, library path, etc. |
| `hidden_paths.json` | Courses/folders curated out of the browser |
| `next_up.json` | The Next Up queue, in order |
| `favorites.json` | Favorited course paths |
| `recent_views.json` | Cross-course "Recently Viewed" history |
| `ignored_duplicates.json` | Course-path pairs confirmed not duplicates |
| `outline_config.json` | Outline API token/collection mapping |