Five wave-2 candidates fetched live 2026-11-05 (awesome-macOS 19.4k ★, 1000.tools, uneed.best, devhunt.org; Product Hunt bot-walled and marked on-screen-read). Copy inherits FRE-207's CTO-signed claims only; price line stays 'Free 14-day trial', no number (G2). Submission gated on the wave-1 readback and G3/G4. Copy target was Fri 2026-11-13; ready 2026-11-05.
Marketing tree
One voice, one place. Every later artifact draws on positioning.md — do not
invent framing per-asset.
positioning.md # source of truth: wedge, voice, banned phrasings, approved claims
calendar.json # scheduled pushes: date, channel, status
briefs/<channel>.md # per-channel rules, format, limits, what "good" looks like
drafts/<id>/ # agent output: copy.md, assets/, rationale.md
pending/ approved/ posted/ # human gate by directory move
metrics/weekly.md # funnel snapshot, generated
listening.md # buying-intent threads + drafted replies
Hard rule
approved/ is the only thing a human ever publishes from. Nothing posts itself.
Workflow: agent drafts into drafts/<id>/ → moves to pending/ when complete →
a human reviews and moves it to approved/ → the human publishes from approved/
under their own account → the artifact (or a pointer) lands in posted/.
Nothing in drafts/ or pending/ is ever publishable, by anyone, by any means.
The weekly read
bun --env-file=.env scripts/weekly-metrics.ts (or bun run metrics:weekly)
rewrites metrics/weekly.md from the live databases: the staged funnel, the
campaign breakdown (getAnalyticsSummary.topCampaigns' grouping), and the one
stage that moved. It needs TURSO_DB_URL, TURSO_DB_TOKEN, NOOK_DB_URL and
NOOK_DB_TOKEN — no other production secret. The file is generated; never
hand-edit it. The numbers are engineering's; the interpretation is the CMO's.