Bubbles 🫧 Blog

You can now suggest category changes

All incoming posts are automatically tagged with a fitting category. Bubbles uses a Naive Bayes classifier that runs locally on the server and does not send any data to third parties. The results are usually quite good, but sometimes posts are assigned the wrong categories.

If you're signed in, you can now click any post's category label and suggest a different one. For now, two different people need to suggest the same category, and it will be changed. I might increase this threshold in the future.

  • Please note that you can suggest a maximum of 10 changes per day.
  • You can only suggest a new category once for each post, no edits.
  • When a category was changed, suggestions are locked for that post.

I hope you'll like it!

Ben 🫧


For Bubbles category RSS feed users: If your reader already polled an article from its original category feed and the category later changes, the article will reappear in the new category's feed. Sorry for the duplicate.

Naive Ben Meets Naive Bayes

You likely do not know me personally. Before I dive into todays topic, I'd like to give you some context about "the Bubbles guy". I got my first computer (the "family computer") at age 13, around the year 2000. I needed to ask for permission before "going to the internet", because during internet time, nobody in the house could make phone calls. HTML was my perfect starter drug, because you could spend hours building stuff offline, and then just upload it, when internet was available. Nobody around me knew how to use computers, so I had to figure it all out by myself. I created all kinds of web stuff, "homepages" with animated gifs, guest books, chatted on IRC and ICQ. I was living in the small web, because there was no big web yet.

I once even invented Street View, because I wanted to advertise for my small village in Eastern Germany. I took my bike, stood on a street and made a grainy picture in all 4 directions. Then I went 50 meters along the street and repeated the procedure. The portable web cam I was using could store up to 32 images, so after 8 spots, I had to go home to save the images to the computer. I mapped out all 4 streets in a couple of afternoons. After that I built a static html file for each image with four arrows next to it, up, down, left, right. I than manually linked all matching html files to the corresponding arrow buttons. That took me a while. But when I was finally finished, you could navigate the whole village, look left / right, turn around, go back and forth. I uploaded it to some geocities web storage, nobody ever visited the site. I didn't care. I made something that worked, that was good enough for me.

In the last 25 years I started various blogs, but I realised that I can best express myself through crazy web shenanigans, not through writing. I also published various podcasts from 2009, when you still had to explain "podcasting" to people. I even wrote my master thesis in 2014 about podcasting.

Materialised Thinking

Fast forward to 2026. I am married, lost my parents, moved 5 times, I have written books about lifehacks, work as project manager and consultant in IT, and I am called dad by someone. Things have changed. But I still love building stuff. That's when Bubbles showed up in my head. I built Bubbles to prove myself that I can do it, that I can manifest it into existence. I also own a 3d printer for the same reason. Materialised thinking.

But being a tinkerer and being a perfectionist is hard to combine. When I publish something, it should be well thought through, it should feel nice, not hastily put together. I wanted to have the same experience with Bubbles, something that I would like to have, not something built for others. It should have meaningful features, always spark the "ah, brilliant, he thought of that too" moment for first time visitors. And with short attention spans and so many new crappy projects I wanted it to stand out.

You only get one shot if somebody visits your site for the first time. If something doesn't work, is low quality or looks off, they'll likely never come back. As a perfectionist I think about lot's of features and ideas that could improve Bubbles. And I struggle with critique. If somebody points out things that I already thought about but didn't have the time to fix or to improve, I am really angry with myself. That's really a problem for me, that most of the time leads to not publishing at all. With Bubbles I decided otherwise and opened myself up to feedback, for the learning experience and in a way for self-improvement.

Categories

Initially Bubbles didn't have categories. I didn't like the general approach other directories use to sort personal blogs into drawers. Creative blogs are not about Tech OR Arts OR Writing OR History. They are so many things at once. After just a few days of publishing Bubbles somebody pointed out, that categories are missing. You only have one chance with first time visitors, so I felt pressure to include categories. So I did, blog-based, exactly what I wanted to avoid, because that was the quickest approach. I had no clue how visitor counts would develop, so every new visitor would add to the pressure.

A few days after the implementation I received complaints, that various entries where showing up in the wrong categories. That's exactly what I anticipated before with most blogs being so uncategorisable. To quote myself from one paragraph above "If somebody points out things that I already thought about but didn't have the time to fix or to improve, I am really angry with myself.". So I thought about, how to quickly (!) improve the categorisation. It needed to be entry-based. I could not do it manually for hundreds of entries each day, I did not have enough users to let the community do it, keyword-based categorisation would be low quality, and removing categories again would make me land on square one.

For me, the most obvious and pragmatic choice to fix "a problem" was to have a small LLM do the categorisation. Just connect the API (Claude Haiku, in my case), have the model spit out a category for each entry, based on the title and an excerpt (if provided in the feed). I was happy with the results. The quality of the categorisation improved greatly. I added the category rss feeds. Entry-based categorisation across thousands of blogs is a unique feature that I have not seen anywhere else. I wanted to collect some more new features and write a blog post about it. Like always, I also updated the privacy page to reflect, what kinds of tools Bubbles uses.

The storm

Little did I know, that with that small and (for me) pragmatic decision, I crossed a line, that made some people very angry. Three people reached out to have their blogs removed from Bubbles, citing the privacy page and a Mastodon post, where I have replied to a user about AI usage. I felt a storm coming and I should have known better. So I thought about removing categories again, but I am checking all new posts on Bubbles in my RSS feed reader category by category, so that would disturb my own workflow.

Then last week my wife surprised me for my birthday with a weekend in a converted construction trailer in the woods. Finally some time off, maybe it was no coincidence, that my wife chose a trailer without any wifi. But that's when I made the decision to remove the AI-categorisation. I received one harsh mail where I was told that I betrayed the whole small web community, and that I am "not one of them" because I don't have a personal blog. Do you remember my hesitation to publish anything at all, out of fear about the critique? I received dozens of mails with kind words and support, but those negative mails really brought me down.

So after I was back from the woods, on Sunday I did one last research before removing categories or going back to blog-based categorisation. That's when I stumbled across Naive Bayes, a classifier algorithm invented in the 90s. You "train" the algorithm on existing data (titles, excerpts, categories already in the Bubbles database), and it spits out long word lists with probabilities. Every new item you give it will sort it into one of the categories. Just some basic statistics, almost instant, directly on the server, no AI or third-parties involved. Why didn't I think of that before? So I created a data set for english entries and a second one for german entries, and made some tests. The english model picked the same category as the AI model previously in 85% of cases. For german it was even higher. Not surprising, since those were the entries the NB classifier was trained on. It was good enough for me, so I removed the AI categorisation completely and replaced it with the new local classifier. Of course I also updated the privacy page to have it reflect the new reality and removed the Claude dependency, because I was not using it anymore. Also I added a new question on AI usage in the FAQ, so people can find it more easily. After I was done it was already late in the evening, so I did not have time to blog about the change, but the privacy page was updated. So all was good. Or so I thought.

Transparency

When I woke up, I found a mail from Brennan in my inbox asking investigative questions about the changed privacy page. I saw a forum discussion he was referring to, and I was really happy that he reached out and actually asked. So I took my time to answer all his questions, which he kindly published on his blog. I tried not to repeat things you can already read in his article, but that one needs repetition: I fucked up, and I'm sorry! (I thought about making this the entry title, but it sounded too clickbaity, even if it is true)

I also wrote:

I am working on Bubbles in my spare time as a hobby project, besides my full time job, family and health. I am not a greedy megacorp that wants to squeeze the last buck out of its user base, just one passionate guy that sometimes makes good, sometimes bad decisions. And sometimes really bad ones. I also did not expect Bubbles to blow up like this, so bad decisions would be in the spotlight so quickly. I expected maybe a few hundred visitors in the first weeks, definitely not 10k.

One sentence that Brennan did not include, but I want to share as well:

I don't know if this mail helps, or if trust is already lost beyond repair. There's no hidden agenda, cover-up, or bad intentions. It's just bloody hard to get so much attention, anticipate some reactions and to communicate properly.

On using AI

In short: Bubbles was using an AI model to categorise entries for about two weeks. It is not using AI anymore and never will. That said, I am talking about the Bubbles runtime, the stuff that actually runs on the server, like polling feeds, checking for deadlinks, selecting categories, creating dynamic feeds and Bubbles Briefing, deactivating broken blogs, and so on. There's no AI involved in all of that and no user data is sent to any third-party.

BUT: I am using the help of Claude Code for the development of Bubbles. I have from the beginning and I will continue to do so. Claude Code helps me to create the code base, add new features and debug errors. Without it, there would be no Bubbles. Personally I don't think, that this counts as "vibe-coding", because it is not just writing a clever prompt and suddenly Bubbles appears. There's hours and hours, days and days of careful planning, design and decision making. If you disagree, try it! But I am totally ok, if you have a different interpretation. Bubbles currently lives in a private repo. I plan to make it public in the future, but it's messy, it needs cleanup, and it takes time.

If you feel misled or betrayed by any of my actions, I am truly sorry! That was absolutely not my intention. If you decide that our paths split now, just drop me a mail at feedback@bubbles.town and I will remove your blog or your votes. No questions asked. If you want to counterbalance the mails that I am likely to receive now, and appreciate my honesty, please also drop me a mail.

Ben 🫧

Privacy — BubblesIndependent blog posts, ranked by the community. Good stuff bubbles up. The rest pops.bubbles.town

Introducing Bubbles Briefing 📰

Yesterday, Cesar Aguirre published a short post with a simple wish. Blog aggregators should feel more like newspapers. You open one, read yesterday's news, reach the end, and come back tomorrow. Less endless scroll, knowing when you're done.

I was not even finished reading, but my brain was already in implementation mode. That's how much I liked the idea! I already came up with measures to avoid doom scrolling when building Bubbles, like manually clicking to the next page instead of infinite scrolling, heavy focus on RSS feeds (which are finite by themselves), or the @bubbles2 bot that just boosts entries with 2+ votes. But a newspaper? I'm sold!

So here it is: Bubbles Briefing. A finite edition of the top posts on Bubbles, published once a day at 06:00 Europe/Berlin. Same view for everybody. When you reach the end, you're done. There's no page 2.

How it works

Every morning a team of transistors creates a new edition with everything important happening on Bubbles in the last 24 hours. Once written, it stays put. Votes keep moving on the underlying posts, but the edition itself doesn't change until tomorrow.

The three rubrics:

  • Fresh Bubbles: the five top-ranked posts appearing in the Briefing for the first time, plus whichever post the community is talking about most.
  • Still Bubbling: posts that were already in Fresh Bubbles on a previous day and are still ranking high today. A long-running viral post can stay here for a while, then quietly fall off. (not showing on day 1, because everything's fresh)
  • By Category: up to two posts per category, so tech doesn't swallow everything.

What you can do with it

Bookmark /briefing and open it with your morning coffee. Subscribe to the RSS feed at /briefing/feed if you prefer a reader. Archive URLs like /briefing/2026-04-22 are permalinks (link to them, share them, they won't change).

Voting works inside the Briefing the same as elsewhere. Your vote counts toward tomorrow's ranking, never today's frozen edition.

Why

Briefing is not trying to replace the other views. Without readers exploring the endless /new stream, or shaping the /top page with fresh votes, the Briefing would be empty tomorrow. The existing views are for fearless adventurers sailing new oceans. The Briefing is like taking a relaxing bubble bath.

Thanks to Cesar for the nudge. If you write what you wish existed, sometimes someone builds it.

Now go outside. Touch some grass. See you tomorrow at six.

Ben 🫧

A Simple Feature That Could Transform IndieWeb Aggregators · Just Some Codecanro91.github.io

One Month of Bubbles

Bubbles turned one month old today. I launched it on March 21 with a short Mastodon post (original in German):

... So I built Bubbles. For me. And hopefully for a few thousand others too.

On that evening just 4 weeks ago, writing "hopefully for a few thousand others too" was a joke. I put it there because I genuinely assumed this would be a personal tool that maybe a dozen people liked and used. 6,500 visitors in the first month was not on my bingo card.

The numbers

  • 6,570 unique visitors
  • 44,392 pageviews
  • Visitors from 94 countries
  • 5,222 blogs, 23,224 posts indexed
  • 1,826 votes from 167 different readers
  • 263 users have signed-in at least once
  • 43 users already use the follow function to follow 153 blogs

Top visitor countries: United States (2,214), Germany (1,261), United Kingdom (578), Singapore (364), Canada (293). Busiest day was yesterday with 1,230 visitors and 4,712 pageviews. Firefox accounts for 32% of visits, which I take as a healthy indie-web signal. Mobile and desktop are split almost evenly.

One more data point: the most active 10% of voters cast 69% of all votes so far. A small, active group is doing most of the ranking work, which is how this kind of system tends to go. The votes from the rest of the readership still shape the long tail. You can bring this number down if you start voting today ;)

What actually surprised me

The part I was not prepared for is how warmly Bubbles has been received. The analytics are nice, but the real sign it's working is what arrives outside the graphs: thoughtful emails from readers, kind DMs on the Fediverse, bloggers writing their own posts about Bubbles, and a handful of donations via Buy Me a Coffee.

And then there's the embed widget. More bloggers than I would have ever expected (I expected exactly one: me, for this blog.) have voluntarily added the vote-count snippet to the bottom of their own posts. Every time I spot another blog with a 🫧 counter below the text, I grin. People putting a small badge for someone else's project on their own site is such a generous thing.

Bloggers who wrote about Bubbles

A non-exhaustive tour, with credit where it's due:

  • moddedbear wrote "Bubbles Is the Cool New Way to Find Blogs" and added the vote widget to every post on the site
  • William Parker wrote "Good Stuff Bubbles Up 🫧" after spotting Bubbles in his referrals, and designed the emoji vote-widget version that became the basis of the official embed
  • Firesphere published "🫧 It is impossible to say 'Bubbles' angrily" (a title I love), with a walkthrough for adding the vote widget
  • Kiko wrote "I Love Bubbles", and reached out because he is planning to develop a broader integration
  • Matto wrote "Explore the smol web with Bubbles", focusing on the non-tech angle
  • sigkill wrote a thoughtful piece, cautious about algorithmic drift, which I enjoyed reading
  • dmpop was pleasantly surprised to find his blog in the catalog, and added Bubbles support to his own Tinble blog engine
  • Rhys Wynne spotted Bubbles in his analytics and wrote a warm little post about it
  • Gordon McLean mentioned Bubbles in his broader post "Why I still like the internet"
  • Brandon was unsure at first, we had a pleasant exchange, and he ended up rooting for it

There are more out there, and the full list lives on Bubbles itself.

Thank you

If you voted on a post, followed a blog, added the embed widget to your own site, submitted a blog to suggest@bubbles.town, sent an email, or just read something good and closed the tab satisfied: thank you. Bubbles is a small, weird, personal project. The fact that so many strangers keep showing up is the best kind of feedback I could ask for.

Ben 🫧

sitting at his laptop on his dining table

Ben 🐘 (@viermalbe@troet.cafe)Angehängt: 1 Bild .🫧🫧🫧 Ich bin seit vielen Jahren RSS-Ultra. Hunderte, handverlesene Feeds. Aber RSS zeigt mir nur die Quellen, die ich schon kenne.troet.cafe

Two new RSS feeds 🫧

Two small additions.

Full content feed
/feed/full is a variant of /feed/new that also includes the full article text for each entry, as long as the blog author put it into their own feed. Nothing gets scraped, so if the source feed only has a short summary, that's what you'll see in the /full feed too. I added this one to my feed reader, so I can quickly scan all new posts.

Personal feed
A personal feed is now also listed on /rss, if you're signed in: that feed contains new entries from the blogs you follow. The feed URL uses a random token instead of your handle. There's also a reset button for the token on /rss, in case it leaks or you want to invalidate the old URL for other reasons.

Bubbles — Fullbubbles.town

Show Bubbles Votes on Your Own Blog

A small thing I've been wanting for a while: you can now drop a snippet on your blog that shows the live Bubbles vote count for each post. Scroll to the bottom of this post to see it in action.

The full guide lives at https://bubbles.town/embed but here's the short version:

It's one line of HTML and a script tag:

<div class="bubbles-vote"></div>
<script src="https://bubbles.town/vote.js" defer></script>

That's everything you need. The widget figures out the post's URL, looks it up on Bubbles, and renders a small text link with the count. Clicking it opens the entry on Bubbles in a new tab, where readers can vote or join the discussion over in the Fediverse.

If the post isn't on Bubbles yet, the widget renders nothing at all. Once it gets imported via feed polling, the count shows up on the next page load automatically.

There's also a minimal variant for when you want something compact inline, like next to an author name or date:

<div class="bubbles-vote" data-format="minimal"></div>

That renders as only 3▲.

If your blog doesn't set <link rel="canonical"> or use <article> tags, you can pass data-url manually. The embed page explains when.

Looking forward to seeing this on your blogs. 🫧
Ben

Update Apr 16: There's now a third variant, data-format="emoji". It renders as plain text, inheriting font, size, and color from the surrounding page, so the widget blends into an afterword or byline instead of looking like a separate button.

<div class="bubbles-vote" data-format="emoji"></div>
<script src="https://bubbles.town/vote.js" defer></script>

Thanks to William Parker, whose Bear Blog customization showed how nicely the minimal variant can disappear into the text. The new variant packages that idea so you don't have to write the custom CSS.

Embed — BubblesIndependent blog posts, ranked by the community. Good stuff bubbles up. The rest pops.bubbles.town

Five Lesser-Known Bubbles Features

Due to awesome bloggers writing about Bubbles, it gained some traffic yesterday.
So I wanted to highlight some features you might have missed.

1. @bubbles2
You probably know about @bubbles, which posts every new entry to the Fediverse. But there's a second bot: @bubbles2. It only boosts posts that have received 2 or more votes. Follow it if you want a curated stream of what readers actually liked, right in your Fediverse timeline. (German speakers: @bubbles2_de does the same for German posts.)

2. The Bookmarklet and PWA

You're reading a great blog post somewhere on the web and wonder: is this on Bubbles? Two ways to find out.

On desktop, drag the "Open on Bubbles" bookmarklet from the FAQ to your bookmarks bar. One click on any blog post, and it'll look it up on Bubbles for you.

On mobile, install Bubbles as a PWA (your browser should offer "Add to Home Screen"). Once installed, you can use your phone's native Share button on any page and pick Bubbles from the list. It'll open the entry if it exists.

3. Random Post

Click the Bubbles logo. That's it. Every click takes you to a random post from the archive. Good for when you don't know what you want to read but you want to read something. (There's also a Konami code easter egg, but I'll let you discover that one yourself.)

4. Keyboard Shortcuts

Press ? on any list page to see the full shortcut overlay. The essentials: j/k to move through entries, v to vote, o to open the article, and t/n/h to jump between Top, New, and Hot. There's also / to jump straight to the search bar. Once you get used to them, clicking feels slow.

5. Public Analytics Dashboard

Bubbles uses self-hosted plausible.io for analytics. No cookies, no tracking, no Google anything. And the dashboard is completely public. You can see exactly how much traffic the site gets, where visitors come from, and which pages are popular. Full transparency, no login required.

Bubbles, @bubbles@social.bubbles.townA community-ranked feed of blog posts from independent, personal blogs. New posts flow in automatically from curated sources. You vote on the good onesocial.bubbles.town

Awesome Updates for Bubbles 🫧

I haven't even started promoting Bubbles properly, but since launching last week I've already gotten some really nice feedback from you all. Thank you! If you like Bubbles, please spread the word. Bubbles lives and dies by word of mouth. 🫧🫧🫧

I've also been busy building since launch and wanted to quickly share a few new features:

  • Follow blogs: You can now follow blogs. The new "My" category shows the latest posts from all blogs you follow.
  • Your favourite blogs: When you're logged in, click your name in the header. Besides your recent votes, you'll now see a list of blogs whose posts you've voted for the most.
  • Hall of Fame: There's a new Hall of Fame linked in the footer. It shows the most popular posts and blogs (by vote count), updated live.
  • German Blogs: Bubbles now supports hundreds of German blogs, jawohl! You can switch the language in the header. Would you be interested in more languages?
  • Themes: I've added a few new designs that you can cycle through by clicking the icon at the bottom of the footer. How do you like "Brutal"? It's my new favourite.

A few more things worth mentioning (check the FAQs for details): Bubbles supports keyboard shortcuts for navigation, you can use a bookmarklet or the PWA to jump from any blog post to its entry on Bubbles, and there's a search at the bottom if you ever can't find a post.

If you have feature ideas, or just want to say hi to some random guy on the internet: feedback@bubbles.town. Your feedback and recommendations keep Bubbles going!

Thanks for the support! 🫧🫧🫧
Ben

BubblesIndependent blog posts, ranked by the community. Good stuff bubbles up. The rest pops.bubbles.town

Why I Built Bubbles 🫧

I've been an RSS obsessive for years. Hundreds of feeds, hand-picked one by one. But RSS only shows you sources you already know. New voices don't find you there.

What's been missing: a front page like Hacker News, but exclusively for personal blogs. No tech bros, no AI hype, no trendy startups. Just an endless stream of thoughtful blog posts, curated by real people.

So I built Bubbles 🫧. For myself, first. And hopefully for a few thousand others too.

https://bubbles.town

BubblesIndependent blog posts, ranked by the community. Good stuff bubbles up. The rest pops.bubbles.town