spacecowboy
@spacecowboy17.bsky.social
620 followers 50 following 1.6K posts
Interests in ML and social aspects of tech. Building For You feed: https://bsky.app/profile/spacecowboy17.bsky.social/feed/for-you Hobby project: linklonk.com
Posts Media Videos Starter Packs
spacecowboy17.bsky.social
Vision Pro for the masses?
spacecowboy17.bsky.social
Try For You - it shows posts based on your likes. There are no diapers there.
spacecowboy17.bsky.social
Try For You - a personalized feed based on your likes. At first glance there is no Hazbin Hotel content there.
spacecowboy17.bsky.social
You know what we could do with a collection of Bluesky posts? Get recommendations from For You based on the posts in your collection!

That would probably be the next step to implement.
spacecowboy17.bsky.social
Got oauth working and you can view someone's collections:
rankthat.net/profile/spac...

This is still a client-side webapp talking directly to PDS. No AppView.
spacecowboy17.bsky.social
@gracekind.net had a related suggestion to block a specific author if you have "show less like this" posts of that author in For You.

Is there a risk of false positives? Maybe you don't like someone's takes on topic X but are ok with their posts on topic Y.
spacecowboy17.bsky.social
Ah, this appears on the feed if you haven't liked the feed itself yet. Please give it a like and this post will go away.

bsky.app/profile/spac...

I should probably make a video of how to like the feed.
spacecowboy17.bsky.social
How to like a feed is not super obvious. Here are the steps:

1. Open the feed page: bsky.app/profile/spac...
2. Tap on the feed title at the top
3. Tap "like"
spacecowboy17.bsky.social
Vite + React + Tailwind
spacecowboy17.bsky.social
Haven't thought of creating a global rating out of individual rankings.

The goal is to create personalized recommendations based on shared collection items.
spacecowboy17.bsky.social
Try For You - a personalized feed based on your likes. It is often less random than Discover.
spacecowboy17.bsky.social
I was trying to get oauth to work and ran out of Claude Pro session limit - oauth will have to wait till tomorrow.

Deployed the version with the app password login - it works now but it does not automatically redirect from rankthat.net/login to rankthat.net/ so you may need to edit the url.
RankThat - Collections
rankthat.net
spacecowboy17.bsky.social
I guess switching to OAuth is the next step so the user does not have to trust it with a password.

This is quite amazing how you can go from localStorage based demo to something that actually is visible to everyone.
spacecowboy17.bsky.social
We now have the demo app write to the PDS when you login with an app password rankthat.net/login

All I needed to tell Claude was: "let's now do the heavy lifting and switch to real PDS storage"

Added my first item: pdsls.dev/at://did:plc...
spacecowboy17.bsky.social
Try For You - it shows a mix of furry and cars based on your likes. No sports.
spacecowboy17.bsky.social
I haven't thought of that, but I guess a collection could be an item in another collection since an item is just a url (at:// or https:/ /).
spacecowboy17.bsky.social
2. The items and the dividers are ordered by the user. I'm thinking of how to attach the notion of "priority" to them for the purposes of making recommendations to the user. Should we have a "rating" attached to each item and/or divider. Or should we use the order in the collection as the priority?
spacecowboy17.bsky.social
Yes, the initial step is the single-player experience where you can create collections.

The real goal is a collaborative discovery.
spacecowboy17.bsky.social
Share our thoughts on the lexicon draft: rankthat.net/about

Maybe we could build a lexicon that is useful across apps.
RankThat - Collections
rankthat.net
spacecowboy17.bsky.social
I asked Claude to fake the PDS calls with localStorage. So the UI works with it as if it's an async PDS API. Hopefully, it should be easy to switch to the real PDS backed implementation.
spacecowboy17.bsky.social
Open questions:

1. How to represent seen and disliked items? Store them as a divider that has "seen items"/"disliked items" type? Or should they not be stored in PDS at all and be private on the app server? Or maybe give that choice to the user? Or encrypt them in PDS so only the user can read?
spacecowboy17.bsky.social
Once I'm happy with the UI (which I think is pretty close) I'm planning:
1. Create the lexicon
2. Replace faked PDS calls on the client with the real PDS calls
3. Build a recommendation "app server" that would have similar logic to For You
spacecowboy17.bsky.social
I'm starting with a client only UI prototype and I'm faking the PDS calls with localStorage: bsky.app/profile/spac...
spacecowboy17.bsky.social
I want to make an atproto app for creating collections of anything - create book shelves, rate movies, collect science papers, fictional character tier list, etc.

Before committing to a lexicon I want to understand what a good user experience would look like and then build the corresponding lexicon
spacecowboy17.bsky.social
I changed that to two levels: collections that hold items and dividers (like a book divider) as a flat list. You can drag either items or dividers, you can delete dividers and add new ones.

Give a try to the demo and let me know what you think. I'll pass it to Claude :)