St. Pierre Creative Engine Automation SOW

Created July 8, 2026. Source standard: St. Pierre Media Buying Standard.

Objective

Automate creative ideation, production, Meta distribution, activity logging, and performance monitoring.

Why it matters

Ship more hook packs with less manual work, then scale based on cost per qualified booked call.

You need to

Approve build order or revise scope - 5 min.

Status

Scope ready. Build not started.

Bottom line. Build one creative operating system where the hook owns the ad set, every creative format is tracked separately, every action writes to a ledger, and the dashboard shows what is winning by hook, format, ad, spend, lead quality, and booked-call cost.
Approve the build order needs you
★ Recommended default: build the ledger and dashboard first, then automate production, then automate distribution. Reply "build v1" to start with this order.
OrderWorkstreamReasonOutput
1Ledger + IDsIf activity is not captured first, automation creates invisible mess.Every idea, render, upload, ad, budget move, and result has a durable row.
2DashboardAkash wants to monitor, not inspect raw Meta tables.Hook board, format board, pack status, spend, leads, booked calls, winners.
3Ideation + productionOnce the ledger exists, the engine can safely create work.Hook packs with static, carousel, motion, and AI UGC briefs/assets.
4DistributionPublishing is the risky external write, so it comes after QA and tracking.Paused Meta ad sets organized by hook, then controlled activation.
Lock the organizing rule needs you
Rule. One ad set equals one hook. Static images, carousels, motion graphics, and AI UGC are creative formats inside that hook. They are not separate hook tests by default.
LayerOwnsRuleExample
CampaignTesting laneMonthly ABO hook-pack campaign unless the media-buying standard changes.SP TEST | 2026-07 | ABO Hook Packs
Ad setHookOne hook, one budget, one verdict clock.Pack 014 | Hook: Stop buying shared leads | Launch 2026-07-14
AdCreative executionOne asset or carousel under the parent hook.p014-h01-static-03-notes-app
Dashboard sliceFormatCompare format performance without splitting the hook by default.static, carousel, motion, ai_ugc
Exception. Split a hook by format only after the hook already has enough spend to justify a cleaner read, or if Meta delivery clearly starves a format. The default remains hook-owned ad sets.
Scope of work no action
TrackIn scopeNot in v1
IdeationGenerate hook packs from persona, angle, offer, market, proof, objections, and historical winners.Fully autonomous brand strategy changes.
ProductionCreate briefs, manifests, render jobs, QA checks, and output assets across four format families.Unlimited net-new template design without a template library.
DistributionCreate paused Meta campaigns/ad sets/ads, upload assets, attach tracking, and log IDs.Uncontrolled active spend or new account/payment setup.
LedgerAppend-only operational ledger plus Activity Ledger rows for external writes.Chat-only notes or hidden approval queues.
DashboardMonitor production throughput, deployment status, and performance by hook, format, ad, and spend.Replacing Ads Manager as the full source of billing truth.
Format-specific production tracks no action

Static Images

  • Fastest testing format.
  • Uses template families like X post, notes app, text bubble, messenger, reminders, lock screen, napkin, Safari, proof screenshot, and direct offer card.
  • Default output: 8-20 PNGs per hook pack.
  • QA checks: readable mobile text, hook match, no broken layout, no unsupported claims.

Carousels

  • Used when the hook needs a sequence, proof stack, teardown, myth-vs-truth, or "how it works" flow.
  • Default output: 5-8 cards plus primary text and headline.
  • Tracks each card set as one carousel creative, with card-level source files in the manifest.
  • QA checks: card order, first-card hook, last-card CTA, no tiny copy.

Motion Graphics

  • Template-driven movement over the same hook: animated proof, numbers, callout overlays, whiteboard, Loom-style explainer, or kinetic text.
  • Default output: 6-20 second MP4 in feed and vertical versions when practical.
  • Runs after static/carousel hooks show promise, unless a motion-specific idea is clearly cheap to render.
  • QA checks: first 2 seconds, captions, safe-area, file size, thumbnail, CTA.

AI UGC

  • Scripted founder-style, operator-style, skeptic-style, or explainer-style clips generated from approved claims.
  • Default output: script, shot list, avatar/voice instructions, generated video, caption file, and policy check.
  • Never fabricates a customer, result, territory, or network endorsement beyond approved proof.
  • QA checks: disclosure risk, claim support, voice fit, pacing, face/hand artifacts, landing-page match.
Ideation engine no action
InputHow it is usedLedger event
Offer$1 start, 10+ inspections in 7 days, week-to-week, pay per qualified booked inspection.offer_snapshot_used
PersonaFounder, skeptical owner, operator peer, proof narrator, systems explainer.persona_selected
AngleRented demand, missed inspections, agency distrust, territory lockout, sales-team capacity.angle_selected
HookThe exact test identity. It becomes the ad set name and pack ID.hook_pack_created
Format mixStatic, carousel, motion, AI UGC assignments for the same hook.format_mix_selected
Historical resultsWinners get expanded; losers inform blocked angles and new counter-hooks.performance_used_for_ideation

Required output per hook pack

Production workflow no action
  1. Create the hook pack. Assign pack ID and write the hook, persona, angle, offer, format mix, and target metric.
  2. Generate concepts. Produce format-specific concepts and primary text variants, but keep the parent hook fixed.
  3. Render assets. Run static templates, carousel card builder, motion renderer, or AI UGC generation jobs from one manifest.
  4. Run QA. Check file dimensions, text fit, readability, policy-sensitive claims, proof support, CTA consistency, and landing route.
  5. Freeze the pack. Once approved for distribution, the pack becomes a record. Fix errors only; do not rewrite strategy mid-test.
  6. Store outputs. Keep assets under the project creative batch folder and write a manifest row for every file.
StateMeaningAllowed next move
ideaHook exists, no assets yet.Generate concepts.
briefedConcepts and format assignments exist.Render assets.
renderedFiles exist locally.QA.
qa_passedReady for paused upload.Create Meta objects.
staged_pausedMeta ads exist but are not spending.Activate or hold.
activeSpend is on.Monitor ladder.
graduatedWinner duplicated into scale pool.Monitor scaling.
heldPaused for poor read or QA issue.Archive or learn from it.
Distribution automation no action
Spend guard. The system may create paused Meta objects automatically when logged and reversible. Turning on spend requires an explicit activation control, budget cap, and rollback path.
StepAutomationGuardrailLedger event
1Create or find monthly testing campaign.Campaign starts paused unless explicitly in an active controlled test lane.campaign_found or campaign_created
2Create one ad set for the hook pack.Name includes pack ID, hook, mix, launch date. Daily budget follows the standard.adset_created
3Upload each asset to Meta.Store image hash or video ID against the asset row.asset_uploaded
4Create one ad per creative execution.Ad name includes pack, hook, format, sequence, and idea slug.ad_created
5Verify campaign, ad set, ad, creative, link, status, and preview fields.Block activation if any ad is not paused, missing tracking, or using wrong hook.distribution_verified
6Activate only through a controlled command.Activation logs before/after status and budget. Budget moves follow ladder.status_changed and budget_changed

Tracking requirements

Activity ledger design needs you
★ Recommended default: use a dedicated creative_activity_ledger for every creative-system event, and continue using the existing Activity Ledger for external writes such as Meta uploads, status changes, Drive uploads, and dashboard deploys.
FieldPurposeExample
event_idUnique row ID.evt_20260708_001234
tsWhen it happened.2026-07-08T14:02:11Z
actorWho or what did it.codex, akash, renderer, meta_sync
run_idGroups one automation run.creative-engine-20260708-01
pack_idHook-pack link.p014
hook_idHook link.h-stop-buying-leads
formatCreative family.static, carousel, motion, ai_ugc
asset_idSpecific creative file or concept.p014-h01-static-03
surfaceWhere the action happened.brain, filesystem, meta_ads, drive, dashboard
actionWhat happened.asset_rendered, ad_created, winner_graduated
before_imageRestorable before-state when relevant.Previous budget/status/template path.
after_imageResult state.New Meta IDs, file hashes, status, metrics snapshot.
reverse_howUndo instructions.Pause ad set, restore prior budget, archive pack.
verified_atProof timestamp.When the API read-back matched intended state.

Required event types

Performance dashboard design needs you
★ Recommended default: build a local project dashboard first, then deploy it as a persistent dashboard only after the data joins are correct.
PanelShowsPrimary question
Command stripActive spend, leads, qualified actions, booked calls, CPQBC, best hook, worst leak.What needs attention today?
Hook boardEach hook pack by status, age, spend, CPL, CPQBC, first qualified action, verdict clock.Which hook is winning?
Format boardStatic vs carousel vs motion vs AI UGC by spend, CTR, CPL, qualified rate, booked-call rate.Which format deserves more production?
Ad leaderboardTop and bottom ads, filtered by hook and format.Which exact creative should graduate or die?
Production ledgerIdeas created, assets rendered, QA fails, uploads, deploys, cycle time.Is the machine shipping enough?
Budget ladderCurrent budget tier, promotion trigger, kill cap, next allowed move.What can be scaled without guessing?
Data healthMissing Meta IDs, missing UTMs, stale metrics, unmatched Typeform/GHL conversions.Can Akash trust the numbers?

Minimum metric set

Data model no action
Table / fileGrainKey fields
creative_hook_packsOne hook pack.pack_id, hook_id, persona, angle, status, launch_date, target_cpqbc.
creative_assetsOne rendered asset or carousel.asset_id, pack_id, format, template_id, file_path, sha256, qa_status.
creative_distribution_objectsOne Meta object mapping.asset_id, campaign_id, adset_id, creative_id, ad_id, status.
creative_activity_ledgerOne activity event.event_id, run_id, action, before_image, after_image, reverse_how.
creative_performance_snapshotsOne metric snapshot per object per day or pull.object_id, level, date, spend, leads, qualified_booked_calls, cpqbc.
manifest.csvOne production batch.Portable backup of rendered files, copy, tracking, and Meta IDs.
Build plan no action
PhaseBuildAcceptance test
0. InventoryMap current creative folders, scripts, Meta naming, landing routes, and media-buying standard.One manifest can represent the 64 uploaded July 8 ads without hand edits.
1. LedgerCreate creative ledger writer and schemas. Wrap every automation step.A dry run writes idea, render, QA, upload-intent, and dashboard events with run ID.
2. DashboardCreate local dashboard from ledger + Meta read-back + funnel metrics.Dashboard shows hook, format, ad, status, spend, CPL, CPQBC, and data-health gaps.
3. IdeationGenerate hook packs from offer, personas, angles, winners, and blocked claims.One command creates a frozen hook-pack brief and production manifest.
4. ProductionRender static, carousel, motion, and AI UGC outputs from the manifest.At least one hook pack produces valid assets in all four format families.
5. DistributionCreate paused Meta objects by hook, attach UTMs, read back status, write mappings.One hook pack stages paused ads in Meta with no mixed-hook ad set.
6. MonitoringRefresh performance snapshots and update status recommendations.Dashboard flags graduate/hold/kill candidates using the media-buying ladder.
Quality gates no action
GateBlocks whenFix path
Hook integrityAn ad set contains multiple hooks or the asset hook does not match the ad set hook.Move or rename asset before upload.
Format taggingFormat is missing or ambiguous.Assign one of static, carousel, motion, ai_ugc.
ClaimsAsset makes unsupported guarantees, fake proof, or fake customer claims.Rewrite against approved proof bank.
Mobile readabilityText is clipped, tiny, or visually broken.Re-render template.
TrackingMissing pack, hook, format, or ad-level tracking tags.Regenerate URL before creative creation.
External write ledgerMeta, Drive, deploy, or other external write lacks before/after and rollback.Stop and write the ledger row before continuing.
ActivationSpend would turn on without a budget cap and rollback path.Keep paused until activation command is explicit.
Automation commands reference only
CommandEffectDefault state
create_hook_packGenerate hook pack brief and concept manifest.idea
render_packProduce static, carousel, motion, and AI UGC assets from manifest.rendered
qa_packRun file, visual, copy, policy, and tracking checks.qa_passed or qa_failed
stage_pack_to_metaCreate paused Meta ad set and ads by hook.staged_paused
activate_packTurn on spend with budget and rollback logged.active
refresh_performancePull Meta and funnel metrics, write snapshots, refresh dashboard.Dashboard current.
graduate_winnersDuplicate winning ads into the winner pool.graduated
Risks and safeguards reference only
RiskSafeguard
Automation makes a lot of assets but no learning.Dashboard ranks by hook and format against CPQBC, not output volume.
Formats get mixed into unclear tests.Ad set stays hook-owned; format is an ad-level dimension.
Meta delivery starves one format.Dashboard shows spend share by format; split only when evidence justifies it.
AI UGC creates trust or policy risk.Approved proof bank, claim QA, no fake customers, and manual review before activation.
Untracked external writes.All external writes also call the canonical Activity Ledger with rollback instructions.
Dashboard numbers drift from real business outcomes.Join Meta spend to Typeform/GHL/booked-call outcomes; show data-health gaps instead of hiding them.
Definition of done reference only