Menu

Posts tagged “technology”

Building a music discovery app (and what I learned about Product)

I miss liner notes. In the age of infinite streaming and algorithmic playlists I find myself longing for the days when you’d flip open a CD case and actually read about the music you were listening to. Who produced this? What’s the story behind the album? Why does this track feel different from everything else they’ve made?

Spotify and Apple Music are great at giving you more music. They’re less good at helping you understand why you might love something, or what to explore next. So I built my own solution—and then rebuilt it twice.

The problem I was trying to solve

My relationship with Last.fm goes back to 2007. In case you’re not familiar, Last.fm is a service that “scrobbles” (tracks) everything you listen to, building a comprehensive history of your musical life. It’s become a wonderful archive of my taste evolution over nearly two decades.

Last.fm is great at telling you what you listened to. It’s less useful for helping you understand why you might love something, or what else you should explore. Spotify and Apple Music’s algorithmic playlists are fine, but they often feel like they’re optimizing for engagement rather than genuine discovery.

I wanted a tool that would:

  • Show me context about the artists and albums in my listening history
  • Help me discover music through similarity and connection, not just popularity metrics
  • Give me that “liner notes” depth I was craving
  • Work with my existing Last.fm data (18 years of listening history is a lot to throw away)

So I started building, first by copy-pasting from GPT–4 (the olden days!), and most recently with Antigravity + Claude Opus 4.5 (we’ve come a long way since 2023). Here’s where it all stands today…

Listen To More: three iterations and counting

Listen To More is the core project—a music discovery platform that combines real-time listening data with AI-powered insights.

The first version was simple: a personal dashboard that pulled my Last.fm data and displayed it nicely. Functional, but limited. The second version added some AI summaries using OpenAI’s API. Better, but still rough around the edges.

The current version—iteration three—is a complete rebuild focused on speed and multi-user support. What started as “a thing I made for myself” is now something anyone can use. Sign in with your Last.fm account, and you get:

  • Rich album and artist pages with AI-generated summaries, complete with source citations (so you know the AI isn’t just making things up)
  • Your personal stats showing recent listening activity, top artists and albums over different time periods.
  • Weekly insights powered by AI that analyze your 7-day listening patterns and suggest albums you might love
  • Cross-platform streaming links for every album—Spotify, Apple Music, and more
  • A Discord bot so you can share music discoveries with friends

The tech stack is Hono on Cloudflare Workers, with D1 (SQLite) for the database and KV for caching. The whole thing is server-side rendered with vanilla JavaScript for progressive enhancement. Pages load in about 300ms, then AI summaries stream in asynchronously.

I chose this stack partly because I work at Cloudflare and wanted to understand our developer platform better. More on that later.

Extending the ecosystem with MCP servers

MCP stands for Model Context Protocol. In plain terms, it’s a standard that lets AI assistants (like Claude) connect to external data sources and tools. Think of it as giving an AI the ability to actually use personalized data rather than just answer questions based on pre-training.

I built two MCP servers to extend my music discovery ecosystem:

Last.fm MCP Server

Available at lastfm-mcp.com, this server lets AI assistants access your Last.fm listening data. Once connected, you can have conversations like:

  • “When did I start listening to Led Zeppelin?”
  • “What was I obsessed with in summer 2023?”
  • “Show me how my music taste has evolved over the years”

The AI can pull your actual scrobble data, analyze trends, and give you personalized insights. It supports temporal queries (looking at specific time periods), similar artists discovery, and comprehensive listening statistics.

Discogs MCP Server

This one connects to Discogs—the massive music database and marketplace that’s especially popular with vinyl collectors. If you have a Discogs collection, the MCP server lets AI assistants:

  • Search your collection with intelligent mood mapping (“find something mellow for a Sunday evening”)
  • Get context-aware recommendations based on what you own
  • Provide collection analytics and insights

Both servers run on Cloudflare Workers and use OAuth for secure authentication. They’re open source if you want to poke around or deploy your own.

What I learned

I’m a Product Manager, not an engineer. But I’ve found that having more technical depth broadens the scope of things I am able to contextualize—and makes me more confident in my interactions with engineers. Here’s what building these projects reinforced for me:

  • Side projects are a low-stakes learning environment. When you’re building for yourself, there’s no pressure to ship by a deadline or meet someone else’s requirements. You can experiment, break things, and iterate freely. I tried approaches that would have been too risky to propose in a work context—some of them broke the site spectacularly, others worked beautifully.
  • There’s no substitute for using your own product. I use these tools every day. That constant exposure surfaces issues and opportunities that you’d never catch in a quarterly review or user interview. The feature prioritization becomes obvious when you’re feeling your own friction.
  • Building with your company’s tools is invaluable. I now have deep, practical knowledge of Cloudflare Workers, D1, KV, and the rest of our developer platform. When I’m talking to customers or evaluating feature requests, I’m drawing on real experience, not just documentation. I can empathize with the developer experience because I’ve lived it.
  • The fun matters. I keep coming back to these projects because I genuinely enjoy working on them. The satisfaction of solving a problem you personally care about is different from the satisfaction of shipping something at work. Both are valuable, but the former is what sustains a side project through the inevitable rough patches.

What’s next

I have a list of features I’d love to add—better recommendations, more sophisticated listening pattern analysis, maybe even integration with other music services. But I’m also learning to pace myself. These projects aren’t going anywhere, and part of the joy is the slow, steady improvement over time.

If you’re curious, you can check them out here:

And if you’re a PM thinking about starting a technical side project: do it. Pick something you personally care about, use tools you want to learn, and give yourself permission to build slowly. The lessons transfer in ways you won’t expect.

Where Do the Children Play?

Eli Stark-Elster has a piece that reframes the “kids and screens” debate in a way I haven’t seen before. The usual narrative blames addictive tech design, but he offers an alternative:

Why do our children spend more time in Fortnite than forests? Usually, we blame the change on tech companies. They make their platforms as addicting as possible, and the youth simply can’t resist — once a toddler locks eyes with an iPad, game over.

I want to suggest an alternative: digital space is the only place left where children can grow up without us.

The argument is that kids have always needed spaces away from adult supervision. We’ve just paved over the forests and creeks where they used to find it.

What makes this more than speculation is the research he cites: 72% of 8 to 12-year-olds say they’d rather spend time together in person, without screens. 61% wish they had more time to play with friends without adults around. The kids don’t actually want to be on screens all day. They’re looking for something we’ve taken away.

It seems like what they want is to wander together in a forest. But they can’t. So they boot up Fortnite or TikTok instead.

I’m still sitting with this one. It doesn’t let tech companies off the hook, but it does suggest that “just take away the iPad” isn’t addressing the real problem.

Building MCP servers in the real world

This has been my experience with MCP servers as well. As useful as I think my Last.fm MCP server is, I can’t see it every having more than a dozen users. But internal company servers are massively useful:

MCP is being used especially heavily by internal data and platform teams to give internal users access to systems. These are systems that these users perhaps already had access to, but it was either too complex or too broad, or needed a lot of documentation or special skills to use.

Wiki search is so much better now that I can use our internal MCP server for it via Windsurf.

Source: Building MCP servers in the real world

Measuring AI's Impact on Shipping Speed and Code Quality

Will Larson has a good post about how they’re adopting AI at his company. The process is interesting, but this is the part that jumped out at me:

My biggest fear for AI adoption is that they can focus on creating the impression of adopting AI, rather than focusing on creating additional productivity. Optics are a core part of any work, but almost all interesting work occurs where optics and reality intersect.

It’s really hard to figure out if AI tools are (1) helping teams ship faster (2) without sacrificing quality.

We’re working on figuring out this problem right now at Cloudflare. Our proposed approach sidesteps the problem of per-commit AI attribution (did Copilot write this line? did Claude?) by correlating team-level AI tool usage with team-level health metrics over time. If a team’s AI adoption increases by 30% and their change failure rate stays stable, that’s a useful signal. If AI usage spikes and incidents start trending up, that’s worth investigating.

The key insight is that you don’t need perfect attribution to get directionally useful data. Correlation isn’t causation, and teams adopting AI tools may already be more experimental or higher-performing. But at least you’re measuring something real instead of the something like “# of lines written by AI”, which leads straight to the Goodhart’s Law problem where metrics become targets.

New side project: Discord Stock & Crypto Bot

Not sure how many people would be interested in this, but it was fun to make so I thought I’d share. This is a Discord bot that provides real-time stock and cryptocurrency information, 30-day price trends, and AI-powered news summaries through slash commands. When you add the bot to Discord you can use the /stock and /crypto commands to get information like this:

Want to add it to your Discord server? Head over here!

Horrible edge cases to consider when dealing with music

Metadata is the hardest problem in software, and these examples prove my point. Don’t @ me!

My favourite: a band named brouillard, with a single member called brouillard, whose every single album is named brouillard, and of course, so is every single track.

Source: Horrible edge cases to consider when dealing with music

Brief thoughts on the recent Cloudflare outage

Lorin Hochstein is a big name in the LFI (Learning From Incidents) space. He often writes about post-incident reviews, and he has a very interesting write-up of the Cloudflare outage on November 18, 2025 blog post. I especially loved this part:

Companies generally err on the side of saying less rather than more. After all, if you provide more detail, you open yourself up to criticism that the failure was due to poor engineering. The fewer details you provide, the fewer things people can call you out on. It’s not hard to find people online criticizing Cloudflare online using the details they provided as the basis for their criticism.

I think it would advance our industry if people held the opposite view: the more details that are provided an incident writeup, the higher esteem we should hold that organization. I respect Cloudflare is an engineering organization a lot more precisely because they are willing to provide these sorts of details. I don’t want to hear what Cloudflare should have done from people who weren’t there, I want to hear us hold other companies up to Cloudflare’s standard for describing the details of a failure mode and the inherently confusing nature of incident response.

Source: Brief thoughts on the recent Cloudflare outage

The illegible nature of software development talent

This resonates so hard. The tech industry’s obsession with LARPing roles in the public sphere has really hurt our ability to work with people who care and want to do the best work of their lives without distractions.

I think it’s unlikely the industry will get much better at identifying and evaluating candidates anytime soon. And so I’m sure we’ll continue to see posts about the importance of your LinkedIn profile, or your GitHub, or your passion project. But you neglect at your peril the engineers who are working nine-to-five days at boring companies.

Source: The illegible nature of software development talent

Apple Music’s hi-res audio is *still* standing in its own light

Man. Standing ovation to this quote. I just want to know!!!

I’m not here to debate if the jump from lossy AAC to lossless ALAC is audible. Many people say they cannot hear the difference between the two (lucky them). Others say they can. Most importantly for any comments section, that second group is not seeking permission from the first group to stream losslessly. Apple Music supplies ‘Lossless’ and ‘Hi-Res Lossless’ streams at no extra cost to the subscriber, and some listeners just want to know that their audio hasn’t been lossy compressed along the way, even if they’re not 100% sure they can always hear the benefits. Many of these same people already know that an album’s mastering technique will impact its sound quality more than the delivery format.

Anyway. This article is your reminder that if you’re using AirPlay or Bluetooth with Apple Music you’re not getting lossless.

Source: Apple Music’s hi-res audio is *still* standing in its own light

"The Mountain in the Sea", AI fears, and connectedness

(Mild spoilers ahead for The Mountain in the Sea by Ray Nayler)

I recently finished the novel The Mountain in the Sea by Ray Nayler (see Andrew Liptak’s excellent review here). On the surface it’s about discovering an octopus colony that evolved into a self-aware, intelligent community—and trying to communicate with them. But as with all good novels it’s actually about other things. It’s about loneliness, understanding each other, conservation—and yes, our relationship with AI.

First, to get the AI thing out of the way… I don’t want this blog to sound like I am anti-AI. I use AI every day both at the chat / thinking partner level and the prototyping / vibe coding level. I am a fan of using AI for the things that it’s good at. I just worry that we are not teaching people outside of the tech bubble what those things are. And that’s why we are seeing so many tragic stories right now about chat agents “guiding” people to horrific actions (see, for example, Let’s Talk About ChatGPT-Induced Spiritual Psychosis and ‘I Feel Like I’m Going Crazy’: ChatGPT Fuels Delusional Spirals).

With that as background, the book does a good job of highlighting some of the dangers of using AI for things it’s not good at. First, this is a good point about how with every new technology we have to think about what can go wrong, not just what can go right:

When you invent the ship, you also invent the shipwreck; when you invent the plane you also invent the plane crash; and when you invent electricity, you invent electrocution. Every technology carries its own negativity, which is invented at the same time as technical progress.[1]

Following from that, this quote about the main character “killing” their AI companion stood out to me…

That’s how this works. That’s how addictive this is—this need to feel like there is always someone there, unconditionally. Someone to talk to. Someone who understands. To not have to do the work myself to make myself understood. Instead, I just kept on with this self-deception, pretending I had someone when I did not. I know the doctors who prescribed you to me meant well. They thought they were helping me through a dark time. But in the end, you aren’t anything but a prosthesis. You can’t replace real support.

The other major theme in the book centers around our connectedness with each other and the world, how language can get in the way of connection, and how lonely we’ve become as a society[2]. I love this call to empathy as a way to get ourselves out of that dilemma (emphasis mine):

Are we trapped, then, in the world our language makes for us, unable to see beyond the boundaries of it? I say we are not. Anyone who has watched their dog dance its happiness in the sand and felt that joy themselves—anyone who has looked into a neighboring car and seen a driver there lost in thought, and smiled and seen the image of themselves in that person—knows the way out of the maze: Empathy. Identity with perspectives outside our own. The liberating, sympathetic vibrations of fellow-feeling. Only those incapable of empathy are truly caged.

A book about discovering intelligent life in an octopus species with its own language and culture might seem like a weird premise. But it works really well here. It gets pretty heavy-handed towards the end, but it still made me think a lot about the “loneliness epidemic”, our relationship with AI, and the continuing role of empathy in making sure we stay connected with each other. Recommended!


  1. This line of thinking reminds me a lot of Kevin Kelly’s 2010 (!) book What Technology Wants in which he makes a similar point that technology is never “neutral”. That’s ok, but we have to be prepared for it.  

  2. I don’t think that’s a controversial statement any more. See articles like The Anti-Social Century