From the team
Notes from the team.
Writing, updates, and notes from the team.
Notes
How we built meetings on LiveKit and Deepgram
A call is where decisions get made, and almost always the one place in your stack that leaves nothing behind. We built meetings and huddles into Plain so the call leaves a durable, structured record instead: LiveKit carries the room, and Deepgram turns speech into a stream of speaking turns, each one a first-class row the rest of the platform can point at, query, and link to. Here's how it fits together, and why the speaking turn is the primitive that makes it cheap.
16 Jun 202613 min
Notes
Instant by default, multiplayer by design
A deep dive into the sync layer that makes Plain feel fast and collaborative. The browser holds a live replica of the slice of Postgres it's looking at, and edits documents as CRDTs. Two sync engines, one principle: subscribe to state, not endpoints. Here's how it works, end to end.
9 Jun 202615 min
Changelog
Changelog #1
The first of these. Four things shipped: Collections (structured data next to your issues), real-time chat with agents in the channel, a mobile app in testing, and built-in product analytics. The throughline is that they all ride the same realtime substrate, so each one was less work than it looks.
5 Jun 20267 min
Notes
Open and closed isn't a workflow
GitHub gives an issue two states, open and closed, so every team quietly rebuilds a real workflow on top with labels. Plain models issues the way teams actually think, with a Todo → In Progress → Done status enum and a first-class priority field, and that one schema decision is what makes filtering, "what's next," and a live board fall out for free.
1 Jun 202610 min
Notes
Our take on CI
Plain ships its own CI, analogous to GitHub Actions, but workflows are real code, the platform is the standard library, and calling a model is one function. Here's how that changes the feel of writing a pipeline, and what it does for supply-chain safety and reliability along the way.
27 May 202611 min