BLUF: A lean AI marketing pod that turns the week's shipped work into multi-channel content, measured against one funnel per product, on rails JBNX already pays for. Weekly output: blog + newsletter + social set + monthly AEO pass — at a hard-capped ≤ $25/mo LLM budget and $0 new infrastructure until P3.
Version 2.1 · 2026-08-06 (P1 data layer SHIPPED) · slug mkt-jbnx · directive v31. Supersedes v1: folds in the 8-point critique and a cost-reduction pass. v2.1: P1 executed — during build we found prior marketing groundwork already in the database (schema marketing: AEO research, KPI/metrics, and a channel registry with budgets and kill criteria, plus five pf_mk_ portal views). The new pipeline tables were consolidated INTO marketing as the single home; the plan's mkt schema naming is corrected accordingly, metrics_daily was dropped in favor of the richer existing marketing.metrics, assets.channel is FK'd to the existing channel registry, and RLS hardening was applied to the seven legacy tables (it was off). Baseline remains Brock Mesarich's "Master Claude for Marketing"* course, rebuilt JBNX-native.
The course builds one operator's system in eight moves: workspace memory → voice skills mined from real corpus → a repurposing chain (1 source → blog/newsletter/LinkedIn/IG) → Higgsfield visuals → Clay leads + outreach → Supabase tracker dashboard → Blotato/Zapier distribution → Semrush SEO/AEO. Core insight kept: everything is a skill with a mined voice behind it, chained into pipelines, human-gated only at the publish/send edge. The affiliate vendor stack is replaced wholesale by connected tools (Canva, Resend, Gmail, Supabase, Firecrawl, llm.jbnx.io).
--done lines on every agent run. The default weekly source is the week's handovers, auto-compiled into a build-in-public changelog. No new content burden on the CEO — the raw material already exists in Postgres.mkt schema: not exposed to Data API, RLS on, anon/authenticated revoked, reads via public.pf_mkt_* SECURITY DEFINER views gated by portfolio.is_ops_reader(), dead-grants query before calling it hardened.campaign_id metadata so cost-per-asset is a query, not a guess.| Identity | Status | Owns |
|---|---|---|
| MKT-Lead | Standing (weekly batch run) | The whole production loop: changelog compile, voice drafting, repurposing, Canva creative specs, AEO audits, metrics rollup, weekly brief. Runs Writer/Creative/Analyst work inline as skills. Reports to 02. |
| MKT-Growth | On-demand (P5) | Leads, enrichment, outreach drafts. Isolated identity because outreach needs its own audit trail and its own budget cap. Never sends unapproved. |
Skills (repo /skills/): email-voice · blog · newsletter · linkedin · x-posts · repurpose · changelog-compile · carousel · infographic (Canva) · aeo-audit · outreach. Split into 5 seats only when weekly volume demands parallel leases — seats are cheap to add, org structure is not free to run.
Escalation per agent_ops.policy: brand/copy/design → MKT-Lead decides, 02 arbitrates. CEO sees only spend ≥ $500/mo, legal-binding, irreversible (passing critical_test).
P1 ships zero new infrastructure. No Railway service, no domain, no hub UI. P1 = schema + views + LiteLLM keys + skills in the repo. Approvals happen where they already happen: in chat.
jbnx/mkt.jbnx.io (first commit = this plan, blocked on PAT): PLAN.md, CLAUDE.md (pod charter, subordinate to hi.jbnx.io; credentials by name only), skills/, sql/ (migrations mirrored from Supabase MCP), app/ (empty until P3).ngjmqdzpnhwpybtssykz): schema marketing (consolidated single home), born-closed per §2.5. $0 marginal.mkt-lead (cap $15/mo), mkt-growth (cap $8/mo, P5). Default alias cheap; standard for drafting; frontier only for one-time voice mining and final-pass copy on flagship pieces. Redis caching on (source summaries cached across repurpose runs).pg_cron (weekly compile poke, weekly competitor snapshot). $0.#/mkt over pf_mk_* views): $0 marginal but every deploy touches the master-source service that serves hi.jbnx.io. Option B — own minimal Flask service on Railway (~$3–5/mo): isolated blast radius. Recommendation: B when the time comes; the isolation is worth $5. mkt.jbnx.io DNS lands then, not before.marketing, v1 — live)campaigns (theme, goal, window, north_star) · sources (type, provenance, content_hash for dedupe) · assets (source_id, channel, body/url, voice_skill_version, utm, status draft → review → approved | rejected → published, publish_after, published_url) · voice_feedback (asset_id, drafted_hash, approved_diff, mined_at) · calendar · leads (minimal PII, source-tagged) · outreach (send requires approved_by) · competitors + competitor_snapshots · seo_findings · metrics (existing, period-grain) · funnels (product, stage, target, actual).
changelog-compile over the week's handovers → repurpose → blog + newsletter + LinkedIn + X (+ carousel spec) → all to review → CEO approves in chat → API channels publish immediately (Resend broadcast, blog PR, X post), manual channels queue for the 15-min slot → verify live → usage + status + release. One claim, one session, all assets.02 → enrich (web research first) → per-lead drafts via email-voice → approval → send from dedicated cousin domain → replies triaged.seo_findings.metrics_daily + funnels → weekly brief. Social vanity metrics: monthly manual glance, not engineered.voice_feedback diffs → bump voice skill versions.02 decision, logged.#/spend, flagged at $200/mo trend.| Line | v1 est. | v2 |
|---|---|---|
| Railway service | $5–10/mo from P1 | $0 until P3, then ~$3–5/mo |
| LLM (capped keys) | uncapped, ~5 keys | ≤ $23/mo hard cap (2 keys) |
| Scraping | Firecrawl daily | ~$0 (direct fetch weekly; FC reserve) |
| Vendors | $0–150/mo drift risk | $0, gated, no-trial rule |
| Engineering | ~4.5 sessions P1–P5 | ~2.5 sessions (P1 halved, hub deferred, seats collapsed) |
02, needs CEO input on North Star): define CipherDeck + NodeDough funnels, email capture live on both sites, UTM scheme fixed. Precondition for any publishing.mkt schema + hardening + pf_mk_* views; 2 LiteLLM keys with caps; skills scaffolded in repo; pg_cron jobs.North Star per product (P0.5) · UTM-attributed signups/wk · newsletter subs + open rate · source→publish cycle time · assets/wk · cost per published asset (Langfuse query) · outreach reply rate (P5) · AEO findings merged.
mkt.jbnx.io, jbnx.io, ai-portal, claude-ops, cipherdeck; Contents+Workflows RW) → set GITHUB_TOKEN in Railway → delete the two plaintext credential files from the Claude project → rotate the still-live Railway token. (Already in ceo_actions, 2026-08-06.)no-reply@cipherdeck.com sendable · jbnx.io revamp ship.