Complete Spec Bundle — 5 Documents, 3 Repos, Building
CampaignForge operations platform. SvelteKit + Svelte 5 + shadcn. 12 comparative decisions. Agent SDK pipeline execution. Full database schema.
PlatformContent site architecture. Astro 5 + Svelte 5 islands. Zero JS articles, ~5KB tools. 10 tool patterns. 5-6 week migration plan.
ContentForgePlatform trust and account health. Meta HiVA scoring. Google EDU restrictions. 4-week warm-up playbooks. Weekly intel monitoring.
TrustMaster execution timeline. 5 phases, ~150 tasks. BUILD + OPERATE parallel tracks. GATE milestones. Week-by-week timeline.
ExecutionDaily operations guide. 3-4 hrs/day rhythm. Campaign lifecycle. Solo to team-of-3 scaling. Incident response playbooks.
RunbookSvelteKit 2 + Svelte 5 + Tailwind 4 + Drizzle ORM + shadcn-svelte
Astro 5 + Svelte islands + MDX + Tailwind 4 • 42 pages, 10 tools, Lighthouse 95+
Agents process early rules more heavily: Adding HARD RULES blocks at the top of each skill file ensures non-negotiable constraints are in the "hot zone" of agent attention. Rules buried mid-document get diluted by accumulated context.
Decision trees > prose guidance: Converting "consider X when Y" into "IF X THEN Y, OTHERWISE Z" produces more reliable agent behavior. Agents follow explicit branches; they interpret flexible guidance flexibly (which means inconsistently).
Anti-patterns are as powerful as patterns: Showing agents what NOT to produce (with concrete BAD examples and WHY explanations) creates hard boundaries. Without anti-patterns, agents gravitate toward "safe" generic output that passes no rules but also creates no value.
Subagent permissions are session-scoped, not inherited: Adding permissions to settings.local.json or project settings doesn't reliably propagate to subagents in don't-ask mode. Python/Bash fallback for file writes is the workaround. Some agents succeed, some don't — the behavior is inconsistent and needs investigation.
Sweet spot is 3-4 parallel agents: Beyond 4, prompt quality drops and merge review gets sloppy. The real constraint is file isolation, not compute. With 3 repos, the ceiling is ~5 agents if file boundaries are clean.
Feature branches prevent same-repo conflicts: Agents C and D in campaignforge-app worked on separate branches (feat/cost-session-manager, feat/pipeline-orchestrator), then merged sequentially. Zero conflicts.
Independent agents can converge on identical fixes: Both the a11y and Lighthouse agents independently identified and fixed the same CSS cascade issue (@layer base wrapping, :where() scoping) with byte-identical diffs. Merge was clean because Git detected identical changes.
CAPI Worker type errors are IDE-only: Cloudflare Workers have their own tsconfig with @cloudflare/workers-types. The IDE picks up the root tsconfig which doesn't know about Request/Response/fetch globals. Not real errors.
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 ~, 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.
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.
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.
| 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 | Deploy-Ready |
| 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 |
Meta / Google / TikTok ad → user clicks → lands on content site tool page
User uses EFC Calculator / Quiz / Finder → genuine value delivered
User clicks "Explore Programs" → routed via offer URL with tracking params
User fills form on partner portal → lead captured → Everflow attributes
$35 CPL per qualified lead → Winners Vault updated → next campaign informed
This Week
Spec review, social profiles, Meta Verified, entity resolution, pre-warming
22 tasksWeeks 1-3
Tracking live, platform MVP, ad accounts, organic posting, campaign structures
35 tasksWeeks 4-6
Full workflow UI, account warm-up, first live campaign, Winners Vault seeded
26 tasksWeeks 7-9
Lead intelligence, email capture, social automation, competitive intel, platform health
28 tasksWeeks 10+
Ad platform APIs, CAPI firing, retro automated, ping/post routing, multi-vertical
15+ tasks