New to Kestra?
Use blueprints to kickstart your first workflows.
Run a weekly status broadcast on X with Kestra. The message line lives in Git as an input default, gets reviewed in pull requests, and posts on schedule.
Social scheduling tools hide the copy inside their own UI, where nobody reviews it and nothing versions it. This blueprint keeps the recurring broadcast in Git instead. The custom message line is the default value of a flow input, so changing next week's copy is a pull request, with a reviewer reading every public word and the diff recording who approved it. A disabled-by-default weekly Schedule trigger publishes it through io.kestra.plugin.x.XExecution, an execution notification poster whose post always leads with the execution state and flow id, carries the reviewed line from customMessage, and ends with a link to the execution. That framing suits a status broadcast, the weekly digest post doubles as public proof that the publishing flow ran, and the execution history becomes the log of everything the account ever posted. Posts on X are public and instant, so the review happens in the PR, not after the post is live, and the 280 character cap covers the full rendered post.
post_text input holds the custom message line. Because flows deploy from Git, editing the default is a pull request with normal review.weekly_slot (io.kestra.plugin.core.trigger.Schedule) fires Wednesdays at 15:00 UTC once enabled, the calendar slot for the recurring broadcast.post_content (io.kestra.plugin.x.XExecution) authenticates with the OAuth 1.0a credential set and posts the execution notification. The task renders its bundled execution template, so the post opens with the execution state and flow id, carries the reviewed customMessage line, and closes with a link to the execution, all within the 280 character cap.log_published (io.kestra.plugin.core.log.Log) writes the published copy into the execution history, making every public post auditable.errors block posts a Discord alert when publishing fails, so a missed calendar slot is noticed the same day, not at the end of the month.post_text bypasses nothing, the same rendered format, 280 character cap, and audit trail apply.A scheduling SaaS owns your calendar, your copy, and your audit trail. Here Git owns the copy, Kestra owns the schedule and the credentials, and the execution history owns the record of what was published. Secrets keep the four OAuth values out of the flow file, the trigger ships disabled so nothing posts before the first review, and the errors block guarantees a silent miss becomes a loud message.
X_CONSUMER_KEY: X app consumer key (API key).X_CONSUMER_SECRET: X app consumer secret (API secret).X_ACCESS_TOKEN: OAuth 1.0a access token for the posting account.X_ACCESS_SECRET: OAuth 1.0a access secret for the posting account.DISCORD_WEBHOOK_URL: Discord incoming webhook for failure alerts.post_text to your real copy and merge after review.disabled: false on the weekly_slot trigger.post_text through trigger inputs.customFields entries for structured extras such as the digest issue number, each renders as its own key-value line in the post.core.execution.Fail guard that rejects a message line long enough to push the full rendered post over 280 characters before it reaches the API.