← Back to all guides
Build With Tacha
Preview · No signup needed
Guide 07

The Visual Content Pipeline

By Build With Tacha

Add-on for the AI Agency Blueprint. How your agents attach brand images to social posts, preview them on your dashboard, and publish to LinkedIn — without you touching Canva.

Prerequisite: AI Agency Blueprint (Guide 06)

What's inside

Table of Contents
  1. Part 1 — The image pipeline architecture
  2. Part 2 — Brand-style image generation
  3. Part 3 — The approval dashboard
  4. Part 4 — LinkedIn auto-posting
  5. Part 5 — Asset library & retention

Read the opening

BEFORE YOU START

What This Module Adds The Blueprint gave your agents the ability to draft content, save it to Google Drive, and surface it in Maya’s morning brief. Your dashboard can approve and send emails. Nia creates visual assets in Canva. What’s missing: your agents have no way to attach images to dashboard content. Your dashboard has no Content tab for reviewing social posts. There’s no image storage on your Worker. And “Approve” on a social post doesn’t actually post it anywhere. This module fills all four gaps. Prerequisites You should have completed at least Phase 2 of the Blueprint (Ch. 7.1). That means: — Maya and Marcus are running on schedule — Your Cloudflare Worker is deployed — Your D1 database has all 9 tables (Blueprint Ch. 2.7) — Your command center dashboard is functional — Zara and Nia are configured (Phase 3), even if you’re still iterating on their prompts How this module is organized This is a build guide, not a concept guide. Each section adds one layer to your system, and every section ends with a way to verify it worked. Don’t skip ahead — each step depends on the one before it.

DO THI S NEXT

Confirm Maya, Marcus, Zara, and Nia are all configured before turning the page. Visual Content Pipeline · Add-On 03 natacha.softhireapp.com/resources Build map at a glance This is the full sequence. Each row shows what you’ll have built when you finish it.

SECTION WHAT YOUʼRE BUILDING TIME

01 Your brand photo library 30 min 02 Image storage on your Worker (KV) 20 min 03 Uploading images to your Worker 15 min 04 Teaching Nia to select and attach images 20 min 05 Building the Content tab on your dashboard 45 min 06 Wiring LinkedIn so “Approve” actually posts 60 min 07 Testing the full pipeline end-to-end 20 min Total build time ~3h 30min Pro tip: Block 4 hours on a Saturday for sections 1–5. Block another 90 minutes the next day for sections 6–7 (LinkedIn OAuth is the longest single step). Don’t try to do it in evening sessions across the week — the cognitive context-switching costs more than the build itself. “Each section ends with a way to verify it worked. If a section doesn’t verify, don’t move on.” Visual Content Pipeline · Add-On 04 natacha.softhireapp.com/resources SECTI ON 01 Building Your Brand Photo Library Why this matters Right now, Nia creates visual assets in Canva — carousel slides, quote graphics, branded templates. But your social media posts also need photos of real people, real workspaces, and real moments that represent your brand. Stock photos won’t cut it. AI-generated images are getting easier to spot. Your brand photos are the visual foundation everything else sits on. What you need You need 15–25 high-quality photos that represent your brand. These break into categories: 3–5 PHOTOS Solo portraits You, your team, or professional models that match your brand identity. For thought leadership posts, testimonials, and “about the founder” content. 3–5 PHOTOS Team / group shots Conference rooms, collaborative work, team meetings. For culture posts, hiring announcements, and partnership content. 3–5 PHOTOS Workspace / environment Your office, home office, or the environments your audience works in. These ground your content in reality. 2–3 PHOTOS Video call / remote work Screen shares, Zoom-style setups. Critical if your audience is remote-first. 3–5 PHOTOS Avatar / headshot variants Tighter crops or stylized versions for consistent agent branding on your dashboard. Visual Content Pipeline · Add-On 05 natacha.softhireapp.com/resources Getting your photos ready If you already have brand photos: collect them in one folder on your desktop. Name the folder source-images. Inside it, create a subfolder called Demo Avatars for any headshot or avatar-style images. If you don’t have brand photos yet: here’s the exact prompt to give Claude to generate descriptions you can hand to an AI image generator or a photographer.

CLAUDE PROMPT — GENERATE BRAND PHOTO DESCRI PTI ONS

I need descriptions for 15 brand photos for my business. Here's my brand: Business: [YOUR BUSINESS NAME] Industry: [YOUR INDUSTRY] Brand colors: [YOUR PRIMARY AND SECONDARY COLORS] Target audience: [WHO YOU SERVE] Brand personality: [3-5 ADJECTIVES — e.g., professional, warm, innovative] Generate 15 photo descriptions I can use with an AI image generator or as a shot list for a photographer. Break them into:

  1. A one-line description of the scene
  2. The mood and lighting (warm, corporate, natural, etc.)
  3. What brand colors should appear (clothing, background, props)
  4. The intended use (LinkedIn post, dashboard avatar, etc.)
  5. Keep descriptions specific enough that two different photographers would produce similar shots. Naming convention Your photos need consistent names that Nia can reference. Use this pattern:

NAMI NG PATTERN

solo-female-01.png solo-male-01.png team-01.png video-call-01.png avatar-natacha.png The naming pattern matters because Nia’s prompt (which we’ll update in Section 4) will reference these names when selecting images for posts. Visual Content Pipeline · Add-On 06 natacha.softhireapp.com/resources SECTI ON 02 Adding Image Storage To Your Worker What the Blueprint gave you In Chapter 2.2, you set up your Cloudflare Worker with a D1 database. Your wrangler.toml file has a [[d1_databases]] section that connects your Worker to your database. That’s where your agents store messages, documents, triggers, and everything else. But images are different. They’re binary files — not text rows. Cloudflare has a separate storage system for this called KV (Key-Value). Think of D1 as your filing cabinet (organized, searchable, relational) and KV as your photo wall (fast to grab from, stores anything, no complex queries needed). Step 1 — Create a KV namespace Open Claude and paste this prompt:

CLAUDE PROMPT — CREATE KV NAMESPACE

I need to create a Cloudflare KV namespace for storing brand images. My Cloudflare account is already set up from the Blueprint (Ch. 2.2). Run this command using the Cloudflare MCP: Create a KV namespace called "softhire-content-assets" (replace "softhire" with my actual project name from wrangler.toml) After creating it, give me the namespace ID — I need it for the next step. Claude will use the Cloudflare MCP to create the namespace and return an ID. It looks like 784d036dc54f4bb6bf4a374be2f94639. Copy this — you’ll need it in 30 seconds. Visual Content Pipeline · Add-On 07 natacha.softhireapp.com/resources Step 2 — Connect KV to your Worker Open your wrangler.toml file (this is the file you edited in Blueprint Ch. 2.2). Add this section at the bottom, after your [[d1_databases]] block:

WRANGLER.TOML — ADD AT THE BOTTOM

[[kv_namespaces]] binding = "CONTENT_ASSETS" id = "YOUR_NAMESPACE_ID_HERE" Replace YOUR_NAMESPACE_ID_HERE with the ID from Step 1. What this does: it tells your Worker “when my code says CONTENT_ASSETS, connect to this specific storage bucket.” It’s the same pattern as the DB binding for your D1 database — just for images instead of data rows. Step 3 — Add the image-serving route Your Worker needs two new abilities: serving images when your dashboard requests them, and accepting image uploads. Open your src/index.ts file. Put this route before your existing handlers, after your CORS setup:

— end of preview —
The rest is in the full guide.

You've just read the opening. The remaining parts cover the practical lookups, walkthroughs, and edge-case troubleshooting that make this guide daily-useful. The full edition is available below.

Get the full guide The Visual Content Pipeline
$97 Buy now — $97 →