£5 a month

Share
£5 a month

You do not need a team, a budget, or a cloud contract to run AI in production. You need an afternoon, some thinking space and a GitHub Pro subscription.

A Starlette 1.0 bump removed `add_event_handler`. It landed in a Dependabot PR at 03:00 on a Tuesday. By the next morning, it was merged, the broken agents had been fixed, and both branches had been deleted. I didn't notice until I checked the commit history four days later.

That is what the pipeline is for.

I maintain a handful of side projects from my kitchen table. A Raspberry Pi 5 in the garage runs an AI-darts system, a bespoke running coach PWA to replace Strava, and a Pi-hole / Cloudflare tunnel. An AI governance demo runs on a Hetzner VM in Frankfurt. There is a weekly briefing tool, an activity tracker for my weekly work and some computer vision running via Frigate. None of these has support teams. Most of them have more GitHub Actions workflows than lines of application code.

Every repo has the same baseline. Branch protection; nothing merges without passing checks. Claude Haiku on every pull request, automated, at around five pence per review. Auto-merge when Haiku approves and CI is green, the PR merges, the branch deletes, nobody clicks anything. Dependabot watching every dependency, grouped by ecosystem, auto-merged when the checks pass. Ruff for Python, yamllint for YAML, shellcheck for shell scripts, secret scanning on every push. One reusable workflow template shared across three repos, so a change to the lint rules propagates everywhere in a single commit.

The setup took an afternoon. The cost is three pounds a month for GitHub Pro.

What it caught this week
Not hypothetically. Just today.

Tests blocked a broken deploy. Pytest fired on three commits in sequence — an invalid Jinja2 list comprehension in the health dashboard, bad monkeypatching in a test fixture, an import mode conflict. Every one would have silently broken the running coach UI on the Pi at next deploy. The pipeline caught them before they landed.

Seven Dependabot PRs were sitting stuck. The Claude review workflow does not receive secrets on Dependabot-authored PRs by default — GitHub's security model, sensible, but not obvious. Found it, fixed the shared template, re-triggered all seven. All merged within minutes. A problem in the pipeline, caught by the pipeline.

Lint blocked a feature PR repeatedly on the RNLI demo. The linter ran before I read the diff.

The AI layer
The pipeline is the boring part. The more interesting thing is what runs on top.

There are eighty-five Python scripts across the Pi and Home Assistant. 25 of them call the Anthropic API.

The morning briefing is a tool-use agent. Claude does not receive a static block of sensor data — it has a `query_sensor` tool to call back into Home Assistant mid-response. It checks current battery state, Intelligent Octopus slot schedules, sea conditions. It synthesises twelve data sources into a single notification. There is a line at the bottom that says whether it is a good day to hang out washing. I find it useful.

The running coach logs every Strava upload and calls Claude with training load, recent sessions, and a week's sleep data. It returns a coaching note and a recommended session for tomorrow. I read it after I get home.

The weekly energy summary has persistent memory. There is a JSON scratchpad on disk. Claude writes notes to it with a `write_flag` tool and reads them at the start of the next Friday run. Eight weeks of history plus its own rolling commentary — "IOG slot utilisation below 80% for three consecutive weeks." The insight builds week on week.

The proactive alert filter replaces dumb thresholds. When the Powerwall drops, Home Assistant does not alert me directly — it passes Claude a structured condition: battery percentage, time of day, peak rates, solar forecast. Claude decides ALERT or SKIP. The result is fewer notifications, all of them worth reading.

The conversational reply is the one I use most. Any morning briefing, energy alert, or coaching note can be replied to inline from iOS. The reply goes into Home Assistant via notification action, triggers a shell command, `reply_chat.py` builds context from the energy CSV, presence data, and previous insights, then calls Claude. The reply notification is itself reply-able.

On the driveway
There is a Ring camera on the driveway. When motion triggers, a Python script grabs a JPEG and passes it to Gemini: is this a blue motorcycle or bicycle? If yes, the garage door opens. If not, nothing happens.

This has worked reliably since April. The only failure mode I have found is heavy rain, where image quality degrades enough that the model hedges. I consider this correct behaviour.

Observability
Every Claude call logs to a CSV: timestamp, model, input tokens, output tokens, answer snippet, cost. A weekly `health_check.py` scans thirteen script logs for errors and recency, sends a digest if anything looks wrong. The garage door vision alone has logged two hundred and forty-three calls. Total logged spend across all automations since April: **$2.44**.

That is not a typo. Two dollars and forty-four cents across all of it — the morning briefings, the energy summaries, the running coach, the garage door, the darts coaching, the alert filter, the weekly CTO briefing, the conversational replies. Two months of daily AI automation.

Prompt caching accounts for most of the saving. Without it, model spend for April would have been $3.79. With it, $1.77. smaller models handle anything fast and cheap — garage door vision, PR reviews. Larger handles anything that needs to think. The 53% gap is the result of both choices together.

The numbers
The weekly CCR routine that scans my calendar also pulls GitHub and GA4 into the same dashboard. So I can tell you: across nine repos, the pipeline has closed **516 issues** and merged **207 pull requests**. None of those merges were direct pushes to main. Every one went through a branch, a review, a set of checks. Most of them happened without me touching anything.

The same run pulls Interconnect reader numbers from GA4 — users, sessions, pageviews, week-on-week trend, top articles, traffic sources. It commits all of it as a CSV row to GitHub and renders it on the same GitHub Pages dashboard as the calendar data. One Monday morning run. One dashboard. Calendar activity, GitHub output, and publication reach in the same place.

The question I get asked most about AI is: what does it cost? The mental model most people have of "running AI" for personal use still centres on cloud credits, SaaS subscriptions, and infrastructure teams. The actual number is £4.93. That includes the pipeline that reviews your PRs, the agent that decides whether to wake you up at 2 am, and the thing that opens your garage door. The hard part was never the cost. It was building the plumbing that made the cost almost irrelevant.

---
*Sam Prodger is Field CTO at Gravitee and writes The Interconnect.