Craig Leppan · AI engineer

AI engineering on
systems you own.

2nth.ai builds the infrastructure AI agents run on — ERP, CRM, data and MCP connectors on AWS, Microsoft Azure, Cloudflare, Google Cloud and open source, on systems you own.

I take a business from legacy code, spreadsheets and SaaS sprawl to a clean stack — on AWS, Microsoft Azure, Cloudflare or Google Cloud, with ERPNext and other open source where it fits — then put AI agents to work on it over MCP, with each person's own permissions and a human approving anything that leaves the building.

● 100+ Workers & Pages apps in production ● 70+ custom domains served ● MCP servers live on client ERPs ● AWS · Azure · Cloudflare · Google Cloud ● Hosted in SA (Johannesburg) ● Built in South Africa 🇿🇦
01 · The problem

AI can't work on systems it can't reach.

Most businesses run on a SaaS subscription per job, a shared spreadsheet and an inbox. Drop an agent into that and it has nothing to read, no permissions model and nowhere to write. The pilot demos well, then stalls.

The fix is infrastructure first: one system of record, clean data, and a governed connector your AI goes through — so an agent can check stock, draft the quote and log the follow-up in the same system your team already uses.

infrastructure, then agents

02 · What I build

One stack, built in layers.

Open source where it counts, so you own the code, the data and the hosting. Each layer is useful on its own; together they give your AI something solid to stand on.

Layer 1 · System of record

ERP, CRM and ATS you own

ERPNext for stock, quotes, orders and the finance hand-off. Frappe CRM instead of per-seat CRM. Self-hosted Huly for recruitment. Azure SQL and Dataverse where the business already runs on Microsoft.

ERPNextFrappe CRMHulyAzure SQLDataverse
Layer 2 · Integrations

Your existing tools, connected

Shopify orders into ERPNext, hand-offs to Xero, Sage and Paystack, WhatsApp and transactional email. Connector bugs get fixed and reported upstream.

ShopifyXeroSagePower AutomateWhatsApp API
Layer 3 · Edge apps

Portals and apps around the core

Payments portals, B2B quote portals, booking systems and multi-tenant SaaS — behind Entra ID, Cloudflare Access or magic-link sign-in.

Cloudflare WorkersAzure App ServiceAWS S3 + CloudFrontPostgres
Layer 4 · AI agents

Agents grounded in your systems

MCP servers give agents your ERP, CRM and content with each user's own permissions; A2A lets agents work together. The framework and model fit the job — and when a simple workflow beats an agent, you get the workflow. Agents draft; people approve.

MCPA2ALangGraphGoogle ADKAgent SDKsAny model
The agent stack, mapped →
Layer 5 · Data

Spreadsheets into tested BI

Fragile Excel packs rebuilt as versioned, tested pipelines — reconciled to the original totals before anyone switches over.

dbtDuckDBEvidencePower BI
Edge · Hardware

When the work is off-screen

Local-first devices that keep running without the cloud — machine controllers, CNC telemetry, on-site check-in servers and shop-floor displays.

Raspberry PiESP32MQTTSQLite

Built host-agnostic, then deployed into the cloud account you already own.

AWS

S3 · CloudFront · Lambda · API Gateway · RDS · Bedrock · Cape Town region (af-south-1)

Microsoft Azure & 365

Entra ID · Azure SQL · App Service · Functions · Key Vault · Power BI · Power Automate · Copilot Studio · Purview

Cloudflare

Workers · Pages · Durable Objects · Queues · D1 · R2 · KV · Tunnel · Access

Google Cloud

Compute Engine · Cloud Run · africa-south1 hosting · Workspace

Open source

ERPNext / Frappe · PostgreSQL · Supabase · dbt · DuckDB · Evidence · Hono · SvelteKit

03 · Legacy rebuilds

From legacy code to an AI-ready stack.

Old platforms are where AI projects go to die: no API, no tests, one vendor who understands it. I rebuild them as a forward-deployed engineer working with AI coding agents such as Claude Code — writing production code inside your business, and still accountable at month six.

Every requirement is traceable to a test, an issue, the evidence and a business sign-off, so speed doesn't cost you control.

  1. AssessGrade the codebase for agent-assisted work before quoting
  2. RequirementWritten in git, with an ID
  3. Test plan → issueEach requirement becomes tracked work
  4. Evidence → PRCode ships with proof it does what was asked
  5. EvalNamed after the requirement it checks
  6. Sign-offA named business owner approves
04 · How to work with me

Start small. Every step stands on its own.

You can stop after any step and keep what was delivered.

01 · AUDIT

Stack audit

A fixed-price teardown of what you actually run — systems, data, integrations and what they cost. The report is yours whether or not we build.

02 · PROOF

Proof of concept

A working slice on your own data in weeks, priced so it's credited against the build.

03 · BUILD

Phased build

Fixed-scope phases. Code, configuration and data live in your accounts from day one.

04 · RUN

Run or hand over

A managed service or a one-day-a-week retainer — or a clean hand-over to your team with runbooks.

Also

Fractional CTO one or two days a week, and AI readiness and training on Microsoft 365 Copilot, Claude, ChatGPT and Gemini — governance, AI policy and guided trials before anything touches production.

Human + AI delivery: AI-assisted engineering cuts build hours, and the saving shows up in your quote.

05 · Recent work

Built and running.

Clients are listed by industry. Names, references and code access are shared on request.

Retail · corporate giftingLive

Stock, quotes and AI on one ERP

Problem
Website orders, corporate quotes, stock and the books lived in four systems that didn't agree.
Solution
ERPNext as the single source of truth, Shopify orders syncing in, a B2B quote portal and an MCP connector so staff ask an AI agent for stock and draft quotes — drafts only.
ERPNextShopifyMCPCloudflare Access
Manufacturing · make-to-order furnitureLive

ERP for a made-to-order workshop

Problem
Orders, deposits and production were tracked across Shopify, Sage and spreadsheets.
Solution
ERPNext with Shopify sync, Paystack reconciliation, a carve-over from Sage and BI served from R2, with every support request on a tracked issue desk.
ERPNextPaystackEvidence BI
Manufacturing · furniture factoryIn build

Factory data and machines, connected

Problem
Hundreds of ERP customisations lived only in the database, and the shop floor was invisible to the office.
Solution
ERPNext moved into git, a twice-daily BI warehouse, two agent connectors gated by ERP roles, CNC telemetry over MQTT and a saw-feeder controller.
ERPNextdbtMCPMQTT
RecruitmentLive

An agent team for recruiters

Problem
Recruiters spent their days sourcing, screening and chasing instead of placing people.
Solution
Recruitment agents on Cloudflare Workflows over a self-hosted Huly ATS, with an MCP server in front. Agents source and draft; recruiters approve every send.
HulyWorkflowsMCPAI agents
Non-profit · grantmakingLive

Fractional CTO on Microsoft Azure

Problem
Grant, payment and impact data sat in a legacy system, and paying grantees took manual re-keying into accounting.
Solution
A South Africa-resident Azure data hub, a payments portal that turns approved grants into draft Xero bills, Power BI spaces for funding partners, and an AI policy.
Azure SQLApp ServiceEntra IDPower BI
Property · flexible workspaceLive

Legacy platform, governed rebuild

Problem
A 15-site coworking platform had to take on a new operator without breaking the sites already running on it.
Solution
The platform — 214 tables under row-level security, four payment providers — hardened and rolled out through governed delivery with AI coding agents.
SvelteKitSupabaseCoding agents
Events · registration and badgingIn build

Legacy rebuild to AI-native SaaS

Problem
An ageing Laravel platform, understood by one vendor, with no API for agents to use.
Solution
Multi-tenant SaaS built from one OpenAPI contract that also generates the SDK, docs and MCP tools, with offline check-in on a Raspberry Pi at the venue.
CloudflarePostgresMCPAI agents
Hospitality · lodgesBuilt

Forecasting without the spreadsheet risk

Problem
Forward sales lived in an Excel pack of 62,000 formulas that one wrong edit could break.
Solution
A tested dbt + DuckDB pipeline with Evidence dashboards, verified line by line against the original workbook before switch-over.
dbtDuckDBEvidence
Professional services · risk & auditLive

Sites the marketing team runs through an agent

Problem
Every website change and event microsite waited on a developer, and sales research was done by hand.
Solution
The flagship site and event microsites rebuilt as static Astro, edited by an AI agent over MCP and deployed into the firm's own AWS (S3 + CloudFront). Research agents log leads to HubSpot and never email a prospect.
AWS S3CloudFrontAstroMCPHubSpot
Fitness · coached cycling studioLive

Class bookings members run themselves

Problem
A ten-bike studio needed bookings, ride credits and cancellations handled without staff in the loop.
Solution
A booking app with passwordless email sign-in, live classes opening seven days ahead, credits that return on cancellations 12 hours out, and each member's ride history.
CloudflarePasswordless sign-inBookings
06 · Lab

Products and demos, running in public.

What I build when there's no client brief: products you can sign up for, demos you can click through, and a few experiments. All on the same stack I use for client builds.

Venture · ERPNext showcase

ERPNext Africa — the full playbook, in public.

Moving mid-market manufacturers and distributors off SysPro, Sage and Dynamics onto open-source ERPNext. The migration playbooks, a steel-mill simulator, a furniture briefing and a hosting decision tree are all published.

ERPNextR0 per-user licensingVAT · PAYE · POPIA
doc.erpafrica.org →
Product

ViewGate

Sell videos, audio and PDFs from the WooCommerce or Shopify shop you already have. Each paid order emails a time-limited, watermarked streaming link. ViewGate never takes a payment or a cut.

WorkersShopifyWooCommerce
viewgate.2nth.ai →
Demo · typed decisions

Jev demonstrator

Most of what agents do is deciding, not writing. Ask a System One model a typed question and get calibrated probabilities back in one call. A cascade calculator shows what goes to code, a frontier model or a person.

Jev APIWorkersSystem One models
jev-demo.2nth.workers.dev →
Demo · BI

2nth Business Intelligence

One set of numbers across every ERP you run: open-source BI on Apache Superset and PostgreSQL, with no per-user licences.

SupersetPostgreSQLSAP B1 · Sage · ERPNext
bidemo.2nth.app →
Product · AI practice

2nth.me

A gym for human skills. Practise difficult conversations, negotiation and leadership with an AI sparring partner that debriefs you afterwards.

AI agentsVoiceOpen source
2nth.me →
Lab · Microsoft AI

MSAI Lab

Microsoft AI, done in the right order: plain-language briefings, live demos and open tooling for Microsoft 365 Copilot, Copilot Studio and agents.

Microsoft 365 CopilotCopilot StudioSharePoint
msai.2nth.ai →
Experiment · legacy rebuilds

TSR

1980s DOS programs such as XyWrite II, re-implemented from the behaviour up to run in a browser tab, with no emulator. The legacy-rebuild method, applied to software people loved before the web.

XyWrite IINo emulatorCoding agents
dos.2nth.ai →
Experiment · game

Contraptions

Build ridiculous machines to do simple things. A modern tribute to The Incredible Machine (1993), with puzzles and a free-build mode.

CanvasPuzzlesFree build
tim.2nth.app →
07 · Working in the open

The Knowledge Tree.

What I learn on client builds goes into know.2nth.ai — explainers, briefings and agent skills across 14 domains, written for two readers: the person learning and the agent operating.

Every node is plain SKILL.md, so your agents can load the same playbooks I use. Skills to the power of n.

Explore the Tree →
  load-a-skill.sh
# Read the tree the way an agent does
curl https://know.2nth.ai/llms.txt

# …or load the public skills into your agent
git clone https://github.com/2nth-ai/skills

# a skill is just SKILL.md:
---
name: agent-skills
description: Author and load Agent Skills that
  agents read as docs and load as context.
---
# Agent Skills
A skill is structured, agent-loadable knowledge…
08 · How I earn trust

Safe by design. Audited in public.

Guardrails

Agents draft. People decide.

Every MCP connector signs in as the person using it, so an agent sees only what they're allowed to see. Connectors create drafts; quotes, emails and payments are approved by a person. Model keys stay on the server, never in the browser.

SA residency

I check the claims, including my own.

Where LLM inference actually runs in South Africa: AWS, Azure and Google checked against vendor documentation, with a dated log of where the Knowledge Tree got it wrong and what changed. Every node is held to that standard.

Where LLM inference runs in SA →
09 · Why own it

Built in South Africa. Your data stays where the law says.

POPIA-aware hosting in South Africa — AWS Cape Town, Azure South Africa North, Google Cloud africa-south1 or Frappe Cloud Johannesburg. No per-seat SaaS billed in dollars. Swap the model — Claude, GPT, Gemini or an open model on your own hardware — without rebuilding the business underneath. AI for African businesses can't be a US template with the logo swapped.

10 · Get in touch

Start with a stack audit.

Tell me what you run today and where it hurts. I'll reply with whether an audit, a proof of concept or a straight build makes sense — and what it would cost.

Delivery partner or domain expert? Pick Partner below.

No spam. I respond within one business day.