Restructures the page as a full-height flex column so the persistent
chrome (DiscoverTabs, search input, facet tabs, header) stays anchored
at the top and only the result grid scrolls. Same treatment for the
empty-state SuggestionFeed.
Main retains overflow-y-auto for other pages, but with h-full + flex-col
+ min-h-0 on the inner scroll region this page contains its own
overflow and main's scroll never triggers — search field + facet tabs
remain visible while you browse results.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The main nav was carrying surfaces that didn't belong on it:
- Search led to an empty page when clicked (you only ever want to land
there from the global SearchInput typing into /search?q=...). Drop it.
- Requests is downstream of Discover (you discover, then you request).
Lift both onto a shared horizontal tab strip; keep their URLs so
bookmarks survive. New DiscoverTabs component used by both pages.
- Settings + Admin are operator chrome, not primary surfaces. Move them
into the username dropdown alongside Log out, with Admin gated on
is_admin. Users see Settings + Log out; admins see Settings + Admin
+ Log out.
Final main nav: Home / Artists / Albums / Liked / Discover / Playlists.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Local-input + 250ms debounce drives Lidarr search; tab switch refetches
with new kind. Track-kind Request opens a confirm modal explaining the
album that will be added; Confirm fires createRequest, Cancel is a no-op.
Successful requests flip the card to 'requested' optimistically.
Shell nav now exposes /discover between Search and Playlists.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>