Blog
How Freesbe works, and why we built it the way we did.
Notes from the people who make Freesbe: how the call servers, the search, the AI agents and the local cache are built, the postmortems when something broke, and the trade-offs behind each decision. Written for the teams that run on Freesbe and for anyone building the same kind of thing.
- Webhook URLs are public, so design them that wayThe rules behind Freesbe's webhook URLs - nothing readable about the customer, a path that matches the settings page, old URLs that work forever - and why incoming webhooks accept Slack and Teams payloads.
- We moved CI to a MacBook AirHow a day of 266 CI runs pushed Freesbe onto self-hosted build machines - a laptop and a small virtual machine - what stayed on hosted runners, and the outage that taught us about idle timeouts.
- Shipping 25 languages with English as the keyHow Freesbe is translated into 25 languages, including right-to-left Arabic and Hebrew, why our translation catalogs are keyed by the English sentence instead of an id, and what right-to-left support really takes.
- Measuring call quality without asking anyoneHow every Freesbe call measures its own audio quality from WebRTC stats, what counts as a poor call, and how a weak connection automatically puts voices ahead of video.
- Search that finds the middle of a word, and the migration that broke productionHow Freesbe added substring search with a SQLite trigram index next to the word index, why it matters for many languages, and the ordering mistake that broke our deploys.
- Our docs screenshots are generated, never takenHow every screenshot in Freesbe's help center is produced by a script from a made-up demo company, retaken once a day, and why we stopped taking screenshots by hand.
- Encrypting the local cache with a key that never touches diskHow Freesbe keeps a local copy of your messages so the app opens instantly, why that copy is encrypted with a key held only in memory, and the trade-off we accepted.
- Running many AI coding agents on one repo without merge hellHow Freesbe runs several AI coding agents in parallel on one codebase, why merge conflicts became the bottleneck, and the merge drivers and rules that fixed it.
- One stale track muted the whole meetingA postmortem of a Freesbe meeting where some people couldn't hear others, traced to a single leftover audio track and a gateway that refused whole batches, and what we changed.
- Recording calls in the browser is about 25 times cheaperWhy Freesbe records huddles and meetings in the recorder's own app instead of on a server, what it costs each way, and the trade-offs we accepted.
- Letting AI agents into a workspace without handing them the keysHow Freesbe connects Claude, ChatGPT, code editors and other AI agents with the Model Context Protocol and OAuth, so each agent gets only what a person allowed and admins can see everything it did.
- We built our own call server, and our apps don't know it existsWhy Freesbe's own video call server answers the exact same API as the managed media service we started on, so moving a call between them changes nothing in the apps.
- We gave every customer their own databaseWhy Freesbe keeps each workspace's messages in a small database of its own instead of one big shared one, how we moved live workspaces over, and what it gave us for free.
- How Advanced AI noise cancellation worksHow Freesbe's AI noise cancellation for calls works, how it differs from active noise cancellation in headphones, and why it runs on your own computer.
Try all of it free with up to 10 people.
No card, no time limit. Invite your team and see what sticks.