Technical handoff · For the eng team tonight

Competitive Creative Intelligence

What the Parker teardown taught us, what we already had, and the evidence layer that turns our competitive prompts into something a client can audit claim by claim.

Author: Lucas Vera Date: Aug 10, 2026 Status: 5 specs, 5 prompts, 25-test linter Next in series: Funnel Intelligence
TL;DR

Today we tore down Parker Brain — the open factory repo behind Parker (heyparker.ai) — and stood up a live brand brain for Shapermint on our real data. Its competitive creative intelligence branch is the best articulation we've seen of what Trafiflow's Creative module should produce.

Parker's competitive intel is entirely outside-in — public signal only, because "the competitor cannot be asked." That is exactly Trafiflow's constraint on every brand we assess, which makes their method unusually transferable.

The correction that reshaped this proposal: we're further along than the March competitive screen suggests. pipeline/prompts/v2/ already carries a competitor dossier, a comparison matrix and a gap analysis whose opportunity matrix emits typed agenticAction payloads — which is past where Parker stops. The corpus (ci_ads, ci_ad_tags) and the refresh loop shipped this week. So the real gap isn't depth. It's two specific things.

What we actually lack: (1) a per-claim evidence contract — today a quoted price and a guessed spend band render in the same table at the same apparent confidence; and (2) a time dimension — the corpus stores first_seen_at/last_seen_at so we can say what changed, but every prompt is a one-shot snapshot.

Built tonight, clean-room: the evidence contract as a spec and a shared prompt block, upgrades to the two existing competitive prompts, one new period-over-period artifact, and a linter that fails an artifact for unmarked claims or creative claims with no asset behind them. Method-level lessons only — none of Parker's prompts or code, for licensing reasons covered below.

For the technical team — where to start

Everything below this box is the full narrative: why, what we found, how it was built. This box is the short version, so you can start working before you've read the rest.

1. Read the code, not just this doc. The actual deliverable is ~/projects/trafiflow-competitive-creative-intel/ — specs, five prompts, and a 25-test linter. README.md in that folder is written for you specifically: how to run the linter, which prompt maps to which live file, and two footguns already found and documented (don't lint a prompt file itself; v2/funnel_audit.md is dead code, don't build against it).

2. One real bug, ready to merge tonight. pipeline/prompts/cro_audit.md's "Expected Conversion Lift" column instructs the model to invent percentages with a fake citation ("2-5% lift based on industry A/B test data") — no study exists. prompts/cro_audit_v2.md fixes it. Low risk, high value, independent of everything else here — a good first PR.

3. Decisions that need engineering judgment, not just mine:

4. One thing to protect, not fix. Creative and funnel already run concurrently in runner.py, linked by paid_destination_intelligence.py ranking landing pages by impression recurrence. It's good architecture. Nothing here touches it — flagging it so nobody "fixes" it while reading the funnel section below and thinking it's disconnected, which is a mistake I made in conversation earlier tonight before checking the code.

01

Where this comes from

Parker is a context-aware marketing intelligence product for DTC brands. Real Simple Labs open-sourced its factory repo — the full prompt library, methodology docs, and skills that build a "brand brain": a private repo holding everything the system has learned about one brand, kept fresh by standing routines.

Today we did two things:

Evidence: factory repo at ~/repos/parker-brain (HEAD b55c441, v15) · live brain at ~/repos/trafilea-shapermint · data-operability tests logged in its BUILD-STATUS.md, Phase 0.

Why this matters for Trafiflow: Parker's own-brand intelligence needs a connected ad account. Its competitive intelligence doesn't — every claim in that branch is reconstructed from public signal, because "the competitor cannot be asked." That is exactly the position Trafiflow is in with every brand it assesses. Parker is proof that the outside-in constraint can still produce strategist-grade output.

02

Anatomy of Parker's competitive creative intel

Four layers, each feeding the next. Nothing here needs private data.

1 · Watch listonce, then maintained

Not just "competitors." Three tags with different downstream uses: competitor (feeds threat analysis), inspo (feeds the reference set for creative), affinity (adjacent categories serving the same customer — feeds persona work). Selection criteria are documented, so the set is defensible and revisable.

2 · Per-rival profilequarterly refresh

Nine outside-in research slices per rival — brand identity, website & product, organic channels, ad account evaluation, reviews & customer language, reputation, community/forums, buyer journey, running notes — rolled up into a narrative snapshot: who the rival is, what threat type, where it's strong, where it's exposed, and what that opens for the brand. The rule for the roll-up: synthesize, don't concatenate — the value is the connections between slices, not the slices.

3 · Cadenced readsmonthly + quarterly

Monthly creative landscape: what each brand on the watch list put into market in the last 30 days — volume, static/video mix, the bet each brand is making — plus the specific ads worth adapting. Trajectory beats snapshot: a competitor whose volume doubled is the finding, not the count itself. Quarterly 90-day audit per rival: a fresh-eyes pass, then a graded read on five fixed signifiers (volume & activity, static-to-video mix, visual-format diversity, messaging-angle diversity, and the "wheels-turning test" — does walking the account fire ideas or not).

4 · Market synthesis → creative pipelinequarterly

One cross-brand read joining all audits: dead-end positionings (a rival failing with an angle is negative confirmation), ownable openings (conversations nobody is having), use-case gaps (customers talk about it, no ad addresses it), problem-mirroring lanes, recurring persona archetypes, a threat-typed landscape, and inspo borrows. Every opening ships as a hypothesis to test, never a directive — and it feeds directly into idea generation and briefs.

The trust layer — what makes it credible

The method is nothing without its evidence discipline. Six rules recur in every prompt:

Claim marks on everything

Every claim is verified (a real ad confirms it), inferred (concluded from signal — most competitive reads), or stated (the source says it, unconfirmed). The cardinal sin: laundering an inference into a fact, because every downstream comparison inherits the error.

Full media or no creative claim

Ad names, counts, and metadata can locate and dedupe, but they cannot prove what a creative says, who's in it, or why it works. Any claim about creative content requires analyzing the actual media — transcript, visuals, hook, landing page. No media, no claim.

Verbatims and denominators

The exact phrase a customer used, not a paraphrase. The count with its denominator and window — never "many" or "tends to." A generalization is a claim the reader can't check; the verbatim and the number are the evidence itself.

A blank beats a guess

A competitor running no ads this month is a finding, not a gap to fill. Thin data gets named as thin, and the affected reads are marked data-limited. Fabricated completeness destroys the one thing the product sells: trust.

Freshness stamps

Every artifact carries generated_on and refresh_by dates plus refresh triggers (rebrand, launch, pricing move). A later run knows the doc is stale and offers a re-run instead of trusting it past its shelf life.

Carry the source

Every pattern names the ads it rests on — source brand, library, launch date, media link — so a skeptical reader can pull the underlying ad and re-weigh the read themselves.

03

Where we actually are

I opened this teardown assuming our competitive intel was the March screen — a breadth inventory of 100 advertisers with ad counts, run days and CTAs. That was wrong, and worth correcting before anyone reads further, because it changes what is worth building.

What is already built

The prompt librarypipeline/prompts/v2/: competitor_dossier.md (creative playbook, format breakdown, angle frequency, funnel read, positioning map, steal-worthy tactics, vulnerabilities, threat table), competitor_comparison.md, competitive_gap_analysis.md (8–12 row opportunity matrix, typed agenticAction + payload on the top three), plus single_ad_analysis.md and multi_ad_pattern_report.md.

The corpusci_brands, ci_ads, ci_ad_tags. ci_ads already stores transcription, media_storage_path, media_status, first_seen_at, last_seen_at, is_active. ci_ad_tags versions both taxonomy and tagger and carries a reasoning column.

The refresh loopci_seed_core.py, ci_backfill.py, ci_refresh.py, media_archiver.py. Media gets fetched and archived; tracked brands get re-scraped on a budget.

Two things follow. First, the opportunity matrix is ahead of the method we studied — converting a competitive read into a typed action with an executable payload goes further than a strategist memo does. Nothing proposed here weakens it. Second, the honest gap list is shorter and sharper than "we only have counts":

#GapWhat it looks like today
1 No per-claim confidence The dossier renders a price quoted off the page and an estimated spend band in the same table, in the same voice. The reader cannot tell which is which, and neither can the model that consumes it downstream.
2 Creative read from metadata The dossier asks for "top 5 hooks — quote the headlines." On a static that may be the hook. On a video it is not: the hook is the first two seconds, and the primary text above the player is often unrelated. We have transcription and archived media in the schema, and the dossier does not use them.
3 No time dimension The corpus is built for a time series. Every prompt is a one-shot snapshot with no prior period in its inputs.
4 A laundered inference, baked in "Longest running = likely winner" ships as a rule rather than as a marked inference with its confounds named.
5 Unanchored scores 1–10 ratings across the threat and scorecard tables, composited into a total. A composite of unevidenced numbers looks like measurement and is arithmetic on opinion.
6 No freshness Artifacts carry no capture date and no expiry, so the refresh loop has nothing to trigger against and month-old movement can render as current.

Reframed: the problem is not that we lack depth. It is that the depth we produce does not carry its evidence, and does not know what period it is describing. That is a much cheaper problem than the one I thought we had.

04

What we build

Four pieces. One is new, two are edits to prompts that already work, and one is the thing that makes the other three enforceable. Nothing here touches ingestion.

1 · The evidence contract cross-cutting

Six rules every competitive artifact obeys. Four claim marks — verified (we inspected the thing), inferred (our reasoning, basis stated), claimed (a party asserts it), and unresolved (the signal cannot settle it). Plus: creative claims require the creative; counts carry a denominator and a window; absence is a result but sampling is not absence; every artifact is dated and expires; every claim carries a source handle.

It ships as a shared prompt block included by every competitive prompt, so the rules arrive with the task rather than living in a doc nobody opens.

2 · Rival dossier, upgraded edit to an existing prompt

Marks on every claim, with the two worst offenders named explicitly: the estimated spend band and the threat ratings now carry their basis and their confounds. The hook section gets its assets — a hook read on a video requires the transcript or frames, and a copy-only read is labelled a copy hook rather than passed off as a creative read. Depth tier declared up front. A trajectory section when a prior dossier exists.

3 · Creative landscape genuinely new

The period-over-period read across the rival set: volume and mix with movement, the posture each rival is taking, the three to five changes that would alter a plan, and specific ads worth adapting with the mechanism named rather than the surface. Every other artifact answers "what is true now." This one answers "what changed," which is the question an operator acts on.

It needs no new ingestion — first_seen_at and last_seen_at are already landing in ci_ads. And it is what turns a one-shot assessment into something a brand comes back to, which is a business-model question as much as a product one.

4 · Openings synthesis, upgraded edit to an existing prompt

The opportunity matrix and its agenticAction payloads stay exactly as they are. What gets added: a third territory beside undefended and overcrowded — an angle a rival tried and abandoned, which is the cheapest evidence available because a competitor already paid for the test. And every opening now states its absence shape and the cheapest test that would settle whether the lane is open or failed.

The contract has a tooth

Prose in a prompt is a request. contract-lint parses a produced artifact and fails it for an unmarked claim, a claim with no source handle, a creative claim in a metadata-only artifact, a rating with an empty evidence cell, or a missing freshness stamp. It also carries a provenance guard: a denylist of the third-party method vocabulary, so the clean-room boundary is enforced in CI rather than remembered.

The rule that matters most is machine-checkable against the schema we already have: ci_ads.media_status tells the linter whether the asset behind a creative claim was actually archived. That is the difference between a rule and a wish.

Depth tiers — how this survives many brands

Requiring assets is the expensive rule, and Trafiflow assesses many brands against a budget. So the tier is declared on the artifact: A inspects everything, B inspects the top N and says which N and what share of the library that is, C is metadata only and may not characterize creative at all. Tier C is a hard stop the linter enforces — it is what stops the pipeline quietly reverting to metadata-as-analysis under cost pressure, which is the mode the current dossier is in today without the label that would have told anyone.

The marks become UI

This is the piece I most want. Our product principle is already "directional, not fake certainty" — today expressed once per module as a confidence score. The contract pushes it down to the claim, where the reader needs it, and gives the interface something real to render: label, statement, source, always visible, no hide-behind-a-toggle. It is also where the overlay layer attaches — a client correction hangs off the source handle of the exact claim it disputes, and the original stays auditable.

Licensing — how this was built, and why it matters at DD Parker Brain ships under PolyForm Noncommercial 1.0.0, which permits studying and internal noncommercial use and forbids commercial use. A tweaked prompt is still a derivative work, so "adopt their prompts with changes" was not available to us — and with the term sheet signed, "our creative intel is their prompts with tweaks" is exactly what IP diligence flags.

So this was built clean-room. I read their method and wrote functional specs describing what each artifact must do — architecture and method, which are not protectable. The prompts were then written by fresh sessions that had the specs and Trafiflow’s own existing prompts, and were explicitly barred from opening any Parker path. Provenance is recorded in specs/PROVENANCE.md, and the vocabulary denylist in contract-lint keeps the boundary enforced going forward.

Unchanged: the Shapermint brand brain keeps running on Parker’s own MCP account. That is the licensed use, and it stays.
05

Where this stands

Built across two passes tonight — in ~/projects/trafiflow-competitive-creative-intel/, self-contained, ready to PR wherever the team wants it:

The funnel prompt was the one that almost went sideways, worth flagging here because it's the kind of mistake that's easy to repeat. I nearly wrote its spec against v2/funnel_audit.md — which turns out to have zero callers anywhere in the codebase. What's actually live is cro_audit.md, loaded by cro_auditor.py, called from runner.py. Caught it by tracing the caller before writing anything, not by assuming a file under prompts/v2/ is wired up. Worth the whole team knowing: it isn't, automatically.

Finding it paid off. cro_audit.md's "Expected Conversion Lift" column instructs the model to write things like "2-5% lift based on industry A/B test data" — a specific-looking number citing a study that doesn't exist. Worse than an unmarked claim: the citation itself is fabricated. Fixed it, and added a linter rule (R9) that catches the exact pattern on sight — verified against the literal offending line pulled from the live prompt.

The smallest slice worth running next — one assessed brand, end to end:

  1. Run the rival set prompt for real and see whether the role test (direct / reference / adjacent) produces a roster a second analyst would agree with.
  2. Two tier-A dossiers, the rest at tier B or C. This is where we find out what the asset requirement actually costs per rival.
  3. One creative landscape as a baseline, so the second one a month later has something to move against.
  4. One openings synthesis feeding one real creative proposal, and one funnel audit run through the fixed prompt — then put each beside its old-prompt equivalent. That comparison is the internal sell, and the only honest way to find out whether the evidence layer changes the output or just the paperwork.

Shapermint is the obvious pilot: we have internal ground truth to judge against, and the Parker build running on it gives us an external quality bar to compare our own pipeline output to.

06

Open questions for the team