anfloy.AcademyBook a call

Internal Ops · 02 · Ops workflows & documentsLesson 2 of 4

The document factory

75 min working time · Weeks 7-8

By the end of this lesson you can
  • Generate proposals, SOWs & reports from templates + data
  • Keep every document on-brand automatically

Templates + live data + your brand

The target: typing /proposal acme produces a finished, on-brand document in minutes. Every recurring document your company produces - proposals, SOWs, QBR decks, monthly client reports - is the same operation: a template, filled with live data, styled to your brand. Once those three ingredients live in the brain as files, the document takes minutes instead of an afternoon. And the law of the track applies with full force here: the second time you assemble the same kind of document, that assembly becomes a skill.

  • templates/proposal.md and templates/sow.md - the structure and standard language, with clear placeholders.
  • templates/brand.md - your brand tokens as text: colors, fonts, logo path, layout rules. Claude reads it when rendering.
  • templates/invoice.html and templates/deck.html - HTML shells for anything that needs to look designed.
  • The data comes from the brain itself: clients/<name>/ for the relationship history, company/pricing.md for the numbers.

Notice there is no document tool in that list. The factory is files in, files out - which is why it composes with everything else you have built.

The proposal skill

Here is the canonical document skill. Two details matter: it takes the client as an argument, and it is manual-only - a proposal carries your prices and your scope, so a human always decides when one gets made.

.claude/skills/proposal/SKILL.md
---
name: proposal
description: Generate a proposal/SOW for a client from the
  template, the client folder, and current pricing.
argument-hint: "[client folder name, e.g. acme]"
arguments: [client]
disable-model-invocation: true
allowed-tools: Read, Write, Grep, Glob, Bash(python *)
---

Current clients: !`ls clients/`

# Generate proposal for $client

1. Read clients/$client/CLAUDE.md and the latest files in
   clients/$client/meetings/ for scope, goals, and timeline.
2. Read company/pricing.md for current rates. Never invent
   or discount prices - if scope does not map cleanly to a
   line item, stop and ask.
3. Fill templates/sow.md. Keep the standard legal language
   verbatim - do not paraphrase it.
4. Render to HTML with scripts/render.py using
   templates/brand.md tokens. Output to
   clients/$client/deliverables/<date>_proposal.html.
5. Print a checklist of what a human must verify before
   this goes anywhere: prices, dates, scope bullets, names.

The scripts/render.py mentioned in step 4 is a small markdown-to-styled-HTML script Claude writes once and the whole team reuses. Ask Claude to build it the first time you run the skill - it goes in scripts/, gets committed, and never needs writing again. That is the scripts/ folder pattern: utilities the agent authored becoming permanent tools. One borrow-before-you-build note: official document-generation skills already exist in the libraries from module one - check skillsmp.com and your vendors' published skills, then install and adapt one rather than authoring render.py blind.

HTML is the ops team's PowerPoint

For anything that needs to look designed - QBR decks, one-pagers, client reports - generate styled HTML and print to PDF. Claude is good at HTML and CSS, your brand tokens are already in templates/brand.md, and the result is consistent in a way hand-built slides never are.

The QBR deck skill is the worked example: it reads the client folder for the relationship story, pulls the KPI data from reports/, and produces a deck-shaped HTML file from templates/deck.html. First run takes an hour of tuning; every quarter after that, minutes.

For internal documents that keep changing, skip the PDF and publish an Artifact instead: Claude Code pushes the HTML page to a private claude.ai URL that updates in place every time you republish, so the status board or the client-health page is a link that stays true, not an attachment that goes stale. Module three's KPI lesson covers the sharing rules.

What the factory must not do

Documents are where automation meets commitments. A proposal is an offer; an SOW is a scope promise; an invoice is a demand for money. The factory assembles them fast - which is exactly why the boundaries need to be explicit.

Do this now

Sources and further reading

We set it up with you

Want us to set it up with you, end to end?

Three one-on-one sessions. We train you on your real stack and build your first agents together, until you can run it yourself. You keep everything.