Projects

A Human Business Platform

Four production surfaces for one business, solo, in three weeks

Cloudflare Workers · D1 · Workers KV · Durable Objects · Vanilla JS

Source on request Try the live demo July to August 2026 Sole architect and engineer
  • 355commits, 100% mine
  • 40gated check suites
  • 28migrations, 2 databases
  • 3 wksto four live surfaces
A Human Business Platform

The problem

A Human Business sells a book, a seminar and a paid academy to three different audiences. One identity had to work across all of them. The marketing side ran on GoHighLevel and was not moving.

Meanwhile the team was reviewing 39 course videos in email threads, which is exactly as good as it sounds. Whatever I built had to hold all of that without a framework I would then be maintaining, and it had to be safe to deploy while people were mid-sentence inside it.

What I built

  • The brand system. Story, logo, colour, type, illustration, voice and UI as one browsable document with a dark mode for checking contrast. The visual and verbal system every other surface is built from, written and built end to end.
  • A public site carrying the book, the seminar, the assessment, CultureCon, and a free three-lesson intro course with reflections and knowledge checks — try the course.
  • A team platform in daily use. Rooms with per-room grants, threaded comments with resolve and reopen, read cursors and unread state, direct messages, attachments, voice notes, and live presence backed by a Durable Object.
  • Timestamped video review. Pause anywhere in one of 39 course videos and the note carries that moment, which is what the editor actually works from.
  • A site-copy workflow that blocks deploys. Copy is proposed, reviewed and approved inside the platform before the public site is allowed to ship it.
  • An academy with magic-link sign-in, lesson progress, journals, knowledge checks and a certification gate.
  • A CRM boundary. A GoHighLevel client, cache, tag layer, outbox, webhook inbox and reconciliation run, so the CRM stays where it is and the platform never depends on it being up.
  • A deletion sweep with an audit page, so a request to be removed is something the system does rather than something someone remembers to do.

Architecture

Runtime
Cloudflare Workers in vanilla JavaScript. No framework, no build step. One dependency, wrangler, pinned to an exact version.
Data
Two D1 databases, 30+ tables, 28 forward migrations. Workers KV for sessions and cache. A Durable Object for live presence.
Auth and access
Magic-link email sign-in with ULID identities and KV sessions, in separate namespaces for team and learner. Shared room codes for team rooms that do not need an identity.
Scale
28,829 lines in the shared layer; 3,840 in the team Worker alone.
Delivery
Four Workers on four hostnames, each with its own config, bindings and deploy command, plus staging twins.

Engineering discipline

The checks that make fast work safe. Every one of these is in the repo.

  • 40 automated check suites, run as a gate. team/qa/ship.sh opens with the line One way in and stops on the first red suite. Nothing reaches the team except through it.
  • Academy production will not deploy without APPROVED_BY. That check lives in the deploy path, not in a wiki nobody reads.
  • Staging runs on synthetic data by standing rule. The guard requires two independent marks before it will call a record fake, and refuses rather than passing when it cannot reach the database.
  • The staging config carries an empty routes list on purpose. Without it, a staging deploy would take the paid product's hostname away from production and point it at the synthetic copy. The reason is written above the line.
  • wrangler is pinned exactly, with the incident that taught it recorded in package.json: a gate whose result depends on what somebody published upstream this morning is not a gate.

Built with AI, gated by tests

Three weeks from first commit to four live surfaces is not a typing speed. It is a specification-and-review speed.

The platform is governed by a written constitution: ten numbered laws, a domain model, and sixteen sections of system design, all of it written before and alongside the code. That document is what the AI was held to, and what I reviewed against.

Everything above about gates exists because the method demands it. Fast generation with no gate is just fast damage.

Visuals

The AHB funnel map showing every email sequence in order
The funnel map: every sequence and every email the business sends, in the order one person receives them. Built so the team could stop reasoning about campaigns from memory. Captured from the QA harness on synthetic data, never from production.
A production plan listing nine numbered segments per module, each tagged with the role who leads it
The shoot map. Nine segments per module in a fixed order, each tagged with the role who leads it, so a crew could shoot straight from the page. Presenter names render as roles here.
A six-step assessment, a progress bar on step one above the first principle's question card
The owner assessment: six steps, one principle at a time, as a single self-contained page with no framework and no backend. This is the one surface whose repository is public.

What shipped

  • Live across the public site, the team platform and the academy.
  • 355 commits between 28 July and 17 August 2026, every one of them mine.
  • The team platform is in daily use by the people it was built for, which is the only acceptance test that matters.

Built for A Human Business (Glenn Bostock) in partnership with SnapCab. Screens are rendered from the project's own pages; presenter names appear as roles and internal figures are left out.

Let's talk

Download résumé