
Content automation adds Craft publisher and timezone-aware cron jobs
Roberto Luna overhauled his content-automation repo with a Craft-based staging layer and timezone-explicit GitHub Actions, cutting manual copy-paste and fixing publishing-time bugs across Dev.to, Substack, Medium, and Bluesky [GitHub Repo].
Roberto Luna added a Craft publisher module and Cancun-aware GitHub Actions to his content-automation repository, enabling automated posting to Dev.to, Substack, Medium, and Bluesky [GitHub Repo]. The src/archive_manager.py now includes a devto_en field in the ContentBundle dataclass, expanding the schema from three to six language-specific fields [Dev.to].
The src/craft_publisher.py was replaced with a 188-line addition and 65-line removal, turning a monolithic publish() function into a platform-agnostic create_craft_document() that routes content to Craft folders based on target [GitHub Repo]. Three new GitHub Actions workflows (devto-daily.yml, bluesky-daily.yml, medium-daily.yml) replace the previous single daily-content.yml. Each workflow runs on a cron trigger annotated with Cancun local time.
The config/settings.yml now stores author.timezone: America/Cancun and author.brand: VibeCoding, making the timezone explicit for all downstream scripts [GitHub Repo]. The src/archive_manager.py logic now auto-archives yesterday’s published drafts into Publicado/YYYY-MM/YYYY-MM-DD folders, providing a deterministic review buffer.
By writing drafts to Craft first, the pipeline offers a review layer without breaking automation; the author reports a 50% reduction in manual editing time. The new comments and America/Cancun setting lock the schedule to the intended 9 AM local slot, stopping off-by-one-hour publishing errors. Splitting the monolith means a Bluesky API timeout no longer aborts Medium and Substack pushes. Each platform runs in isolation, improving overall reliability for multi-platform bots.
Subscribe to the broadcast.
Daily digest of the day's most important tech news. No fluff. Engineering signal only.
// delivered via substack · double-opt-in confirmation


