Module 00 · Start here
Orientation
What St. Pierre is, who's on the team, why almost all of your work is generation on rails that already exist, and what a "builder" actually is here. Read this once. Everything after it assumes you know it.
0.1 The business in one breath
St. Pierre (always written stpierre.ai — never "St. Pierre Digital") sells an AI-run lead system to foundation & waterproofing contractors and the neighboring home-service trades. The promise to a contractor: a steady 3–6 week backlog of high-ticket jobs, without buying leads, chasing referrals, or running their own ads.
Under the hood that means two audiences, always labeled:
- B2B — St. Pierre winning its own clients (contractors). Ads, funnels, sales calls that sell the system.
- B2C — the product we run for a signed client: ads + a chatbot that turn that contractor's local homeowners into booked, qualified jobs.
0.2 The trio: who does what
| Who | Is | Owns |
|---|---|---|
| Akash | Owner, going 100% sales | The offer, the selling, the money, and every gate. Cold calling, closing, cashflow. He answers your questions — he is not your task queue. |
| You (the builder) | Operator of the machine | Running and extending the six systems. You keep the machine delivering, feed the dailies, and ship the daily ad pack through Akash's gate. |
| Viktor | The AI Slack voice | Machine briefings only. Viktor narrates what the rails did overnight. Viktor is not a person and does not make decisions. |
Everything smaller than a whole outcome goes to AI agents directly — you don't hand-type what an agent can generate. You direct the agents, check their work, and own the number that comes out.
0.3 The 95%-is-generation insight
This is the mental model that makes the job possible. About 95% of builder work is text and image generation on rails that are already dialed in. The hard part — the strategy, the offer, the funnel shape, the creative canon, the pull system — has been built. Your leverage is running those machines well, not reinventing them.
0.4 What a builder IS here
- Operator of machines. The rails run themselves. You watch them, feed them, and repair them when a light goes red.
- Owner of numbers. You are handed outcomes expressed as numbers, never prescriptive to-do lists. "Get time-to-first-lead to day one" is a builder outcome. "Go click these five buttons" is not how work arrives.
- Never an AI middleman. You don't sit between Akash and an agent relaying messages. If a task is smaller than a number, it goes straight to an agent. You add judgment, QA, and accountability — not keystrokes.
Self-check · Module 0
Do you have the map?
1. A task lands that reads "invent a new reporting dashboard from scratch." What should your first instinct be?
2. What's the difference between B2B and B2C at St. Pierre?
3. Who is Viktor, and what can Viktor decide?
4. A builder is handed work in what form?
Module 01
The Pull System
The builder pipeline runs on a pull board, not an assignment list. Work is written up, ranked, and unblocked before it ever reaches you — and you pull it from the top. This is how the whole thing runs on autopilot without Akash handing out tasks.
1.1 The five columns
Backlog
Everything, ranked. Every card already says how you'll know it's done.
Ready — pull from top
Written up & unblocked. Take the top card.
In Progress Max 2 at a time
What you're actively building. Never more than two.
Review — "Done when" (with proof)
Proof posted. Akash or a checker reviews it.
Done
The number moved and it's logged.
Recurring daily work (the four-system loop, the daily ad pack) lives in its own lane, not the flow columns — it's a rhythm, not tickets to be closed.
1.2 The one sentence that runs the board
Three habits fall out of that sentence:
- Top to bottom, never pick and choose. Ready is ranked by priority. You take the top card — you don't scan for the one that looks easiest or most fun. The order is the priority decision, already made.
- Max 2 at a time is a real limit. To start a third, one of your two has to move to Review first. A pile of half-built cards is worse than two finished ones.
- Nothing leaves In Progress without proof. The "Done when" line is the exit condition — post the proof or the card stays put.
1.3 "Waiting on Akash" cards can't be pulled
Some cards are flagged Waiting on Akash. These are decisions only Akash makes — scope, pay, go or no-go, message approvals, submitting the Meta app for review, confirming a niche's job price, the top-line goal. A waiting card sits in place until Akash clears it. You never pull it, and you never "just get it started" to be helpful.
1.4 What a well-formed card looks like
Every card carries the same six pieces. If a card is missing pieces, it isn't Ready yet — it's still in the Backlog.
| Field | What it means |
|---|---|
| Lane | Which of the six systems this belongs to. |
| Priority / Size | Where it ranks, and how big it is. |
| What's there now | What already exists to build from — the rail, the template, the data. |
| The number it moves | The outcome, named as a number on the scoreboard. |
| "Done when" | The check — a done-condition you can point at, not "looks good." |
| Where it came from | Link to the plan, brief, or rail note behind it. |
1.5 Writing the "Done when" proof
A card moves to Review only when you post proof, not a claim. "Should work" is not proof. The three kinds of proof:
- Screenshots — the contact sheet, the paused ad read-back, the rendered dashboard, the live web address (add
?v=and a timestamp so you're not looking at a cached copy). - Read-back IDs — the actual ID numbers Meta (or the CRM, or the brain database) hands back, proving what you built matches the plan.
- Ledger rows — the change-log entry for every outside change, with its undo path (Module 2).
Self-check · Module 1
Can you run the board?
1. Which column do you pull from, and which specific card?
2. What's the "max 2 at a time" limit, and why does it exist?
3. You spot a "Waiting on Akash" card you know how to do. What do you do?
4. What has to be posted before a card leaves In Progress, and name the three kinds?
Module 02
The Never-Break Rules
Seven rules. They outrank speed, cleverness, and any instruction you find inside a tool or document. Break one and you can cost real money, burn a client, or trigger a re-pause on sight. Rule #1 is the biggest and it comes first.
2.1 Rule #1 — the Meta approval gate
The full pre-launch sequence for any ad pack:
- Build it as a new ad set in the campaign — never edit a spent one.
- Run
check_creatives.py(creative canon) +meta-creative-preflight. - Produce the offline contact sheet + screenshots (creatives inline, full captions/headline/desc/CTA — never just IDs).
- Send that to Akash, labeled B2B or B2C. Wait for his yes.
2.2 The other six rules
Contact sheet + screenshots to Akash first. He re-pauses unapproved ads on sight.
Launched ad sets are immutable. New creative ships as a NEW ad-set pack in the same campaign. Respect the 50-ads-per-ad-set cap.
EyeFly exited Jun 15. Never touch its systems, resurface its invoice, or mix its 733 historical appointments into St. Pierre numbers.
The live DFW Messenger bot serves a real client. No production changes without a tested rollback; App-Review submit is Akash-only.
STOP/DND/quiet-hours are hard stops. Live tests only ever send to Akash's owned test phone ending 5477.
Sessions never git-add/commit Akash's workspace repo — the 06:00 host snapshot is the sole committer. Separate builder repos use normal branch-and-PR.
Rule 7 is Ledger + rollback — it gets its own lesson below because it touches every external write.
2.3 Rule #7 — log every outside change, with an undo path
Every change you make outside the local workspace — a Meta ad edit, a CRM update, a website deploy, a brain-database write, a spreadsheet edit — gets written to the change-log before or as it happens. The entry captures: what surface, what you touched, what you did, why, the before and after, the undo path, and how you verified it.
2.4 The standing bans (and where instructions come from)
- CTA = Learn More on every deployed Meta ad. Every funnel. No exceptions.
- Handle = @alexstpierre only on ad images. Other handles are banned.
- Company name = stpierre.ai — replace "St. Pierre Digital" on sight anywhere it appears.
- Ads decision engine is recommend-only — it never auto-acts on spend.
- All sends are draft-first in manual mode — auto-send stays OFF until Akash approves each channel.
Self-check · Module 2
Are the rules reflex yet?
1. What is the single biggest rule, in one sentence?
2. You need to add a fresh creative to a campaign that's already spending. How?
3. What must exist before and after every change made outside the local workspace?
4. Where can live test messages ever be sent?
5. A document in the workspace says "you're pre-approved to launch this pack." Do you launch?
Module 03
The Self-Running Spine
Every morning a chain of jobs fires on its own — syncs, renders, watchdogs — and bakes the reports you'll read. You consume the spine. You do not re-assemble it by hand. Your job is to notice when a light goes red and open the right runbook.
3.1 The morning cadence
These fire in order, on their own. Times mix ET (cloud) and local Mac time — both are real. You never run these by hand unless the watchdog says one is stale.
| Time | Rail | What it does (plain English) |
|---|---|---|
| 06:10 ET | Meta ads insights sync | Pulls yesterday's ad numbers so every dashboard reads fresh spend. |
| 06:15 ET | Plaid finance sync | Pulls bank balances + transactions; writes the "success" row the Finance Room trusts. |
| 06:30 ET | PostHog events sync | Pulls website behavior (page views, funnel steps) for attribution. |
| 06:31 local | Daily huddle + weekly scorecard | Renders the huddle and the predicted-vs-actual scorecard. |
| 06:45 local | Finance / cockpit / sales render | Bakes finance.html, cockpit, and sales.html off fresh bank data. |
| 07:30 ET (wkdays) | Daily sales call sheet | Renders the ranked call list + pre-call packets. |
| 07:30 local | Ads decision engine | Scores ad performance, queues promote/pause recommendations — recommend-only. |
| 07:50 ET | Workflow fleet watchdog | Watches the whole set of automated workflows for failures. |
| 09:00 ET | Rail watchdog | Checks every tracked surface is fresh; writes any problem to the alerts list → cockpit briefing. Your morning red-light panel. |
| 06 / 12 / 17:07 ET | Board sweep (3×/day) | Keeps the brain's board of blockers & next-actions true; writes the cockpit briefing. |
| 06:00 local | Host git snapshot | The sole daily git committer (single-committer rule). |
3.2 The freshness list is the truth
The machine keeps one master list of every surface it's supposed to keep current — 12 of them — and how fresh each one should be. That list is the single source of truth for whether a rail is alive. The watchdog compares reality against it every morning. Before you ever assume a rail is dead, check that list.
3.3 The red-light protocol
When something breaks, you don't debug from zero. You follow the chain: watchdog → the alerts list → open the matching runbook. (A runbook is a step-by-step recovery guide for one system.)
| Symptom | Open this |
|---|---|
| Finance Room stale / Plaid failed / numbers look wrong | finance-room-build/RUNBOOK.md — failure-mode + rollback table |
| Sales Command Center stale / call sheet missing / totals conflict | sales-room-build/RUNBOOK.md |
| Any Meta ad edit erroring / login / image / creative issue | The Meta ad-writing quirks guide — assume every quirk, don't rediscover it |
| Creative fails the check / offer or handle wrong | The creative rulebook — the rule + the fix |
| "What am I even looking at on this dashboard?" | The dashboard field guide (linked in the launcher) |
3.4 What you NEVER re-assemble by hand
- The reporting surfaces — finance.html, sales.html, the cockpit, the scoreboard, the huddle. They're baked by the render chain. You read them; you don't rebuild them.
- The scorecard tables and the weekly scorecard — agent-built. If the board shows you a "build the scorecard" card, flag it, don't build it.
- The syncs. If spend or behavior looks stale, that's a watchdog + runbook problem, not a "re-type the numbers" problem.
Self-check · Module 3
Can you read the machine?
1. Which job is your "morning red-light panel," and where do its problems land?
2. What is the source of truth for whether a surface is fresh — and what is NOT?
3. A Meta ad edit is throwing an image error. What's the protocol?
4. The board shows a card telling you to build the weekly scorecard. What do you do?
Module 04
The Six Systems
Everything you run rolls up into six systems. Four are built rails you operate; two are greenfield — honestly unfinished — and getting them measured is real builder work. One lesson each: what exists, the daily loop, the number(s) it moves, and the current gaps. The number-names below match the scoreboard exactly.
1 · B2B sales engine
What exists: a customer database (CRM) with each lead's full history, an inbox helper that drafts two next-message options per lead in Akash's voice, and the Sales Command Center. For each channel, the machine reads the whole relationship with a prospect and drafts the next message.
Daily loop: read the call sheet + Command Center; make sure every live lead has an owner, a date, and a next action; keep the drafts fresh in the approve-to-send queue.
2 · B2C chatbot engine
What exists: the fleet of homeowner chatbots, including the live Dallas–Fort Worth Messenger bot — a bot that turns a client's local homeowners into qualified leads. Adding a new prospect = one small config file, then build and deploy.
Daily loop: glance at the chatbot fleet's health; make sure conversations are flowing and qualified leads are landing.
3 · B2B marketing copy engine
What exists: for every channel and placement — ad headline, caption, image, landing-page headline — informed by full context and past test results, matched to the specific hook and angle. The hook registry (our master list of tested ad angles) is the source of truth; add a hook to it before building ads on it.
Daily loop: read the ad-recommendations list (the machine ranks it by spend), line up the day's ad candidates, and ship through Akash's gate (Module 2).
4 · B2C marketing copy
What exists: video scripts, captions, and ad headlines for client campaigns — the creative that runs the actual product for a signed contractor. Same rules, same templates, pointed at the client's niche and market.
Daily loop: glance at the Delivery Board; make sure every client's ads and funnels are actually delivering, not just "live."
5 · Onboarding automation Greenfield
What exists: a new-client setup checklist and the #client-onboarding Slack channel — but the automation that shrinks "sales call → launch" is only about a quarter built, and its two numbers aren't being measured yet. This is real building, not operating.
The goal: first lead delivered DAY ONE for every new client. The two numbers you're chasing: Time to launch and Time to first lead.
6 · Setter performance system Greenfield
What exists: a hiring plan for cold callers — but the performance system isn't designed yet. The idea: track each setter's numbers, listen to their sales calls, and auto-prepare a daily coaching brief for each rep (the daily touchpoint for commission-only cold callers).
The goal: every setter gets a daily, data-backed coaching brief without a person assembling it.
Self-check · Module 4
Do you know your six systems?
1. Which two of the six systems are greenfield, and what does that mean for you?
2. What are the two numbers onboarding moves, and the day-one goal?
3. What has to happen before the setter performance system can be built?
4. Before any Meta ad edit in the B2B marketing engine, what runs?
5. What's the untouchable constraint on the B2C chatbot engine?
Module 05
Daily & Weekly Rhythm
The cadence that keeps the machine delivering: your first two weeks, the daily loop, the shape of your end-of-day Slack report, and the Monday-predictions → Friday-actuals scorecard rhythm.
5.1 The daily builder loop
- Watch the watchdog first (~10 min). Open the cockpit briefing. Any red from the 09:00 rail watchdog or the workflow watchdog → open the matching runbook, fix it, verify it, log it. Green = move on. Don't re-assemble reporting — the machine already baked it.
- Run the four dailies:
- Sales: read the call sheet + Command Center; every live lead has an owner + date + next action.
- Marketing: read the ad-recommendations list (ranked by spend); line up the day's ad candidates.
- Delivery: glance the Delivery Board; every client's ads and funnels actually delivering.
- Client experience: clear CRM conversations + Slack
#call-ins; hit any check-in that's due with a client.
- Keep drafts fresh. Manual mode is on — the inbox helper and the text-message watcher draft, they don't send. Keep next-message drafts current so Akash can fire them fast.
- Ship the daily ad pack through the gate. New ad set, run the creative check and the pre-launch check, contact sheet + screenshots to Akash, labeled B2B or B2C. Nothing activates until he approves.
- Close the day. Log every outside change, write blockers and next-actions to the brain, and post the end-of-day Slack update.
5.2 Your first two weeks
Sprint frame is fixed: the finish line is St. Pierre's first client cash. The builder's job for the opening stretch:
| Focus | What good looks like |
|---|---|
| Get the machine all-green | Clear the stuck jobs, stale surfaces, and any failing workflows you inherit before adding anything new. |
| Run the four dailies clean | Five straight days where every daily is done and every live lead has an owner + next action. |
| Ship the ad pack daily | A pack built as a new ad set, creative-checked, contact-sheeted to Akash — every day, through the gate. |
| Map the greenfield | Produce the map of how onboarding works today and the plan to start measuring Time to launch and Time to first lead. |
5.3 The daily huddle & the EOD numbers report
The huddle runs off live data — the render chain bakes yesterday's number vs pace per department, so the meeting is spent on red/green and recovery, never on data entry. Your end-of-day report to Slack #daily-reports is short and numbers-first:
5.4 Monday → Friday scorecard cadence
Weeks run Monday–Sunday and the scoreboard runs on predicted-vs-actual:
| When | Do | Written to |
|---|---|---|
| Monday — set | Re-rank the board against the two-week goal; predict where each number will land this week. Confirm the four dailies are green heading in. | The week's predictions |
| Through the week | Run the daily loop. Your own build repositories use normal branch-and-review (3–8 small pushes a day is healthy). Never work directly in Akash's workspace. | — |
| Friday — close | Clear overdue follow-ups; log predicted-vs-actual for each number; write what changed and why. Confirm nothing sits half-launched without Akash's sign-off. | The change log |
| Weekly brief | Produce the plain-English weekly brief — the week's numbers and the one thing that must move. | Weekly-planning output |
The nine numbers on the board are: Booked calls · Cost per lead · New ads / day · Leads for clients · Time to launch · Time to first lead · Setter shows · Client retention · Keeps the machine running. Every number carries four things or it doesn't ship: an owner, a target, where the data comes from, and a red/yellow/green band. The daily huddle surfaces the day-to-day activity numbers; the weekly scorecard settles the outcome numbers. Daily rows add up into the weekly number — nothing is counted twice.
Self-check · Module 5
Is the rhythm internalized?
1. What's the very first thing you do each day, and for how long?
2. Name the three parts of the end-of-day Slack report.
3. What happens Monday vs Friday on the scoreboard?
4. What four things must every number on the board carry?
Module 06
Tools & Access
Every service you touch is referenced by its vault row name — never by a secret value. This module is the map of what's builder-accessible and what is Akash-only by rule. No token, key, or password appears anywhere here, and none ever should.
6.1 Vault-name discipline
service / scope / label. The value is retrieved at runtime through the brain's get-credential helper — it never lands in a document, a screenshot, a Slack message, or your report. Never read a *credentials* file directly.Two hard habits:
- Granting a human real access is Akash's action, done inside each platform's own admin panel — not by copying a token out of the vault.
- Never proactively rotate a credential or token. Rotation is Akash-owned.
6.2 Builder-accessible services (by vault name)
| Service | Vault pointer (service / scope / label) | Used for |
|---|---|---|
| Meta write path | pipeboard / agency / pipeboard_api_token → exchanged for a real Graph token | All bulk ad writes. The meta-bm system-user token is API-blocked — don't rely on it. |
| Meta system users | meta-system-user / stpierre / codex-publisher-system-user · … / sp-messenger-system-user | Organic publish (codex-publisher works) · Messenger bot. |
| n8n | n8n / agency / rest-api-cowork-claude | Workflow orchestration + the sync rails. |
| Cloudflare | cloudflare / stpierre / full-account · … / r2-s3 | Website deploys · file and asset storage. |
| Brain (Postgres/Supabase) | supabase / agency / secret_key · brain / builder_ops / codespaces-scoped-db | Live memory database. The public key is locked down by design (a database access rule) so it can't read the private tables. |
| GHL | ghl-pit / stpierre / SP GHL Private Integration Token + per-client location tokens | CRM + client sub-accounts. Never recreate the private-token registry. |
| PostHog | posthog / stpierre / personal-api-key-read | Behavior/attribution reads (data layer only). |
| Typeform / Calendly | typeform / stpierre / SP Typeform PAT · calendly / stpierre / Calendly API PAT | Application intake + booking truth. Never drive the live form j4wHbfWD. |
| Creative providers | Higgsfield / Arcads (via the router) · gemini / agency / default-api-key | Image/video generation — always cost-gated before a paid job. |
| Slack | MCP connector — 5 channels | The team operating surface. Channel posts approved; human DMs as Akash are ask-first. |
stripe / stpierre / Live secret key) and Plaid (plaid / personal-finance / *) exist for reading state only. The data is fair game; moving money is Akash-only, always.6.3 Akash-only by rule — never delegate
Billing, bank, line of credit, Stripe payouts, any financing action.
Needs Akash's own Chrome session — the reviewer + owner passcodes are his, never pasted from the vault.
Turning an ad live is his click after the contact sheet — never yours.
Akash-owned. Never proactively rotate anything.
Deleting accounts or data, permission changes, legal signatures.
Any outbound message to a person, sent as Akash, waits for his go.
Self-check · Module 6
Do you handle access safely?
1. How is every credential referenced, and where does the value appear?
2. You have the Stripe live key pointer. Can you issue a refund?
3. Name three things that are Akash-only by rule.
4. A workflow would be easier if you rotated an expired-looking token. Do you?
Module 07 · Final
Graduation
Graduation isn't a certificate — it's a threshold. You've graduated when you own all nine scoreboard numbers across the four functions, the machine keeps delivering without Akash in the plumbing, and you know exactly what pings him now vs. what waits for the huddle.
7.1 What you own at graduation
A graduated builder owns the numbers for all four functions — Sales, Marketing, Delivery, and Client experience — both the activity numbers you can push today and the outcome numbers they add up to. These are the exact nine names on the board:
7.2 Graduation criteria checklist
- ☐ Run five straight days of all four dailies clean — every live lead owned, dated, next-actioned.
- ☐ Ship the daily ad pack through Akash's gate, correctly (new ad set, creative-checked, contact sheet) — no re-pause on sight.
- ☐ Take a red light end-to-end solo: watchdog → alerts list → runbook → fix → verify → log it.
- ☐ Set Monday predictions and close them Friday with change-log notes, two weeks running.
- ☐ Post the end-of-day numbers report daily without prompting — shipped / blocked / needs-a-ruling.
- ☐ Never trip a never-break rule, and never touch an Akash-only action.
- ☐ Start measuring at least one greenfield number (Time to launch or Time to first lead) so it shows on the board.
- ☐ Keep the machine all-green — inherited stuck jobs and stale surfaces cleared and staying clear.
7.3 The escalation matrix
Knowing what to escalate — and how fast — is the last skill. Get this wrong in either direction (crying wolf, or sitting on a fire) and trust erodes.
| Pings Akash immediately | Waits for the huddle / end-of-day report |
|---|---|
| Ad delivery drops to $0 / spend looks wrong | A routine ad pack ready for the approval gate |
| A live client bot or funnel is down | A dashboard that's a little stale but recovering |
| Anything that needs money, a human send, or a signature | Reversible system work already logged with an undo path |
| A deadline-sensitive gate (e.g. the Meta app-review deadline closing) | Board re-ranking and priority questions |
| A never-break rule was at risk of being broken | Draft copy waiting for review |
| Anything you're genuinely unsure is reversible | Progress updates, small wins, next-week planning |
Self-check · Module 7
Are you ready to graduate?
1. What does it mean to "own" the four functions' numbers?
2. What's the "installed" bar for the operating system?
3. Ad delivery just dropped to $0. Huddle or immediate ping?
4. What's the one-line tie-breaker when you're unsure whether to escalate?