why we built another chat widget

The internet has plenty of chat widgets. We built one more anyway, because the ones we ran on a real product kept getting in our way. This is the why: the four things that annoyed us, what we built instead, and what each choice costs us.
the short version
We had a product, customers, and a chat widget in the corner of the site. Then a different one. Then another. Each did its job on day one. After a few weeks each found a new way to annoy us.
They all worked. They were made for companies with a support department, a separate support tool and a budget line for it. We were two people who live in Slack all day and ship on weekends. The widgets kept asking us to become a different company.
So we wrote down what bugged us and turned every item into a rule. Spookat is those rules, in code.
what annoyed us
the site got slower
The chat script loaded on every page, for every visitor. Most of those visitors never opened the chat. They paid for it anyway, in bytes and main-thread time, and our Lighthouse score paid with them. We’d spent evenings shrinking images, and a support tool put the weight straight back.
one more app to babysit
Every widget came with its own inbox. That inbox was a tab nobody kept open. Messages sat there for hours while the whole team was in Slack, one tab away. The person who knew the answer usually wasn’t the person who had the support app open.
the bill punished growth
Pricing was per seat. Letting the person who knew the answer reply meant a bigger plan. The bot billed per conversation, so the better it worked, the more it cost. Both models charge you more for doing support well, which is a strange thing to charge for.
it looked like 2014
A round bubble in a colour from another decade, sitting on a site we’d sweated over. A colour picker was the only control. On a phone the bubble covered our own buttons.
what we built instead
nothing loads before a click
The launcher is one small file, under 4 kb gzipped. The build fails if it grows past that. It makes 0 requests to our API before a visitor clicks and sets no cookies. The chat panel, its fonts and the connection to our server all wait for the click.
This has a cost, and we’d rather say it than hide it. The first click has to fetch the panel, so it opens a moment later than a widget that loaded everything on page load. We think that’s the right way round. Preloading costs every visitor. The click only costs the visitor who actually wants to talk.
you answer in slack or discord
Every conversation becomes a thread in Slack or a forum post in Discord. Reply in the thread and the visitor reads it in the widget, usually within seconds. Start a message with // and it stays an internal note the visitor never sees.
Nobody has to keep a support tab open, because the tab you already keep open is the inbox. The whole channel can answer, and the visitor sees a real first name, not “Support Agent 3”.
There’s a dashboard inbox too, for the day you want a screen built for this. It stays in sync with the thread.
The cost is that we lean on two platforms we don’t control. So our own database holds every conversation, and the Slack or Discord thread mirrors it. We never read Slack or Discord history to rebuild anything. If someone archives the channel, your chats are still in Spookat.
per site, not per seat
One price per site, from $4.99 a month on broke af. Unlimited teammates, unlimited chats. Every extra site on the same account is 30% off, on every plan, without a sales call.
A site with forty people in the channel pays what a solo founder pays. We’re fine with that. The whole point was to stop charging people for letting one more colleague answer. How we got to “per site” gets its own post.
it looks like your site
There are 8 styles, 12 fonts, any accent colour, left or right, an icon launcher or a pill with your own text. Each one copies a kind of site people actually ship, like shadcn defaults or a dark dev-tool terminal. If you have an agent, tell it to match your site. It has the tools to set the style, font and accent, and a human still presses publish.
what we left out on purpose
Some things are missing because we decided against them, not because we ran out of time.
No bot of our own. On cool guy you can plug in your own AI agent through webhooks, a reply API or MCP. Your model, your bill. We don’t charge per answer, because we don’t run the answer.
No tracking. No cookies, no fingerprints, no analytics in the widget. We never store an IP address. The visitor’s side is written down step by step on /privacy.
No free plan. You get 14 days on your own site, no card. Then it’s paid. That also gets its own post, because people ask.
No “contact sales”. Prices are on /pricing. The DPA is a click, and a partner deal is a button in the dashboard.
why a product and not a side script
We’re vibe coders too. The first idea was an internal hack: a little widget that posts into a Slack channel, built in an afternoon. The first version did exactly that and worked great on localhost.
Then the list started. A reply in a Slack thread has to reach the right visitor, on the right tab, after their phone dropped the connection twice. A visitor who closed the tab needs the answer by email. Bots find the widget and fill the channel at 3 am. Slack has rate limits and OAuth, and Discord has its own of both. The chat needs a dark mode, a phone layout and contrast that passes. Someone has to delete old conversations before the GDPR email arrives, run backups, and get paged when it breaks.
None of that is hard on its own. Together it’s a product that never stops needing attention. Once we’d done the boring 90% for ourselves, it made no sense to keep it to ourselves. $4.99 a month for a site is cheaper than a week of anyone’s time, including ours.
who it’s for
People who ship. The vibe coder whose weekend project suddenly has users with questions. Small teams who spend the day in Slack or Discord anyway. Freelancers and agencies who set up sites for clients and want to hand them over clean (/partners has the deal).
If you run a support department with its own tool, its own seats and its own reports, you probably already have what you need. Spookat is for everyone who doesn’t want one.
where it stands today
Spookat is in early access. Invites go out in small batches, and an agent can already register a site on its own, with a human claiming it after. The public launch is on October 31. Sign up during early access and that price is yours forever.
We measure the claims we make. Alongside this post we published the load test on our production server. Over the next weeks we’ll weigh other widgets the same way, with the method and the raw data published, so you can check our numbers against theirs.
Done being annoyed? See how it works.