Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions docs/features/chat-and-ask.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,10 +181,9 @@ wrong?". Your feedback and the reply go to the dembrane team.

- Admins, members and external collaborators can chat. Observers do not see "Ask" in the
sidebar. See [roles & permissions](./roles-and-permissions.md).
- Ask needs no paid plan. On the Free plan a workspace has one chat, and a chat takes three
questions. After that the chat shows "Upgrade to continue". On the Free plan, a
conversation recorded after the free recording hour is used up cannot be attached. See
[tiers & billing](./tiers-and-billing.md).
- Ask needs no paid plan. On the Free plan an account starts two new chats a month, and a
chat takes 20 questions. After that the chat shows "Upgrade to continue". A chat from an
earlier month takes no new questions. See [tiers & billing](./tiers-and-billing.md).
- Replies are written by Gemini models served from an EU endpoint.

## Related
Expand Down
6 changes: 3 additions & 3 deletions docs/features/conversations-and-transcripts.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ The "Conversations" list on the project's "Overview" shows one status per row in
"Live", "Transcription error", "Empty", "Transcribing", "Verified" or "Done". "Live" is the
same as "Ongoing". "Empty" means no piece has arrived at all.

On a conversation page, "Locked" means the free plan's one hour is used and the transcript
and summary are hidden. See [recording](./recording.md).
The free plan never hides a transcript or a summary. It limits how much audio comes in. See
[recording](./recording.md).

## A conversation page

Expand Down Expand Up @@ -99,7 +99,7 @@ There are no bulk actions for moving, deleting or retranscribing conversations.
## Download the audio

"Download audio" gives one MP3 file of the whole conversation. It is not available for
anonymised, text-only or locked conversations.
anonymised or text-only conversations.

## Counts and usage

Expand Down
2 changes: 1 addition & 1 deletion docs/features/export-and-data-portability.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Good to know:
- The zip leaves out conversations that have no transcript text.
- Each file in the zip is named with the date and time, the participant's name and the
start of the conversation's ID, so the files sort by time.
- "Download audio" is not available for anonymised, text-only or locked conversations.
- "Download audio" is not available for anonymised or text-only conversations.

## What does not exist

Expand Down
2 changes: 0 additions & 2 deletions docs/features/live-monitor.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,6 @@ Click a tile for the "Conversation" dialog. It holds:

- Audio you uploaded in the dashboard, and retranscribed copies.
- The words being said. A tile shows state and audio level, not transcript text.
- On a free workspace that has used its hour, tiles are locked and open the upgrade dialog.
See [recording](./recording.md).

## Related

Expand Down
3 changes: 1 addition & 2 deletions docs/features/mcp-and-bring-your-own-llm.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,7 @@ These are the tools an assistant gets. Their names show up in your assistant and
| `dembrane_report_issue` | Files a support ticket in your name |
| `dembrane_request_tool` | Asks the dembrane team for a tool that does not exist yet |

A conversation that is locked by the free plan's one hour returns no transcript text here
either.
The free plan does not hide transcripts. Every tool returns the same text on every plan.

## Bring your own language model

Expand Down
2 changes: 1 addition & 1 deletion docs/features/partner-program.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ dembrane then:
| | "For internal use" | "For an external organisation" |
|---|---|---|
| Billing | Your organisation's plan and seats | Its own account, plan and seats. The badge reads "{Tier} (partner)": "Billed separately, not part of the organisation's plan." |
| Plan at the start | Your organisation's plan | Free. The free plan's limits apply until this workspace has a paid plan of its own |
| Plan at the start | Your organisation's plan | Free. The free plan's limits apply until this workspace has a paid plan of its own. While your organisation is on Free too, the workspace shares your organisation's free allowance |
| Access setting at the start | Any your plan includes | "Everyone in your organisation" only |
| Observers | Cannot be invited | Can be invited, for free |
| Data owner | None | The client you named |
Expand Down
41 changes: 23 additions & 18 deletions docs/features/recording.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Recording
description: How audio gets into dembrane. Recording in the participant portal, uploading audio files, the real limits, the free plan's one hour, and what happens on a bad connection.
description: How audio gets into dembrane. Recording in the participant portal, uploading audio files, the real limits, the free plan's monthly hours, and what happens on a bad connection.
audience: all
---

Expand Down Expand Up @@ -99,23 +99,28 @@ summarised straight away, carries an "Upload" badge, and does not appear on the
Upload takes audio only. There is no upload for documents, transcripts or text files.
Observers cannot upload.

## The free plan's one hour

A workspace on the free plan gets one hour of audio in total. The hour is counted over the
life of the workspace, not per month, and deleted conversations still count. Paid plans
have no cap on hours.

Recording never stops at the cap, and participants notice nothing. What changes is on the
host's side:

- A conversation finished after the hour was used is marked "Locked". Its transcript and
summary are hidden. A conversation that started under the cap stays open, even if it ran
past it.
- Upload is locked, with the message "Upload limit reached".
- Tiles on the monitor are locked.

After an upgrade the locked conversations open and their summaries are written. See
[tiers and billing](./tiers-and-billing.md).
## The free plan's hours

An account on the free plan gets 5 hours of audio a month, shared by all its workspaces.
One conversation can be at most 1 hour long. The month starts on the 1st (UTC). Deleted
conversations still count. Paid plans have no cap on hours.

- Only one project in the account takes recordings. Other projects show "Recordings are
paused for this project on the free plan. New recordings go to {name}." and "Use this
project for recordings" switches it.
- At 1 hour the portal stops the recording and shows "That's a wrap": "This conversation
has reached its maximum length. Everything you recorded is saved."
- When the month's hours run out during a recording, the portal shows "Recording has
stopped for now. Everything you recorded is saved."
- A portal with no hours left, or of a project that does not take recordings, shows "This
project isn't taking recordings right now." It never mentions plans. A portal for
typed text still works.
- Upload checks each file's length first: "This file is {file} long. You have {left} of
recording left this month."
- Everything that was recorded is transcribed and summarised as usual. No conversation is
locked.

See [tiers and billing](./tiers-and-billing.md).

## The iOS app

Expand Down
4 changes: 2 additions & 2 deletions docs/features/reports.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,8 @@ hours.
The billing role has no access to projects. See
[roles & permissions](./roles-and-permissions.md).

Reports need no paid plan. On the Free plan a workspace has one report: "Your free plan
includes one report. Upgrade to create more." See [tiers & billing](./tiers-and-billing.md).
Reports need no paid plan. On the Free plan an account has one report a month: "The free
plan includes 1 report a month." See [tiers & billing](./tiers-and-billing.md).

A finished report can also trigger a webhook, "Report generated". Webhooks are set up under
"Automation" (Beta) by a workspace admin and need the Changemaker plan or higher. See
Expand Down
49 changes: 34 additions & 15 deletions docs/features/tiers-and-billing.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,29 +28,47 @@ Changemaker.

| | On the free plan |
|---|---|
| Recorded audio | 1 hour for each workspace, counted over the whole life of the workspace, not each month. Deleted conversations still count |
| Recorded audio | 5 hours a month, and at most 1 hour per conversation. Deleted conversations still count |
| Projects | 1. Sample projects do not count. Deleting the project frees the place |
| Recording | One project takes recordings and uploads. You choose which one |
| Organisations | 1. A person who owns or runs a free organisation cannot create another |
| Workspaces | 1 on your organisation's plan. A workspace for an external organisation is not counted |
| Chat | 1 chat for each workspace, with 3 questions. Deleting the chat frees the place |
| Reports | 1 for each workspace. Deleted reports do not count |
| Chat | 2 new chats a month, each with 20 questions. Deleting a chat does not free the place |
| Reports | 1 a month. Deleted reports still count |
| Maps | 1 map a month |
| Popcorn | 12 analyses a month. Live analysis runs at most every 5 minutes |
| [Agent (MCP)](./mcp-and-bring-your-own-llm.md) tool calls | 1,000 each calendar month for the whole organisation |
| People | No limit. The free plan is not limited to one user |

The free plan does not include the features in the next table.
The limits are counted for the whole billing account, across all its workspaces. The
month starts on the 1st (UTC). Workspace settings, "Usage and billing", shows "Free plan
allowance": what you used, of how much, and "Resets on {date}". dembrane can change the
numbers, and that card always shows the current ones.

When the free hour is used up:
- A chat from an earlier month stays readable but takes no new questions.
- A report or popcorn analysis that fails before it produces anything is given back. So is a
map that fails to start.
- An account that moves down to Free gets the full allowance from that moment.
- Nothing is ever locked. Every transcript and summary stays readable.

- Participants are never stopped. The portal keeps working.
- A conversation that started inside the hour stays open to you.
- Later conversations are locked for the host: the transcript and the summary are held
back. A locked conversation gets its summary after the workspace moves to a paid plan.
- You cannot upload recordings ("Upload limit reached") or use the microphone in chat.
- dembrane tells you: "Your free transcription hour is used up."
When the month's hours are used up:

- A recording that is going on stops. The participant sees "That's a wrap" and "Recording
has stopped for now. Everything you recorded is saved."
- The portal shows "This project isn't taking recordings right now." It never mentions
plans.
- Uploads are paused until the 1st.
- The account's owners and admins get a notice and the email "{name} has used this month's
recording hours".

The microphone in chat needs a paid plan.

## What needs a paid plan

| Feature | Plan | Who can use it |
|---|---|---|
| More than 1 hour of audio, 1 workspace, 1 chat with 3 questions, 1 report | any paid plan | |
| More audio, projects, workspaces, chats, reports, maps and popcorn analyses than the free plan includes | any paid plan | |
| Recording in every project, and the microphone in chat | any paid plan | |
| Agent (MCP) tool calls that are not counted | any paid plan, on at least one workspace of the organisation | |
| Hide the dembrane event invitation in the portal | any paid plan | anyone who can edit the project |
| A workspace that is "Invite only" or "Private" | Innovator or above | workspace admins, and organisation admins when they create it |
Expand All @@ -64,7 +82,7 @@ Going back is always free: making a project visible to the workspace again, or s
workspace back to "Everyone in your organisation", needs no plan.

A feature your plan does not include shows the badge "Available on a paid plan". A control
you cannot use opens one short line, such as "The free plan includes one report.", with the
you cannot use opens one short line, such as "The free plan includes a monthly allowance of reports.", with the
link "Tell us what you need".

## How you get a paid plan
Expand Down Expand Up @@ -111,8 +129,9 @@ Every workspace is paid for by one billing account, and the plan sits on that ac
- A workspace "For an external organisation" has its own account. It starts on the free
plan, whatever plan your organisation has. Its plan badge reads "{Tier} (partner)":
"Billed separately, not part of the organisation's plan." Someone who is in that
workspace and in your internal workspaces holds a seat on each account. See
[the partner program](./partner-program.md).
workspace and in your internal workspaces holds a seat on each account. While both your
organisation and that workspace are on Free, the workspace uses your organisation's free
allowance. See [the partner program](./partner-program.md).

## Where you see usage and billing

Expand Down
6 changes: 3 additions & 3 deletions docs/features/transcription.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,9 @@ The recording itself is saved. For what to try next, see

## On the free plan

Once a free workspace has used its one hour of audio, transcripts and summaries of later
conversations are hidden and the conversation is marked "Locked". Recording goes on. See
[recording](./recording.md).
Every conversation is transcribed and summarised, on every plan. The free plan limits how
much audio comes in: 5 hours a month for the account, and 1 hour per conversation. Nothing
that was recorded is hidden. See [recording](./recording.md).

## Related

Expand Down
2 changes: 1 addition & 1 deletion docs/users/developer-external/mcp-and-byo-llm.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ Each tool is also a plain REST call under `/api/v2/agent`, with the same bearer

- An MCP answer is capped at about 60,000 characters. A longer answer is cut, marked `truncated`, and says how to page.
- An organisation on the free plan gets 1,000 tool calls per calendar month (UTC). An organisation with any workspace on a paid plan is not counted. `dembrane_whoami` and `dembrane_find_projects` never count.
- Each tool follows the person's own permissions. A conversation that the workspace's plan has locked returns no transcript text.
- Each tool follows the person's own permissions. No plan hides transcript text.

## Control and audit

Expand Down
4 changes: 2 additions & 2 deletions docs/users/developer-internal/chat-and-agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ For what a host sees, read [chat and Ask](../../features/chat-and-ask.md).

A third mode, `overview`, is still stored on older chats. Those chats still open, and nothing creates a new one. A chat's mode is set once and cannot be changed. New chats start as "Specific Details", and a host opts in to the assistant from the Ask screen.

Both paths need the `chat:use` policy on the project. See [roles and policies in code](./roles-and-policies.md). On the free tier both allow one chat per workspace and three questions per chat.
Both paths need the `chat:use` policy on the project. See [roles and policies in code](./roles-and-policies.md). On the free tier both share one gate: 2 new chats a month per billing account and 20 user turns per chat. See [the free tier in code](./free-tier.md).

## Plain chat

Expand All @@ -34,7 +34,7 @@ Both paths need the `chat:use` policy on the project. See [roles and policies in
- The host's message is stored first and removed again when the reply fails. The reply itself is written by the dashboard through the chat BFF (`/api/v2/bff/chat-messages`) when the stream ends.
- Replies run on the `multi_modal_pro` model group. Chat titles and follow-up suggestions run on `multi_modal_fast`.
- One reply may take 300 seconds.
- The free tier limits are in `packages/chats/src/tiers.ts`.
- The free tier gate is `freeChats` in `packages/chats/src/free.ts`. `packages/chats/src/tiers.ts` holds the sample project cap (`FREE_TIER_MAX_SAMPLE_USER_TURNS`).

## The assistant

Expand Down
2 changes: 1 addition & 1 deletion docs/users/developer-internal/data-model.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ billing_account (workspace.billing_account_id)
| `workspace` | Belongs to an org. Carries `visibility`, the required `billing_account_id`, the data owner fields and `allow_support_access`. |
| `billing_account` | The billing unit: `tier`, `status`, `payment_mode`, seats, invoice details. A workspace's tier is the tier of its billing account. |
| `project` | Belongs to a workspace. Holds the portal settings, `language`, `visibility`, `is_conversation_allowed` and `anonymize_transcripts`. |
| `conversation` | One contribution. Flags: `is_finished`, `is_all_chunks_transcribed`, `is_over_cap`, `is_anonymized`. Also `summary`, `title`, `duration` and `merged_audio_path`. |
| `conversation` | One contribution. Flags: `is_finished`, `is_all_chunks_transcribed`, `is_anonymized`, and `is_over_cap`, which is retired and no longer set or read as a lock. Also `summary`, `title`, `duration` and `merged_audio_path`. |
| `conversation_chunk` | The unit of upload and transcription: `path`, `transcript`, `error`, `diarization`, `timestamp`, `source`. |

A chunk is pending while it has no transcript and no error. [The processing pipeline](./processing-pipeline.md) explains how the flags move.
Expand Down
6 changes: 3 additions & 3 deletions docs/users/developer-internal/processing-pipeline.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,10 @@ Chunk runs wait on the language model, so many run at once. The ffmpeg work they
| `transcribe` | One Gemini call per piece on the `multi_modal_pro` model group, with the audio sent inline. On a retryable error it falls back to `multi_modal_fast`. The project's `language` and its key terms (`default_conversation_transcript_prompt`) are passed in. The result is stored in `conversation_chunk.transcript`, with `diarization.schema` set to `Dembrane-26-07-gemini`. |
| `hand-over` | The one place that decides a conversation is ready. It locks the conversation row, checks that the conversation is finished and that no chunk is pending, and enqueues `conversations.finalize` in the same transaction. Both the chunk run and the finish run call it, so whichever commits last sees the other's work. |
| `claim` in finish | Sets `is_finished`. Of two finishes at the same time, exactly one proceeds. |
| `stamp-over-cap` | Sets `is_over_cap` from the workspace's recorded hours and its tier. |
| `stamp-over-cap` | A no-op. The lifetime hour lock is retired, and the step stays so durable runs replay by order. It no longer sets `is_over_cap`. |
| `claim` in finalize | Sets `is_all_chunks_transcribed` once, and queues the `conversation.transcribed` webhooks in the same commit. |
| `merge` | Joins every chunk with audio, in time order, into one mp3. Sets `merged_audio_path` and `duration`. If the merge gives up, the merged file is built on demand when a host plays the conversation. |
| `summarize` | One model call on `multi_modal_pro`. A conversation locked by its tier is skipped, and is summarised after an upgrade. Then `summarized-webhook` queues the `conversation.summarized` webhook. |
| `summarize` | One model call on `multi_modal_pro`. Then `summarized-webhook` queues the `conversation.summarized` webhook. |
| `measure` | Fills `duration` by probing chunks when the merge left none. |

When the project anonymises transcripts, transcription also redacts. A regular-expression pass replaces emails, IBANs, phone numbers, Dutch postcodes and 8 to 9 digit numbers with placeholders. A second model pass then corrects and redacts, using the audio and the first transcript.
Expand Down Expand Up @@ -95,7 +95,7 @@ The media app is an HTTP shell around ffmpeg: `POST /probe`, `/probe-url`, `/con
| Job name | Every | What it does |
|---|---|---|
| `conversations.finish-idle` | 2 minutes | Finishes conversations nobody added to for 5 minutes. A conversation with no chunks at all waits 30 minutes, and stays open while the portal still pings. |
| `conversations.summary-catch-up` | 5 minutes | Summarises transcribed conversations that have no summary and are not locked. |
| `conversations.summary-catch-up` | 5 minutes | Summarises transcribed conversations that have no summary, whatever their old `is_over_cap` stamp says. |

## Reports and chat

Expand Down
Loading
Loading