module 12 folder structure

Agency pattern

System Text-to-Speech Ready
Slide: 0:00 / 0:00
Slide 1 of 0Interactive Deck

Full Lesson Reference

If you work across multiple clients, the agency pattern is the default. Each client gets its own isolated world - folder, CLAUDE.md, MCP connections, database, and GitHub structure. This lesson is the full setup.

Why isolation matters

  • Data isolation - one client's data never appears in another client's session
  • Brand isolation - client A's voice doesn't leak into client B's work
  • Auth isolation - each client's platform logins are separate
  • Context isolation - no accidentally referencing another client's numbers
  • Token efficiency - only load MCPs + skills relevant to THIS client

Strong isolation = fewer mistakes. The 30-second overhead of switching folders is worth hours of not cleaning up cross-contamination.

Folder structure

Claude Code/

├── CLAUDE.md ← agency-level rules ├── _shared/ ← templates, brand assets, team docs │ ├── templates/ │ └── team-brand-guides/ ├── client-acme/ │ ├── CLAUDE.md ← Acme-specific rules │ ├── .env ← Acme's API keys │ ├── .mcp.json ← Acme's MCPs │ ├── brief.md ← Acme's ongoing brief │ ├── reports/ │ ├── campaigns/ │ └── data/ ├── client-brightside/ │ └── (same structure) ├── client-nova/ │ └── (same structure) └── internal/ ← agency's own projects ├── team-ops/ ├── sales/ └── wins-showcase/

📷 Upload image here: l02-agency-folder-structure.png Terminal showing the agency folder structure via tree command

The CLAUDE.md hierarchy

Global (~/.claude/CLAUDE.md)

Your identity, locale, work style, safety. Covered in Module 02.

Agency CLAUDE.md (Claude Code/CLAUDE.md)

Rules that apply across every client

Agency-level rules

Deliverables

  • Reports always use [template name] template
  • Data sources must be traceable to warehouse or MCP pull
  • Weekly reports Friday AEST, MBR first Monday of month

Client folder structure Every client folder has: CLAUDE.md, .env, .mcp.json, brief.md, reports/, campaigns/, data/

Safety

  • Never cross-reference data between clients
  • Always double-check client name in outputs

Branding

  • Never use our agency logo on client deliverables
  • Never use client logo on our internal materials Client CLAUDE.md

Everything specific to one client - brand, channels, goals, reporting preferences. Covered in Module 02 Lesson 3.

MCP setup per client

Each client's .mcp.json lists their specific platforms + accounts. Typical ecom client:

{ "mcpServers": { "google-ads": { "customerId": "123-456-7890" }, "meta-ads": { "adAccountId": "act_1234567890" }, "klaviyo": { "account": "client-acme-prod" }, "ga4": { "propertyId": "GA4-XXXXX" }, "shopify": { "store": "client-acme.myshopify.com" } } }

Open client-acme/ folder, run Claude, only Acme's MCPs activate. Open client-brightside/ and those MCPs swap out for Brightside's.

Database per client

If you're running Supabase databases per client (for ad data, historical performance, etc.):

  • Your personal memory layer = 1 Supabase project (covered in Module 04)
  • Each client = optionally 1 separate Supabase project for their operational data

Client Supabase credentials live in the client's .env. The project CLAUDE.md says "for data queries, use client-specific Supabase at [URL], not the personal memory layer".

Naming conventions

Consistent naming prevents confusion

  • Client folders: client-[slug] (e.g. client-acme, client-brightside)
  • Internal projects: internal/[project]
  • Shared assets: _shared/ (underscore prefix sorts first)
  • Reports inside a client: reports/YYYY-MM-type.html (e.g. 2026-04-weekly.html)

Onboarding a new client

When a new client joins

Create a new client folder for [client-name]. Use our standard template - CLAUDE.md, .env, .mcp.json, brief.md, and subfolders for reports/, campaigns/, data/. Ask me for the details needed to fill in CLAUDE.md and the MCP configuration.

Claude creates the folder + asks clarifying questions. Typical questions:

  • Client name + website
  • Channels they run on + account IDs
  • Primary metrics
  • Brand colours + font
  • Reporting cadence
  • Current goals

10 minutes from "new client signed" to "ready to work".

Offboarding a client

When a client relationship ends

Archive client-[name]. Move the folder from working location to _archive/. Mark the project record in memory as archived. Don't delete anything.

Everything stays searchable. If they come back in 6 months, everything is retrievable.

Power-user tips

  • Tab colour per client in your terminal - prevents typing into the wrong session
  • Name terminal tabs by client - visible indicator of which session is which
  • Shared templates in _shared/ - reusable assets that evolve across clients
  • Client-specific skills live in the client folder - client-acme/.claude/skills/ keeps Acme-only skills out of the global 16K budget
  • Back up client data separately - each client folder syncs to Dropbox/Drive separately so client X's sync issues don't affect client Y

Action items

☐ If you're an agency/freelancer - audit your folder structure against this pattern

☐ Create _shared/ folder for reusable templates

☐ Confirm each client has their own .env + .mcp.json (data isolation)

☐ Use consistent naming (client-slug, YYYY-MM-type, etc.)

☐ Build a client onboarding skill that creates the standard folder structure

Next lesson: In-house + channel patterns.

Exercises

  1. Review the concepts covered in this lesson: Agency pattern.
  2. Write down your key takeaway from this lesson.
  3. Practice running any commands or prompts mentioned above inside your terminal.