Case study Codigy · Quorum · AI meeting tool · 0→1
Fewer meetings, clear agenda & outcomes
Companies cut professional facilitators, but the meetings stayed. Quorum takes over the facilitator's job. It collects everyone's take before the meeting, keeps the live discussion on the agenda, and ends each topic with a decision, an owner or a reason it was parked.

02 Context
Codigy's second product
Codigy already ran retrospectives for product and engineering teams at Vinted, Namecheap, Ovoko and Pleo. Quorum covers every meeting, not just the retro. The product is Quorum, the company is Codigy.
Who uses it
- Hosts: team leads and managers who plan recurring meetings for one or more groups.
- Participants: answer the agenda before the meeting, then decide together in the call.
- Pairs in 1-on-1s, including guests from outside the organization.
A meeting's life
- Setting up → Feedback → Waiting room → Live → Wrap-up → Archived.
- Agenda, call, transcript, decisions and tasks all happen in one place.
- Each team's space is private. Admins only see a team's meetings by joining it, and the team's audit log records the join.

Meetings list. Every card shows where its meeting stands. "Full consensus" asks whether the meeting is still needed.
03 Problem
Nobody keeps the meeting on track
Without a facilitator, three things go wrong. People repeat what they could have written down. The discussion drifts off the agenda. And the meeting ends without anyone owning the next step.
Opinions are given out loud, one at a time, in the room. The first voice sets the tone and the rest echo it.
A new subject comes up and the meeting follows it. The planned items run out of time.
Topics end with "let's follow up". No owner, no date. Next week the same discussion starts again.
One verbatim quote from a team lead about meetings after facilitators were cut, and one number (hours in meetings per week, share of meetings that end without an owner). Attribute by role and company size.
04 Goals & success metrics
Three promises, each with a mechanism
The tagline is "Fewer meetings, no open loops." Every promise names the feature that backs it. If the product can't back a claim yet, the claim goes on the roadmap instead of into the copy.
| Promise | Backed by | Target |
|---|---|---|
| Fewer meetings | Sealed feedback before the meeting. On full consensus, Quorum asks: "Do we really need a meeting?" | target |
| On agenda, no side quests | The discussion map. Live transcript filed under agenda items. New subjects get parked as their own topics | target |
| Meetings with outcomes | Every topic closes as a decision, an action item with an owner and a date, or parked | target |
| Guardrail: people stay in control | The agent only proposes. Nothing is recorded until a person presses Accept | 100 % |
05 Constraints
The limits we designed inside
Only the server decides who can open a meeting, never the meeting document itself. Admins don't get access to a team by default. They have to join it, and the team's audit log shows that they did.
Each meeting is a live, shared document stored on every device, so a dropped connection pauses syncing instead of emptying the screen. The AI runs through a server proxy that holds the organization's key, so no device ever has it.
06 Research & discovery
Three findings that set the direction
Workshops, usability tests and prototypes with teams that run recurring meetings. These three findings changed the plan.
Most of a meeting can happen before it
Yes/no questions, ratings and "pick one of these" don't need a room. So Quorum collects them before the meeting, and the meeting covers only what's still undecided.
Answers are only honest if nobody can see the others
If people can read each other's feedback, they echo it. So answers stay sealed until the meeting goes live. Before that, others only see "Submitted" or "Pending".
The promises had gaps
We checked the three promises against the code. Nothing made meetings fewer, only shorter. And nothing stopped a meeting from closing with open loops. Two days later, the "Full consensus" check shipped.
Method details: how many workshops and test sessions, with which teams (size, industry), who ran them, and one quote that changed a decision.
07 Ideation & exploration
Three shapes for the live meeting
The live screen was rebuilt twice in two weeks. Each version shipped, got used in real meetings and was replaced when it stopped working.
A · Page of cards. Rejected on 8 Sep. It read like a document, not a conversation, and the current topic got lost in the scroll.
B · Two-column room. Replaced. Focused, but it only showed the plan. Anything the room raised that wasn't on the agenda had nowhere to go.

C · Discussion map. Kept on 23 Sep. The whole screen is the meeting: one column per agenda item first, then whatever the room raises.
Confirm the reasons A and B lost: what you saw in a real meeting that made you rebuild it.
08 The solution
Say it before, settle it during, own it after
An assistant builds the agenda with the host through a short chat. Everyone answers it privately. In the live call, an agent transcribes and files what's said onto a map of topics. Each topic ends with a decision, an owner or a reason it was parked, and action items land in each owner's Tasks.

The live meeting. Topics are grouped into chapters, and Meeting progress reads 7 of 9 settled. The call folds into the pill at the bottom.

Setting up. The agenda comes out of a short chat, built with the assistant or by hand as shown. Each item says how people answer before the meeting.

A topic up close. A summary of every opinion, a poll with vote shares, and the agent's drafted decision waiting above Resolve.

Feedback before the meeting. Answers stay sealed. Others only see "Submitted" until the meeting goes live.

Waiting room. A countdown, the host and the topics. People test their camera and mic, then the host presses Start.

Wrap-up. Every decision, and every action item with its owner and due date, in one list.

Tasks. Every action item you own, from all your meetings, with the soonest due first.


The same app on a phone. You pan the map by sliding and zoom by pinching, with no zoom buttons.
Key decisions
Feedback stays sealed until the meeting goes live. It's the only promise we can state flatly, because the code enforces it, and it's why the answers are honest.
The agent suggests, people decide. When the room seems to agree, the agent drafts the decision or the action item, with the owner and date filled in. Nothing is recorded until someone presses Accept. Decline it, and the agent won't suggest it again.
Ask, never cancel. When every participant has answered and everyone agrees, the meeting card asks "Do we really need a meeting?" The host chooses to hold it anyway or skip it.
The agenda is the backbone of the meeting. Speech gets sorted into information, questions, decisions, running the meeting and asides. Off-agenda subjects become their own topic columns after the plan. Asides stay off the map.
"Hey Qiu" answers from the team's files. The wake word is detected on the device, so listening for it sends nothing anywhere. The answer cites the files it used. If the files don't cover the question, Qiu says so.
09 Design system & details
A generative UI library
The agent doesn't invent UI. For every line it hears, it picks one of ten map components (topic, sub-topic, question, poll, materials, recommendation, outcome and more) or keeps the line off the map. Each component has fixed sizes and every state it can be in. So a map the agent builds always looks like one a person would.
One topic building itself, in the product's own tokens and sizes. Asides stay off the map. A drafted decision only becomes an outcome when someone presses Accept.

The same map in Midnight. Components use colour roles rather than fixed colours, so a theme only swaps token values.
Rules the system enforces
- Airy UI. No helper text under inputs. Each block has a header, and any explanation goes in that header's info tooltip.
- An info button only appears where the label leaves a real question.
- Every control covers every state it can be in: Normal, Hover, Pressed, Disabled, Error, Selected. A missing state is a bug.
Edge cases we designed for
- Someone opened the meeting but didn't answer: that blocks "Full consensus".
- Everyone leaves a running meeting: it pauses, and the paused time isn't counted.
- On touch screens, tooltips slide up from the bottom and the map is navigated by pinch, with no zoom buttons.
10 Validation
Three reversals in real meetings
Most of the 57 releases were small fixes. These three reversed earlier decisions.
The first version worked offline with just a name. But only a server can answer who belongs to a team, so Google sign-in became required. Every meeting still keeps a copy on the device.
In peer-to-peer calls, each person uploads their video once for every other participant, and without relay servers the calls only connected on one local network. We moved to a self-hosted LiveKit server on the same machine as the sync server.
Whisper on the desktop needed no key. But it got names and languages wrong more often than OpenAI did, so it was removed, and quality won over cost.
Usability rounds: how many sessions, with whom, and the one finding that changed the meeting flow the most.
11 Collaboration & handoff
The repo is the design file
I designed in code with Claude Code. Every component folder has a KNOWLEDGE.md with how it works, why, and what was learned. Each feature is described in three linked places: the in-app help, the design system and its KNOWLEDGE.md. CI fails if a link between them breaks.
Shipped
- Agenda assistant and templates
- Sealed feedback with polls, ratings and attachments
- Discussion map with live transcription, chapters and agent recommendations
- Video calls, screen share and shared cursors
- Qiu: voice Q&A over Drive, GitHub and local folders
- Wrap-up, Tasks, 1-on-1s with guests, rewards, in-app help
Cut or deferred
- On-device transcription (lost to OpenAI on quality)
- Per-meeting badges on the wrap-up screen (removed 18 Sep)
- Local-only mode without an account (replaced by teams)
- Sealed feedback enforced by the server, not just the UI (needs a data-model change)
- Native iOS and Android builds (device storage and audio capture not built yet)
12 Results
Five weeks, idea to production
| Metric | Before | After |
|---|---|---|
| Meeting length against the timebox | — | — |
| Topics settled per meeting | — | — |
| Action items with an owner and a date | — | — |
| Meetings skipped after full consensus | — | — |
Live at quorum.co-openhagen.com, with a Windows desktop app. Teams using it so far and one sentence of qualitative feedback
13 Learnings & next steps
What I'd do differently
Learnings
- Write the rule before the screen. With AI writing the code, the written rules (KNOWLEDGE files, the design system) are what kept 57 releases consistent.
- Give every promise a backer. Checking the copy against the code surfaced two missing features before any user noticed.
- The agent suggests, a person decides. Trust held because the agent never records a decision on its own.
Still open
- Sealed feedback is hidden by the UI, but each device still receives the data. Real sealing has to happen on the server.
- Should closing a meeting with open loops be blocked, or just flagged as it is today?
- Native mobile apps: storage on the device and microphone capture.