APPROVED 2026-04-13 • FEATURE FREEZE • BUILD STARTED 2026-04-14

CampaignForge + ContentForge

Complete Spec Bundle — 5 Documents, 3 Repos, Building

5
Spec Documents
17
Decisions
3
Repos Live
276
Files Shipped
19/30
Tasks Done
Spec Documents
Click any card to drill into the full visual breakdown.
Platform Spec (Ops App)
ContentForge (Content Sites)
Trust Framework (Accounts)
Execution Plan (Timeline)
Operator Runbook (Daily Ops)
Build Progress
Repos scaffolded 2026-04-14. Feature freeze in effect — building from locked specs.

campaignforge-app

W1 DONE

SvelteKit 2 + Svelte 5 + Tailwind 4 + Drizzle ORM + shadcn-svelte

✓ 186 files committed
✓ shadcn-svelte (9 components)
✓ App shell + sidebar nav
✓ Dark mode + theme toggle
✓ Auth guard verified
✓ Login page polished
◆ 12 database tables
◆ 29 page routes
◆ 12 API endpoint stubs
◆ 7 Drizzle schema files

contentforge

TOOLS COMPLETE

Astro 5 + Svelte islands + MDX + Tailwind 4 • 41 pages, 10 interactive tools

✓ Design tokens migrated
✓ Header + Footer + 3 layouts
✓ 20 articles converted to MDX
✓ 10 tool pages converted to MDX
✓ 4 category index pages
✓ 8 shared Svelte components
✓ 10 Svelte tool islands
✓ client:visible hydration wired
✓ CF Pages deployed
◆ Build: 41 pages, ~4s
◆ Next: SEO + QA + cutover

Lessons Learned

Session 3 — Content Migration + Tool Islands (2026-04-14)

MDX body_html requires JSX-safe formatting: Raw HTML from JSON has nested block elements on same lines, bare <br> tags, and ~ chars parsed as strikethrough. Conversion script needed multi-pass formatting: self-close void tags, escape tildes to &#126;, and split every block element onto its own line.

Astro dynamic components need static imports: client:visible hydration fails with dynamic component references (NoMatchingImport). Must use conditional static rendering: {tc === 'EFCCalculator' && <EFCCalculator client:visible />}.

Parallel agents for tool implementations: 4 agents dispatched simultaneously, each handling 2-3 tools. All completed in ~17 minutes. Logic/data separation (*.logic.ts, *.data.ts) enabled clean parallelization with zero merge conflicts.

Session 2 — W1 Build (2026-04-14)

Astro 5 Content Layer API: entry.render() is gone. Use import { render } from 'astro:content' then render(entry). Content collections need glob() loader from astro/loaders.

shadcn-svelte + Tailwind v4: @apply border-border fails — Tailwind v4 doesn't know custom vars via @apply. Use @theme inline to declare all HSL color vars, then use raw CSS instead of @apply for base styles.

shadcn-svelte components need WithElementRef: The cn utility must also export WithElementRef and WithoutChildrenOrChild types for sidebar/rail components.

MDX in Content Collections: HTML (tables, callouts, step-lists) works inline in MDX. No need to convert to custom components yet — the prose CSS styles handle it.

Session 1 — Scaffold (2026-04-14)

Astro 5 Content Collections: Uses src/content.config.ts (not src/content/config.ts). The z import from astro:content shows deprecation warnings.

Tailwind v4: No tailwind.config.ts needed. Uses @tailwindcss/vite plugin. The @astrojs/tailwind integration conflicts — use the Vite plugin directly.

Remote agents failed: Overnight scaffold agents couldn't auth with GitHub. Local execution worked first try.

Session Log

2026-04-14 #3
BUILD-C Content + Tools Complete — Bulk converted 28 article/tool JSONs to MDX (wrote Python converter with MDX-safe HTML formatting). Built 4 category index pages (/category/financial-aid/ etc.). Polished 8 shared Svelte components (StepWizard, ButtonGroup, ResultCard, InputField, ProgressBar, MethodologyDisclosure, SourceCitation, CTAButton). Implemented all 10 interactive Svelte tool islands (EFC Calculator, Financial Aid Quiz, Scholarship Finder, ROI Calculator, Loan Repayment, Career Salary Explorer, Employer Tuition Checker, Time-to-Degree, GI Bill Calculator, Aid Letter Decoder). Wired tool components with client:visible hydration. 41 pages build in 4s. +31 files, 10,452 insertions in tool commit alone. 12 Plane tasks marked Done.
2026-04-14 #2
BUILD-C W1 + BUILD-P W1 — Design tokens migrated, full header/footer/layouts built, homepage + tools index polished, FAFSA article + EFC calculator converted to MDX, Content Layer routing working (9 pages). shadcn-svelte initialized, app shell with sidebar nav + dark mode + auth. CF Pages deployed. +86 files across 2 repos.
2026-04-14 #1
Scaffolds — Both repos created, pushed to GitHub. contentforge: Astro 5 + Svelte + Tailwind 4 (60 files). campaignforge-app: SvelteKit 2 + Drizzle (99 files). 30 Plane tasks created.
1 3-Repo Architecture
Each concern lives in its own repository. Shared config, independent deploys.
Repository Purpose Stack Deploys To Status
campaignforge-app CampaignForge ops platform (workflow UI, pipeline execution, dashboards) SvelteKit 2, Svelte 5, shadcn-svelte, Drizzle + Kysely, Postgres DigitalOcean via Coolify W1 Done
contentforge Content sites (degreesources.com + future verticals) Astro 5, Svelte 5 islands, MDX, Tailwind 4 Cloudflare Pages W1 Done • Deployed
campaign-forge Pipeline brain: skills, config, specs, vertical data, research Python scripts, YAML/JSON config, Claude skills Local / CLI Active
2 Revenue Flow
Ad spend → Content site → Tool engagement → Offer conversion → Revenue
1

Ad Click

Meta / Google / TikTok ad → user clicks → lands on content site tool page

2

Tool Engagement

User uses EFC Calculator / Quiz / Finder → genuine value delivered

3

CTA Click

User clicks "Explore Programs" → routed via offer URL with tracking params

4

Lead Submit

User fills form on partner portal → lead captured → Everflow attributes

5

Revenue

$35 CPL per qualified lead → Winners Vault updated → next campaign informed

3 Execution Phases
BUILD (Claude builds) + OPERATE (Operator executes) run simultaneously across 5 phases.

Phase 0

This Week

Spec review, social profiles, Meta Verified, entity resolution, pre-warming

22 tasks

Phase 1

Weeks 1-3

Tracking live, platform MVP, ad accounts, organic posting, campaign structures

35 tasks

Phase 2

Weeks 4-6

Full workflow UI, account warm-up, first live campaign, Winners Vault seeded

26 tasks

Phase 3

Weeks 7-9

Lead intelligence, email capture, social automation, competitive intel, platform health

28 tasks

Phase 4-5

Weeks 10+

Ad platform APIs, CAPI firing, retro automated, ping/post routing, multi-vertical

15+ tasks