All work
AI Automation Pipeline

LexerFlow: Agentic Site Discovery & Build Pipeline

A queue-driven pipeline that finds local service businesses without a website, researches their brand, builds them a site with an agentic CLI, and deploys it over SFTP, end to end, unattended.

Sector
AI Automation Pipeline
Timeline
In development
Role
Solo, Architecture & Build
  • Supabase
  • Next.js
  • Node.js
  • Agentic CLI
  • Google Places API
  • SFTP
LexerFlow: Agentic Site Discovery & Build Pipeline
Discover → Build → Deploy
Pipeline Stages

Google Places enrichment, agentic build, SFTP deploy, status writeback

0
Human Steps

Between a queued row and a live URL in the happy path

Pre-deploy
Build Verification

Output is verified before anything reaches the host

The problem

Lead generation for web work is manual on both ends: finding businesses that genuinely have no website, then producing something concrete enough to be worth their attention. Doing that by hand caps the whole motion at however many sites one person can build in a week.

The solution

Built the risky half first, a Supabase jobs table plus a worker that consumes a queued row, builds a real site through an agentic CLI against a fixed rule set, verifies the output, deploys it over SFTP, and writes the live URL back. Discovery and dashboard were only built once one hand-inserted row reliably produced one live site.

Approach

How it was built.

01

Prove the Middle First

The scraper and the dashboard are well-understood mechanical work. The genuinely unknown question was whether a database row could reliably trigger a real, deployed website built by an agentic CLI. That got built and proven manually before anything upstream or downstream existed.

02

One Table, Three Producers

The Google Places discovery stage writes queued rows into the same jobs table the worker already consumes, and the dashboard reads and triggers against it. No new integration surface was introduced for phases two and three.

03

Constrained Generation

The build step runs against a fixed rule set rather than free-form prompting, so output quality is a property of the rules, versioned and improvable, instead of a property of any individual run.

Technical detail

The parts worth explaining.

Polling Worker, Not Webhooks

A long-running local worker polls for queued jobs rather than receiving webhooks. Builds run on a machine with the CLI and credentials already present, and a crashed worker resumes by simply polling again, no missed-delivery replay logic to write.

Status Writeback as the Contract

The worker's only obligation to the rest of the system is writing status and live URL back to the job row. That single contract is what let the dashboard be built last without changing anything already working.

What I took from it
  • Build the phase you are least sure about first, the mechanical parts will still be mechanical later
  • A shared queue table is a better seam between phases than an API neither side is ready to define
  • Refuse to invent credentials that look real; stop and ask instead
Where it goes next
  • Complete the Google Places discovery and enrichment stage
  • Ship the Next.js dashboard on the Lexer design system
  • Productize alongside LexerDial. and LexerSend.

Got a problem shaped like this?

If something here looks like what you're facing, tell me about it. The first conversation is an architecture discussion, not a sales call.