ForEach icon
Copy icon
SlackIncomingWebhook icon
DiscordIncomingWebhook icon

Project Kickoff Board Pack Fanout with Miro Copy

Fan out a full pack of Miro template boards for a new project with one Kestra execution and post the created board count to Slack.

Categories
Business

A new project rarely needs one board, it needs the whole set, an agenda board, an architecture canvas, a risk map, each copied from a maintained template and named consistently. Doing that by hand means fifteen minutes of copying and renaming per project, done slightly differently every time. This blueprint runs the fanout in one execution: a ForEach iterates over an inline pack definition, io.kestra.plugin.miro.boards.Copy duplicates each template into the project's team with the project name prefixed, and a Slack summary reports the pack size when everything is in place.

How it works

  1. The board_pack variable holds the pack definition as a list of JSON strings, each carrying a display name and the template's source board ID. Editing the pack means editing this list, no task changes.
  2. copy_pack (io.kestra.plugin.core.flow.ForEach) fans out over the list; inside the loop, fromJson(taskrun.value) decodes the current entry.
  3. copy_board (io.kestra.plugin.miro.boards.Copy) copies each source board into the team from the team_id input, naming the copy {{ inputs.project_name }} plus the entry's display name, so Apollo Risk Map sits next to Apollo Kickoff Agenda in Miro search.
  4. notify posts the project name and the pack size, computed with {{ variables.board_pack | length }}, to Slack; each copy's viewLink is available on the per-iteration outputs of the execution.
  5. The errors block pages a Discord platform channel on failure, because a half-created pack needs cleanup before a re-run.

What you get

  • Every project starting from the same maintained templates, with zero manual copying.
  • Consistent, searchable board names, the project prefix groups the whole pack in Miro.
  • One execution per project as the audit record of what was provisioned and when.
  • A pack definition that grows by adding one line, not by training people on one more manual step.

Who it's for

  • PMO and delivery teams who spin up several projects a month with the same board set.
  • Team leads maintaining golden templates who want copies, not edits, of them.
  • Platform teams turning project setup, repos, channels, and now boards, into one push-button workflow.

Why orchestrate this with Kestra

Copying three boards is three API calls; making that a reliable, repeatable ceremony is orchestration. Kestra provides the fanout with per-iteration results, typed inputs for project name and team, secret management for the token, a summary notification, and a failure alert that distinguishes a clean run from a half-created pack.

Prerequisites

  • Template boards in Miro for each pack entry, and their board IDs.
  • A Miro OAuth access token with boards:read and boards:write scopes.
  • A Slack incoming webhook for the project channel and a Discord incoming webhook for failure paging.

Secrets

  • MIRO_ACCESS_TOKEN: Miro OAuth 2.0 access token.
  • SLACK_WEBHOOK_URL: Slack incoming webhook URL.
  • DISCORD_WEBHOOK_URL: Discord incoming webhook URL.

Quick start

  1. Add the three secrets to your Kestra namespace.
  2. Replace the source placeholders in the board_pack variable with your real template board IDs.
  3. Execute the flow with a project name and team ID, then verify the copied boards in Miro and the count in Slack.

How to extend

  • Add entries to board_pack to grow the pack; the fanout and the Slack count follow automatically.
  • Add concurrencyLimit on the ForEach to copy large packs in parallel.
  • Trigger the flow from a webhook so creating the project in your PM tool provisions the boards.
  • Chain a boards.Update per copy to stamp the project brief into each board's description.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.