Cloud library browsing is half-built. Users can see the list of artists, genres, years, etc., but tapping any item does nothing — CategoryDetailView renders plain HStack rows instead of NavigationLinks. This makes 5 of the 8 browsing categories (artist, genre, year, publisher, country) decoration-only. Albums is the only category that actually works end-to-end.
Separately, the bug notes mention years displaying as 2.012 / 1.972 (float format from Chad Music). Investigation shows ChadAlbum.year is declared as Int? and decodes correctly in the model. However, the category endpoint (/api/cat/year) returns ChadCategory items where the item field is a string — it may contain the float representation there. Needs verification at the API level, but the fix location is clear regardless.
Tapping an artist/genre/year/publisher/country in CategoryDetailView navigates to a filtered album list showing all albums matching that category value.
CloudBrowserView.swift (CategoryDetailView) + possibly ChadMusicAPIClient.swift (if a filtered fetch helper is needed)AlbumListView patternNavigationLink with value-based navigation or inline destinationChadMusicAPIClient.fetchAlbums() returns all albums — filter client-side by matching album.artist, album.genre, album.year, etc. against the selected category itemChadCategoryType has a rawValue that matches the ChadAlbum property name (artist, genre, year, etc.) — use this for generic filtering via KeyPath or switchChadCategory.item (String) to Int, compare with ChadAlbum.year (Int?)AlbumDetailView for the final drill-down — don't duplicate album display logicThe simplest approach:
CategoryDetailView, wrap each list item in a NavigationLink that pushes a new FilteredAlbumListView(category:, value:)FilteredAlbumListView fetches all albums via fetchAlbums(), then filters by the category field matching the selected valueAlbumDetailViewNone — all building blocks exist.
"2.012" as the category item string, the builder must handle parsing (remove dot, parse as integer). If it returns "2012", it's just a string-to-int conversion. Builder should test with real API data.item.count)