How it works

ContentSphere

Content system. Each client’s newsletters, LinkedIn posts and web copy, planned from their brand and drafted from prompts written for them. The client approves every piece.

Live · internalVisit the site ↗

Fig.A content studio for Formwork’s clients: newsletters, LinkedIn posts and web copy, planned from each brand and approved by the client.

Architecture

  1. APeople· 3Writers · admins · Client portal · Claude
    • Writers · adminsNext.js 15UI

      UI · Next.js 15

      Formwork’s content team: brand, plans, pieces, approvals and the calendar, one client at a time.

      Talks to

      • → Content pieces (edit)
    • Client portalper clientUI

      UI · per client

      Clients read their pieces, comment and approve.

      Talks to

      • → Review (approve)
    • ClaudeMCP clientEXTERNAL

      EXTERNAL · MCP client

      Claude, connected with a scoped key, working the same content through MCP.

      Talks to

      • → MCP server (MCP · key)
  2. BApp· 10Brand strategy · Personas · Transcripts · Content plans · MCP server · Prompt matrix · Generation · Content pieces · Review · Calendar
    • Brand strategyversionedSERVICE

      SERVICE · versioned

      Each client’s positioning, pillars and voice, with every version kept.

      Talks to

      • → Personas
      • → Content plans (informs)
    • Personasaudiences · frameworksSERVICE

      SERVICE · audiences · frameworks

      Who the client is talking to, and the messaging frameworks for each audience.

      Talks to

      • ← Brand strategy
    • Transcriptsclient callsSERVICE

      SERVICE · client calls

      Calls with the client, kept as source material for topics.

      Talks to

      • → Content plans (topics)
    • Content plansmonthlySERVICE

      SERVICE · monthly

      The month’s topics per channel, drawn from the strategy and the calls.

      Talks to

      • ← Brand strategy (informs)
      • ← Transcripts (topics)
      • → Content pieces (pieces)
      • → C0 (deliverables)
    • MCP server112 tools · scoped keysAI

      AI · 112 tools · scoped keys

      A fresh server per request, with only the tool groups the key’s scopes allow. Keys are stored hashed.

      Talks to

      • ← Claude (MCP · key)
      • ← Six specialists (own tools)
    • Prompt matrixclient × content typeSERVICE

      SERVICE · client × content type

      The instructions for every pairing of client and kind of content.

      Talks to

      • → Generation (instructions)
    • Generationdraft · rewriteAI

      AI · draft · rewrite

      Drafts and rewrites pieces from the matrix, with the client’s context.

      Talks to

      • ← Prompt matrix (instructions)
      • → Content pieces (drafts)
      • → Claude · OpenAI (generate)
    • Content piecesdrafts · versionsSERVICE

      SERVICE · drafts · versions

      One piece per channel, with versioned drafts, comments and a status.

      Talks to

      • ← Content plans (pieces)
      • ← Generation (drafts)
      • ← Writers · admins (edit)
      • → Review
      • → PostgreSQL (SQL)
    • Reviewteam → clientSERVICE

      SERVICE · team → client

      Internal review, then the client’s. A piece can’t enter review without real draft copy.

      Talks to

      • ← Content pieces
      • ← Client portal (approve)
      • → Calendar (approved)
      • → Slack (notify)
    • CalendarscheduledSERVICE

      SERVICE · scheduled

      Approved pieces, on the dates they go out.

      Talks to

      • ← Review (approved)
  3. CAgents· 2Orchestrator · Six specialists
    • OrchestratorClaude Agent SDKAI

      AI · Claude Agent SDK

      The in-app agent. It hands work to the right specialist.

      Talks to

      • → Six specialists (delegates)
      • → Claude · OpenAI
    • Six specialistsstrategy → campaignsAI

      AI · strategy → campaigns

      Specialists from strategy and writing to prompts and campaigns, each limited to the tools its job needs, plus one tool to hand work to another.

      Talks to

      • ← Orchestrator (delegates)
      • → MCP server (own tools)
  4. DData· 1PostgreSQL
    • PostgreSQLPrismaSTORE

      STORE · Prisma

      Clients, strategy, plans, pieces, versions and comments.

      Talks to

      • ← Content pieces (SQL)
  5. EOutside· 3Claude · OpenAI · C0 · Slack
    • Claude · OpenAImodelsEXTERNAL

      EXTERNAL · models

      The models behind drafting and the agents.

      Talks to

      • ← Generation (generate)
      • ← Orchestrator
    • C0deliverables APIEXTERNAL

      EXTERNAL · deliverables API

      Formwork’s operations system, where each piece is also a tracked deliverable.

      Talks to

      • ← Content plans (deliverables)
    • SlacknotificationsEXTERNAL

      EXTERNAL · notifications

      Tells the team when work needs them.

      Talks to

      • ← Review (notify)
Connections · 18

→ request · ⇢ webhook, queue or schedule

  1. Brand strategy → Personas
  2. Brand strategy → Content plans · informs
  3. Transcripts → Content plans · topics
  4. Content plans → Content pieces · pieces
  5. Prompt matrix → Generation · instructions
  6. Generation → Content pieces · drafts
  7. Generation → Claude · OpenAI · generate
  8. Writers · admins → Content pieces · edit
  9. Content pieces → Review
  10. Client portal → Review · approve
  11. Review → Calendar · approved
  12. Review ⇢ Slack · notify
  13. Content plans → C0 · deliverables
  14. Claude → MCP server · MCP · key
  15. Orchestrator → Six specialists · delegates
  16. Six specialists → MCP server · own tools
  17. Orchestrator → Claude · OpenAI
  18. Content pieces → PostgreSQL · SQL

Inside: specialist agents and the prompt matrix

The in-app agent isn’t one model with every tool. An orchestrator hands work to specialists that each see only their own tools, and every draft starts from instructions written for that client, that kind of content and that reader.

  1. AAsk· 2Agent chat · Claude
    • Agent chatin the appUI

      UI · in the app

      Where the team asks for plans, drafts and campaigns in plain words.

      Talks to

      • → Orchestrator
    • ClaudeMCP clientEXTERNAL

      EXTERNAL · MCP client

      Claude outside the app, using the same tools through a scoped key.

      Talks to

      • → Tool subsets (MCP)
  2. BLead· 2Orchestrator · Agent prompts
    • Orchestratorstreams · tool roundsAI

      AI · streams · tool rounds

      Streams its answer, runs tool calls in rounds up to a limit, and delegates to one of six specialists.

      Talks to

      • ← Agent chat
      • ← Agent prompts (instructions)
      • → Strategist (delegates)
      • → Creator
      • → Campaign manager
      • → Prompt engineer
    • Agent promptseditableSTORE

      STORE · editable

      Each agent’s instructions live in the database, so they can be tuned without a deploy, with built-in defaults if the database is unavailable.

      Talks to

      • → Orchestrator (instructions)
  3. CSpecialists· 5Strategist · Creator · Campaign manager · Prompt engineer · Tool subsets
    • Strategistbrand · audiencesAI

      AI · brand · audiences

      Brand strategy, audiences, messaging frameworks, pillars and client context.

      Talks to

      • ← Orchestrator (delegates)
    • Creatorpieces · draftsAI

      AI · pieces · drafts

      Writes and manages pieces: LinkedIn posts, newsletters, case studies, articles.

      Talks to

      • ← Orchestrator
      • → Client prompts (reads)
    • Campaign managerplans · calendar · shootsAI

      AI · plans · calendar · shoots

      Content plans, the editorial calendar, photo and video shoots, assets, and updates from construction projects.

      Talks to

      • ← Orchestrator
    • Prompt engineerprompts · personasAI

      AI · prompts · personas

      Designs the prompt matrix and personas, and tunes generation quality.

      Talks to

      • ← Orchestrator
      • → Tool subsets
    • Tool subsetsper specialistSERVICE

      SERVICE · per specialist

      Each specialist gets its own list of tools plus one to hand work to another; nothing else is offered to it.

      Talks to

      • ← Claude (MCP)
      • ← Prompt engineer
  4. DMatrix· 3Client prompts · Default matrix · Draft
    • Client promptsclient · type · personaSTORE

      STORE · client · type · persona

      Instructions written for one client and one kind of content, optionally for one persona. These win when they exist.

      Talks to

      • ← Creator (reads)
      • → Draft (first choice)
    • Default matrixfallbackSTORE

      STORE · fallback

      The house prompts, used when a client has none of its own.

      Talks to

      • → Draft (fallback)
    • Drafttraced to its promptAI

      AI · traced to its prompt

      The generated draft records which prompt produced it, so a bad draft can be traced to its instructions.

      Talks to

      • ← Client prompts (first choice)
      • ← Default matrix (fallback)
Connections · 11

→ request · ⇢ webhook, queue or schedule

  1. Agent chat → Orchestrator
  2. Agent prompts → Orchestrator · instructions
  3. Orchestrator → Strategist · delegates
  4. Orchestrator → Creator
  5. Orchestrator → Campaign manager
  6. Orchestrator → Prompt engineer
  7. Claude → Tool subsets · MCP
  8. Prompt engineer → Tool subsets
  9. Creator → Client prompts · reads
  10. Client prompts → Draft · first choice
  11. Default matrix → Draft · fallback

Two flows

A topic becomes a published piece

Walk through it and each step lights the parts it runs through in the drawings above.

By count

specialist agents
6
rounds of review: team, then client
2
actions Claude can take in it
112

Notes

  1. N.1Prompts are a matrix of client by kind of content. A newsletter for one contractor and a LinkedIn post for another start from different instructions.
  2. N.2Six specialist agents, from strategy to campaigns. Each gets only the tools its job needs, plus one to hand work to another.

Built by

I design, architect and build software products like this one.

naram@hey.com·See the rest of my work

More systems