Build and run an SEO content engine: audit current state, identify gaps, build keyword architecture, generate content calendar, draft content.
npx gooseworks install --all # then, in Claude Code, Cursor, or Codex: /gooseworks use the seo-content-engine skill
Build a compounding SEO content engine for a client: audit → gap analysis → keyword architecture → content calendar → content drafting → publishing pipeline.
Skill: seo-content-audit (orchestrates site-content-catalog + seo-domain-analyzer + brand-voice-extractor)
Run the full SEO audit to understand:
Skill: aeo-visibility
Test AI answer engine visibility for key queries.
Output: Complete picture of where the client stands in search.
From the audit, identify:
Competitive gaps: Keywords competitors rank for that the client doesn't Funnel gaps: Missing content at TOFU, MOFU, or BOFU stages Topic gaps: Industry/vertical content that doesn't exist Comparison gaps: Missing "vs" pages and "alternatives" pages
Prioritize by: search volume x commercial intent x competitive difficulty.
Organize target keywords by funnel stage:
Map each keyword cluster to a content type (blog post, landing page, guide, comparison page).
Build a prioritized content calendar:
Skill: content-asset-creator (for landing pages, reports, one-pagers) Method: AI-assisted drafting with brand voice matching (from brand-voice-extractor output)
For each content piece:
Design the linking structure:
Render a punchy ~12s vertical (9:16) music-only direct-response OFFER ad as a 4-beat kinetic-typography film — HEADLINE slam → real PRODUCT drop → CLAIM/proof → CTA pill — from one config of copy slots, a real product photo, a brand palette, fonts, bpm, and beat split. DETERMINISTIC + FREE (a bundled Remotion project; springs + interpolate, no AI-gen for visuals). Backgrounds are engine gradient divs off the palette, props are inline SVG, the ONLY composited bitmap is the REAL product photo (objectFit:contain, never stretched), and ALL headline/claim/CTA/URL/wordmark text is typeset in the engine — never AI-rendered (the format's credibility guard). A driver binds the config to Remotion input props, renders the 9:16 master, and derives a 1:1 center-crop with ffmpeg. Two gating checks run before render (claim verbs must match the product's physical format; the claim beat needs an edge-entry mechanism prop). Use for the motion-graphics-offer-ad format.
Assemble a myth-vs-fact kinetic-typography explainer video ad (≈29.5s, 9:16) from N myth/fact pairs + hook / turn / punch copy + palette + a brand end-card PNG + a VO track — a hook, 3 red-strike MYTH cards that flip to teal-check FACT cards (per-line strikethrough that crosses EVERY wrapped line), a "what actually works" turn, an optional proof reveal, a punch line, and a static end card. DETERMINISTIC assembly with ZERO AI-gen visuals — HTML hyperframes rendered frame-exact via Playwright (`window.renderAt(t)`, animation a pure function of beat-local time), Whisper beat-snap to VO word onsets, concat at a uniform fps, karaoke `.ass` captions burned last (suppressed on the proof + end-card beats), and a VO + optional music mix (music −20 dB, `amix normalize=0`, tail fade). FREE (Python + Playwright + ffmpeg); the recipe supplies the copy / palette / end-card / VO and gates the paid VO / music / Whisper calls to their own capabilities. Use for the myth-vs-fact format.
Assemble a viral iOS "AirDrop" notification-carousel video ad (≈6–8s, 9:16) from a brand line plus 6–16 real product photos — a native AirDrop share-sheet card ("Brand would like to share a ___ · Decline / Accept") springs up and its preview window CYCLES through the products, landing on a range/lineup payoff with an Accept tap; a chime + soft per-swap ticks track the swaps. DETERMINISTIC assembly — an HTML card (real DOM text) rendered to PNG via headless Chrome, chroma-keyed, its magenta window refilled per-product in PIL, then animated + audio-synthed with FFmpeg. FREE (no paid model calls); the recipe supplies the brand line, product images, and payoff and gates the only optional paid step (a hero shot when the brand has NO usable photo → create-image-fal). Use for the airdrop-notification-carousel format.