commits
Add infinite query hooks: useAlbumsByGenreInfiniteQuery,
useArtistsByGenreInfiniteQuery, and useTracksByGenreInfiniteQuery.
Switch pages to use useInfiniteQuery and an IntersectionObserver to
auto-fetch next pages and show a "Loading more..." indicator.
Add /genre/$id route and Genre page with Artists, Albums, and Tracks
tabs. Introduce use*ByGenre hooks and wire up get*ByGenre API calls.
Add Album and Track types. Replace tag spans with router Links so tags
navigate to genre pages and update related components and styles.
Propagate genre parameter through API lexicons, xrpc handlers, and
analytics
types/handlers/queries. Also apply generated formatting and type updates
across
lexicon code (quote/style changes)
Use the URI path with app.rocksky. prefix removed instead of
constructing a /{user}/scrobble/{id} URL via multiple splits.
Replace anchor tags with @tanstack/react-router Link for client-side
navigation. Add import and cast the 'to' prop to string to satisfy TS
typings.
Load recent artists (getLastDays(7)) to extract up to 10 unique tags and
render them as hashtags on the handle. Clear the range when no artists
are returned. Also increase StatefulPopover Body zIndex to 60 for proper
visibility.
Introduce a range state that's passed into useArtistsQuery. Clear the
range when the query returns no artists to avoid passing date arguments.
Remove explicit any in useLibrary artist mapping to use inferred Artist
types. Add mb-[35px] to profile tags container for extra bottom spacing.
Rename Artist.tags to genres and populate tags in responses from the
genres data; import omit to remove the genres property from returned
objects
Add optional tags array to artist lexicon, pkl and TypeScript defs.
Populate tags by querying artists.genres from the DB and merging
them into the analytics response in getActorArtists.
Generate TypeScript types for app.rocksky.playlistItem and set its
required fields to createdAt, track, order, and subject. Add a
tags:string[] to song defs. In the feed handler, join artists and map
artists.genres into the response tags field.
Include tags from the API in getSongByUri and surface them in Album
and Song components. Replace BaseUI Tag usage with simple span
rendering and add tags to album/song types.
Add tags array to album and song lexicons, PKL files, and generated
TypeScript types. Populate tags in getAlbum, getSong, and getScrobble by
joining artists and using artist.genres. Also replace Math.pow with the
exponent operator for the Spotify retry delay calculation.
Add --color-genre CSS variable for light and dark themes
Map artistResult.data.genres (previously tags) into the artist object
and render genres as hashtag spans using the new --color-genre color.
Remove Group's bottom margin and adjust the avatar/info wrapper layout.
Invalidate the 'infiniteFeed' react-query cache when a song is liked
from SongCover and StickyPlayer. Add useQueryClient and
feedGeneratorUriAtom
usage and make onLike async to await cache invalidation.
Add consola to apps/web dependencies and switch console.* calls to
consola.* across components and libs. Update bun.lock to include
consola and bump @rocksky/cli version to 0.3.4
Normalize common accented characters and change artist comparison to
allow partial matches in both directions to reduce false negatives
Add a 100ms pause after every 5 pages when more pages remain
to reduce load and avoid overwhelming consumers
Send events as JSON arrays to improve throughput (batch size 50).
Increase PAGE_SIZE to 500 and send queued events in batches.
Update client to handle batched messages and reduce ping interval
to 30s. Adjust progress/logging to report events every 500.
Add pagination error handling and logging, ensure client paginating
state is cleared and errors are sent to clients. Minor refactor and
formatting cleanup.
Cache drizzle-kit in the image to ensure the migrate command is
available,
and add host volume mounts for the SQLite DB, WAL, and SHM files so the
database state is persisted across container restarts.
Replace denoland/deno with node:24, add DENO_INSTALL and PATH env
vars, and update CMD to invoke the deno binary
Include the Authorization header in a logger.warn when admin auth
fails to assist debugging and trace unauthorized requests.
Log unauthorized access attempts