Skip to content

Bring Poster Features to TV Cards, Improve Curated Layouts and Fix Logo Sizing - #72

Merged
Thunderhawkk merged 10 commits into
Harborofficial:beta-branchfrom
AnessBen:card-layout-and-unify-poster-tv-cards
Nov 6, 2026
Merged

Thunderhawkk merged 10 commits into
Harborofficial:beta-branchfrom
AnessBen:card-layout-and-unify-poster-tv-cards

Conversation

@AnessBen

@AnessBen AnessBen commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

Summary

This PR brings Poster and TV cards closer to feature parity while preserving their layout-specific presentation. It introduces independent settings for each card style, consolidates shared card logic, improves overlay positioning, and updates settings previews.
It also adapts curated lists to the selected card layout, improves TV logo sizing, and fixes landscape skeleton sizing to prevent layout shifts.

Changes

Card settings and feature parity

  • Add a Poster/TV style switch to the Cards settings page.
  • Keep hover preview as a shared setting across both layouts.
  • Add TV support for ScoreStack, status badges, awards, anime awards, and hover previews.
  • Add award display options for tabs, Award badge, or no awards.
  • Keep Poster award-tab positioning configurable and fix TV award tabs at the top of the card.
  • Rename the settings section from Poster Cards to Cards and update related headings and labels.

Shared card behavior

  • Extract shared card state and calculations for watched status, badges, ribbons, watchlist, and local-library indicators.
  • Consolidate score resolution and rating calculations in useCardScoreState.
  • Reuse award components, detection logic, and shared label handling across Poster and TV cards.
  • Preserve layout-specific rendering, artwork, and positioning.

Preview and overlay positioning

  • Make score and badge previews follow the active settings tab and its configuration.
  • Match TV preview proportions to actual landscape cards while preserving Poster preview sizing.
  • Adapt shared overlay stacking to each layout and prevent collisions between badges, ribbons, awards, bookmarks, and score indicators.
  • Adjust watched, award, ribbon, bookmark, and curated badge positioning.
  • Fix Award Tabs preview alignment in RTL languages.

Curated lists

  • Adapt curated row sizing to the selected card style.
  • Use landscape number badges for TV cards and compact pills for Poster cards.
  • Expand curated-list grids to use available page width.
  • Keep curated rows consistent with the active card layout and sizing.

TV artwork and scrolling

  • Allow compact and square logos to grow taller while preserving existing sizing for wide logos.
  • Match TV landscape skeleton dimensions to the final card height.
  • Prevent rows from shrinking and causing layout shifts as TV cards load.

Note: The i18n changes are limited to Arabic for now and are only a small temporary addition to support the new settings labels.

UI Changes

curated list and Grid when cardStyle is set to TV:
curatedLogoProblem
GridProblem
After:
GridFixed
Small Compact logo issue (when logo is square or near square it looked too small):

my-collage before my-collage after

Added scores, badges, awards, and hover previews to TV-style cards, all configurable from Cards settings.

Screenshot 2026-11-01 004024

Cards Setting Page:

Cards

@Thunderhawkk

Copy link
Copy Markdown
Contributor

Thanks for the PR! The improvements to TV cards, shared card behavior, and curated layouts look good overall.

I found one issue that needs to be addressed:

1. [P1] Poster cards lose the IMDb anime rating option

In src/components/pick-card.tsx, the refactored useCardScoreState() call does not pass the resolved animeImdb value as animeImdbId.

Because the shared hook requires this ID to fetch IMDb ratings for anime, selecting IMDb as the anime-card rating source can still display the MAL rating instead.

Please pass animeImdbId: animeImdb into the hook and add a regression test to ensure the selected IMDb rating source works correctly.

Regarding merging: I also have several local commits that haven't been pushed to beta-branch yet. Some of these include changes to TV card artwork, backdrop handling, and settings that overlap with this PR.

The PR currently merges cleanly against the remote branch, but integrating it with my local changes produces conflicts in tv-card.tsx and settings/load.ts.

I'll push my pending local commits first so those changes are available on the remote branch. Once they're pushed, we can resolve the overlapping changes while preserving both the existing functionality and the improvements introduced here.

After the IMDb rating issue is fixed, the conflicts are resolved, and CI passes, I'll re-review and merge the PR.

@AnessBen
AnessBen force-pushed the card-layout-and-unify-poster-tv-cards branch from bbbc7e4 to c78ddbb Compare November 1, 2026 17:50
@AnessBen

AnessBen commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

I passed animeImdbId: animeImdb

@comet776

comet776 commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

The refactor looks good overall, and the previously reported anime IMDb rating regression is fixed. However, I found a few issues that should be addressed before merging.

  1. [P2] TV card overlays can overlap — tv-card.tsx:264–274
    When watchlistBadge is bottomEnd and scores are positioned at the bottom, the bookmark, watched indicator, and ScoreStack can overlap. Their positions should account for each other.

  2. [P2] Curated grids ignore card scale — list-grid.tsx:73
    The grid uses sizing.min without applying posterScale, making curated cards inconsistent with regular rows.

  3. [P2] Curated ranking badges can overlap other overlays — curated-card-badge.tsx:15–20
    Landscape ranking numbers occupy the same top-left corner as DUB badges, status badges, and ribbons. curatedBadgeAtTopStart only accounts for award badges.

  4. [P2] Switching between Poster and TV settings can modify the badge limit — cards-tab.tsx:57–73
    prevBadgeCountRef is shared across both layouts. Switching from a layout with fewer enabled badges to one with more can trigger the effect and overwrite the user's manually configured cardBadgeLimit, even though no badges were enabled.

  5. [P3] Settings search anchors break in TV mode — nav.tsx:8341–8386
    Search entries still target On the poster, but the section heading changes to On the TV. A stable anchor should be used regardless of the selected layout.

Validation: TypeScript typecheck passes. The focused artwork tests pass 7/8 cases; the remaining provider-warning failure is also present on the base branch.

Overall, the shared card logic is a good improvement, but I'd recommend fixing these regressions and adding targeted tests for overlay positioning and independent card settings before merging.

Match curated row sizing to the active poster or TV card style. Use a landscape number badge for TV cards and keep the compact pill for poster cards.

Expand curated list grids to use available page width. Pass shared row sizing into the grid so card columns and badges follow the active shape.
Detect logo aspect ratios after loading and apply different compactness thresholds based on intrinsic image width (2.1 for logos up to 500px, 2.7 for logos up to 800px). Keep wide logos at the existing 34px height while allowing compact logos to grow to 54px, improving logo visibility in TV cards.
Match lazy TV card skeletons to the final landscape card height by removing captions that do not appear on loaded TV card style. This prevents rows from shrinking and shifting content below as cards mount during scrolling.
Add a Poster/TV settings switch to the Cards page and give TV cards
ScoreStack, Badges, Awards, and hover preview options.

- Share card state and score resolution between PosterCard and TvCard while
  keeping layout-specific rendering, award presentation, and positioning in
  their respective components.
- Extract shared state for Top 10, cinema, rerun, new, DUB, watched,
  watchlist, and local-library indicators.
- Centralize score resolution and badge calculations in useCardScoreState.
- Bring TV cards to feature parity for scores, status badges, awards,
  anime awards, and hover previews.
- Add independent Poster and TV card settings, including award tabs,
  award badges, and no-award modes.
- Keep Poster award-tab placement configurable and fix TV award tabs at
  the top of the card.
- Adapt overlay stacking to each layout and prevent collisions among
  badges, ribbons, awards, bookmarks, and score indicators.
- Update card settings previews to match the active layout and settings.
- Include miscellaneous fixes and improvements across card components.
- Removed `BottomEnd` from `tvCardLogoPos` since that position is now occupied by the score stack.
This covers the layout switch fix, removal of TV’s separate badge limit, and showing all enabled score badges on TV cards.
@AnessBen
AnessBen force-pushed the card-layout-and-unify-poster-tv-cards branch from c78ddbb to ce6d565 Compare November 6, 2026 19:07
@AnessBen

AnessBen commented Nov 6, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for the review! I've addressed all five points u mentioned

Reserve top-right slots for curated TV badges, ribbon and award tabs before rendering score chips. Keep bottom-placed score chips unchanged. Update curated-list badge shape assertions and add TV overlay stacking regression tests.
Keep the top-right bookmark visible with stacked ribbon, scores and badges at standard TV card size. Match the card Settings preview to the real TV bookmark and award positions. Extend overlay regression coverage.
@Thunderhawkk
Thunderhawkk merged commit 1316a32 into Harborofficial:beta-branch Nov 6, 2026
1 of 2 checks passed
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.

3 participants