Dylan AndersenDylan Andersen's Docs
Cursor + SalesforceExpert Cursor

POCs & Hand-off Docs

Install and use the afd360-poc-docs-skill to scaffold a Fumadocs site the customer actually reads. Fit it into the SE build-test-document-handoff arc.

The hand-off doc is the thing that decides whether your POC becomes a real implementation or dies in an inbox. It's also the thing every SE procrastinates on and then bangs out at 11 PM the night before the kickoff. This page breaks the procrastination with a skill, a structure, and a sequence.

POCs and Hand-off Docs hero

The shortcut

Install the afd360-poc-docs-skill, run /setup-docs in Cursor, argue with its first draft, publish the argued-with version. You'll have something in an hour that used to take an evening.

What a hand-off doc is for

Three audiences read it and each wants something different.

  • The customer sponsor wants to understand what was built and what it proves. They'll read the overview and maybe the architecture section.
  • The customer admin or implementation partner wants to understand how to run it, extend it, and not break it. They'll read everything.
  • Future-you wants to pick the project up six months later and remember what you decided. You'll skim the "decisions" section and thank yourself.

A hand-off doc that serves all three looks like a short book. Seven or eight sections, a handful of diagrams, and a known structure that doesn't change between POCs.

Install the skill

The skill lives at github.com/dylandersen/afd360-poc-docs-skill. Install it once at the user level and it's available in every Cursor project on your machine.

Prerequisites

  • Node.js 22 or higher (node -v). The Fumadocs 16 template requires it.
  • Git on your PATH (it is, if you've done Environment Setup).
  • pnpm preferred (brew install pnpm), but npm and bun also work.
  • Cursor with Agent mode available.

The easiest path is the community skills CLI, which handles download, placement, and updates. From any terminal:

npx skills install github:dylandersen/afd360-poc-docs-skill

This installs into ~/.cursor/skills/afd360-poc-docs-skill/, which Cursor discovers automatically. Restart Cursor (or reload the window) so the skill shows up in Settings → Rules → Agent Decides.

To update later:

npx skills update afd360-poc-docs-skill

If you prefer clones you can edit directly (useful for tweaking templates):

mkdir -p ~/.cursor/skills
cd ~/.cursor/skills
git clone https://github.com/dylandersen/afd360-poc-docs-skill.git

Restart Cursor. Pull updates with git pull from inside the skill directory.

If you want the skill version-controlled with a specific POC repo (so teammates pick it up automatically), drop it under .cursor/skills/ inside that repo:

cd /path/to/your-poc-repo
mkdir -p .cursor/skills
git submodule add https://github.com/dylandersen/afd360-poc-docs-skill.git .cursor/skills/afd360-poc-docs-skill
git commit -m "Add afd360-poc-docs-skill"

Submodule is the cleaner option over a plain clone; it lets teammates pin a version.

Verify it's installed

Open Cursor, then:

  1. Cursor SettingsRules (or press Cmd+Shift+J on macOS / Ctrl+Shift+J on Windows and navigate to Rules).
  2. Scroll to Agent Decides. You should see afd360-poc-docs-skill listed.
  3. In chat, type / — you should see /setup-docs and /update-docs in the slash-command menu.

If neither appears, restart Cursor. If it still doesn't appear, check that ~/.cursor/skills/afd360-poc-docs-skill/SKILL.md exists and its frontmatter parses (the YAML has to be valid).

First-run: scaffold a POC docs site

The skill runs in four phases: preflight, intake, scaffold, smoke test. The whole thing is conversational — the agent asks you four questions and does the rest.

Start the skill

In Cursor chat, switch to Agent mode and type:

/setup-docs

Or in natural language:

"Spin up customer docs for a new POC."

"Scaffold Fumadocs for Acme Retail."

"Create a POC docs site for the CS Triage Agentforce build."

The agent recognises the intent and starts the skill's Phase 0.

Phase 0 — Preflight

The skill runs scripts/preflight.mjs and checks:

  • Node ≥ 22
  • pnpm, npm, or bun on PATH
  • git available
  • https://registry.npmjs.org reachable

If anything fails, the skill stops and prints the exact install command for your platform. Fix the issue and re-run /setup-docs.

Phase 1 — Intake

The skill asks you four required fields, one at a time:

  1. Customer name — e.g. Acme Retail
  2. POC name — e.g. Customer Service Agent POC
  3. Product area — one of: Agentforce, Data 360, Agentforce + Data 360, Salesforce Platform
  4. Target directory — absolute path; defaults to ~/Documents/cursor_orgs/<customer-slug>-docs

After the four required answers, the skill offers five optional fields you can either set now or edit later in site.config.ts:

  • Primary personas (defaults to Admin, End User)
  • Key integrations (defaults to None)
  • Deploy target (Vercel, Netlify, static export, etc.)
  • Repo URL
  • SE name (defaults to your OS username)

Slugs are derived automatically. The skill confirms everything in one summary before it starts writing files.

Phase 2 — Scaffold

The skill runs scripts/scaffold.mjs, which:

  • Creates the target directory.
  • Recursively copies the Fumadocs template.
  • Replaces placeholder tokens (__CUSTOMER_NAME__, __POC_NAME__, __PRODUCT_AREA__, and a handful more) with your intake values.
  • Generates site.config.ts — one file, every knob you'd want to change.
  • Generates .gitignore and a starter README.md.
  • Runs scripts/verify-placeholders.mjs to confirm no __*__ tokens were missed.

The script is idempotent — re-run it and it refuses to overwrite unless you pass --force.

Phase 3 — Install and smoke test

The skill asks Install dependencies now? [Y/n]. If you say yes:

cd <target-dir>
pnpm install
pnpm build          # smoke test: confirms the template builds
pnpm dev            # starts http://localhost:3000

If pnpm build fails, that's a template bug — file an issue at github.com/dylandersen/afd360-poc-docs-skill/issues.

Phase 4 — Next steps

The skill prints a short checklist:

  • Where to edit each section (content/docs/*.mdx paths)
  • How to add a new page (update meta.json, drop an .mdx)
  • How to change theme/title/personas (edit site.config.ts)
  • How to swap the logo (public/logo.png)
  • How to deploy (Vercel is easiest if pnpm build passed)

You now have a working docs site. Time invested: roughly 10 minutes of conversation plus pnpm install.

What gets scaffolded

Out of the box, the site has these top-level sections pre-populated with customer and POC context:

SectionPurpose
OverviewWhat the POC proves, who's involved, the original problem statement
ArchitectureSystems, data flow, integration points, a Mermaid system diagram
SetupHow to stand up the org, install the package, assign permissions
Data ModelCustom objects, relationships, fields that matter (real tables + ERD)
Agents & FlowsAgentforce agents, Flow automation, Apex services
Hand-offWho owns what after the POC, what the next step is
TroubleshootingThe three things that will go wrong and how to fix them

Each page ships as an editable .mdx with real starter content — tables, Mermaid diagrams, example callouts — not a lorem-ipsum skeleton. You edit in place instead of writing from scratch.

Incremental updates: /update-docs

Two weeks later, you shipped a new topic and need to add a Security section. Don't re-scaffold. Run:

/update-docs add-section security

The skill drops content/docs/security.mdx, updates content/docs/meta.json, and runs placeholder substitution. It touches no other files.

Available sections

SlugPurpose
securityThreat model, sharing rules, secrets handling, perm audit
observabilityLogging, monitoring, alerting, agent transcript review
rollout-planPhased rollout, comms plan, training, success metrics
faqCustomer-facing FAQ
glossaryAcronyms and terms specific to this POC
release-notesOngoing change log post-handoff
runbookStandalone ops runbook (when handoff.mdx gets too long)

Other /update-docs actions:

  • /update-docs refresh-starter <slug> — re-copy the starter into an existing section (destructive; warns before overwrite).
  • /update-docs resync-config — regenerate site.config.ts from fresh intake answers.

Natural language also works:

"Add a rollout-plan section to the Acme docs."

"Refresh the glossary starter in my CS Triage docs — I want to start over on that page."

The build–test–document–handoff arc

The skill is one piece. The full arc is four. Each stage has a natural way to use Cursor.

1. Build

Normal development loop. Your First Project, Debugging Apex, and the skill library do the heavy lifting.

2. Test

Don't ship a POC without tests. Agent tests, Apex tests, LWC Jest tests, and a scripted smoke check. See Running & Writing Apex Tests and Session Tracing & Agent Testing.

3. Document

This is where the afd360-poc-docs-skill fires. But the docs draw from real project artifacts:

  • The data model section is generated from @force-app/main/default/objects/ using sf-diagram-mermaid.
  • The agents section is generated from @force-app/main/default/genAiPlugins/ or .agent files.
  • The setup section is a variation of your demo reset script.
  • The troubleshooting section is the list of real issues you hit during the build. Keep a scratchpad during development. Copy the entries in at the end.

4. Hand off

Package the POC (Packaging & Hand-off), share the docs URL, and schedule the walk-through. That's the full arc.

Letting Cursor draft the prose

Once the scaffold exists, you don't write the prose by hand. You point Cursor at the real metadata.

A template prompt for a section:

Draft the "Data Model" section of the POC hand-off doc. Read
@force-app/main/default/objects/ and produce:

1. One paragraph explaining the custom objects at a high level.
2. A bulleted list naming each custom object and its purpose.
3. A Mermaid ERD using the sf-diagram-mermaid skill.
4. A one-paragraph section on "what's on the roadmap but not in this POC".

Keep the prose plain. No filler, no marketing words, no em dashes.

The agent pulls the real names and relationships from the metadata. Your job is to fix anything wrong and add the customer-specific framing the agent can't know.

Repeat the pattern for Architecture (point at @force-app/main/default/genAiPlugins/ and integration metadata), Setup (point at config/project-scratch-def.json and your reset script), and Agents & Flows (point at .agent or .genAiFunction files).

A realistic section template

Here's what the Architecture section of a hand-off doc looks like when it's done well:

## Architecture

The CS Triage POC sits across three layers.

### Salesforce

- Agentforce Builder agent: **CS Triage**
- Topics: Warranty, Billing, Shipping
- Apex services: `CaseTriageService`, `CustomerInsightService`
- LWC: `agentSummary`, `caseRouter`
- Permission set group: `CS_Agent_Demo_User`

### Data 360

- DMOs in scope: Customer_Profile__dlm, Case_History__dlm
- Segments: Active_Shippers, High_Value_Warranty
- Data actions: Enrich_Case

### External systems

- Jira: via Named Credential `AcmeJira` (OAuth 2.0, Jira admin scope)

![architecture](architecture.png)

Short. Specific. Named. The reader can open Salesforce, find the named thing, and match it to the doc. No hand-waving.

Customer-ready polish

A few things turn a draft into something you'd hand a CIO:

  • A cover page. One line per thing: customer name, POC name, SE name, date, GitHub URL, install URL. The sf-diagram-nanobananapro skill makes a clean cover graphic if you want one.
  • A single diagram that summarises the whole thing. See Screenshots & Diagrams.
  • Named decisions. A short "Decisions" subsection in Architecture listing the two or three meaningful calls you made ("Used Agentforce Builder over Agent Script because the customer wants to extend topics declaratively"). Future-you loves this.
  • A "how to extend" section. Point at the skills the customer's developers should install and the starter prompts. Every hand-off should also hand off the workflow, not just the code.

What not to ship

  • Internal Slack messages, meeting notes, or customer complaints.
  • Dev Hub IDs, access tokens, or anything from .env.
  • Scratch-org-specific settings that don't apply to the customer's org.
  • Apologies or "we didn't get to X" framing. Note what's in scope and what's not. Don't apologise for the scope.

Common traps

The docs drift from the code

The docs were right on the day you shipped and wrong within a week. Mitigate with two habits: generate the diagrams from the code (they update when the code does), and leave a note at the top of each section saying which commit SHA it was last verified against.

The docs are too long

A hand-off doc shouldn't read like a novel. Each section should land in a screen or two of content. If it's longer, split it into a child page. The skill handles this structure automatically.

The docs don't match what the customer actually asked for

Reread the discovery notes. The hand-off doc should restate the original problem in the customer's words in the first paragraph, then describe what the POC does to prove it. If you can't do that in two sentences, the docs are focused on the wrong thing.

Troubleshooting the skill

/setup-docs isn't recognised

The skill isn't registered. Check:

  1. ls ~/.cursor/skills/afd360-poc-docs-skill/SKILL.md — the file has to exist.
  2. Open SKILL.md and confirm the YAML frontmatter parses (name: and description: on separate lines).
  3. Restart Cursor.

Preflight fails: "Node 20 detected. Fumadocs 16 requires Node 22+."

Install Node 22 with Homebrew (brew install node@22) or nvm (nvm install 22 && nvm use 22). Re-run /setup-docs.

The scaffold refuses to write into my directory

The target isn't empty. Either pick a fresh directory or pass --force (the skill will warn you first). Never --force into a directory with uncommitted work.

pnpm build fails after scaffold

That's a template bug, not your fault. File an issue at github.com/dylandersen/afd360-poc-docs-skill/issues with the error text. In the meantime, the agent can help you patch whichever template file is broken.

Leftover __SOMETHING__ tokens in the output

verify-placeholders.mjs should have caught this. File an issue with the filename and the token — it means the skill added a template file without wiring the replacement map.

Verification

After the docs are published, send the URL to a colleague who wasn't in the project. Ask them: "If you had to pick this up and demo it next week, would you know how?" If the answer is yes, the docs are good. If they come back with six questions, those are your missing sections.

Next moves

On this page