New to Kestra?
Use blueprints to kickstart your first workflows.
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.
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.
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.copy_pack (io.kestra.plugin.core.flow.ForEach) fans out over the list; inside the loop, fromJson(taskrun.value) decodes the current entry.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.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.errors block pages a Discord platform channel on failure, because a half-created pack needs cleanup before a re-run.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.
boards:read and boards:write scopes.MIRO_ACCESS_TOKEN: Miro OAuth 2.0 access token.SLACK_WEBHOOK_URL: Slack incoming webhook URL.DISCORD_WEBHOOK_URL: Discord incoming webhook URL.source placeholders in the board_pack variable with your real template board IDs.board_pack to grow the pack; the fanout and the Slack count follow automatically.concurrencyLimit on the ForEach to copy large packs in parallel.boards.Update per copy to stamp the project brief into each board's description.