SpinStack Limited Beta: Your Music Data, Your Rules
After months of late-night debugging sessions and more edge cases than I care to admit, I’m opening up SpinStack to a small group of beta testers. If you’ve been following along on the blog, you know SpinStack is my personal music analytics platform, a self-hosted scrobbler for Sonos systems that puts you in control of your listening data. If you’re new here, welcome. Let me catch you up.
The Problem With Music Tracking
I’ve been using Last.fm since 2008. That’s years of listening history. Every album, every artist, every phase of my musical taste documented in their database. And then one day I asked myself: What happens if Last.fm goes away? Companies shut down. Services get acquired and shuttered. APIs get deprecated. Your data, your history, your digital identity, gone. Listenbrainz exists as an open alternative, which is great. But it’s still someone else’s server. Still someone else’s uptime guarantee. Still someone else’s data retention policy. So I built SpinStack. Not because I think everyone should self-host everything (though I do think that), but because I wanted my music data to be mine.
What Is SpinStack?
At its core, SpinStack is a scrobbler, it tracks what you play on your Sonos system and logs it to a local SQLite database. But it’s designed to be more than just a data collection tool.
Current features:
- Smart Sonos scrobbling: Monitors all your Sonos speakers, handles pausing/resuming, and only logs tracks you actually listened to (not just skipped through)
- Rich metadata: Automatically fetches album art, release years, labels, and genres from MusicBrainz and Deezer
- Vinyl collection tracking: Keep a “what I have / what I want” catalog
- Listenbrainz sync: Optional dual-logging to Listenbrainz if you want cloud backup
- Web dashboard: Visual interface for browsing your listening history and collection
- Plugin architecture: Extensible system for adding new data sources and integrations
The scrobbling logic is robust, I’ve written about the technical details before if you’re curious, but the short version is: it works. I’ve been running it continuously for three months without intervention.
Why I Built This
I’m not a frontend developer. I’m a systems person who occasionally writes Python. But modern AI coding tools finally made it possible to build something like this without drowning in React boilerplate. I originally had a janky CLI script that logged plays. Then I thought, “what if I could actually see this data?” And then, “what if I could answer questions like ‘what was my most-played album this spring?’” SpinStack started as a tool for me. It turns out when you build something you actually use, you end up fixing the rough edges pretty quickly.
What I’ve Learned
Months of real-world usage has taught me some interesting things about my own listening habits: My kitchen is my most-used speaker. Not surprising—I spend a lot of time cooking. But what was surprising: I almost exclusively listen to Pandora’s coffeehouse stations when I’m doing household stuff. Apparently I’m that person. Having the data locally means I can ask weird questions. How many times did I play that one album last month? What genres dominate my rainy-day listening? Most importantly: it’s my data. I can query it however I want. Export it. Visualize it. Feed it to an LLM and ask it to generate a “Wrapped” style report. The possibilities are only limited by SQL and imagination.
What Beta Means
Let’s be clear about what this is and isn’t.
This is:
- A working, stable system I use daily
- Ready for people who are comfortable running Python applications
- A foundation for future experimentation *Yours to keep, modify, break, whatever
This isn’t:
- A polished product with hand-holding documentation
- Something I’m going to provide ongoing support for
- Ready for non-technical users (yet)
I’m looking for about 5 people to test this. Ideally folks who:
Have a Sonos system Are comfortable with Python and command-line tools Want to own their music data Understand what “beta” actually means
Technical Requirements
SpinStack runs on:
- Tested platforms: macOS, Linux (including Raspberry Pi)
- Untested but probably fine: Windows (your mileage may vary)
- Requirements: Python 3.x, a few hundred MB of disk space
- Not supported: Docker (UPnP discovery doesn’t play nice with containers)
Installation is straightforward: unzip the release, run setup.py, follow the README. If you can install a Python package, you can run SpinStack. It’s not memory-hungry. It runs fine on a Raspberry Pi 3. I’ve had it running on a Pi for months without issues.
What’s Next
After beta, I’ll probably open-source this on GitHub. Maybe. If there’s interest and if I can be bothered to deal with issues and pull requests. For now, this is a controlled release. I want to see how it works for people who aren’t me, in environments I haven’t tested, with music libraries I haven’t seen. If you find a bug, cool. If you have a feature request, also cool. But I’m not making any promises about fixing or building anything. This is a “take it or leave it” release. The whole point of SpinStack is data ownership. That includes the code. If you want to fork it and build something different, go for it. If you just want to run it and forget about it, also great.
How to Join
If you’re interested in testing SpinStack, reach out:
LinkedIn: Send me a DM Email: hello@skadilabs.dev
I’ll send you the release zip with everything you need to get started.
Final Thoughts
Music tracking matters to me. Not in a obsessive way, but in a “I want to remember what I was listening to during different phases of my life” way. Spotify Wrapped is fun for five minutes. But it’s ephemeral. It’s curated. It’s designed to make you share, not to help you understand your actual listening habits. SpinStack is the opposite of that. It’s raw data. It’s yours. It’s permanent (as permanent as your own backups, anyway). If that resonates with you, I’d love to have you as a beta tester.
For the technical deep-dive on how SpinStack’s scrobbling logic works, check out my previous posts: Introduction to SpinStack and The Scrobbling Logic