DEV Community

Cover image for How I Built My Own Last.fm Clone on Bluesky’s AT Protocol — Join the Beta!
Tsiry Sandratraina
Tsiry Sandratraina

Posted on

5 2 1 2 2

How I Built My Own Last.fm Clone on Bluesky’s AT Protocol — Join the Beta!

The idea of tracking and sharing what I listen to has always fascinated me. I’ve been a long-time user of Last.fm, but I wanted something more open, decentralized, and built on modern protocols. That’s why I decided to build my own Last.fm alternative—a social music tracking platform running on Bluesky’s AT Protocol.

Now, I’m inviting early adopters to join the limited beta and help shape the future of this project! 🚀

Why Build a Last.fm Alternative?

Last.fm has been around for years, but I saw some limitations:

Walled garden: No true interoperability with decentralized social networks.
Limited control: Users don't fully own their listening data.
Feature stagnation: The core experience hasn't evolved much.
The Bluesky AT Protocol (ATProto) offers a decentralized social graph where users own their content and identity, making it the perfect foundation for a next-gen music scrobbling service.

Image description

How It Works

This project brings music tracking (scrobbling), sharing, and stats to Bluesky's AT Protocol. Here’s a high-level breakdown:

1️⃣ Scrobbling Tracks
I've built my own Rockbox fork that can send scrobbles automatically to the API.
It also supports Spotify, local players, and streaming services (via future integrations).
The API accepts “Now Playing” and track history data.

2️⃣ Bluesky AT Protocol for Social Feeds
Instead of a centralized database, users’ listening data is posted as ATProto records, making them portable.
Users can see a feed of their friends’ recently played tracks—just like a decentralized Last.fm friends list.
Playlists, top artists/albums, and listening trends are stored as ATProto posts, which can be discovered and shared.

3️⃣ User Trends and Analytics
Weekly/monthly listening trends (top artists, albums, tracks).
Open API for users to export their data.

Image description

Tech Stack

To ensure scalability, performance, and flexibility, I chose the following stack:

  • Backend: Node.js (Hono.js) – A fast, lightweight framework for handling API requests.
  • Database: Xata (PostgreSQL) – A managed database for storing scrobbles and user data.
  • Analytics: DuckDB – Efficient in-memory analytics for trends and insights.
  • Caching: DragonflyDB – A Redis-compatible, high-performance caching layer.
  • Microservices (Rust):
    • Spotify Watcher: Tracks the user’s currently playing Spotify song.
    • analytics Processor: Handles scrobbling data aggregation.
  • Protocol: Bluesky ATProto for decentralized data.
  • Frontend: React for the web UI.
  • Auth: Bluesky DID (Decentralized Identifiers).

What's Next?

I'm actively improving the platform and adding new features, but my long-term goal is to open-source the project so anyone can contribute, self-host, or build upon it. I believe in open and decentralized music tracking, and I’d love for the community to help shape it!

Join the Beta!

This project is still in its early days, but I’m opening a limited beta for those interested in trying it out. If you love music and want to explore a decentralized Last.fm alternative, sign up here:

➡️ Request Beta Access

I'd love your feedback! What features would make this the ultimate music tracking service? Let's discuss in the comments or on Bluesky.

🔵 Find me on Bluesky: @tsiry-sandratraina.com

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (1)

Collapse
 
mikaoelitiana profile image
Mika Andrianarijaona

Good job @tsirysndr 👌🏽👏🏽

nextjs tutorial video

Youtube Tutorial Series 📺

So you built a Next.js app, but you need a clear view of the entire operation flow to be able to identify performance bottlenecks before you launch. But how do you get started? Get the essentials on tracing for Next.js from @nikolovlazar in this video series 👀

Watch the Youtube series

👋 Kindness is contagious

If this post resonated with you, feel free to hit ❤️ or leave a quick comment to share your thoughts!

Okay