Teardown No. 78 · Newsletter

9 Repos: How Jon Phillips turns a week of commits into a weekly recap post with Claude Code and GitHub Actions

Jon Phillips uses GitHub Actions and Claude Code to write one post a week about what he shipped. Every Friday morning a workflow reads the week's commits from nine repositories of his own products. It opens an issue with the work grouped by project, plus six questions. He then says "weekly recap" in a Claude Code session, and Claude interviews him before it drafts from his answers and the commits only. The draft arrives as a pull request, and merging it is his approval. A second workflow puts the post into EmDash and schedules it for Saturday at 9:00 AM Central.

The problem

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

The blueprint (as he describes it)

  1. Friday: gather the week. Every Friday morning a GitHub Actions workflow reads the week’s commits from nine repositories of his own products. “It does not write anything.” It opens an issue with the week’s work grouped by project, and six questions for him. A calendar reminder tells him it is time.
  2. Fetch from an allowlist only. The repositories it reads are listed in scripts/shipped/config.json. A repository that is not on the list is never fetched, so client work never reaches a draft. He says this is safer than fetching everything and filtering afterward, “because there is nothing to leak if nothing is fetched.”
  3. Let Claude interview him. He opens a Claude Code session in the repository and says “weekly recap”. Claude reads the list and asks him about the week. Which items are worth a reader’s time? Which one leads? What did he ship that no repository shows? What should be left out? He calls the interview the step that makes the post worth reading: “Commits record what changed, not what mattered, and most of them are plumbing.” Some of his most useful work never touches a repository, 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.”
  4. Restrict the facts. His 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.”
  5. Draft and check. Claude writes the draft and checks title length, spelling, client names and dead links.
  6. Preview on staging. Claude publishes the post to a staging copy of the site and hands him the link. He reads it there as a real page, on his phone, before anything reaches production.
  7. Approve by merging. The draft arrives as a pull request, and merging it is his approval. A second workflow then puts the post into EmDash and schedules it for Saturday at 9:00 AM Central.

Stated results

None stated. The post gives no traffic, subscriber or time-saved figures. He links to the first recap written this way, which is about an AI writing workflow with three blind critics.

Caveats

  • This is his own site, and he sells services and products there. He builds websites at Matchless Web. The post’s “Also shipped” section promotes Heavy Artillery, which he calls “the services side of the brand.” It also promotes the Heavy Artillery Skills WordPress Pack 2.2.0. A linked post on the same page describes “A $39 skill pack.”
  • The post is short (3 min read). It lists four questions Claude asks in the interview. It does not list the six questions in the Friday issue, and it does not show the workflow files or the prompt.
  • His site offers email delivery: “A recap every Saturday, or each post as it goes up.” The post does not say how the email is sent or whether these workflows send it.
  • His site is built with EmDash on Cloudflare. EmDash is also where the second workflow puts the post.
  • Handles: X @jonphillipsdev and Bluesky @jonphillips.dev (verified: linked from the footer of jonphillips.dev).

FAQ

How does he keep client work out of the recap?

The workflow only reads repositories on an allowlist in scripts/shipped/config.json. A repository not on the list is never fetched, so client work never reaches a draft.

What stops Claude from making things up?

His interview answers go into a notes file. That file and the commits are the only sources of facts the draft may use.

How does a post get approved and published?

Claude publishes the draft to a staging copy of the site, and the draft arrives as a pull request. Merging it is his approval. A second workflow then puts the post into EmDash and schedules it for Saturday at 9:00 AM Central.

Has it grown his traffic or subscribers, or saved him time?

None stated. The post gives no traffic, subscriber or time-saved figures. The only time it mentions is the ten minutes of interview questions.

Sources


Want agents like these working your distribution? Get It Built. Get new teardowns weekly: subscribe (double opt-in).

Get one teardown a week.

Same format, a new operator every issue. Double opt-in.