0saas

Job ticket 591683 · consumer · facilitator's board · no subscription

Miro's free wall holds 3 boards. Here is the desk that runs the room for nothing.

This page is a facilitator's board. You feed it a goal, a board's content, or a wall of raw stickies, a free-tier model returns a timed workshop flow, a zone layout, or a theme synthesis as strict JSON, and your browser prints it as clocked, zoned rows you export as Markdown. No board is hosted, nothing is stored — the plan is what you build in Miro Free's 3 boards, on paper, or on the wall. The prompts are printed at the bottom of this page so you keep them even if this site disappears.

Miro is a trademark of Miro Group, Ltd. This is an independent, unaffiliated comparison built on Miro's own published pricing page, linked below. We are not Miro, and nothing here is endorsed by them.

Facilitator's board — rendered in this browser

Source: noneRendered: 0Uploaded to 0saas: nothing

Sample data is illustrative, not a claim about Miro. Every Miro figure on this page comes from the linked pricing page, read 2026-09-17.

The prompt pack

Three prompts, each mapped one-to-one onto a Miro feature you are currently rationed on. Run them from this page with a free key, or copy them into any free chat model — the text is identical either way, and it is printed in full at the bottom of this section so it survives this site.

Loading the pack from tools.json… If this fails, the full prompt text is still readable below.

What Miro's own pricing page says

Read from miro.com/pricing on 2026-09-17. Fields we could not read are marked unconfirmed rather than filled in with a plausible number.

Miro Free vs Starter vs this page — verified 2026-09-17
The jobMiro FreeStarter (US$8/member)This page + a free-tier model
PriceUS$0 — 3 editable boardsUS$8 per member / month (billed annually)US$0 forever. A free-tier key costs nothing; the prompts are yours.
Board count3 editable boardsUnlimited boardsUnmetered by us — the plan is a file. Your ally's free allowance is the only ceiling: the Gemini free tier's daily base covers many runs.
Workshop templatesLimited free setFull template wallPrompt 01 writes the 90-minute flow with a clock that tiles exactly and at least half the room producing.
Board planningBuild it by handTemplates + build it by handPrompt 02 returns the zone layout with one adjacency rule and a capacity per zone — buildable in any tool in minutes.
Sticky synthesisAI on paid boardsAI includedPrompt 03 turns 40 raw stickies into themes with an accounting ledger: input = in-themes + parked, parked quoted verbatim.
Who sees your session contentMiroMiroOnly the inference provider you choose — or nobody at all in Copy-Paste Relay.

What this replaces, and what it does not

A displacement claim you cannot substantiate is a lie with good typography. This is the whole scope, including the parts where Miro wins.

Replaced: the 3-board ceiling for planning

Prompt 01 produces the full workshop flow as a document — it runs in Miro Free, on paper, or in any tool.

Replaced: the paid template wall

Prompt 02 produces the board's spatial plan — zones, capacities, one adjacency rule — instead of a licensed template.

Replaced: AI synthesis on paid boards

Prompt 03 returns the themes with the evidence attached and the note count reconciled.

Not replaced: the live canvas

No board is hosted here. The plan is built in Miro Free's 3 boards, on the whiteboard, or on a wall of real stickies.

Not replaced: multiplayer session facilitation

No live cursors or voting. The flow is run by a human in the room — deliberately, because a workshop without a facilitator is a form.

Not replaced: permanent board storage

The synthesis exports as Markdown. What the room decided, in writing, is what survives.

The prompts, in full, as text

Copy these into any model. They are the product; the page around them is convenience. Each block is the exact system prompt the interactive runner sends, plus the user-message template.

Prompt 01 — 1. Workshop flow · miro-workshop-flow v1.0.0 · best ally: Google Gemini API — Free usage tier · gemini-2.5-flash-lite

Replaces: Miro's paid template layer for facilitated sessions — the 90-minute flow written out with a time budget that actually adds up.

Why this model: The flow's value is a clock that reconciles — segments sum to the duration; strict-JSON on the Gemini free tier keeps the arithmetic exact. Fallback ally: OpenRouter — :free model variants.

System prompt (1574 chars):

You are the facilitator at a facilitator's board. You turn a goal and a room into a machine-readable workshop flow.

Return ONLY one JSON object. No markdown fences, no commentary.

{
  "goal": string (max 10 words),
  "kicker": string (max 6 words),
  "duration_total_minutes": integer,
  "steps": [
    { "when": "MM:MM-MM:MM", "title": string (max 8 words), "body": string (max 35 words), "duration": string (max 8 words) }
  ],
  "materials": [ string (max 12 words) ] (2-5 items),
  "notes": [ string (max 15 words) ]
}

Hard rules:
1. 4 to 8 steps. "duration_total_minutes" comes from the brief (default 90). The segments must tile the clock: first starts at 00:00, last ends at the total, nothing overlaps, nothing gaps. Compute the "duration" label from each segment's actual minutes.
2. A workshop that opens with a 20-minute presentation fails — the first step must be a frame or warm-up of at most 10 minutes, and at least half the total time must be participants producing (writing, voting, moving notes), not listening.
3. Every producing step names the physical medium in "body" (real stickies, whiteboard, Miro board, chat) — a step with no medium is not a step.
4. "materials" lists what to print or set up before the room fills; max 5 items, each a thing you can buy or print.
5. If the brief's goal is vague ("align the team"), the flow still commits: pick the narrowest defensible reading and state it in "notes" as the interpretation you ran with.
6. Banned: "synergy", "unpack", "deep dive", exclamation marks, emoji. Write in the language of the brief.

User message template:

The goal and the room: {{goal_room}} The clock (minutes; blank for 90): {{minutes}}

Variables:

  • {{goal_room}} — Goal and room (max 600 chars) sample data shipped with the tool
  • {{minutes}} — Clock (max 12 chars) sample data shipped with the tool

Output schema (the answer must match this exactly):

{ "type": "object", "required": [ "goal", "kicker", "duration_total_minutes", "steps", "materials", "notes" ], "properties": { "goal": { "type": "string" }, "kicker": { "type": "string" }, "duration_total_minutes": { "type": "integer" }, "steps": { "type": "array", "minItems": 4, "maxItems": 8 }, "materials": { "type": "array", "minItems": 2, "maxItems": 5 }, "notes": { "type": "array" } } }

Decoding: temperature 0.7 · max 1800 output tokens · responseMimeType application/json · budget ~800 in / ~800 out per run · cost per run: 1 request — a rounding error against the Gemini free tier's daily base.

Prompt 02 — 2. Board layout · miro-board-layout v1.0.0 · best ally: Google Gemini API — Free usage tier · gemini-2.5-flash-lite

Replaces: Miro's paid template wall (7,000+ templates, most gated) — the board's spatial plan as a document instead of a licensed template.

Why this model: A layout is zones with adjacency rules; strict-JSON keeps each zone's bounds and contents atomic so the reader can build it in any tool in minutes. Fallback ally: OpenRouter — :free model variants.

System prompt (1490 chars):

You are the board planner at a facilitator's board. You turn a session's content into a machine-readable board layout.

Return ONLY one JSON object. No markdown fences, no commentary.

{
  "board": string (max 8 words),
  "kicker": string (max 6 words),
  "steps": [
    { "when": "Zone A" | "Zone B" | "Zone C" | "Zone D" | "Zone E", "title": string (max 8 words), "body": string (max 30 words), "duration": string (max 10 words) }
  ],
  "adjacency": string (max 25 words),
  "notes": [ string (max 15 words) ]
}

Hard rules:
1. 3 to 5 zones, labelled Zone A through Zone E in reading order (top-left to bottom-right). Every zone gets a "when" that is its label — the label is the anchor the reader builds from.
2. "body" states what goes in the zone and the capacity (e.g. "14 candidate notes, one per card") — a zone with no capacity is a suggestion, not a layout.
3. "duration" for a zone is its rough size on the board ("1/3 width, full height") so the reader can scale it to paper or pixels.
4. "adjacency" states the one spatial rule that makes the board work (e.g. "voting cluster must touch the candidates, never the parking lot"). Exactly one rule; a second rule means the layout is too complex.
5. Every piece of content the session produces must have exactly one home zone; if a piece could live in two zones, the layout is wrong — move it and note the move.
6. Banned: 'central', 'surrounding', vague prepositions without a named neighbour. Write in the language of the brief.

User message template:

The session's content (what goes on the board): {{content}} The medium (Miro board, paper, whiteboard): {{medium}}

Variables:

  • {{content}} — Content (max 700 chars) sample data shipped with the tool
  • {{medium}} — Medium (max 80 chars) sample data shipped with the tool

Output schema (the answer must match this exactly):

{ "type": "object", "required": [ "board", "kicker", "steps", "adjacency", "notes" ], "properties": { "board": { "type": "string" }, "kicker": { "type": "string" }, "steps": { "type": "array", "minItems": 3, "maxItems": 5 }, "adjacency": { "type": "string" }, "notes": { "type": "array" } } }

Decoding: temperature 0.55 · max 1500 output tokens · responseMimeType application/json · budget ~700 in / ~700 out per run · cost per run: 1 request — under 1% of the Gemini free tier's daily base.

Prompt 03 — 3. Sticky synthesis · miro-sticky-synthesis v1.0.0 · best ally: Google Gemini API — Free usage tier · gemini-2.5-flash-lite

Replaces: Miro's AI synthesis on paid boards — the 40 raw stickies turned into themes with the evidence attached, without a paid board.

Why this model: Synthesis is long-context grouping with a completeness contract — every input note accounted for; strict-JSON keeps the audit trail in the answer. Fallback ally: OpenRouter — :free model variants.

System prompt (1573 chars):

You are the synthesiser at a facilitator's board. You turn raw sticky notes into themes with the evidence attached.

Return ONLY one JSON object. No markdown fences, no commentary.

{
  "kicker": string (max 6 words),
  "title": string (max 10 words),
  "steps": [
    { "when": string (max 8 words), "title": string (max 8 words), "body": string (max 35 words), "duration": string (max 8 words) }
  ],
  "accounted": { "input_notes": integer, "in_themes": integer, "parked": integer },
  "notes": [ string (max 15 words) ]
}

Hard rules:
1. "steps" is 3 to 6 themes. Each "when" is the theme number and word ("Theme 1 — Cost"). Each theme's "body" names the evidence: quote or paraphrase 2-4 of the input notes that support it, and names the note authors if they are given.
2. "accounted.input_notes" must equal the number of notes in the input (count them). "in_themes" + "parked" must equal "input_notes". Notes that support no theme go to "parked" and each parked note must appear, verbatim, in "notes".
3. A theme with one supporting note is not a theme — it is a note. Merge it into the nearest theme or park it; never let a single note wear a theme's label.
4. Do not add a theme the notes do not contain. If the room clearly wanted to say something nobody wrote, the correct answer is a "notes" entry saying so — not a theme.
5. Theme order is by evidence strength (most notes first), not by importance — importance is the room's call, not the synthesiser's.
6. Banned: 'insight', 'leverage', 'journey', exclamation marks, emoji. Write in the language of the notes.

User message template:

The raw stickies (one per line, author in brackets if known): {{stickies}}

Variables:

  • {{stickies}} — Raw stickies (max 4000 chars) sample data shipped with the tool

Output schema (the answer must match this exactly):

{ "type": "object", "required": [ "kicker", "title", "steps", "accounted", "notes" ], "properties": { "kicker": { "type": "string" }, "title": { "type": "string" }, "steps": { "type": "array", "minItems": 3, "maxItems": 6 }, "accounted": { "type": "object" }, "notes": { "type": "array" } } }

Decoding: temperature 0.4 · max 1700 output tokens · responseMimeType application/json · budget ~1,500 in / ~700 out per run · cost per run: 1 request per synthesis — under 1% of the Gemini free tier's daily base.

Questions worth asking before you cancel

Is this actually free, or is there a subscription hiding?

There is no subscription and, right now, no paid tier at all. The whole tool is unmetered. A one-time unlock for workshop deck export is planned, but no price is shown anywhere on this site until a real Stripe Payment Link exists and its price is read back from Stripe's API rather than typed by hand.

Do you need an API key?

No. Copy-Paste Relay works with any free chat model you already use: copy the prompt block, paste it in, paste the JSON answer back into the box. A key only removes the copy-paste step. If you do use one, it is stored in your browser's localStorage and sent only to that provider — 0saas has no endpoint that accepts a key.

Which free model is best for this?

The Gemini free tier for the flow and the layout — the clock and the zones are arithmetic the strict-JSON path keeps exact. OpenRouter's :free variants are the long-context pick for a 40-sticky synthesis.

Does the synthesis actually count my stickies?

It is built to show its counting: the answer carries an accounting ledger (input = in-themes + parked), and every parked note is quoted verbatim in the footnotes. If the ledger does not reconcile, re-run it — the free tier makes the second pass free.

Is 0saas affiliated with Miro?

No. Miro is a trademark of Miro Group, Ltd. We name it because a comparison that will not name the thing it compares against is useless. Pricing figures come from Miro's own pricing page, linked above, with the date we read it and a per-field confidence marker.

Next on the ledger