Schedule icon
Not icon
PublicHoliday icon
Request icon
ForEach icon
Return icon
Set icon
ListEvents icon
Update icon
If icon
SlackIncomingWebhook icon

Weekly recap of GitHub issues and Google Calendar meetings sent to Notion

Schedule a weekly recap that pulls closed GitHub issues and Google Calendar events, then publishes the summary to a Notion page and Slack.

Categories
Business

Automate a weekly personal wrap-up that gathers your closed GitHub issues and pull requests, counts the Google Calendar meetings you attended, and publishes a clean recap to a Notion page and a Slack channel. This blueprint replaces the Friday afternoon scramble of clicking through GitHub notifications and your calendar with a deterministic, scheduled summary that runs even on weeks you forget. It is built for engineers, managers, and product folks who want a lightweight personal status doc without standing up an analytics stack.

How it works

  1. A io.kestra.plugin.core.trigger.Schedule fires every Friday at 4pm Austin time using the cron 0 16 * * 5, with a io.kestra.plugin.core.condition.Not wrapping io.kestra.plugin.core.condition.PublicHoliday so US holidays skip the run.
  2. get_issues calls the GitHub REST API via io.kestra.plugin.core.http.Request to fetch issues assigned to you in the kestra-io org, filtered to state=closed and the last 5 days.
  3. A io.kestra.plugin.core.flow.ForEach iterates the response, logging each issue URL with io.kestra.plugin.core.debug.Return and incrementing a KV counter issues_today via io.kestra.plugin.core.kv.Set with a 5 minute TTL.
  4. get_calendar_events uses io.kestra.plugin.googleworkspace.calendar.ListEvents to list events between 7am and 5pm US Central across the same 5 day window, authenticated by a Google service account JSON.
  5. A second ForEach walks the metadataList output and counts meetings into a meetings_today KV key.
  6. send_to_notion writes a markdown recap to your Notion page with io.kestra.plugin.notion.page.Update, using {{ kv('meetings_today') }} and {{ kv('issues_today') }} in the body.
  7. check_for_events (a io.kestra.plugin.core.flow.If) branches on the meeting count and sends a tailored message to Slack via io.kestra.plugin.slack.notifications.SlackIncomingWebhook.

What you get

  • A scheduled weekly recap with no manual triggering.
  • One Notion page kept current with your shipping and meeting cadence.
  • A Slack notification so you (or your manager) see the week at a glance.
  • Holiday-aware scheduling that avoids noisy Friday runs on US federal holidays.
  • Counters held in Kestra KV, easy to extend with more metrics.

Who it is for

  • Individual contributors who want a lightweight weekly journal.
  • Engineering managers tracking their own throughput alongside their team's.
  • Product and design leads who live in meetings and want a reminder of what shipped.
  • Anyone running a personal "working out loud" practice in Notion.

Why orchestrate this with Kestra

GitHub, Google Calendar, Notion, and Slack each have their own schedulers, webhooks, and apps, but none of them can coordinate across all four. Kestra glues them together with a single declarative YAML flow, an event-and-time trigger model that supports holiday conditions natively, automatic retries on flaky API calls, KV store for cross-task counters, and full execution lineage so you can replay any past Friday and see exactly which issues and meetings were counted. The Notion API has no native scheduler and the GitHub Actions cron cannot reach into your Google Calendar service account, which is precisely the gap this flow fills.

Prerequisites

  • A Kestra instance, OSS or Cloud.
  • A GitHub classic personal access token with repo scope for the kestra-io org (or your own org if you adapt it).
  • A Google Cloud service account with the Calendar API enabled and read access to your calendar.
  • A Notion internal integration token and a target page shared with that integration.
  • A Slack incoming webhook URL pointing at the channel you want to post to.

Secrets

  • CLASSIC_GITHUB: GitHub classic PAT used as a Bearer token.
  • NEW_SA_GCAL: Google service account JSON for Calendar access.
  • CALENDARID: the Google Calendar ID to query.
  • NOTION: Notion API integration token.
  • PAGE_ID_NOTION: the Notion page ID to update.
  • SLACK_WEBHOOK: Slack incoming webhook URL.

Quick start

  1. Copy this blueprint into your Kestra instance and change the namespace from company.team to your own.
  2. Add the six secrets above in your Kestra UI under Namespace, Secrets, or via your KV/Secret backend.
  3. Adjust the cron in weekly_wrapup and the timezone offsets in timeMin and timeMax to match your working hours.
  4. Update the GitHub API URL to point at your org if you are not in kestra-io.
  5. Run the flow manually once to verify it can read GitHub, Calendar, and write to Notion and Slack.
  6. Let the schedule take over from the next Friday onward.

How to extend

  • Add a Jira, Linear, or GitLab task to pull tickets you closed outside GitHub.
  • Push the recap into your team standup channel or a manager-only Slack channel.
  • Append the counters to a Google Sheet or BigQuery table for a longitudinal view.
  • Use io.kestra.plugin.notion.page.Create instead of Update to start a fresh page each week.
  • Branch on issues_today as well, for example to ping yourself when the count is zero.
  • Generate a markdown changelog from the issue titles with an LLM task before posting.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.