Projects
A record of problems solved, automations built, and outcomes delivered. Want this kind of work done on your business? Start with a Systems Health Check →

Automated Accounts Receivable — Credit Control & Collections
The company was carrying a large AR backlog with manual, inconsistent follow-up. Built an AWS Lambda that runs daily against Odoo, detecting overdue invoices and driving a reminder → reminder → final-notice email cascade — live in code, gated behind a per-customer opt-in during staged rollout. Credit-limit tiering and automatic credit holds are designed, not yet built.

agent-crm — Open-Source CRM for AI Agents
Small businesses wanted an AI agent to handle CRM busywork, but most CRMs either can't be driven by an agent or give it the keys to delete data and send email. Built agent-crm: a single-container CRM (FastAPI, SQLite) that exposes an MCP endpoint so an agent can search contacts, run the call queue, log calls and move deals — with no ability to delete records or send email — while a plain web app shows the owner everything it did.
Released publicly under the MIT licence — one container, one database file, no external services.

Automated Lead Generation & Qualification Pipeline
Wanted a way to find and qualify new commercial customers without manual prospecting. Designing a pipeline that pulls candidate businesses from public sources, scores fit using satellite imagery and vision-model signals, and pushes qualified leads into the sales CRM — avoiding repeat lookups via a local cache. Prototype environment now running; full pipeline build under way.

Business Intelligence Platform — Cloud Infrastructure Build
Needed a self-hosted business intelligence and automation platform, built on a properly secured AWS foundation rather than an ad hoc account. Designed the CloudFormation infrastructure-as-code for the platform's ETL layer, then deployed an account-wide security baseline — centralised logging, IAM guardrails, encryption-by-default, enforced MFA, and budget/cost-anomaly alerting — ahead of the build. Also root-caused and fixed a long-running DNS staleness issue affecting daily office connectivity.
Shipped a security-hardened AWS foundation (MFA enforced, public access blocked, encryption-by-default) ready for the platform build.

EV Church Sermon Transcriber
Finding and listening back to a specific sermon by Bible passage meant scrolling through a full archive by hand. Built a scraper that searches by verse-level Bible reference, downloads the matching audio, and transcribes it with OpenAI Whisper — appending a proper citation to every transcript. Hardened with a trusted-host download allow-list, a size cap, and retry logic.
Turns a manual archive search into a verse-level lookup — sermons found, downloaded, and transcribed automatically instead of scrubbed through by hand.

Journey — Mailing List & Customer Journey Manager
Built Journey, a web app for managing mailing lists and configurable customer email journeys, with a full API for programmatic control. Tracks opens and clicks per contact, so engagement with a process is visible without asking. Now includes double opt-in and unsubscribe-confirmation compliance flows, plus a Subscriber Management API that lets other internal systems add and manage subscribers directly.
In production — replaces manual client check-ins with direct visibility into engagement, now with compliance-grade opt-in/opt-out handling built in.

Inbox Agent
Customer enquiries were sitting unread for hours — long enough for a competitor to get there first. Built a managed AI email agent that reads every message, drafts a reply in the owner's voice, and routes it to Telegram for one-tap approval. Now extended to track committed turnaround windows on active client work and proactively draft a follow-up the moment a stage runs overdue, instead of waiting to be asked.
Enquiries acknowledged in minutes, not hours, with approval from anywhere in under 10 seconds — and stalled client follow-ups now get caught automatically instead of relying on memory.

Client Infrastructure Monitoring Stack
No visibility into whether client servers were up, disks filling, or SSL certs about to expire — issues that only surfaced when a client called. Built a self-hosted Prometheus + Grafana monitoring stack with per-client Grafana Organisation isolation so each client sees only their own data, deployed behind Traefik with ACME TLS. Caught and fixed three bugs during live deployment: a Grafana startup crash from referencing a nonexistent Org ID, a cAdvisor scrape timeout from expensive per-container disk scans on a crowded host, and a bash set -e interaction that silently broke onboarding script idempotency.
Outages surface in seconds, not when a client calls. Per-client isolation verified by querying Grafana's API as a restricted Viewer login.

Search27 — Job Search Automation Dashboard
Manually tracking opportunities across Seek, LinkedIn, Indeed, Japan Dev and four other boards — while preparing tailored applications across multiple career tracks — was consuming 15–20 hours a month. Built a self-hosted NiceGUI dashboard that scrapes all boards, deduplicates via hash and fuzzy matching, scores each listing against two portfolios using Claude, and manages the full application pipeline through to one-click email sending.
15–20 hours/month recovered. 1,000+ listings processed across 8 boards with near-zero duplicate noise.

Automatic Email Manager (AEM)
A high-volume inbox across ministry, family, and operational responsibilities was consuming 8–12 hours a week in manual triage with regular missed follow-ups. Built a self-hosted n8n system that classifies every incoming email using AI, extracts action items into structured Vikunja tasks, prepares draft replies, and delivers a formatted daily digest to Discord — all without touching a single email manually.
8–12 hours/week recovered. Missed follow-ups reduced to near zero.

Safe Ministry Connections (SMX)
Ministry teams were spending 8–12 hours a week on manual Safe Ministry compliance checks, attendance roll calls, and report compilation — work that fell to volunteers and created real Diocese compliance risk. Built a production n8n automation platform that monitors check-ins every 5 minutes during services, generates weekly and monthly compliance reports automatically, and provides instant SMS emergency tools, integrating Elvanto, Adminosaur, and ClickSend on a self-hosted Docker VPS.
8–12 hours/week returned to pastoral care. Near-100% compliance consistency with zero manual report compilation.

Jethro PMM — CSV Import Fix (Merged PR #1432)
After a Fluro-to-Jethro migration, archived duplicate person records were triggering "too many people with the same details" errors and blocking all CSV bulk imports — forcing hours of manual data cleanup per cycle. Identified the root cause in the import handler, added a clean early-exit exact Person ID match to `_findExistingPerson()`, and submitted a pull request that was reviewed and merged within days.
10–20 hours per bulk update cycle eliminated for churches managing 500+ records. PR merged into mainline.