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 🫧