Skip to content

fix(web): ui improvements - #304

Merged
ReenigneArcher merged 15 commits into
masterfrom
ra/settings-page-overhaul
Oct 16, 2026
Merged

ReenigneArcher merged 15 commits into
masterfrom
ra/settings-page-overhaul

Conversation

@ReenigneArcher

@ReenigneArcher ReenigneArcher commented Oct 11, 2026 •

Copy link
Copy Markdown
Member

Description

Overhaul the web UI across settings, browsing, and media details, with faster log access and page transitions, clearer keyboard/controller navigation, and a consistent responsive layout.

  • Settings: split configuration into focused pages with collapsible library cards, clearer provider controls, attached image/API-key actions, and explicit day units for scheduled tasks. Move Save, Add library/user, cache clearing, and refresh actions to the top and keep them visible while scrolling. Show background activities before the metadata dashboard.
  • Logs: scan backward through the log file in 64 KiB blocks and stop after finding the requested matches, instead of reading and parsing the whole file. Paginate rendered results and retain the settings layout, existing entries, and clear loading/error states while requests run.
  • Home and libraries: refine hover/focus styling, button shapes, green-to-teal primary actions, and dark readable badges. Keep the hero visible while browsing; add collapsible filters with an applied-filter indicator, sorting, pagination, and preferences scoped to each user/library. Preserve circular watch-progress indicators and use a circular checkmark for watched items.
  • Media details: share the movie layout across shows, seasons, and episodes, with fixed fading artwork, consistent cover sizing, landscape episode thumbnails, restrained title logos, expandable descriptions, and pinned playback actions. Present Extras, Cast, and Crew as transparent horizontal rows and display provider-attributed ratings, including labels for inherited ratings.
  • TV browsing and playback: show season cards on show pages, a season switcher and episode row on season pages, and Previous/Next plus related episodes on episode pages. Keep remaining time inside Resume; holding it with a pointer, keyboard, or controller opens playback options. Order restart actions from episode to season to show; restarting a season/show plays its first available episode without clearing watch history. Fall back from episode artwork to season and then show artwork.
  • Navigation and responsiveness: use arrow keys/D-pad for directional movement and Tab/Shift+Tab or controller bumpers for section changes, remembering each section's last focused item. Fix clipped focus outlines, search-field escape paths, and navigation into Extras/Cast/Crew and scrolling menus.
  • Page transitions: retain valid cached Home/library content while revalidating, restore browsing position and focus, load independent data separately, and discard stale route responses to reduce flashes and delays when opening or leaving an item.
  • Assets and maintenance: embed and serve local provider logos from backend descriptors, move provider request-policy controls into code, and serve the existing application favicon in the backend and Vite development/preview. Document asset sources and navigation, address Sonar/CodeQL findings, and run frontend checks/tests in CI.

Screenshot

Issues Fixed or Closed

Roadmap Issues

Testing

Added frontend regression coverage for settings actions, log pagination/loading, filtering, route restoration, keyboard/controller navigation, resume holds, responsive item layout, TV hierarchy/artwork, rating attribution, watched indicators, and favicon serving. Added Rust coverage for bounded reverse log reads, metadata presentation, and local asset routes.

Latest local validation:

  • npm run check — passed.
  • node --test --test-reporter=dot tests/*.test.mjs — 126 tests passed.
  • npm run build — passed.
  • cargo test --locked --no-default-features --test main test_web::routes::common:: -- --test-threads=1 — 5 route tests passed, including unauthenticated favicon GET/HEAD requests and provider assets.
  • cargo +nightly fmt --all -- --check and git diff --check — passed.
  • Checked the settings action bar at desktop and mobile widths. Verified that built-preview root and nested pages request the favicon, GET returns the canonical icon bytes, and HEAD returns the correct content type with no body. The favicon regression test failed before the fix and passes afterward.

The full Rust suite was not rerun for the final favicon change; the focused route tests above were run.

Type of Change

  • feat: New feature (non-breaking change which adds functionality)
  • fix: Bug fix (non-breaking change which fixes an issue)
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semicolons, etc.)
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: Code change that improves performance
  • test: Adding missing tests or correcting existing tests
  • build: Changes that affect the build system or external dependencies
  • ci: Changes to CI configuration files and scripts
  • chore: Other changes that don't modify src or test files
  • revert: Reverts a previous commit
  • BREAKING CHANGE: Introduces a breaking change (can be combined with any type above)

Checklist

  • Code follows the style guidelines of this project
  • Code has been self-reviewed
  • Code has been commented, particularly in hard-to-understand areas
  • Code docstring/documentation-blocks for new or existing methods/components have been added or updated
  • Tests have been added or updated for new or modified functionality, including regression tests for bug fixes

AI Usage

See our AI usage policy.

  • AI tools were used while preparing this PR

@codecov

codecov Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.85294% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 50.70%. Comparing base (226ad62) to head (504de81).
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
crates/server/src/metadata/providers/tvdb.rs 25.00% 6 Missing ⚠️
crates/server/src/web/routes/settings.rs 98.27% 1 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##           master     #304      +/-   ##
==========================================
+ Coverage   50.24%   50.70%   +0.45%     
==========================================
  Files          40       40              
  Lines       13203    13259      +56     
==========================================
+ Hits         6634     6723      +89     
+ Misses       6569     6536      -33     
Flag Coverage Δ
aarch64-apple-darwin 49.73% <94.85%> (+0.38%) ⬆️
aarch64-unknown-linux-gnu 49.73% <94.85%> (+0.38%) ⬆️
aarch64-unknown-linux-musl 50.16% <94.85%> (+0.39%) ⬆️
x86_64-apple-darwin 49.73% <94.85%> (+0.38%) ⬆️
x86_64-pc-windows-msvc 50.74% <94.85%> (+0.48%) ⬆️
x86_64-unknown-linux-gnu 49.73% <94.85%> (+0.38%) ⬆️
x86_64-unknown-linux-musl 50.16% <94.85%> (+0.36%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
crates/server/src/config.rs 92.97% <ø> (-0.37%) ⬇️
crates/server/src/media.rs 76.40% <100.00%> (+0.56%) ⬆️
crates/server/src/metadata/providers/mod.rs 23.52% <100.00%> (+2.13%) ⬆️
crates/server/src/metadata/providers/themerr.rs 38.94% <100.00%> (ø)
crates/server/src/metadata/providers/tmdb.rs 29.24% <100.00%> (ø)
crates/server/src/metadata/providers/trailerdb.rs 83.33% <100.00%> (+0.26%) ⬆️
crates/server/src/web/routes/common.rs 89.65% <100.00%> (+6.63%) ⬆️
crates/server/src/web/routes/mod.rs 100.00% <100.00%> (ø)
crates/server/src/web/routes/settings.rs 73.00% <98.27%> (+5.53%) ⬆️
crates/server/src/metadata/providers/tvdb.rs 43.45% <25.00%> (+0.11%) ⬆️

... and 6 files with indirect coverage changes


Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 226ad62...504de81. Read the comment docs.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment thread crates/client-web/tests/tv-pages.test.mjs Fixed
@ReenigneArcher
ReenigneArcher force-pushed the ra/settings-page-overhaul branch 2 times, most recently from dcc3c7d to 964f6fc Compare October 16, 2026 04:46
@ReenigneArcher
ReenigneArcher force-pushed the ra/settings-page-overhaul branch from 964f6fc to 5c9b99f Compare October 16, 2026 04:50
@ReenigneArcher
ReenigneArcher marked this pull request as ready for review October 16, 2026 12:36
@sonarqubecloud

Copy link
Copy Markdown

@ReenigneArcher
ReenigneArcher merged commit 1c852c9 into master Oct 16, 2026
46 checks passed
@ReenigneArcher
ReenigneArcher deleted the ra/settings-page-overhaul branch October 16, 2026 14:32
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.

2 participants