I start by taking whatever text you have: a raw transcript from Zoom, a Google Doc with notes, or even a few bullet points you typed during the call. The system accepts plain text up to 200 KB, which covers most hour‑long meetings. If you paste a transcript, I keep speaker labels if they exist; if you only give a topic, I treat the whole block as a single speaker monologue.
Next I strip out hidden control characters, convert Windows line endings to Unix, and replace multiple spaces with a single space. This step prevents the model from seeing stray tabs or non‑breaking spaces as meaningful tokens. I also convert any smart quotes to plain ASCII quotes to keep the vocabulary stable.
MeetMind uses a language model with a 4 k token context window. If the cleaned text exceeds that, I split it into overlapping chunks of 3 000 tokens with a 500‑token overlap. Overlap helps the model see continuity across boundaries, reducing the chance that a decision made at the end of one chunk is lost in the next.
I selected a fine‑tuned version of an open‑source instruction model that has been trained on meeting summarization data. The fine‑tuning focuses on extracting action items, decisions, and owners rather than creative writing. This keeps output predictable and reduces hallucination.
Before deployment I ran the model through the checklist from the OWASP LLM Top 10. I checked for prompt injection risks, data leakage, and insufficient output validation. For each item I added a mitigation: I sanitize user input, I restrict the model to a predefined set of output tags, and I run a secondary classifier to detect any disallowed content.
I also mapped our process to the NIST AI Risk Management Framework. The framework’s four functions—Govern, Map, Measure, Manage—guide our documentation, testing, monitoring, and update cycles. For example, we log every prompt and response for audit (Govern), we map potential harms like mis‑attributed actions (Map), we measure hallucination rate on a held‑out set (Measure), and we manage updates via a staged rollout (Manage).
The core prompt asks the model to return a JSON object with four keys: summary, decisions, action_items, and open_questions. I give the model a short example of the expected JSON shape so it learns the format without needing extra fine‑tuning. The prompt is:
Extract meeting minutes from the following transcript.
Return valid JSON with:
{
"summary": "...",
"decisions": ["..."],
"action_items": [{"owner": "...", "task": "...", "due": "..."}],
"open_questions": ["..."]
}
Transcript:
{{TEXT}}
I prepend two short meeting examples that show the desired style. One example shows a clear decision with an owner and due date; the other shows a meeting with no decisions, only open questions. These examples help the model generalize to varied meeting lengths and tones.
I set temperature to 0.2 to keep the output deterministic while allowing slight phrasing variation. I limit the maximum output tokens to 1 000, which is enough for a detailed minute set but prevents runaway generation. If the model hits the limit, I truncate the JSON and flag the output for manual review.
After the model returns text, I run a JSON parser. If parsing fails, I attempt to extract the JSON substring between the first '{' and the last '}'. If that still fails, I return a fallback message asking the user to re‑paste the transcript with clearer speaker labels.
Owners are extracted as raw strings; I then apply a simple lookup against the workspace’s member list to suggest the correct display name. Due dates are parsed with a flexible date parser that understands “next Friday”, “EOD”, or “2026‑09‑30”. If no date is found, I leave the field blank and highlight it in the editor.
The validated JSON is rendered into three sections: a short paragraph summary, a bulleted list of decisions, and a table of action items. The table includes columns for Owner, Task, and Due Date, and allows inline editing. Open questions appear as a separate collapsible section for teams that want to track follow‑ups.
When you click “Generate minutes”, MeetMind opens the draft in the main workspace. The view shows the summary at the top, decisions as a list, and the action‑item table below. You can click any cell to edit text, change an owner via a dropdown, or pick a date from a calendar widget.
Every edit creates a new version stored in the browser’s IndexedDB. You can undo to any previous version using the clock icon. This lets you experiment with rephrasing a decision or reassigning an action without losing the original AI draft.
When satisfied, you can export the minutes as Markdown, HTML, or plain text. The export includes the raw JSON for teams that want to import the data into other tools. A shareable link generates a read‑only view that updates if you later edit the workspace version.
I do not promise that every spoken word will be turned into a correct action item. The model can miss nuances, especially when speakers talk over each other or use heavy jargon. You should always review the draft before treating it as the official record.
MeetMind does not replace a dedicated transcription engine. If you need verbatim text with timestamps, you must use a separate tool and paste the output here. The system works best with already‑cleaned transcripts or concise topic notes.
The due‑date parser works with common expressions but cannot interpret every possible phrasing. Ambiguous references like “soon” or “asap” will be left blank. It is your responsibility to fill in any missing dates after review.
I keep a written checklist next to every release that touches this topic. The list is boring on purpose: name the owner, name the evidence artifact, and name the rollback. If a step cannot produce a file, a ticket, or a log line, it is not a step — it is a wish.
| Signal | What to record | Stop-ship? |
|---|---|---|
| Unexpected write or send | Tool name, args, identity | Yes until gated |
| Missing confirmation on destructive action | Call path and bypass | Yes |
| Untrusted text treated as instruction | Source surface and resulting action | Yes for agent reach |
| Scanner clean, judgment open | Deferred items + owner | Only if core path safe |
meeting-mind-mvp helps with the measurable first pass. Architecture choices, legal sign-off, and customer-facing claims still need a human owner. Treat every checklist row as decision support, not a certificate.
When a prospect asks whether the product "covers everything," I answer with the boundary: automated checks catch known patterns; novel chains and policy judgment still need review. That honesty keeps support load down and keeps the blog aligned with what the product actually does.
If you need a second opinion, pair this write-up with the references below and with your own staging reproduction. Do not skip the reproduction step just because a model wrote a confident summary.
Turn any meeting into clear, actionable notes