commits
Import and and not from drizzle-orm and require lovedTracks.uri to be
non-null so only valid loved tracks are returned
Show @handle next to display name, remove underline styling, and call
scrollToTop when opening profiles (imported helper). ReplyModal no
longer closes the modal on profile link click.
Add null checks and early returns in Handle to avoid using an undefined
profile.did. Add profile.data?.did to effect deps and use "" fallbacks
when checking Set membership. Fix useActorCompatibilityQuery type
(undefined) and remove unused LabelMedium import. Use empty-string
fallback when calling useFollowersInfiniteQuery.
Implement compatibility API client and add Compatibility type and
Profile type. Add useActorCompatibilityQuery hook and a new
Compatibility component included in the profile Overview. Also add
Authorization header for the compatibility request, update API client
typings, and apply small UI and null-safety fixes (Stats label markup,
profile follow handling, and follower query typing).
Implement XRPC handler, lexicon and PKL definitions, and generated TS
types. Add analytics compatibility types and register the handler. Apply
small web UI fixes (replace anchor with Link, adjust z-index).
Add apps/web/src/lib/scrollToTop.ts and import it in profile pages.
Replace duplicated inline scroll logic with scrollToTop(), call it when
navigating to profile links. Convert external <a> to internal Link and
narrow route prop types from any to string
Add an id to the main container and a scrollToTop helper that
smooth-scrolls #app-container to top. Call it alongside setActiveKey on
profile Links and replace the external anchor with an internal Link.
Update SignInModal copy and classes for the handle prompt and link. Add
z-index and dialog/background overrides to the ApiKeys modal and adjust
the Close color. Set input backgrounds, borders, text and caret colors
and restyle Cancel/Create buttons (colors, hover and shape).
Introduce neighbourViewBasic schema and
app.rocksky.actor.getActorNeighbours lexicon. Implement XRPC handler,
wire into TS lexicon index and types, and add analytics types/handler
support for neighbour data
Prepopulate whereConditions with arrayContains(...) for each genre.
Remove redundant arrayContains from innerJoin and simplify the join to
match only artistId, always applying where(and(...whereConditions)).
Remove prepopulated arrayContains genre filters from algorithm handlers
and use an empty whereConditions array. Move the genre filter into the
join and guard the .where call when there are no conditions.
Add API getScrobbles and hooks for paginated scrobbles Introduce
followingFeed atom and wire it into Feed to switch between generator
feed and following scrobbles and handle infinite scrolling, loading
state, and empty state Add "following" category to FeedGenerators
(hidden when not logged in)
When following=true and a viewer DID is provided, retrieve the viewer's
followed subject DIDs and restrict scrobbles to those actors. Return an
empty array if the viewer follows no one. Update lexicon and type defs
and import inArray for the DB query.
Add optional "dids" query param to getFollows lexicon and server logic;
use inArray only when dids are provided and parse cursor via
Number(cursor). Wire frontend to pass dids and sanitize limit. Replace
followsAtom with a Set for efficient membership checks, add Followers
and Follows pages with infinite scroll, add activeTab atom, and add
SignInModal follow support. Also minor style tweak to default button
color.
Support optional "dids" array query param in lexicon/schema and server
handler (use inArray) to filter followers. Add web client endpoints,
React hooks, follows atom, and follow/unfollow mutations plus a Follow
button in the profile UI.
Order follow queries by follows.createdAt DESC and apply a limit
(default 50). Use a createdAt timestamp cursor (lt) and return the next
cursor in responses.
Create follow records through the agent and persist them to the DB;
validate records before writing. Prevent self-following and duplicate
follows (isFollowing check plus ON CONFLICT DO NOTHING). Update
getFollowers/getFollows/getKnownFollowers to return the subject profile
alongside mapped follower lists. Increase handler timeouts from 10s to
120s.
Use viewer auth to return followers that the viewer also follows via an
EXISTS subquery and map profiles for presentation. Register graph
endpoints: follow, getFollowers, getFollows, getKnownFollowers,
unfollow.
Make content loaders responsive and use a 3脳2 card grid skeleton Set
width to 100% and update heights/viewBox to 1100x800 and 1100x360
Replace detailed rects/circles with uniform large card placeholders
Increase fetched nowPlayings from 7 to 30. Add horizontal scroll
container with left/right chevrons, overflow masking, smooth scroll, and
hide scrollbar.
Store resolved PDS under key pds:<did> with 15m TTL to avoid repeated
resolution
Store agent sessions into sqlite auth_session (key atp:{did}) when a
user logs in and return a signed JWT to the client. Expose sqliteDb in
context. createAgent now attempts to resume stored sessions with
AtpAgent and removes invalid sessions on resume failure.
Add app.rocksky.graph.getKnownFollowers lexicon (JSON/PKL), generated
TypeScript types, and register the method in the lexicon index and
schema dictionary. Also tidy QueryParams formatting in several generated
type files. Add getKnownFollowers lexicon and types
Add lexicon JSON and PKL defs for app.rocksky.graph.getKnownFollowers,
register it in the lexicons index, and add generated TypeScript types
and client method.
Add lexicon JSON and PKL defs for follow, getFollowers, getFollows, and
graph defs. Generate corresponding TypeScript types and register entries
in the lexicons index. Update lexicon schema (IntegerType
maximum/default) and tweak a HandlerAuth import to use a type import.
Serialize createdAt with toISOString and remove debug logs in
like/unlike handlers. Add test_parse_like to verify LikePayload JSON
parsing.
Log event label and message before publishing to NATS in likeTrack and
unLikeTrack functions.
Include xata_* metadata and nested id objects in published payloads.
Fetch the saved lovedTrack to populate timestamps and IDs
Show SignInModal (with a `like` flag) when a user attempts to like
without a token. Add optimistic local state for liked and likesCount to
update UI immediately. Stop event propagation on the like button and
cover to prevent parent click handlers.
Add null checks and early returns in Handle to avoid using an undefined
profile.did. Add profile.data?.did to effect deps and use "" fallbacks
when checking Set membership. Fix useActorCompatibilityQuery type
(undefined) and remove unused LabelMedium import. Use empty-string
fallback when calling useFollowersInfiniteQuery.
Implement compatibility API client and add Compatibility type and
Profile type. Add useActorCompatibilityQuery hook and a new
Compatibility component included in the profile Overview. Also add
Authorization header for the compatibility request, update API client
typings, and apply small UI and null-safety fixes (Stats label markup,
profile follow handling, and follower query typing).
Add optional "dids" query param to getFollows lexicon and server logic;
use inArray only when dids are provided and parse cursor via
Number(cursor). Wire frontend to pass dids and sanitize limit. Replace
followsAtom with a Set for efficient membership checks, add Followers
and Follows pages with infinite scroll, add activeTab atom, and add
SignInModal follow support. Also minor style tweak to default button
color.
Create follow records through the agent and persist them to the DB;
validate records before writing. Prevent self-following and duplicate
follows (isFollowing check plus ON CONFLICT DO NOTHING). Update
getFollowers/getFollows/getKnownFollowers to return the subject profile
alongside mapped follower lists. Increase handler timeouts from 10s to
120s.
Add app.rocksky.graph.getKnownFollowers lexicon (JSON/PKL), generated
TypeScript types, and register the method in the lexicon index and
schema dictionary. Also tidy QueryParams formatting in several generated
type files. Add getKnownFollowers lexicon and types
Add lexicon JSON and PKL defs for app.rocksky.graph.getKnownFollowers,
register it in the lexicons index, and add generated TypeScript types
and client method.