Pixel art illustration of a robotic arm filming a smartphone video on a miniature bedroom set, with finished vertical video clips moving down a conveyor belt toward a shipping crate

Case study · CodeWords

CodeWords: the UGC engine case study

How CodeWords, a no-code AI agent builder, shipped 400+ videos in 10 days and 35M+ views, run mostly by Claude, with Hook picking which formats were worth building.

By Hook ResearchAugust 2026codewords.ai
400+Videos shipped in 10 days
35M+Views across the batch
70-80%Hands-off once it's running
6Tools wired together
$2KMinimum to actually test this
£20-30Cost per creator video

CodeWords lets non-technical teams build AI agents in plain English: “words in, working agents out.” Proving that at volume, across the logistics, onboarding, and support teams it sells to, meant shipping UGC fast. CodeWords published this pipeline itself, shared freely. Below is the fuller version, with Hook’s actual part called out: the research stage that decided what got made.

Real product data

Where Hook fits: the research stage

Before templatizing a format, Hook scanned competitor and creator accounts in the target niche and scored each video on real virality, not raw view count.

Views against followers

500K views on a 10K-follower account is a real signal. The same views on a 2M-follower account often isn’t.

Organic vs. boosted

Every candidate is checked against the Meta Ad Library, so a paid win doesn’t pass as an organic one.

The bar: don’t templatize off one outlier. Wait for more than one video independently outperforming in the same shape. Everything past this point, script generation, sourcing, scheduling, is CodeWords’ own system, included because it’s what turns a research signal into shipped video, not because it runs on Hook.

What Hook actually is: a workspace that watches the organic and paid video in a category, separates real virality from boosted spend, and surfaces the formats worth building around, the exact job it did in stage one here.

Run this same research stage on your own category.

Start free trialSee the workspace →

1 · Overview

The full system, six stages

Can an AI agent run most of a paid-UGC operation, with a human only making calls that need taste? CodeWords lands at roughly 70-80% hands-off, by design, section 10 covers the rest honestly.

The stack, one of six tools is Hook

ToolRoleRequired?
Hook (askhook.com)Research: finds and scores winning formatsYes
Claude + a CLAUDE.mdScript generation, orchestration, browser actionsYes
Notion (MCP-connected)Brief storageYes
FiverrCreator sourcingYes
Google DriveDeliverable storageYes
Buffer (MCP-connected)Scheduling and auto-publishYes
PostHog or equivalentAttribution: did this actually drive signupsRecommended
Meta / TikTok AdsBoosting winners once accounts are warmOptional
ElevenLabsVoiceover when a creator doesn't speak the target languageOptional, rarely needed

The six stages

The stack · top to bottom

01

Research a winning format

Hook
02

Generate script variants

Claude
03

Build the brief

Notion
04

Source and vet a creator

Fiverr
05

Receive, store, and QA

Drive
06

Schedule and publish

Buffer
1

Research. Hook scores real virality across the niche, re-run once per batch.

2

Script. Claude templatizes the winning video, one variant per industry. Section 4.

3

Brief. Claude builds the Notion page: mechanic, reference video, casting, scripts.

4

Source. Claude vets Fiverr creators for camera presence. Section 5.

5

QA. Claude stores deliveries in Drive, checks the QA gates. Two are hard gates.

6

Publish. Claude schedules to Buffer. Warm accounts first, see section 6.

Why it compounds

A winning script becomes the next research reference, so each cycle starts from a stronger baseline, and that rising bar is exactly what Hook is checking for.

The flywheel · clockwise

Compoundswinners becomethe next brief01Research02Script03Brief04Source05QA06Publish

Building your own version

  1. Connect Hook, Notion, and Buffer via MCP.
  2. Write a CLAUDE.md describing your product and ICP. Template in section 4.
  3. Budget enough to seed a few sub-accounts through their first batch. Section 9.
  4. Pick a format from Hook’s Discover feed and run stages 1-3 once before sourcing a creator.

2 · Setup

Tools, accounts, and setup

MCP wiring order

  1. Hook first. Add competitor and creator accounts, a manual pass the first time.
  2. Notion second. One page, sub-pages per format, is enough to start.
  3. Buffer last, it depends on social accounts already existing. See section 6.
  4. Claude drives Fiverr and Drive directly through your logged-in browser, no separate MCP needed.

Connecting Hook’s MCP

Nothing to install or mint. In Claude, Settings → Connectors → Add custom connector, and paste:

https://api.askhook.com/api/mcp

Same URL works in Cursor’s .cursor/mcp.json or any other MCP client, sign in to Hook when prompted on first connect.

Full walkthrough: askhook.com/mcp

CLAUDE.md: company context, once

A minimal starting version:

# CLAUDE.md

## Company
[Your company] builds [what it does] for [who it's for].

## Product
[One paragraph: what the product actually does, in plain language.
This is what Claude will describe in every script.]

## ICP / industries we sell into
[List the industries, use cases, or personas you want script variants for.
This becomes the variation axis in stage 2.]

## Claims we can make
[What you can honestly say the product does, and anything you must NOT
claim. This is the single most important section, see section 4.]

Cost floor

Budget at least $2,000 for a real first pass, enough for 3 sub-accounts through their first batches. Ad spend is separate and optional. Full ladder in section 9.

Minimum viable version

  • Hook's lowest tier: browse the feed manually, skip MCP automation
  • Skip Fiverr for a first test, film a variant in-house
  • Skip Buffer's paid tier while running one account
  • Skip ElevenLabs, paid analytics, and all ad spend

3 · Brief template

The Notion brief template (“Format Pack”)

One page per format, same skeleton every time.

1. Page icon

Matches the niche or format, not a generic icon.

2. Title

“Creator name: Format name,” e.g. “Edvard: No-Talk Build.”

3. Product intro

Same one sentence, every page.

[Your Company] (yourproduct.com) builds [what it does] from [the core mechanic]. No code.

4. Casting callout

Who they're playing, what NOT to film.

[Persona]. You're [doing what]. Film [where], not [what breaks the fiction].

5. Format mechanic

One bolded paragraph, the beats, any hard constraint.

6. Continuity line

Script ID range, only when extending a batch.

7. Reference video

Embedded with its real numbers, not just linked.

8. Demo scene/URL

The exact screen a creator should have open.

9. Dialogue explainer

The fixed beat, spelled out, for dialogue formats.

10. The packs

One line per pack of 10 scripts, named by the arc it spans.

4 · Prompts

The actual prompts

Most of the work is context Claude already has, the prompt itself is short.

Prompt 1: templatize a winning format

Templatize this format. Break it into its fixed beats (the parts that
never change) and its variable slots (the parts that change per
industry/use case/persona). Then generate <N> script variants, one per
<industry|use case|persona> from the list in CLAUDE.md, keeping every
fixed beat identical and only changing the variable slots.

Create a Notion page for this using the Format Pack template, and put
the scripts in packs of 10.

This works with almost no extra detail because Claude already has the reference video, the CLAUDE.md, and the template. Thin any one of those, and the output turns generic.

Worked example

Reference: a DM-reveal hook (low number typed, client reveals a bigger budget, creator counters higher), then a build sequence, then a payoff.

Templatize the Budget Reveal format from this video. The DM hook and
the numbers in it stay identical across every variant, don't touch
that part. Vary only the build sequence: swap the industry the client
is in and what gets built for them, using the industries in CLAUDE.md.
Generate 10 variants, one pack, Aesthetics through Gym.

Output: 10 scripts, identical DM dialogue, a different industry’s build sequence each time.

The variation axes

  • Industry, CodeWords’ main axis
  • Use case, multiple jobs in one industry
  • Persona, different buyer types
  • Feature, a different capability per variant

The failure mode to watch for

A lazy variant: same pain point, only the industry noun swapped. Spot-check a few from different ends of the batch. Second check, every batch: does every claim still hold up against CLAUDE.md’s claims list?

5 · Creators

Finding, vetting, and QA-ing creators

Video-thumbnail-style pixel art of a creator mid-sentence talking to camera, styled as a paused UGC video

A creator, mid-hook

Claude drives a logged-in Fiverr session: searches the UGC-video category, filters to price, screens for camera presence, not spoken fluency. Baseline: £20-30 per video.

Language usually isn’t a filter, non-native speakers who act well are the cheapest option. If a format needs spoken voice, shoot silent b-roll and layer an ElevenLabs voiceover in instead of dropping the creator.

What disqualifies a creator

  • Inconsistent presentation across their own samples, a reseller-account tell
  • Poor audio or lighting, even at the right price
  • No natural camera reaction, some formats need it even without dialogue

First order, then repeat. One script before a bulk pack. Once someone delivers, keep reordering, most volume comes from a small roster.

Late or low-quality. Late gets a grace window. Low quality: soft failures get a revision request, hard-gate failures get rejected outright.

QA gates

Two are hard gates, fail either and the video is rejected regardless of everything else.

DimensionWhat it’s checkingHard gate?
Brand fitOn-persona, on-tone, no punching downNo
Hook qualityDoes the first ~3 seconds actually stop a scrollNo
Message accuracyYour product is shown genuinely working, and every claim made is one you can back upYes
AuthenticityReads like a real person, not a read script; any on-screen demo is real, not fakedNo
Disclosure complianceAny required disclosure/partnership tag is present, per platform and jurisdiction rulesYes

6 · Accounts

Account warm-up

On the specifics

CodeWords keeps its exact cadence and provider private. This is the general pattern, a defensible default, not a leaked SOP.

A new account posting immediately, especially alongside others sharing signals (device, network), reads like a bot farm. Patience before the first post is the fix.

The sequence

Day 1 · through · Day 8+

Day 1 Create, don't post

Days 1-3 Passive activity only

Days 4-5 First low-stakes posts

Days 6-7 Ramp toward normal cadence

Day 8+ Full cadence

Mechanics

  • A distinct phone number per account (eSIM or similar)
  • A distinct email alias, ideally on your own domain
  • A real-feeling profile: genuine photo, matching bio

The real failure mode is a temporary checkpoint, not a permanent ban, budget for it as routine.

7 · Audio

Adding soundtracks programmatically

Silent b-roll and assembled clips need music muxed in without a human touching an editor.

1. Detect if a clip needs music

ffmpeg -i clip.mp4 -af volumedetect -f null - 2>&1 | grep mean_volume

-90dB or lower is effectively silent.

2. The rule

A track must be at least as long as the clip. It plays once, trimmed, never looped, a loop point reads as cheap immediately.

3. The mux command

ffmpeg -i clip.mp4 -ss <track_offset> -i track.mp3 \
  -map 0:v:0 -map 1:a:0 \
  -c:v copy -c:a aac \
  -shortest \
  out.mp4

-shortest enforces the trim.

The copyright tradeoff

Commercial tracks risk a platform muting the post’s audio. Build the library from royalty-free or explicitly licensed sources.

8 · Scheduling

Scheduling and publishing: Buffer

Buffer schedules and reports real per-post metrics. Every rule below cost a broken queue before it became a rule.

Video-thumbnail-style pixel art of hands demonstrating a product on a desk, styled as a paused UGC video

A finished, scheduled video

createPost(input:{
  channelId, schedulingType:"automatic", mode:"customScheduled", dueAt:"<ISO-8601 UTC>",
  text, metadata:{ instagram:{ type:"reel", shouldShareToFeed:true } },
  assets:[{ video:{ url } }]
})

Six rules that break a queue silently

  1. schedulingType is fixed at creation. Always "automatic", wrong ones get recreated, not patched.
  2. The media URL must stay alive past publish time, not just scheduling time.
  3. HEVC/H.265 files (iPhone footage) need transcoding, or ask for H.264 directly.
  4. Rate limits trip mid-batch around 50 rapid calls.
  5. editPost replaces the whole post, resend everything, even for a schedule-only edit.
  6. Delivered clips are often silent, check, don’t assume.
  • New accounts: 1/day during warm-up
  • Established: 2-3/day
  • Stagger the exact minute, per account

Claude runs the scheduling mechanics entirely. Deciding which video to boost with paid spend stays a person’s call.

9 · Economics

Economics

CodeWords’ real spend isn’t published here. Numbers below are illustrative, plug in your own.

The cost ladder

ApproachRelative costWhy it’s cheaper
A fully outsourced, one-off videoSource, brief, and pay for a single finished editHighestNo repeat relationship, no reuse, full creative and editing cost every time
A bulk order from a proven creator on your rosterReordering from someone who already deliversLowerPer-unit discount at volume, no re-sourcing cost, creator already knows your brand
Template-and-swapCreator ships raw footage, you assemble programmaticallyLower stillYou're paying for footage, not a finished edit; the “editing” is a repeatable script
AI-assisted recastingOne real shoot, multiplied across personasLowestThe marginal cost of a new “creator” approaches a generation job, not a new booking

What actually drives cost

  • Boosting, not creator cost, is usually the largest recurring line
  • Account launch cost is fixed and one-time per account
  • Production, not posting, is the real bottleneck

10 · The honest part

What this system will not do for you

A mature run is roughly 70-80% hands-off. Every batch still needs a manual pass on QA (“does this feel authentic” stays human) and occasional platform repair work, automation reduces both, it doesn’t erase them.

Three decisions that stay human

Which format is worth scaling

Don't move until more than one video independently outperforms in the same shape.

Brand and tone on a brief

Claude's brief is technically correct every time. Whether it's on-brand is a smaller, real check.

What to boost

Needs live performance signal and budget judgment, not something handed to a scheduler.

The system removes the repetitive 80%. The 20% that stays manual is where a wrong automated call is expensive, and where judgment doesn’t reduce to a rule.

FAQ

Common questions

What is Hook?

Hook is a creative-intelligence workspace for short-form video: it watches the organic and paid video in a category, separates real virality from boosted spend, and surfaces the formats actually worth building around.

Did Hook build this UGC pipeline?

No. CodeWords built and runs the pipeline, Notion tracker, Fiverr sourcing, account warm-up, Buffer scheduling, all of it. Hook's part is stage one only: research, deciding which formats were actually worth templatizing.

How does Hook tell a real winner from a boosted one?

Two checks. First, views against the account's own follower count, since 500K views on a 10K-follower account means something different than the same views on a 2M-follower account. Second, every candidate gets checked against the Meta Ad Library so a paid post doesn't pass as organic.

How do I connect Hook's MCP to Claude or Cursor?

Add https://api.askhook.com/api/mcp as a custom connector in Claude, or the same URL in Cursor's .cursor/mcp.json. No key to mint, sign in to Hook when prompted on first connect.

Do I need Hook to run a pipeline like this?

No, the research stage can be done manually by browsing what's winning in a niche. Hook exists to make that stage faster and more reliable, not to gate the rest of the pipeline.

CodeWords built the 80% that’s the same every time. Hook is the part that decides what that 80% should be pointed at.

A creative-intelligence coworker in your Slack

Stop pasting TikTok links into ChatGPT.

You're doing the watching for a model that can't see video. Hook already watched your category, checked what was boosted, and drafts the next one in your Slack.