FORGE.The autonomous pipeline.
An autonomous multi-agent AI pipeline that finds small businesses, builds them custom websites, sends personalized outreach, processes payment, and retains them as clients. Five stages. One human in the loop. Built solo on a Mac Mini.
End-to-end multi-agent orchestration in production, with durable workflows, model-tier routing, automated QA, and a human-in-the-loop quality gate.
- FIND
- OUTFITHATTORIHANZO
- REACHBARD
- GROWSHERPA
- EMBARK
What FORGE Is.
FORGE is an autonomous pipeline that runs the full lifecycle of a customer relationship: research, build, sell, retain. The name is the acronym of its five stages, Find, Outfit, Reach, Grow, Embark. Each stage is a Temporal workflow with its own activities, agents, and outputs.
The system runs on a Mac Mini M4 (16GB RAM, always on) using Temporal.io as the orchestration backbone. Temporal handles retries, crash recovery, event history, and long-running workflows. If the machine crashes mid-build, the workflow resumes from the last checkpoint. The entire codebase is a single TypeScript project. One Postgres database. One Next.js dashboard. Four AI agents that do the creative and analytical work.
FORGE has produced fifty staged websites at the time of writing. It runs whether I'm at the desk or not. Marginal compute cost per custom site: about two cents.
Five Stages. End to End.
Each stage is a Temporal workflow with its own activities and durability guarantees. They hand off through Postgres and Temporal signals.
FIND
The discovery and research engine.
Given a business name and city, FIND scrapes everything available from Google Maps, Yelp, Thumbtack, and the business's existing site (if any). In parallel, it queries Perplexity Sonar and Tavily MCP for licensing data (CCB in Oregon, Secretary of State, bonding, insurance) and runs Cloudinary against any photos found during scraping. Each of these runs concurrently because none depends on the others.
Gemini Flash then synthesizes the raw data into a structured dossier: who they are, what they do, what their customers say, what their competitive landscape looks like, what their strengths and weaknesses are. Every prospect is scored on six dimensions (website quality, services match, tenure, review quality, social presence, brand opportunity). The same FIND machinery is callable as a standalone enrichment script outside the Temporal workflow, which means an existing database row can be re-enriched without re-discovering anything.
A full FIND pass takes 5 to 10 minutes per prospect, not 20, because the work is parallel rather than sequential. The dossier is the single document every downstream agent reads.
OUTFIT
Where the website gets built.
OUTFIT runs two AI agents in sequence. HATTORI writes the full website copy package first (headlines, body, CTAs, services, about, testimonials). HANZO builds the site second, choosing a reference design from a curated industry library, then writing raw HTML and CSS from scratch. No framework. No build step. Plain files that deploy to Vercel with zero configuration.
After HANZO finishes, the pipeline runs a QA loop. The staged site is screenshotted by Playwright at desktop and mobile breakpoints. Gemini Vision scores it on seven quality dimensions. Sites scoring 7.0 and above pass. Sites scoring 5.0 to 6.9 get a targeted fix list and HANZO iterates (capped at 2 iterations). Sites below 5.0 trigger a full restart with a new reference design (capped at 3 restarts). If three restarts are exhausted, the prospect escalates to me for manual review. There is no dead-letter queue. Nothing falls through.
The copy-before-design sequence is deliberate. Copy dictates layout in web design. By having HATTORI write the full copy package first, HANZO knows exactly how much text it is working with and how the page should flow. Design first, fill in copy later produces lorem ipsum rectangles and awkward fits.
REACH
Outreach, sales, and payment.
REACH has a fundamentally different rhythm than FIND and OUTFIT. Those stages finish in under an hour with no human intervention. REACH can take weeks and requires my approval at multiple points. Splitting it into its own Temporal workflow keeps the event histories clean and lifecycle management sane.
BARD drafts a personalized outreach message referencing the prospect, specific strengths, and the staged website built for them. The draft lands in my dashboard alongside the dossier and the site preview. I approve, edit, or reject. On approval, the pipeline checks the Do Not Contact list one more time and sends via iMessage. A Stripe payment link is included. When the Stripe webhook fires on payment, the pipeline receives a Temporal signal and transitions the prospect to GROW.
Every outreach send is human-approved. This is deliberate. The first impression with a potential client is too important to fully automate, especially when the system is still building a track record.
GROW
Retention and recurring value.
GROW starts when Stripe confirms payment and runs indefinitely. Domain setup, site goes live on a real domain, welcome email drip, initial SEO configuration. Then a monthly loop: performance report, SEO rankings check, uptime check, upsell suggestions (additional pages, blog posts, Google Business optimization).
The workflow resets monthly using Temporal's Continue-As-New pattern, which prevents the event history from growing unbounded over the lifetime of a client. SHERPA, the client-success agent, handles client conversations during this stage.
Most web design agencies lose clients because they disappear after the sale. GROW exists to make the $200/month justified by ongoing value, not just the initial build.
EMBARK
Self-improvement and expansion.
EMBARK is the strategic learning layer. Weekly system reflections. Vertical analysis (should the next cohort be dentists? restaurants?). System health reporting. This is where the pipeline learns about itself, not just about individual prospects.
Not yet built. Not needed until first revenue is consistent. Documented here because the architecture anticipates it: every QA result, every outreach response, and every conversion is already being logged to learnings tables that EMBARK will consume.
Deliberately Small.
Every piece of the stack earns its place. Earlier versions had twelve services, twenty packages, and forty-two database tables. FORGE has one TypeScript project, eight tables, and four agents.
The Judgment Calls.
A pipeline is just plumbing. What makes one work is the engineering judgment behind it. These are the decisions that shaped FORGE.
Claude Max for creative, Gemini Flash for analytical.
Claude Max is a flat-rate subscription. Every creative call (copywriting, design, iteration, outreach drafting) costs zero at the margin. Gemini Flash is cheap per call and fast, making it ideal for the dozen-plus analytical calls per prospect (research synthesis, QA scoring, persona generation). The hard rule prevents scope creep in both directions.
Temporal for the spine, Postgres only for business data.
Earlier versions tried to put workflow state in Postgres: event ledgers, retry counters, scheduling tables. This required building custom state machines. Temporal provides all of it as a mature, battle-tested platform. FORGE uses Postgres only for business data that outlives any single workflow. The database dropped from 42 tables to 8.
Maximize creative freedom. Validate with QA.
Earlier versions controlled creative output through rules: content tiers, layout templates, section visibility flags. All eliminated. AI agents produce better creative work when given strong context and quality judgment than when constrained by deterministic rules. Instead of rules, FORGE uses quality prompts (skill files) and quality gates (Gemini Vision QA scoring with human review). Agents are free to make creative decisions; the QA loop catches bad ones and forces iteration.
QA with teeth: iterate, restart, escalate.
A site that scores below 7.0 gets sent back for fixes (max 2 iterations). A site that fundamentally doesn't work gets scrapped and rebuilt from a different reference (max 3 restarts). A site that can't be fixed after 3 restarts escalates to me for manual review. The limits prevent infinite loops. The escalation prevents silent failures. Every prospect that enters the pipeline either produces an approved website or gets flagged for human attention.
Workspaces are disposable. Templates are permanent.
Every prospect gets an isolated workspace directory containing all the context their agents need (dossier, skills, tools, input/output folders). Workspaces are generated from templates stored in the codebase. If I improve HATTORI's copywriting skill, that change lives in the template and applies to all future prospects. Already-generated workspaces keep their original version. Template changes never retroactively affect in-progress prospects.
No dead letters. No silent failures.
Earlier versions had a dead-letter queue where failed prospects went to die. FORGE has none. If a prospect can't be processed, it escalates to me. If outreach fails, it is logged and flagged. If a site can't pass QA, I review it manually. The reasoning: pre-revenue, every prospect matters. Silent failures mean lost revenue. Escalation means I can investigate, learn what went wrong, and improve the system.
The Patterns Travel.
FORGE is built for trades businesses, but the architecture isn't specific to them. The patterns that make it work generalize.
The Claude-Max-for-creative-and-Gemini-for-analytical split is a cost and quality discipline that applies to any pipeline producing customer-facing creative output at scale. The Temporal-as-spine pattern is the right shape for any multi-stage business workflow that needs to survive crashes and human-in-the-loop approval. The QA-with-teeth pattern, with iteration limits, restart limits, and escalation, applies to any agentic system where silent failures are unacceptable.
The most directly transferable piece is FIND: a multi-source intelligence operation that turns a bare business listing into a research dossier rich enough to drive bespoke copy and visual design. Swap the Oregon CCB integration for a different vertical licensing dataset and the same machinery enriches dentists, restaurants, real estate agents, or any local-business category. The standalone enrichment script mode means it can also run as a B2B data product against pre-existing customer lists.
There's More.
FORGE is the centerpiece, but it's not the only system I've built. The resume supplement page has the full story, including three other AI systems I've designed and shipped.