Library · Four projects, start to finish

Build-Along: Content Factory, a content pipeline in 7 days

Builder30 minUpdated: October 2026
104 of 105 in the library

Time: about 30 min reading + 7 days of practice


The gist

A content marketer who writes everything by hand runs into the ceiling of their own hours. That isn't a business. It's self-employment with a cap.

Content Factory is a different approach. You don't write posts by hand. You build a pipeline with 9 stations: research → copywriting → editing → image → voice → video → schedule → publish → analytics. Each station is a Claude prompt or an API call. The input is the client's brief. The output is 30 posts + 4 videos + 10 voiceovers a month (volumes from the example; adjust them to your client).

Over 7 days you assemble this pipeline and offer it to your first client. The amounts in this lesson (for example, $1,500 a month) are examples for doing the math, not an income forecast and not a price recommendation: whether you find a client and how much they pay depends on your niche, your market and your work.

🎨 Picture this: the difference between a shoemaker working alone and a shoe factory. The shoemaker makes one pair a day, so the ceiling is known. The factory doesn't stamp out shoes in a second either, but on the line the leather is being cut at the same time the soles are being stitched at the same time the boxes are being packed. One hour of the factory = a week of the shoemaker. And most important: the factory keeps running while the owner sleeps.


🎯 End state on Day 7

What you have after a week:

  • ✓ A working pipeline (Claude prompts + ElevenLabs + Midjourney/Recraft + Buffer)
  • ✓ A brand-voice extraction process (works for any client)
  • ✓ A 4-week content calendar for your first client
  • ✓ A proposal (retainer) sent to your first client, terms discussed
  • ✓ 10 posts already scheduled and published
  • ✓ A PostHog analytics dashboard for weekly reports
  • ✓ Invoice + retainer agreement templates
  • ✓ A tool stack with clear costs (see the "Stack" section)

Not the end state on Day 7: an agency, a team, a brand. That's a Month 6 goal (see the Scale plan).


Key concepts

  • Content Factory: a pipeline where every station is automated or semi-automated, and the human only approves and curates
  • Brand voice extraction: the process of pulling a client's unique tone out of 20+ of their posts, so the AI content doesn't sound like AI
  • Retainer model: a monthly subscription instead of per-post pricing. It gives you a predictable volume of work and revenue
  • Approval flow: a Notion/Airtable board where the client approves content before it's published (protection against angry clients)
  • Variable cost per client: API costs that grow with the number of clients (estimate them on your own data)
  • Fixed cost: tools whose cost doesn't grow with the number of clients
  • Batch generation: generating 30 posts in one cron job instead of 30 separate requests

Stack (as of October 2026)

Current prices and versions: What's current.

Tool Price What for Substitute if money is tight
Claude Pro $20/month (as of October 2026) Writing pipeline Claude Free + API (pay per token)
ElevenLabs Starter $6/month (as of October 2026) Voice generation ElevenLabs free plan (no commercial rights), other TTS services
Midjourney paid subscription, plans on its site Premium images Recraft Free or the built-in image generation in ChatGPT and Gemini
Recraft Free tier Logos, vectors, brand assets —
Buffer Essentials priced per channel, see the Buffer pricing page Multi-platform scheduling Buffer free plan
PostHog Free $0 (free monthly allowance) Analytics, weekly reports Google Analytics 4 (free)
TOTAL add up your own plans Start with the minimum and add tools as you need them

Variable per client: the cost of API calls for batch generation and possible extra charges for voiceover; estimate on real data.

🎨 Picture this: a factory's fixed costs are like renting the garage. Each client adds variable costs (electricity, materials). How much is left after that depends on your price and the number of clients: run the numbers on your own figures.


DAY 1: Find your first client + content audit

Goal for the day: 3 discovery calls scheduled, and you know your niche.

Hours 1-2: Niche list (20 niches × business types)

Open Claude and write:

Type this into the chat
Help me put together a list of 20 niches where small businesses (1-50 employees)
spend noticeable money on social media or content marketing. For each niche:
- Typical monthly content budget
- Which platforms are critical (Instagram / LinkedIn / Twitter / Facebook)
- Pain point (what's hurting them with content right now)
- How long it takes them to decide on a subscription (sales cycle)

Target audience: a freelance content marketer looking for a first client
for an AI content pipeline.

You'll get a table. Cut right away:

  • ❌ Small B2C (cafes, hair salons, small shops): usually no budget for regular content
  • ❌ Enterprise (1,000+ employees): a long sales cycle of 3-6 months
  • ✅ B2B SaaS with 10-50 people: they have a budget, content hurts, a 2-week cycle
  • ✅ Real estate agents with a team: dependent on Instagram, ready to pay
  • ✅ Premium coaches / consultants ($5K+ programs): need a LinkedIn pipeline
  • ✅ E-commerce at $50K-500K/month: needs output, has a budget
  • ✅ Premium fitness (gyms at $100+/month, online programs): high content velocity

Pick 3 niches to start. Don't spread yourself thin.

Hours 3-4: DM 10 potential clients

Not email. DMs. Write wherever the niche's audience lives:

  • B2B SaaS founders → LinkedIn DM
  • Real estate → Instagram DM
  • Coaches → LinkedIn or Twitter DM

Message template (adapt it to the niche):

Code
Hi [name]. I've been following your content for the last couple of weeks.
[A specific detail: a post that caught my eye, a video].

One observation: you post 2-3 times a week. Your competitors
[name 1, name 2] post 5-7 times. That gives them an edge in reach.

I build AI content pipelines for [niche]. Specifically:
30 posts + 4 videos + 10 voice clips a month. The cost depends on the volume; we can talk it over on a call.

If you're interested: a 30-minute call this week.
If not, just ignore this and I won't bother you again.

Anti-patterns:

  • ❌ Preambles and pleasantries: unnecessary
  • ❌ "This will change your business!": coaching-speak
  • ❌ Generic copy-paste: they'll spot it in a second
  • ❌ A long story about yourself: nobody cares

Do this instead:

  • ✓ A specific detail (shows you actually looked)
  • ✓ A specific observation (the gap you solve)
  • ✓ A specific offer (what, the price, what happens next)
  • ✓ The "not interested, just ignore this" option (lowers the pressure)

Hour 5: Schedule discovery calls

If almost nobody replies, the problem is the copy or the niche. Change it and send another 10. You'll only learn your own reply rates through practice.

Today's dashboard (Notion / Google Sheet):

Type this into the chat
| Niche | Contact | DM sent | Response | Call scheduled | Notes |
| B2B SaaS | Sergei (Founder X) | 2026-10-12 | "Tell me more" | 2026-10-14 14:00 | LinkedIn is the pain |
| Real estate | Maria (Austin) | 2026-10-12 | "Price?" | — | Needs an IG focus |
| ...

DAY 2: Propose to your first client + audit their content

Goal for the day: a proposal sent to the client, or at least 1 good proposal on the table.

Hours 1-2: 30-min discovery call (script)

The call isn't a presentation. The call is a diagnosis. Structure:

0-5 min: small talk, context. "Where are you based? What does the team do?"

5-20 min: diagnostic questions (write down the answers):

Type this into the chat
1. How many posts a month do you publish now? On which platforms?
2. Who writes the content today? (founder, intern, agency)
3. How much time does it take each week?
4. What isn't working: quantity or quality?
5. What's your content budget right now?
6. What result would make the next 3 months a success?
7. Who are the competitors in this market? Whose content do you like?
8. Do you already have brand guidelines / a tone of voice document?
9. Who will approve content before it's published? One person or a committee?
   (Critical: a committee = pain)
10. When do you want to start?

20-28 min: your proposal (if the signals are positive).

28-30 min: next steps. "I'll email you the package within 24 hours. Your decision by Friday."

Hour 3: Propose a package (template)

Email template (adapt it):

Type this into the chat
Sergei,

Thanks for the call. Here's a summary of what I heard:

Pain points:
- You publish 2-3 posts a week on LinkedIn; it should be 5-7
- The founder spends 6-8 hours a week writing
- There's no brand voice document, so every time starts from scratch

What I'm proposing (Standard package, [price] a month):

- 30 LinkedIn posts a month (a mix of long-form and short-form)
- 4 short videos (30-60 sec, with voiceover)
- 10 voice clips for Stories / podcasts
- Brand voice extraction process (one-time, week 1)
- Weekly approval flow in Notion
- Monthly performance report

Premium package ([price] a month) adds:
- +30 Twitter/X posts
- +4 long-form articles (1,500-2,000 words)
- Custom imagery (Midjourney premium)

What I don't do:
- I don't reply to comments (that's your team)
- I don't choose the strategy on my own (we set it together at the kick-off)
- I don't do complex designs in Photoshop (Recraft / Canva templates)

Schedule:
- Week 1: brand voice extraction + content calendar
- Week 2: first 10 posts for approval
- Week 3+: rolling pipeline

If this works for you, I'll send the invoice for the first month. We start within 48 hours.

If you need time to think, no problem. I'll wait until Friday.

Hours 4-5: Audit their last 30 posts

While the client is thinking, you do a content audit (it's part of your preparation even if the client says "no"):

bash
# Create a folder for the audit
mkdir -p ~/clients/sergei-saas/audit
cd ~/clients/sergei-saas/audit

Open Claude and drop in 20-30 of their posts (copy-paste from LinkedIn/Instagram):

Type this into the chat
Do a content audit of these 30 posts. Report structure:

1. Voice analysis:
   - Tone (formal/casual/witty/professional)
   - Sentence length (short/medium/long mix)
   - First-person vs third-person
   - Use of stories vs facts

2. Topics distribution:
   - Which topics repeat
   - Which topics are NOT covered but should be (gaps)

3. Engagement patterns:
   - Which posts got the most interactions
   - What they have in common (format, topic, length)

4. Quality issues:
   - Inconsistent voice (if any)
   - Topics that don't work
   - Missed opportunities

5. Recommended next 30 posts:
   - 60%: what works (keep doing it)
   - 30%: gaps to fill
   - 10%: experiments

Save this audit: it will come in handy for the proposal call follow-up.


DAY 3: Brand voice extraction

Goal for the day: a brand-voice.md document + a 4-week content calendar.

Hours 1-2: Write brand-voice.md (from 20+ posts)

This is the key artifact of the whole factory. Without it, AI content sounds like AI. With it, it sounds like the client.

bash
mkdir -p ~/clients/sergei-saas/brand
touch ~/clients/sergei-saas/brand/brand-voice.md

Prompt for Claude:

Type this into the chat
Read these 20 posts from the client [paste here].

Create a brand-voice.md document with this structure:

## Identity
- Who is speaking (founder / company / team)?
- What role (expert / observer / friend / authority)?
- What is NOT their voice (vetoes)?

## Tone
- Primary tone (3 adjectives)
- Secondary tone (when a variant is needed)

## Sentence patterns
- Average length
- Use of questions
- Use of lists vs flowing text
- Paragraph length

## Vocabulary
- Words they use often (give 20+ examples)
- Words they NEVER use (corporate jargon to avoid)
- Industry terms they keep vs explain

## Structure templates
- How they typically open posts (5 examples)
- How they close posts (5 examples)
- Hook patterns

## Do / Don't with examples

## Stories vs facts ratio

## Personal disclosure level
(how much personal stuff they share: a lot / a moderate amount / strictly professional)

Format: Markdown, ready to use as prompt context.

You'll get 3-5 pages. Save them. This gets reused for every post.

Hours 3-4: Content calendar (4 weeks)

Type this into the chat
Based on the audit (topics that work) and the brand voice (how they sound),
create a 4-week content calendar.

Breakdown by type:
- Week 1: 8 long-form (1,500-2,500 chars) + 0 short + 0 video
  (Week 1 is for learning the voice; we're checking the style)
- Weeks 2-4: 6 long + 4 short + 1 video per week

Topics:
- 60% educational (how to do X in their niche)
- 25% perspective (opinions, contrarian takes)
- 15% behind-the-scenes / personal

For each post:
| Day | Type | Topic | Hook | Notes |
| Mon | long | How we chose our SaaS pricing | "How we picked a price without a roadmap" | Story-driven |
| Tue | short | Hot take: free plans kill growth | "I was wrong about freemium" | Contrarian |
| ...

30 posts = 4 weeks × 7-8 days.

Export it to Notion / Airtable. This becomes the approval board.

Hour 5: Keywords + competitors

Type this into the chat
Analyze the client's competitors [list of 5 names]:
- Which topics they cover that our client does NOT
- Which keywords appear in their top 10 posts
- Where their audience asks questions (LinkedIn comments / Twitter replies)

Output: 10 keyword opportunities + 5 content angles
our client can claim.

DAY 4: Build the content pipeline (technical)

Goal for the day: Claude prompts + a batch generation script.

Hours 1-3: Claude prompt templates

You create 9 prompts (one per content type). Save each one in the prompts/ folder:

bash
mkdir -p ~/clients/sergei-saas/prompts

Template 1: Long-form story post

Type this into the chat
# prompts/long-form-story.md

You are a copywriter for [client name]. Read brand-voice.md below and write strictly in its style.

<brand-voice>
[paste brand-voice.md here]
</brand-voice>

Task: write a long-form post (1,500-2,500 characters) on the topic:
**[TOPIC]**

Hook: [HOOK]

Structure:
- Hook (1-2 sentences that grab attention in the feed)
- Setup story (3-4 sentences of context)
- Turn / insight (where the story changes direction)
- Lesson (what the reader takes away)
- CTA (a question or an invitation to comment)

IMPORTANT:
- Do NOT start with "I" or "We" (low engagement)
- Do NOT use an em dash in place of a comma
- Do NOT end with the question "What do you think?" (cliché)
- Use specific numbers where you can
- Follow brand-voice.md strictly

Output: only the text of the post, no preamble.

Template 2: Long-form contrarian

Similar structure, but the hook = "I was wrong about X" / "Everyone says Y, but actually Z."

Templates 3-5: education how-to, listicle, framework explanation.

Templates 6-7-8 (short-form): hot take (200-300 chars), one-liner, thread starter.

Template 9 (caption):

Type this into the chat
# prompts/caption.md

You are a copywriter. Based on [POST_CONTENT], write an Instagram caption.

Structure:
- Line 1: hook (cinematic, intrigue)
- Lines 2-4: 3 short lines that develop the idea
- Line 5: a CTA or a question
- 5-10 hashtags relevant to the niche

Length: 600-1,000 chars total.
Style: brand-voice.md.

Output: only the caption, no preamble.

Hours 4-5: Batch generation script

Local bash + curl calls to the Claude API:

bash
# scripts/batch-generate.sh
#!/usr/bin/env bash
set -euo pipefail

CLIENT_DIR="${1:-$HOME/clients/sergei-saas}"
CALENDAR="$CLIENT_DIR/calendar.csv"
OUTPUT_DIR="$CLIENT_DIR/output/$(date +%Y-%m-%d)"
BRAND_VOICE="$CLIENT_DIR/brand/brand-voice.md"
PROMPTS_DIR="$CLIENT_DIR/prompts"

mkdir -p "$OUTPUT_DIR"

# Read calendar.csv (Day,Type,Topic,Hook,Notes)
tail -n +2 "$CALENDAR" | while IFS=',' read -r day type topic hook notes; do
  prompt_file="$PROMPTS_DIR/${type}.md"
  output_file="$OUTPUT_DIR/${day}-${type}.md"

  if [ ! -f "$prompt_file" ]; then
    echo "Skip $day — no prompt for type $type"
    continue
  fi

  echo "Generating $day ($type): $topic"

  # Build the prompt; jq below takes care of safe escaping
  full_prompt=$(cat "$prompt_file" \
    | sed "s|\[TOPIC\]|$topic|g" \
    | sed "s|\[HOOK\]|$hook|g")

  # Insert the brand-voice content
  brand_content=$(cat "$BRAND_VOICE")
  full_prompt="${full_prompt//\[paste brand-voice.md here\]/$brand_content}"

  # Claude API call
  response=$(curl -s https://api.anthropic.com/v1/messages \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "content-type: application/json" \
    -d "$(jq -n \
      --arg model "claude-sonnet-5-5" \
      --arg prompt "$full_prompt" \
      '{
        model: $model,
        max_tokens: 2000,
        messages: [{role: "user", content: $prompt}]
      }')")

  echo "$response" | jq -r '[.content[] | select(.type == "text") | .text] | join("")' > "$output_file"

  # Rate limiting (gentle)
  sleep 2
done

echo "✓ Generated $(ls "$OUTPUT_DIR" | wc -l) posts in $OUTPUT_DIR"

To run it:

bash
export ANTHROPIC_API_KEY=sk-ant-...
chmod +x scripts/batch-generate.sh
./scripts/batch-generate.sh

Cost check: 30 posts × ~2,000 input tokens × ~800 output tokens on Sonnet 5.5 (as of October 2026: $2 and $10 per 1M tokens) comes to about 60,000 input and 24,000 output tokens, which is less than a dollar per batch. That's a month of output for one client. Current prices: What's current.

🎨 Picture this: the script is an automatic machine on the factory floor. Before, a copywriter sat down and wrote 30 posts at 30 minutes each = 15 hours. Now it's running the script plus time for review. Estimate the time you save on your own data.


DAY 5: Image + voice automation

Goal for the day: the image and voice pipelines are ready.

Hours 1-2: Image generation

Two approaches; choose by budget:

Approach A: Midjourney (paid subscription)

Create style references for the client:

Type this into the chat
In the Midjourney bot:
/imagine [client niche example] --sref [random_seed]

For example, for B2B SaaS:
/imagine clean minimal office tech startup hero illustration --sref 12345 --ar 16:9

Lock in the sref ID (for example --sref 12345). Now all images for this client use the same sref → visual consistency.

Prompt template for each post:

Code
[scene description] --sref 12345 --ar 1:1 --style raw

Midjourney parameters change between versions: check the service's documentation for the current default version and parameters.

Approach B: Recraft Free + the built-in image generation in ChatGPT or Gemini

Recraft is especially good for:

  • Logo overlays (putting the client's logo on a photo)
  • Vector illustrations (when you need a flat style)
  • Brand templates (one base, many variations)

For photorealistic images, the built-in generation in ChatGPT (gpt-image-2) or Gemini (Nano Banana) works well. DALL-E 2 and 3 were shut off in the OpenAI API on May 12, 2026.

Hours 3-4: Voice generation (ElevenLabs)

ElevenLabs Starter is $6 a month (as of October 2026) and comes with a commercial license; the free plan doesn't include commercial rights. How much voiceover you get depends on the plan: check the limits on the pricing page.

bash
# scripts/voice-batch.sh
#!/usr/bin/env bash
set -euo pipefail

CLIENT_DIR="${1:-$HOME/clients/sergei-saas}"
SCRIPTS_DIR="$CLIENT_DIR/output/$(date +%Y-%m-%d)/voice-scripts"
OUTPUT_DIR="$CLIENT_DIR/output/$(date +%Y-%m-%d)/voice"
VOICE_ID="${ELEVENLABS_VOICE_ID:-21m00Tcm4TlvDq8ikWAM}"  # example voice: put in your own ID from the voice library

mkdir -p "$OUTPUT_DIR"

for script_file in "$SCRIPTS_DIR"/*.txt; do
  name=$(basename "$script_file" .txt)
  output_file="$OUTPUT_DIR/${name}.mp3"

  text_content=$(cat "$script_file")

  curl -s -X POST "https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}" \
    -H "xi-api-key: $ELEVENLABS_API_KEY" \
    -H "Content-Type: application/json" \
    -d "$(jq -n \
      --arg text "$text_content" \
      '{
        text: $text,
        model_id: "eleven_multilingual_v2",  # check the ElevenLabs docs for the current model name
        voice_settings: {
          stability: 0.5,
          similarity_boost: 0.75
        }
      }')" \
    --output "$output_file"

  echo "✓ Generated: $output_file"
  sleep 1
done

Optimization: ElevenLabs updates its voice model names regularly: pick the current model for the client's language from the documentation and check the per-character price on the pricing page.

Hour 5: Assembly process

All three outputs (text + image + voice) get assembled into publishable assets:

  • LinkedIn post: text + 1 image (1200×627)
  • Instagram post: caption + 1-3 images (1080×1080)
  • Instagram Reel: voice (15-30 sec) + an image slideshow or video
  • Twitter thread: 5-7 short posts + 1 lead image

Templates in Canva or Figma (free tier):

  • Create 5 templates per client (once)
  • Variables: title + image + accent color
  • Bulk export through the Canva API (paid) or by hand (15 min for 10 posts)

🎨 Picture this: assembly = packaging at the factory. Every product (post) goes through the same process: text → image → template → finished asset. This is not creativity, it's process. The creativity happened in the copywriting (Day 4).


DAY 6: Schedule + publish

Goal for the day: the first 10 posts in the queue + an approval flow with the client.

Hours 1-2: Buffer / Hypefury setup

Buffer Essentials (paid plan, priced per channel):

  • Connect the client's LinkedIn / Instagram / Twitter accounts (this requires their password; best practice: they log in to Buffer on your dashboard over a screen share and never send passwords in a DM)
  • Create a posting schedule (for example LinkedIn Mon/Wed/Fri 09:00 EST)
  • Bulk upload via CSV (Buffer supports it): each row = one post

Hypefury (an alternative):

  • Better for Twitter-heavy clients
  • Auto-retweet, evergreen recycling
  • A thread composer (good for long-form Twitter)

Hours 3-4: Schedule the first 10 posts

bash
# Create a CSV for Buffer bulk upload
# clients/sergei-saas/buffer-upload-week1.csv

date,time,platform,text,image_path
2026-10-12,09:00,linkedin,"<post 1 text>",/path/to/image1.png
2026-10-13,09:00,linkedin,"<post 2 text>",/path/to/image2.png
...

Buffer Bulk Upload through the web UI: upload the CSV → preview → confirm.

Hour 5: Client review process (Notion / Airtable)

Notion board template:

Type this into the chat
| Status | Date | Type | Topic | Draft | Image | Voice | Client OK | Published |
| 📝 Draft | 2026-10-12 | Long | Pricing story | [link] | [link] | — | ⏳ | — |
| ✅ Approved | 2026-10-13 | Short | Hot take | [link] | [link] | — | ✓ | 2026-10-13 |
| ❌ Revise | 2026-10-14 | Video | Frameworks | [link] | [link] | [audio] | ✗ "rework the tone" | — |

Rule: the client sees content 48 hours before it's published. Any earlier and the client forgets. Any later and there's no time for edits.

Approval SLA in the contract:

  • Default: silence = approved after 48 hours
  • 2 rounds of revisions included in the package price (a 3rd round costs extra)
  • A critical change request is possible at any time (but not a free reroll)

Anti-pattern: endless revisions = a dead margin. Protect yourself with the contract.


DAY 7: Analytics + scale plan

Goal for the day: dashboard live + invoice sent + a plan for months 2-12.

Hours 1-2: PostHog setup

PostHog Free (a free monthly event allowance; for one client it's usually enough).

bash
# 1. Sign up at posthog.com → create a project
# 2. Get the Project API Key

# 3. Tracking script (for the client's landing page, if they have one)
<script>
  !function(t,e){var o,n,p,r;e.__SV||...
  posthog.init('phc_xxx', {api_host: 'https://us.i.posthog.com'})
</script>

What we track:

  • Engagement: likes, comments, shares per post (manual import from LinkedIn / IG, or through the API if the client gave you access)
  • Reach: impressions, profile visits
  • Conversion: clicks to the landing page → demo bookings (for SaaS) → trials

PostHog dashboard:

  • Posts per week (tracks production velocity)
  • Average engagement rate per post type
  • Top 5 performing posts (last 30 days)
  • Comparison: before the factory vs after (baseline = week 0)

Hours 3-4: Weekly report template for the client

The numbers in the template are placeholders: fill in only the client's real data.

Type this into the chat
# Weekly Report — [Client Name] — Week of YYYY-MM-DD

## Production
- 7 posts published (target: 7)
- 1 video published (target: 1)
- 2 voice clips for Stories (target: 2)

## Performance vs baseline (week 0)
- Total impressions: 24,800 (+34% vs baseline)
- Total engagements: 1,240 (+18%)
- Engagement rate: 5.0% (industry benchmark: [source])
- Follower growth: +47 (baseline +12)

## Top 3 posts this week
1. "Pricing story" — 8,400 impressions, 480 likes, 23 comments
2. "Hot take: freemium" — 6,200 impressions, 290 likes, 41 comments
3. "Framework: SaaS hiring" — 5,100 impressions, 220 likes, 18 comments

## What worked
- Story-driven long-form continues to outperform listicle 2:1
- Contrarian takes get 3x comment rate

## What we're testing next week
- Carousel posts (image series) — hypothesis: +25% saves
- Voice memo style for shorter posts

## Action items
- None required from your side
- Approval needed by Fri for the Week 3 calendar (in Notion)

Format: 1 page, scannable, no fluff. Style: short, to the point, in numbers.

Hour 5: Invoice + retainer agreement

Invoice template (Stripe / Wave / FreshBooks):

Type this into the chat
INVOICE #2026-001

Bill to: [Client Company]
From: [Your Name / Company]
Date: 2026-10-12
Due: 2026-10-19 (net 7)

Description: Content Factory — Monthly Retainer
Period: 2026-10-12 to 2026-11-11

Amount: [agreed amount] USD

Payment methods:
- Stripe (credit card): [link]
- Wire transfer: [details]
- Crypto (USDC): [wallet]

Retainer agreement (1 page, not legal warfare):

Type this into the chat
RETAINER AGREEMENT

Parties: [Your Company] and [Client Company]
Effective: 2026-10-12
Term: month-to-month, 30-day notice to terminate

Deliverables per month:
- 30 social media posts (LinkedIn primary)
- 4 short videos (30-60 sec)
- 10 voice clips
- Weekly performance reports
- Brand voice maintenance

Fees: [amount]/month, net 7 days

Approval process:
- Content delivered to Notion board 48h before scheduled publish
- Client review window: 48 hours
- Silence = approved
- 2 rounds of revisions included; 3rd round extra

What's NOT included:
- Community management (comments, DMs)
- Strategy consulting beyond monthly review call
- Paid ads creative (separate engagement)

Termination: either party, 30-day written notice
Late payment: 5% fee after 14 days past due

[Signatures + dates]

Pro tip: sign through Dropbox Sign (formerly HelloSign) / DocuSign / or even a PDF + email confirmation. For a small retainer you often don't need a lawyer at the start, but check the requirements in your state or country (this isn't legal advice).


Cost economics

The numbers in the examples are placeholders. Run the economics on your own data and current prices: What's current.

Parameter How to calculate
Fixed monthly costs (tools) the sum of the subscriptions from the Stack section
Variable per client (API calls) tokens × model price + possible extra charges for voiceover
Revenue per client the amount you agreed on with the client
Margin per client revenue minus variable cost minus a share of fixed costs and your time

Variable cost breakdown (per client/month):

  • Claude API: 30 posts, less than a dollar per batch (see the Cost check on Day 4)
  • ElevenLabs overage: if you need more voiceover than your plan includes
  • Midjourney generations = covered by the fixed subscription
  • Buffer slots = covered by the fixed subscription
  • PostHog = covered by the free tier

Scale and time: every client adds load on approvals, revisions and reports. Factor your own hours into the math: they, not tokens, decide how many clients you can really handle. There are no forecasts for client count or revenue here: they depend on your niche, your market and your work.

What eats your margin if you're not paying attention:

  • Custom artwork per client (if you agreed to do Midjourney premium instead of templates)
  • Endless revisions (protect yourself with the contract)
  • Time on community management (a separate pricing tier, not free)
  • Approval delays (you're the one who suffers, not the client)

Common pitfalls

Day 1: Picking a client with no budget (small B2C)

Symptom: "That's expensive, can you do it for a fraction of that?"

Fix: don't haggle without changing the scope. Say: "I understand. At that budget I can't deliver the full volume. I can offer a smaller package or show you how to do it yourself." Clients with a lowball budget are often the most demanding and request the most revisions.

Day 3: Skipping brand-voice extraction → AI content that's obviously AI-generated

Symptom: the client writes "this sounds like ChatGPT," the audience complains about "generic content."

Fix: brand-voice.md is not optional. Without it, the pipeline is a boilerplate generator. At least 20 of their posts + 2 hours of analysis in Claude. Without that, you're building on sand.

Day 5: Using the same prompts for all clients (homogeneous)

Symptom: a month later you have 3 clients and their posts sound the same. The audience notices. You've been found out.

Fix: each client = a separate folder with a separate brand-voice.md and separate prompt templates. Folders in ~/clients/{slug}/. Never mix them.

Day 7: No client approval flow → angry clients

Symptom: the client sees a post for the first time after it's published, the post is "not their style," and there's a blowup.

Fix: a Notion board + a 48h SLA is non-negotiable. Even if the client says "I trust you, just publish," keep the board anyway. When something goes wrong (and it will), you have an audit trail.

Bonus pitfall: one client = almost all your revenue

Symptom: the client leaves → you're at zero.

Fix: try to make sure no single client brings in most of your revenue. Several clients = diversification. 1 client = a job for one person (not a business).


Scale plan (Week 2 → Month 12)

These are rough stages, not a forecast: the timing and results depend on your niche, your market and your work.

Weeks 2-4: Land the next clients

  • Use your first client's case (with their permission!): show the week 1-2 metrics in your outbound
  • The same 3 niches: don't spread yourself thin
  • Goal: a steady flow of conversations with potential clients (set your own numbers)

Month 2: A helper for approval coordination

  • A virtual assistant runs the Notion board
  • Answers routine client questions
  • Uploads content to Buffer
  • You free up hours each week → more time for clients

Month 3: How you split your time

  • At this stage you're more of a producer than a writer
  • Most of your time goes to sales (new clients)
  • Some goes to quality control (spot-checking the assistant's output)
  • The rest goes to strategy calls with existing clients

Month 6: A formal AI agency

  • Form a legal entity, such as an LLC (if it makes sense where you live; talk to an accountant or a lawyer)
  • Brand: an agency name, a website, case studies
  • 1-2 junior copywriters (contractors) for quality review
  • Pricing tiers: Starter / Pro / Enterprise; set the amounts yourself based on your own economics

Month 12: Productize or sell

Two paths:

A. Productize: you turn the pipeline into SaaS (clients serve themselves with your templates + AI). A volume game.

B. Continue as an agency: more clients, you hire writers, you stay the CEO/strategist.

🎨 Picture this: Day 7 is starting up the first machine at the factory. Month 12 is either an assembly-line factory with 30 workers, or you sold the blueprints and others opened the factory. Both outcomes are a success. What matters is that within 12 months you've left "I write everything by hand" mode behind.


What you have at the end of Day 7

A concrete list of artifacts:

  • ✓ ~/clients/{slug}/brand/brand-voice.md: a reusable process for any client
  • ✓ ~/clients/{slug}/prompts/*.md: 9 prompt templates (long/short/caption × variants)
  • ✓ ~/clients/{slug}/scripts/batch-generate.sh: the content pipeline
  • ✓ ~/clients/{slug}/scripts/voice-batch.sh: voice automation
  • ✓ A Notion approval board template (duplicate it for each new client)
  • ✓ A weekly report template
  • ✓ Invoice + retainer agreement templates
  • ✓ First client: proposal sent, terms discussed (you handle the payment and the contract yourselves)
  • ✓ Process documentation (what you figured out this week, written down)

The main thing: you have a business machine you can apply to client 2, 3, 10. It's not one-off work, it's a template.


Tools and resources

  • Buffer: a multi-platform scheduler, has a free plan
  • Hypefury: a Twitter / X focused scheduler, thread composer; see its site for terms
  • ElevenLabs: voice generation; the commercial license starts with Starter ($6 a month as of October 2026)
  • PostHog: product analytics, a free tier with a monthly allowance
  • Recraft: vector graphics + logos, has a free tier
  • Midjourney: premium images, paid subscription
  • Notion: approval board, free for personal use
  • Airtable: an alternative approval board with a calendar view
  • Stripe: invoicing + recurring payments; fees depend on the country (in the US, 2.9% + 30¢ as of October 2026)
  • Dropbox Sign (formerly HelloSign): contract signing

Key takeaways

If you write everything by hand, the ceiling is your hours. Content Factory changes the model: you build a pipeline and offer the client a subscription instead of per-post payment. The difference isn't in the price, it's in the business model: regular work and a predictable volume.

Brand voice extraction is the key difference between AI content that "sounds like AI" and content the audience can't tell apart. Analyzing 20+ of the client's posts in Claude = a repeatable process for as long as you work with that client.

The stack is inexpensive, but that's not the main saving. The main thing is your time: without the factory, every post is written by hand; with the factory, most of your time goes to review and approval. That lets you scale without your hours growing in a straight line; by how much, you'll find out on your own data.

The pitfalls are predictable: underpriced clients, skipping brand voice, shared prompts, no approval flow, depending on a single client. All 5 kill the business at scale. Protect yourself with processes and a contract, not with "trust."


Cross-references


Next lesson

→ Build-Along: a voice agent for business

The mark stays in this browser only and is never sent anywhere. My progress