GitHub
- Private repositories
- Pull requests for code
- Merge to main deploys
- GitHub Actions
Where our code lives. Code changes are pull requests that are read first, and CMS edits are commits that run checks before they deploy.
- 45repositories in our GitHub organisation, all private
- 37of them with our shared Claude Code rules
- 280+pull requests merged on this site since 22 September
- 3builds on it
Why we keep code here
A record of every change
Each commit records who changed what and when, and the message says why. If a change breaks something, we can see it and go back.
Code gets read first
Pull requests give a person or Claude Code a chance to read a code change and run the checks before it joins the main branch.
A merge is a release
On this site, merging to main runs the build and deploys staging in about a minute, with no one running a deploy command by hand.
CMS edits are tracked too
Keystatic saves are commits, so an editor's change has the same history and the same way back as a developer's.
Limits that stop pile-ups
At most five open branches per repo keeps old half-finished work from building up behind the live code.
Jobs that run on a schedule
GitHub Actions runs checks, syncs and health checks on a timer, and we move the scheduled ones to our own small server to save minutes.
GitHub is where all our code lives, this website included. We keep it in private repositories, so there's a record of who changed what and a way back to any earlier version.
How a change gets live
- Code changes are pull requests. Work happens on a branch and opens as a pull request. A person or Claude Code reads it and runs the checks before it merges.
- A merge to main deploys this site. A GitHub Actions workflow builds it and sends it to Cloudflare. It takes about a minute, and it doesn't depend on one person's laptop.
- CMS edits are commits too. When an editor saves in Keystatic, the save is a commit to this site's repository, and the content check runs before it deploys to staging.
Keeping it tidy
- Five open branches per repo, at most. More than that and our tools tell us to merge or close something first. A session start also clears branches that are merged and idle.
- Shared rules in 37 of 45 repos. Most repositories carry the same instructions file, so Claude Code works the same way in each.
- A bot that reads them too. A Grok bot reviews pull requests for bugs and secrets. It also flags pushes that skip review and failed builds across 12 repositories, and files an issue. It doesn't merge anything.
Scheduled jobs on our own server
Some repos run daily jobs, like health checks and data syncs. On GitHub's free plan those add up, so we run the scheduled ones for a few repositories on a small server of our own. The deploys stay on GitHub's runners.
Even our docs
Our internal docs site, docs.pacing.agency, is built from a repository too. Merging to its main branch publishes it.
What we connect it to
A merged pull request isn't a working site. Someone still has to look at the result and check the tracking.
Claude CodeReads the repository, works on a branch and opens the pull request.
CursorWhere the branch is edited and pushed, and the pull request opened.
Astro + KeystaticKeystatic saves each CMS edit as a commit in the site's repository.
CloudflareA merge to main on this site's repository deploys it to Cloudflare.
GrokA bot built on Grok reviews pull requests for bugs and secrets, and flags pushes to main that skip review.
AnthropicWhere pull requests from Claude Code are reviewed.
Where we've used GitHub
- Built by us
AI Starter Kit
Rule templates for Cursor, a pre-commit hook that refuses credentials, and a script that turns your Cursor rules into Claude Code config.
See the build - Built by us
Client spaces
A private page for each client at their own address, plus a staff hub to run them all. Built on Cloudflare, and staff-only for now.
See the build - Built by us
This website
How we rebuilt pacing.agency in Astro, with Keystatic as the editor and one Cloudflare Worker, in three weeks, with AI agents opening 95% of the pull requests.
See the build+4
Services that use it
We don't sell it on its own. Each of these services uses it alongside the rest of your setup.
- Custom BuildsWhen nothing you can buy does the job, we build the missing piece and connect it to the rest. We've built and run several of these for ourselves.How it fits
- Place in the loop: WebsiteWebsite Design & DevelopmentWebsites that look the part, turn visitors into enquiries, and that your team can update without a developer.Related tools: Webflow, Astro and Keystatic, Shopify, FigmaHow it fits
- AI SetupWe install Cursor and Claude Code for you or your team, write the rules that keep them safe, and connect them to the tools you already use. You don't need to know how to code.Related tools: Cursor, Claude Code, Anthropic, GitHubHow it fits
What GitHub is
GitHub is where teams keep code and the history of every change to it. Each change is a commit, and a pull request is a proposed set of commits that someone reads before it joins the main branch.
GitHub Actions runs automated jobs from the same place: checks, deploys and scheduled tasks. On the free plan, private repositories get 2,000 Actions minutes a month (GitHub's pricing page, October 2026).
Questions about GitHub
Straight answers on how we work, what it costs and what to expect. If yours isn't here, just ask.
Still have questions?
Talk to usHow do you plan and track client work?
We split each job into tasks, each with an owner and a date, on the task board in our CRM (Twenty). Code changes are tracked in GitHub as pull requests, and plans, notes and reports live in Google Docs and Sheets.
You don't need to log in to any of it. We keep you posted by email, on scheduled calls and in reports.
We've written about this
How to make a free websiteYou can make a free website and own it. Here's how we built our own, pacing.agency, with AI coding tools and hosting that can cost nothing, step by step, and the parts that still cost money.Read the note
The secret life of the user ID: what it is, why it matters, and when you can’t use itIf you're not using User IDs, do you really know what your website users are doing? Probably not.Read the note
Why move your website from WordPress to Webflow?Migrations might be a pain, but longer term they're worth it.Read the note
Start with your numbers.
We'll tell you which tools you need and which connections are missing.
Bring your numbers.
We'll tell you if the spend makes sense.
- A 15-minute callYour goals, your challenges, and whether we're the right fit.
- A 1-hour discovery callWe dig into your numbers. Worth a hundred emails.
- A concrete planAds, a custom build or both, as a one-off project or ongoing.

























