October 13, 2026
WhatsApp Web did not work with two numbers. So I built my own.
Hey everyone, this is Allan, and today I want to talk about the Boring Chat.
It is basically an application that I created for myself, because I wanted to use WhatsApp Web, but I have two numbers on my cell phone: the personal number and the business number. So it was not working. I had to install WhatsApp on my computer, on my desktop, and I had to open WhatsApp Web in the browser, and the desktop application was a mess. It did not work at all. And I could not have both phone numbers in the same tab and the same window.
So I decided to create my own application. It got the name Boring because I like to call my applications with the name Boring. I find the word boring to be really good, not because it is something that is not worth it, or not funny or exciting, but because it is something simple. Simple but important. I have this idea that it is the boring work that matters. That is where I got the name from.
I needed it because I needed to have the client conversations on WhatsApp, and I have more than one number. I also wanted my AI agents to have access to my conversations with clients. Not all the time, but if I asked, I wanted them to be able to get what I talked about with my clients. So it is really important for my work.
It started with Chatwoot
It started first with me using Chatwoot. It is an open source, self-hosted application. I started using it in May of this year, and I created my own fork for the fixes that I needed. I wanted to change it a little bit. That is why I got Chatwoot: it was really, really well structured, and I would be able to use it, but there were other things that I wanted, so I created my own fork. I called that the Boring Chat.
I also got experience with Chatwoot, because I found a bug. Keyboard shortcuts were sometimes firing twice. After switching conversations there was this problem, this really bizarre problem: a keydown listener would leak. I realized that some messages were being sent twice, and sometimes thrice. So I found this bug and I sent it upstream to Chatwoot with a pull request, and it was actually merged on September 3rd. So I also had my small contribution to open source, based on this bug that I found working with my own fork of Chatwoot.
Rebuilding it from zero
But last week I got the idea of rebuilding it from zero, because I wanted it leaner and only with the things that I used, only with the features that I really needed. Chatwoot was really good, but the build time, for example, would take so long, because I would build an entire Rails application with a lot of features that I was not using. So I decided to create a simpler version for me, and I started doing it on October 8th.
That was last week. I got the first UI, but it was a mess. You are seeing on the screen right now how the first UI was, and it was really shit. It was not good. I saw that it needed a lot of improvement, so I had some back and forth conversations with my AI agent, and I started working. I also needed to get all the data from my own fork. There were like 70,000 messages since May, and it was a migration that needed to be done with care and with attention.
It has been only a few days. I actually stopped using my Chatwoot version yesterday, and now I am using only the new Boring Chat. I created it using the language Go. It is my first application with Go.
You are seeing the UI right now. I found a really good UI, because it has all the features that I need. It shows if a conversation is from my personal or my business number, and it is a clean UI. I look at it and I see an application that was created with care, because I had to really think about the UI. It was as if I was delegating that to a designer, but I had to have a lot of talks with that designer for the designer to understand what I wanted. That is how I worked with AI, and I am pretty happy with the result that I got with my new Boring Chat.
A CLI for the agents
For the agents I built an API and a command line tool. I have a lot of skills, a lot of workspaces and a lot of folders where I work with AI, and over time I created a lot of scripts that were calling my previous Boring Chat. So yesterday I decided to make a CLI, to make it a lot simpler and easier for the AI. It will actually save tokens and save time daily.
Now the agents use the same chat that I use. I think that in some days I will try to get one more phone number and use it only for an agent, so I will be able to have a WhatsApp number for my AI assistant. I call her Olivia, because that is a derivation from my name: one of my surnames is Oliveira, and Olivia is from that. I am not that creative. I always get names from things that I already know.
Chatwoot and Evolution API
I still have not finished turning off Chatwoot, because I will keep it working for some days to be sure that I have no data loss. But in the next few days I will stop using Chatwoot. It is a really great open source project. If you want to use WhatsApp with an API, I really think you should give it a try.
To connect Chatwoot to an API, I used Evolution API, and right now I am still using Evolution API. It has been the best self-hosted and open source API that I have used, because I have been using it for years already.
I am not sending spam messages from my number, so I think it is really unlikely that I will be banned, but there is this risk. That is why I also save all the data, all the message data and all my contacts, in my own Postgres database.
That is it for today: just one thing that I created in the past few days.