Owner directive · 2026-07-22 PM · document preparation only

Builder Handoff Pack

Everything Collins needs to run the four engines while Akash goes full-time sales · prepared July 22, 2026 · local record — not sent, not deployed

Nothing in here has been sent to Collins. This is a preparation document only. Akash reviews it and decides when and how to hand it off. The standing ban on emailing Collins the terms email remains active. No Slack, no share links, no external delivery was performed. No credential values appear anywhere below — only vault row names.
What this is

The complete builder handoff: every rail, surface, credential name, open gate, and the first-two-weeks operating rhythm for the person who will operate the machine.

Why now

Akash is going full-time sales. Collins is reinstated as the builder who manages Sales, Marketing, Delivery, and Client-Experience engines. Victor is the AI agent on the team.

The rhythm

Collins updates Akash over Slack; Akash answers questions. Collins runs the dailies, keeps drafts fresh, and ships the daily ad pack through Akash's approval gate.

Akash's words

"All of the infrastructure skeletons should be built out. I need to wrap everything and hand it all off to Collins."

The machine runs itself. The builder's job is to watch it, feed the four dailies, and never break the seven rules.
What's inside
  1. The four engines — every rail, schedule, surface, and its trigger story
  2. Health & recovery — how to check each rail, where alerts land, which RUNBOOK to open, and the seven rules that never break
  3. Open items ledger — current gates and in-flight work
  4. Access map — every credential/service by vault name (zero secrets), plus Akash-only accesses
  5. First-two-weeks operating rhythm — the daily builder loop and the weekly loop

Companion: Akash's own Sprint 5 sell-four-build-one operating system (his week) — this pack is the builder's-eye view of the same machine. Read that for the mode-discipline logic; read this to operate the rails.

1 · The four engines

Every rail below is already live. "Trigger story" = what makes it run. The self-running spine is the backbone; each engine hangs its surfaces off it.

The self-running spine — the backbone all four engines ride on reference

These fire on their own, in this order, every morning. The builder does not run them by hand unless the watchdog says one is stale. Times mix ET (n8n cloud) and local Mac time (launchd) — both are real.

TimeRailTriggerWhat it does (plain English)
06:10 ETMeta ads insights syncn8n H45syuMzdlOi61Z9Pulls yesterday's Meta ad numbers for the SP account into the database so every dashboard reads fresh spend.
06:15 ETPlaid finance syncn8n 4u7hGwpzvX4HtuLuPulls bank balances + transactions, rebuilds the finance tables, writes a "success" row that the Finance Room trusts as its freshness gate.
06:15 localScoreboard companionslaunchd com.stpierre.sp-scoreboard-companionsSide calcs that feed the funnel scoreboard.
06:30 ETPostHog events syncn8n aZ6srqBLQ4EC2f6fPulls website behavior (page views, funnel steps) into the database for attribution.
06:31 localDaily huddle + weekly scorecardlaunchd com.stpierre.scorecard-huddleRenders the daily huddle and the predicted-vs-actual weekly scorecard.
06:45 localFinance / cockpit / sales render chainlaunchd com.stpierre.finance-room-renderBakes the local finance.html, cockpit inject, and sales.html off fresh bank data (runs 30 min after the Plaid sync).
07:00 local SunStorage auto-archivelaunchd com.stpierre.storage-auto-archiveWeekly disk cleanup so the Mac never fills up.
07:30 ET wkdaysDaily sales call sheetlaunchd com.stpierre.sp-call-sheetRenders the ranked call list for the day (no Sat/Sun run).
07:30 localAds decision enginelaunchd com.stpierre.sp-ads-decision-engineScores ad performance and queues promote/pause recommendations (recommend-only — never auto-acts on spend).
07:50 ETn8n fleet watchdogn8n 5QBacqMo3GZYEJtRWatches the whole n8n workflow fleet for failures.
09:00 ETRail watchdogn8n YLv1YuQ8IX2Cvs51Checks every monitored surface is fresh, writes any breach into ops_alerts → surfaces in the cockpit briefing. This is the builder's morning red-light panel.
06:07 / 12:07 / 17:07 ETCommand Center board sweep (3×/day)Claude scheduled task command-center-sweepKeeps the brain's board of blockers and next-actions true; writes the cockpit briefing.
06:00 localHost git snapshotlaunchd com.stpierre.codex-git-snapshotThe sole daily git committer for the workspace (single-committer rule).
23:30 localNightly snapshotslaunchd com.stpierre.nightly-snapshotsEnd-of-day state snapshots for the Command Center.
every 60sQualified-lead iMessage watcherlaunchd ai.stpierre.qualified-lead-imessageWatches for newly qualified leads to draft an iMessage. Manual-mode now: draft-only, no auto-send.
every 30 minDFW messenger canarylaunchd com.stpierre.dfw-messenger-canary-72hKeeps the DFW Messenger bot warm during the App-Review canary window (see §3).
Canonical trigger registry: the brain.surface_registry table (12 monitored surfaces) is the source of truth for what should be fresh and where its heartbeat lands. Query it before assuming a rail is dead. The stale markdown .codex/references/scheduled-task-registry.md is not current — trust the registry table and the launchd list, not that file.
Engine 1 · Sales — human + daily touchpoints reference

Collins operates · Akash sells The sales engine is people + conversations. The rails prepare the work; the human does the talking. Manual mode is on (Jul 22): every outbound message goes out by hand from the approve-to-send queue — no scripted auto-sends until Akash lifts the directive.

Surface / railWhereWhat it is
Sales Command Center01-Projects/CommandCenter/sales.html (local, baked 06:45)The truthful pipeline in 30 seconds: safety, briefing, do-next, scoreboard, table, history. Hero stays RED until a signed+paid client exists.
Daily call sheetSt_Pierre_Digital/sales-engine/call-sheet-today.html (07:30 ET wkdays)Ranked worklist for the day with scripts + pre-call packets.
Dialing Cockpithttp://127.0.0.1:8765 (localhost only)The dialing worklist + disposition logging. Note: localhost-only, which blocks clean delegation off Akash's Mac.
Sales CRM (GHL)sales.stpierre.aiPeople, conversations, 15-stage pipeline, next actions. The operating surface for relationship truth. 15-min sweep + milestone checklist + inbox draft engine.
Inbox reco enginebrain sp_sales_ai_outputs → composerDrafts 2 next-message options + exec summary per lead. Composer sends via a guarded rail — but manual mode = draft-only right now.
Qualified-lead iMessagelaunchd, every 60sDrafts an iMessage the moment a lead qualifies. Draft-only in manual mode.
Typeform + CalendlyForm j4wHbfWD (the ONE app form) · Calendly = booking truthApplication intake and booking. Hidden niche field skips the trade question; never clone per-niche forms.
Stripe / payment pathStripe (live key in vault)Payment state + collection. The $1-start funnel is retired; use the current no-deposit booking path.

RUNBOOK: 01-Projects/CommandCenter/sales-room-build/RUNBOOK.md (+ METRIC-CONTRACT.md, ANALYST-VERIFICATION.md). Sales-engine rail notes in memory sp-sales-engine-rail / sp-sales-crm-rail / sp-inbox-reco-engine.

Engine 2 · Marketing — creative + daily ad packs (B2B + B2C) reference

Collins builds the packs · Akash approves before launch Marketing produces creative and ships new ad-set "packs." Two audiences: B2B = SP's own contractor acquisition; B2C = the product run for clients. Always label which side.

Surface / railWhereWhat it is
Marketing Command CenterStPierre-GTM/marketing-command-center/index.html + Marketing Room hub CommandCenter/marketing.htmlMeta-reported vs tracked traffic, behavior, attribution. Specialist surface, not the daily front door.
Ads decision enginelaunchd 07:30 → brain ads-autopilot signalsScores live ads spend-first, queues promote/pause actions. Recommend-only.
Meta ads insights syncn8n H45syuMzdlOi61Z9, 06:10 ETFeeds daily spend into sp_ad_metrics_daily for the whole account act_1096498922089551.
PostHog behavior syncn8n aZ6srqBLQ4EC2f6f, 06:30 ETWebsite funnel behavior for project 493312. PostHog is the data layer only — reporting lives as own HTML.
Creative canon (guardrail).codex/references/creative-canon/ — CANON.md + canon.json + check_creatives.pyThe one place for canonical creative rules (handle, CTA, offer, bolding, niche economics). Mandatory pre-deploy check — every build/repair/clone runs check_creatives.py before any Meta write.
Canonical templatestranscript-to-statics templates / stpierre-static-expanderAll statics render from canonical template renderers — never ad-hoc Pillow scripts.
Preflight skillsmeta-creative-preflightcreative-campaign-builderFreeze approved copy + selected rows, require an offline contact sheet before Meta is touched, block edits to any spent ad set, prove the paused readback matches the plan.
Creative generationcreative-generation-router → Higgsfield (default) / Arcads (fallback)Router picks the provider, enforces a live-schema check + credit cost gate before every paid job.
Meta write pathPipeboard token → real Graph token (v24.0) → scripted calls; Pipeboard bulk edit preferredClone creative + swap image hash only. Every Creative × Caption × Headline combo is its own ad unless Akash says collapse.
Publish rail (organic)Scheduled/sp-organic-publisher (codex-publisher token)Organic publishing engine. Note: meta-bm token is API-blocked; codex-publisher token is the working one.

Gotchas bible: .codex/references/meta-write-path-gotchas.mdassume every quirk in it; do not rediscover. Creative-canon rail notes: memory sp-creative-canon-rail, canonical-static-templates-only.

Engine 3 · Delivery / Fulfillment — creative + daily ad packs for clients reference

Collins operates Delivery = running the actual ad + funnel product for signed clients (the B2C side). The beachhead niches are the same four home-service trades.

Surface / railWhereWhat it is
Delivery Board (fulfillment room)StPierre-GTM/fulfillment/delivery-board/index.html (manual rebuild via build_delivery_board.py)Fulfillment status per client. No auto-schedule — rebuilt on demand.
Client GHL sub-accounts (PITs)~24 client PITs in the vault (see §4)Each client's GHL location + private integration token. Niche-tagged (CL/CF/CS/FR).
Demo bot railstpierre-demo-bot.pages.dev/{slug}Proxies a prospect's site + injects the intake bot. New prospect = 1 config JSON + build/deploy. Live end-to-end since Jul 16.
DFW Messenger botApp e08a123c, canary via launchdThe live client Messenger bot. In App-Review canary until Jul 25 (§3). The client chatbot line is untouchable — see the rules.
Client dashboardsper-client Pages projects (86 dashboards indexed in brain.dashboards)Reporting surfaces per client. All own-HTML; PostHog is data-layer only.
Onboardingnew-client-onboarding skill + #client-onboarding SlackNew-client setup flow.

Niche tickets (per-niche standard): CL $3K · CF $2K · CS $10K · FR $15K; CPL ≈ 5% of ticket; unknown ticket = "unknown", never a house default. Source of truth: brain.niche_economics.

Engine 4 · Client Experience — human + daily touchpoints reference

Collins operates · Akash relationship-owns CX = keeping clients informed, responded-to, and retained. It rides the same CRM + Slack rails as Sales but points at existing clients.

Surface / railWhereWhat it is
Slack (operating surface)5 channels via MCP connector#client-onboarding · #call-ins · #daily-reports · #notes · #documents. Channel posts approved; DMs to humans as Akash are ask-first.
GHL conversationsghl-convo-audit skill (never raw API for reads)Conversation history, direction-tagged. Retention/checkpoint tracking.
Retention checkpoints.codex/references/retention-checkpoints.mdThe cadence for touching each client so none goes dark.
Fathom / Granolaauto-ingest via n8n webhookCall transcripts → brain meetings → task extraction. Real meeting transcripts must be saved before any other work.

Suppression / DND is sacred: suppression = CRM overlap + brain STOP/DND + clients + GHL only. The old EyeFly "eyefly" exclude file is not a global do-not-contact source.

Shared infrastructure — the brain, deploy rails, and CRM plumbing reference

The brain (live memory)

Deploy rails (Cloudflare Pages / Workers)

Supabase / Postgres RLS

Hosting hierarchy

2 · Health & recovery — and the rules that never break

How to check each rail is healthy · where alerts land · which RUNBOOK to open reference

The one-glance health check

When a rail breaks — open the matching RUNBOOK

SymptomOpen this
Finance Room stale / Plaid sync failed / numbers look wrong01-Projects/CommandCenter/finance-room-build/RUNBOOK.md — full failure-mode + rollback table
Sales Command Center stale / call sheet missing / pipeline totals conflict01-Projects/CommandCenter/sales-room-build/RUNBOOK.md
Any Meta write erroring / token / dynamic-creative / image-hash / page ad-limit issue.codex/references/meta-write-path-gotchas.md — assume, don't rediscover
"How does this dashboard/surface work / what am I looking at"The dashboard guide: stpierre-dashboard-guide.pages.dev
Creative fails the gate / offer or handle wrong.codex/references/creative-canon/CANON.md — the rule + the fix
Nightly snapshots / hygiene broke01-Projects/CommandCenter/nightly-snapshots-runbook-2026-07-20.md
Verify-before-done: before calling any live-system change done — n8n, dashboard, landing page, brain, funnel, redeploy — prove it: run it, open the URL, fire a test lead, or screenshot. No "should work." A redeploy from a stale copy is itself a change; confirm the source is current first.
The seven rules that must never be broken critical
#RuleWhy
1Approval gate before activation.Nothing activates on Meta without Akash first getting a contact sheet + LP/ad screenshots. He re-pauses anything unapproved on sight. Two unattributed activations have already been caught and re-paused.
2Never edit a spent Meta object.Launched ad sets are immutable. New creative always ships as a NEW ad-set "pack" in the same campaign — never edit/add to an ad set that has spend. Respect Meta's 50-ads-per-ad-set cap.
3EyeFly is off-limits.EyeFly exited Jun 15. Never touch its systems, never resurface its invoice, never mix its 733 historical appointments into St. Pierre numbers. SP account = act_1096498922089551; EyeFly ids are not SP.
4The client chatbot line is untouched.The live DFW Messenger bot serves a real client. Do not alter its production line without a tested rollback; App-Review submit is Akash-only.
5Suppression / DND respected.STOP/DND/quiet-hours are hard stops. Suppression = CRM overlap + brain STOP/DND + clients + GHL only. Live tests only ever send to Akash's owned test phone ending 5477.
6Single-committer git rule.Individual sessions never git add/commit the workspace repo — the 06:00 host snapshot is the sole committer. (Separate product/builder repos use normal branch-and-PR flow.)
7Activity Ledger + rollback for every external write.Every change outside the local workspace gets a change_ledger row with a concrete rollback before/at the change. Money, credentials, account permissions, human sends, legal, and un-reversible launches still STOP for Akash.
And the standing personal ban: do not contact Collins through any automated rail — this pack is prepared for Akash to deliver himself. Separately, the reinstated-builder context does not undo the ban on the old terms email.

3 · Open items ledger

Current gates and in-flight work (as of Jul 22 PM) needs you

Live gates — the machine is frozen on these

ItemStateOwner / unblock
CP1 · Ad delivery restoredSP B2B spend fell $109→$59→$0/day, delivered nothing since Jul 21. Root cause traced to the one delivering campaign ("SP R2 One-CBO $100/day"). All B2B moves + R4 activation wait on this.Diagnosis agent ran; Akash unblock likely small once cause is confirmed.
R4 relight decision27 ads / 9 niches built + verified, PAUSED. Double-gated: (1) delivery restored, (2) five nurture gates below.Akash — after CP1 + gates.
R4's 5 nurture gatesG-1 email-domain warmup check · G-2 SMS ladder approval · G-3 Todd/John texts (drafted, ready) · G-5 LLC status · G-6 deck link (held pending deck rewrite).Akash approvals.
R2 relight decisionWhether to relight Round-2 packs sits behind the same delivery question.Akash.
CP2 · Facebook dataset fixDataset creation mid-way; needed to re-credit + resend 3 lost DFW leads. Back-credit window closes in days.Akash finishing dataset; deadline-sensitive.
CP5 · Meta App ReviewSubmit before Jul 25 (canary ends). Needs Akash's Chrome + passcode + Submit; n8n server-country check outstanding.Akash-only (reviewer passcode + Submit).
CP3 · Dan day-7 proof packDan's 7-day trial → day-7 conversion call ~Jul 28–29 (SP's first paying account). Leads-delivered proof pack (DFW concrete-leveling, lead Richard) must be built before the call.Build now; Akash runs the call.

Two Akash rulings pending

Today's agent-fleet outcomes (Jul 22, with ledger rows)

Standing open tasks worth the builder's eye

Re-render D loops under v2 contract + VSL banner QA · finish the unpublished GHL weekly nurture draft (4 SMS + 3 waits, auto_send FALSE) · pick first 2 Batch-001 static ads to test · publish-scope for "Fire Your Lead Vendor v2" deck · rebuild ad-creatives-daily-sync + marketing-blank2-daily-sync clean in n8n after fleet is green · convert 6 static dashboards to live. Full list lives in brain.tasks (status ready/blocked).

4 · Access map

Every service Collins would need — vault row names only, zero secret values grant these
No secret values are printed here or anywhere in this pack. Each row below is a pointer: the vault service / scope / label. Access is retrieved at runtime through brain.get_credential(service, scope, label) — the value never lands in a document. Granting a human real access is Akash's action, done in each platform's own admin, not by copying tokens.
ServiceVault pointer (service / scope / label)Used for
Meta scripted write pathpipeboard / agency / pipeboard_api_token → exchanged for real Graph tokenAll bulk ad writes (the normal path). meta-bm system-user token is API-blocked — don't rely on it.
Meta system usersmeta-system-user / stpierre / codex-publisher-system-user · … / sp-messenger-system-userOrganic publish (codex-publisher works) · Messenger bot.
Meta BMmeta-bm / agency / system-user-tokenBusiness-Manager ops (currently API-blocked for reads — noted).
n8nn8n / agency / rest-api-cowork-claude (+ relay/webhook secrets)Workflow orchestration + the sync rails.
Cloudflarecloudflare / stpierre / full-account · … / r2-s3 · … / sp-dollar-start-lead-ingest-secretPages/Workers deploys · R2 storage · lead-ingest worker.
Supabase / Postgres (brain)supabase / agency / secret_key · … / publishable_key · brain / builder_ops / codespaces-scoped-dbBrain DB. Publishable key is RLS-restricted by design.
GHLghl-pit / stpierre / SP GHL Private Integration Token + ~24 per-client ghl-pit location tokensCRM + client sub-accounts. Never recreate the PIT registry.
PostHogposthog / stpierre / personal-api-key-read · … / project-493312-public-tokenBehavior/attribution reads (data layer only).
R2 storagecloudflare / stpierre / r2-s3Creative asset hosting (presigned URLs expire in 1h).
Stripestripe / stpierre / Live secret keyPayment path. Handle read-only; money moves are Akash-only.
Typeform / Calendlytypeform / stpierre / SP Typeform PAT · calendly / stpierre / Calendly API PATApplication intake + booking truth. Never drive the live form j4wHbfWD.
Plaidplaid / personal-finance / * (client-id, production-secret, per-item)Finance sync. Read-only data; money is Akash-only.
SlackMCP connector (5 channels) · slack / agency / akash_user_token (vault token revoked; brain helpers no-op)Team operating surface.
Creative providersHiggsfield / Arcads (via router) · gemini / agency / default-api-key · fal / stpierre / veed-apiImage/video generation (cost-gated).

Akash-only by rule — never delegate

  • Billing / money / bank / LOC / Stripe payouts — any money move, and the Fundbox / financing actions.
  • Meta App Review Submit — needs Akash's Chrome session.
  • The reviewer passcode + owner passcodesp-sales-crm / stpierre / meta-reviewer-passcode, … / owner-passcode are Akash-held; a human never gets these pasted from the vault.
  • Credential / token rotation — Akash-owned; never proactively rotate.
  • Account-level permission changes, deleting accounts/data, legal signatures, and outbound human messages sent as Akash.

5 · First-two-weeks operating rhythm for Collins

The daily builder loop reference
  1. Watch the watchdog first (≈10 min). Open the cockpit briefing. Any red from the 9:00 AM rail watchdog or the fleet watchdog → open the matching RUNBOOK from §2, fix, verify, ledger. Green = move on. Do not re-assemble reporting; the rails already baked it.
  2. Run the four dailies:
    • Sales: read the call sheet + Sales Command Center; make sure every live lead has an owner + date + next action.
    • Marketing: read the ads decision-engine queue (spend-first); stage the day's ad-pack candidates.
    • Delivery: glance the Delivery Board; make sure every client's ads/funnels are actually delivering.
    • Client Experience: clear GHL conversations + Slack #call-ins; hit any due retention checkpoint.
  3. Keep drafts fresh. Manual mode is on — the inbox reco engine and iMessage watcher draft, they do not send. Keep next-message drafts current in the approve-to-send queue so Akash can fire them by hand fast.
  4. Ship the daily ad pack through Akash's gate. Build the pack as a NEW ad set (never edit spent ones), run check_creatives.py + meta-creative-preflight, produce the offline contact sheet + screenshots, and send that to Akash. Nothing activates until he approves. Label B2B vs B2C.
  5. Close the day. Ledger every external write, log blockers/next-actions to the brain, and post a short Slack update to Akash: what shipped, what's blocked, what needs a ruling. Akash answers questions — that's the comms rhythm.
★ Comms contract: Collins updates Akash over Slack (short, plain English, ≤2 sentences/paragraph); Akash answers questions. No walls of text. Reversible work proceeds under ledger+rollback; anything that spends, sends, signs, or deletes stops for Akash.
The weekly builder loop reference
WhenDo
Monday — review + predictionsOne lightweight pass: re-rank the board against the sprint OKR; set the week's predictions in the weekly scorecard (scorecard_predictions). Weeks run Monday–Sunday. Confirm the four dailies are green heading into the week.
Through the weekRun the daily loop. Builder repos use normal branch-and-PR flow (3–8 small pushes/day is healthy); never work directly in Akash's local workspace repo.
Friday — closeClear every overdue follow-up and delivery task; log predicted-vs-actual into the weekly scorecard; write change notes to scorecard_change_log. Confirm nothing is left mid-activation without Akash's sign-off.
Weekly briefProduce the wife-readable weekly brief (the canonical weekly-planning output) — plain English, the week's numbers, the one thing that must move. Cross-reference, don't duplicate, Akash's Sprint 5 operating system.
Sprint frame (fixed): Sprint 5 runs Jul 20 – Aug 16; the deadline does not move. The finish line is St. Pierre's first client cash. The builder's job for two weeks: keep the machine delivering, get Dan's proof pack built before his day-7 call, and clear the R4/App-Review gates the moment Akash unblocks them.
Where this pack lives & what could not be documented reference

This file: 01-Projects/Planning/builder-handoff-pack-2026-07-22.html — local only, git-tracked by the daily host snapshot. Not deployed to any public URL (it contains operational detail). The resource-doc rail publishes to public *.pages.dev and is not access-controlled, so it was deliberately not used.

Gaps found while inventorying

Prepared as document-only. Nothing was sent to Collins or anyone else. No Meta writes, no external sends, no EyeFly changes, no secrets in this file. Awaiting Akash's review + delivery decision.