Skip to content

~/writingweekly-blog-post-claude-code-github-actions

A weekly blog post with Claude Code and GitHub Actions

How I write one post a week about what I shipped: GitHub Actions gathers the commits, Claude interviews me about the week, then drafts it for my approval.

Jon Phillips3 min readShipped#ai#automation#tools
A stack of three black parcels on a dark concrete floor, the top one sealed with a strip of green tape

I ship across several products, and I rarely write down what changed. A month later I cannot tell you what I did in a given week, and nobody else can either. So I set up a weekly recap for jonphillips.dev. It keeps a record of what I shipped across every project, and it lets me build in public without writing every word myself.

Friday: gather the week

Every Friday morning a GitHub Actions workflow reads the week's commits from nine repositories of my own products. It does not write anything. It opens an issue with the week's work grouped by project, and six questions for me. A calendar reminder tells me it is time.

The repositories it reads are an allowlist in scripts/shipped/config.json. A repository that is not on the list is never fetched, so client work never reaches a draft. That is safer than fetching everything and filtering afterward, because there is nothing to leak if nothing is fetched.

Then Claude interviews me

I open a Claude Code session in the repository and say "weekly recap". Claude reads the list and asks me about the week. Which of these is worth a reader's time? Which one leads? What did I ship that no repository shows? What should be left out?

The interview is the step that makes the post worth reading. Commits record what changed, not what mattered, and most of them are plumbing. Some of my most useful work in a week never touches a repository at all, like setting up search tracking for a site or getting a Google Business Profile verified. Ten minutes of questions gets those into the post and keeps the plumbing out.

My answers are saved to a notes file. That file and the commits are the only sources of facts the draft may use, so Claude cannot fill a gap with a guess.

Draft, preview, approve

Claude writes the draft and runs a check on it: title length, spelling, client names, dead links. It then publishes the post to a staging copy of the site and hands me the link. I read it there as a real page, on my phone, before anything reaches production.

The draft arrives as a pull request, and merging it is my approval. Once I merge, a second workflow puts the post into EmDash and schedules it for Saturday at 9:00 AM Central.

The first recap written this way is about an AI writing workflow with three blind critics.

Also shipped

Heavy Artillery. heavyartillery.io is the services side of the brand, and it now has a /websites page for custom website development and a contact page with its own form. The form feeds a SureContact workflow that tags the contact and emails me. I proved it with one test submission.

Heavy Artillery Skills. On the skills site, WordPress Pack 2.2.0 adds a second skill, for styling wp-login.php and the Fortress security plugin's own pages to match a site's brand.

Jon Phillips, laughing over a cup of coffee

Jon Phillips builds websites, web apps and automations at Matchless Web in Clinton, Mississippi.

~/writing · keep reading