desimemo
Back to meetings

Settings

What you can adjust. The rest is set on the server or in the code, and shown here so you can see how your minutes are made.

What you can change

Saved in this browser only. Nothing is sent anywhere. Clearing your browser data resets them.

How much to spend on a new meeting

The starting choice on the upload page. You can change it per meeting.

browser · every new upload
How your recordings usually sound

Saved with each meeting, so a bad room is known before the transcript reads badly.

browser · every new upload
Your meetings usually have a chair

Someone who ran the meeting and can be asked afterwards about anything unclear.

browser · every new upload
Languages spoken in your meetings

Sent to the speech engine so it expects both mid sentence. At least one has to stay on.

browser · every new upload
Which version of the transcript to read

Tidied has the Roman Urdu spelling settled. As heard is what the engine returned, for when you are checking its work.

browser · the transcript on every meeting
Show the time each line was said

So you can find the moment in the recording and listen to it yourself.

browser · the transcript on every meeting
Show how sure a name was

The score behind a matched voice, between 0 and 1.

browser · the transcript on every meeting

Where your meetings are kept

Which store this copy is using now.

Store in use

A temporary store, used because the database keys are not set. It empties when the server restarts, and every page says so.

src/lib/db/index.ts · getRepo
memory-store

Recordings you can send

What the upload page accepts, and where the audio goes when it arrives.

File types accepted

Only formats the speech engines can actually read are allowed through, so a file is refused straight away rather than failing later.

src/lib/db/uploads.ts · ACCEPTED
wav, mp3, m4a, mp4
Largest file

Roughly three hours of decent audio, which is well past any real meeting.

src/lib/db/uploads.ts · MAX_UPLOAD_BYTES
500 MB
Exact types checked

The browser sends a type with every file, and this is the list it is checked against.

src/lib/db/uploads.ts · ACCEPTED
audio/wav, audio/x-wav, audio/mpeg, audio/mp4, audio/x-m4a, audio/aac, video/mp4
Where the audio is stored

The recording goes from your browser straight into this storage bucket, never through this server, so a weak connection can resume.

src/lib/db/uploads.ts · AUDIO_BUCKET
meeting-audio

What a meeting costs

The three quality tiers, what each costs per hour of audio, and the ceiling nothing crosses without you saying so.

Cost ceiling

A tier that costs more than this per hour of audio is refused in code rather than quietly billed.

src/lib/models/registry.ts · MAX_COST_CENTS_PER_HOUR
20c per audio hour
Cheap tier

The lowest cost run: fast models everywhere the job allows one.

src/lib/models/registry.ts · TIERS.cheap
6.9c per audio hour
Normal tier

The default. A stronger model writes the minutes, a fast one does the tidying.

src/lib/models/registry.ts · TIERS.normal
15.4c per audio hour
High tier

The strongest minutes writer available. It sits over the ceiling, so it needs a deliberate yes at the call site every time.

src/lib/models/registry.ts · TIERS.high
23.8c per audio hour, over the ceiling

Which model does which job

A job is asked for by name, never a vendor, so an outage or a better model is a config change and not a rewrite. First in each line is the primary.

Listening to the recording

Turns the audio into text, with a label for each voice.

src/lib/models/registry.ts · TIERS.normal.transcribe
gemini-flash-audio, falls back to soniox
Tidying the spelling

Re-writes the whole transcript, so it deliberately runs on a cheap model.

src/lib/models/registry.ts · TIERS.normal.normalize
haiku, falls back to gemini-flash
Writing the minutes

Reads the whole transcript and writes a page, so a stronger model is affordable here.

src/lib/models/registry.ts · TIERS.normal.minutes
haiku, falls back to gemini-flash
Answering questions about past meetings

Searches the archive and answers in a sentence.

src/lib/models/registry.ts · TIERS.normal.archive-qa
gemini-flash, falls back to haiku
Lowest model allowed per job

A model weaker than this is refused for that job in every tier.

src/lib/models/registry.ts · FLOORS
transcribe: flash · normalize: flash-lite · minutes: flash · questions: flash-lite · distill: haiku · archive-qa: flash
Models in the registry

Every model this system knows how to price and call.

src/lib/models/registry.ts · MODELS
gemini-flash-audio, soniox, elevenlabs-scribe, gemini-flash-lite, deepseek-v4-flash, gemini-flash, haiku, sonnet

Recognising a voice

How sure the system has to be before it puts a name on a line. These lean towards asking, because a confident wrong name puts words in a person's mouth.

Fill the name in

At or above this closeness the name is filled in for you, ready to correct.

src/lib/speakers/match.ts · THRESHOLDS.auto
0.82
Ask instead of filling in

Between this and the line above, you are asked "is this them?" rather than told.

src/lib/speakers/match.ts · THRESHOLDS.ask
0.7
Two voices too close to call

When the best two people are this close, nothing is filled in whatever the score, which is the case of two siblings in one firm.

src/lib/speakers/match.ts · THRESHOLDS.tooClose
0.05
Shortest usable stretch of speech

Anything briefer than this is not clean enough to recognise a voice from.

src/lib/speakers/match.ts · THRESHOLDS.minSegmentMs
3 seconds
Voice samples kept per person

A new sample replaces the weakest one, so the memory of a person stays small and current.

src/lib/speakers/enrol.ts · MAX_PRINTS_PER_PERSON
5
Consent before remembering a voice

A voice is not stored until that person has agreed. They can still be named on a single meeting without it.

src/lib/speakers/enrol.ts · enrolVoice
always required

Tidying the mixed language lines

The dictionary pass that settles Roman Urdu spelling before anything is summarised, and the guard that stops it changing what was meant.

Words in the shared dictionary

The agreed spelling for the most common Roman Urdu words, so the same word is written the same way every time.

src/lib/canon/seed.ts · SEED_CANON
158 words
Lines per model call

How many transcript lines are tidied in one go. Bigger batches cost less and are more likely to lose track.

src/lib/pipeline/normalize.ts · DEFAULT_BATCH_SIZE
40
How far a line may change

A tidy up that changes a line by more than this is treated as a rewrite and refused, because fixing spelling must never change the meaning.

src/lib/prompts/normalize.ts · MAX_DRIFT_RATIO
50% of its length

Checks on the finished minutes

What is verified before minutes are shown to you, rather than trusted to the model that wrote them.

A requested comment counts as included

When somebody asks for a comment to be recorded, this much of their distinctive wording must appear in the minutes before it counts as done.

src/lib/minutes/schema.ts · INCLUSION_OVERLAP_THRESHOLD
60% word overlap
Edits that make the minutes stale

Correct this much of the transcript and the minutes drawn from it are marked as no longer matching, so you are told to redraft.

src/lib/pipeline/edit.ts · STALE_AFTER_FRACTION
10% of the transcript
Blank fields

A missing answer must be declared with a reason. An undeclared blank fails the check and goes back to the model.

src/lib/minutes/schema.ts · reviewMinutes
must say why

What the system learns

Your corrections become standing rules, slowly and with caps, so one bad correction does not spread to every later meeting.

Corrections before a rule is proposed

The same correction has to happen this many times independently before anything is suggested.

src/lib/learning/distill.ts · CAPS.evidenceNeeded
2
Words remembered per company

Names, company terms and acronyms kept for your organisation. Past this cap, the weakest is retired to make room.

src/lib/learning/distill.ts · CAPS.vocabulary
100
Formatting rules per company

Standing instructions about how your minutes should read, learned from your edits.

src/lib/learning/distill.ts · CAPS.formatRules
30
Companies before a spelling is shared

A spelling only joins the dictionary everyone uses after this many separate organisations have corrected it the same way. Nothing else ever crosses between companies.

src/lib/learning/distill.ts · CAPS.orgsForSharedCanon
3
Rules are proposed, never applied

Everything learned is shown to a person to accept or reject. Nothing writes itself into your settings.

src/lib/learning/distill.ts · proposeFromCorrections
always asks first

The Word file

How the minutes are laid out on the page. The look lives in a Word template, so changing it never touches code.

Template used

A normal Word file with the blanks marked. Replace it with your own letterhead and every future document uses it.

src/lib/docx/render.ts · DEFAULT_TEMPLATE
templates/default-minutes.docx
Built fresh on each download

The file is rendered from the stored minutes every time, so a correction shows up in the next download with no re-render step to forget.

src/app/api/meetings/[id]/minutes.docx/route.ts
on every download

Server keys

Set these in the hosting dashboard, never in a file in the repository. Only the names are shown here. The values are never read into this page, so they cannot leak into it.

Database

Not set on this server. This part is switched off until it is, and nothing pretends otherwise.

server environmentSUPABASE_URLSUPABASE_SERVICE_ROLE_KEY
missing: SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY
Uploads

Not set on this server. This part is switched off until it is, and nothing pretends otherwise.

server environmentSUPABASE_URLSUPABASE_ANON_KEY
missing: SUPABASE_URL, SUPABASE_ANON_KEY
Which company meetings belong to

Not set on this server. This part is switched off until it is, and nothing pretends otherwise.

server environmentDESIMEMO_DEFAULT_ORG_ID
missing: DESIMEMO_DEFAULT_ORG_ID
Transcription (Gemini)

Not set on this server. This part is switched off until it is, and nothing pretends otherwise.

server environmentGEMINI_API_KEY
missing: GEMINI_API_KEY
Transcription (Soniox)

Not set on this server. This part is switched off until it is, and nothing pretends otherwise.

server environmentSONIOX_API_KEY
missing: SONIOX_API_KEY
Writing the minutes

Not set on this server. This part is switched off until it is, and nothing pretends otherwise.

server environmentANTHROPIC_API_KEY
missing: ANTHROPIC_API_KEY

Why so much of this is read only. These numbers decide what your minutes say and what a meeting costs, so they are changed in the code with a test behind them. This page is here so you can see all of them without asking anybody.