Page-brief
A page-brief is the layer between the wireflow and the full PRD. It turns each unique
page/screen into documented requirements tied to jobs — the "PRD per page", not a sitemap. It
makes the implicit decisions baked into an existing design explicit and documentable: what the
page is accountable for, what it must let a user do (and which job each of those rolls up to), where
it sits in the product's journeys and graph, and how you would know the page is actually right.
Pipeline position: JTBDs → journeys → wireflow → page-brief → PRD → wireframes/build. (In an
A-Team feature run the PRD may exist first — then the cards check against its scope and roll up
into its revision rather than being consumed by a later PRD.)
It is bounded on both sides, and both boundaries are load-bearing:
- It stops below the PRD — no business goals, metrics, or scope/phasing.
- It stops above the screen — no components, no layout, no hierarchy, no information design.
That's design's work, and the live design is its source of truth.
The success metric to hold onto: the output must be digestible by a human, not just the AI. A
cold reader should be able to pick up one card and understand the page.
Place in the A-Team pipeline
Definition-phase skill. Output home: <target>/docs/features/<slug>/briefs/pages/ —
board.json (spec — breadcrumbed source of truth), combined HTML + SVG (deliverable), PNG
(verification copy for gate reviewers). Per-feature artifact: overwrite cleanly on revision.
Commit per run: docs(<slug>): page briefs.
- Job codes are the durable ids. Board-wide job codes ARE
[[NN-<slug>]] from
docs/product/jtbd/, headlines quoted verbatim. Never invent a job label on a card — an
"unlisted job?" flag routes to jobs-to-be-done.
- The wireflow is machine-readable input: read
briefs/wireflow/board.json for the page set,
the journey↔page linkage, and where each job enters a screen — that entry-point detail is
flow-level and lives there, not here.
- Two interaction modes, one method:
- Standalone (human present) — full draft-then-grill per page (Movement 1 below).
- Pipeline (definition phase — draft + review, no interrogation) — derive all cards from
wireflow + PRD + jobs + the live design. Every guess and every "serves an unlisted job?"
signal is flagged on the card; qualitative acceptance criteria are marked
"not yet run with a human" (never self-certified); the gate reviews the full catalog with
the flags headlined, and the revise loop fixes what's wrong.
The card (7 fields, 3 blocks)
Header P{n} · Page name · route · design-ref
Purpose 1. Responsibilities — 1–3 lines translating the JTBD into page accountability
2. Checklist — TASKS, each tagged to the JTBD it rolls up to
Connections 3. Appears in journeys — inbound journey·step chips
4. Connects to — outbound, cross-page AND cross-job
Validation 5. Acceptance criteria — factual + qualitative (the cotton test)
Footer 6. Reading key
That's the whole card. Do not add fields. Everything that used to be here and isn't was removed
deliberately — the reasoning is in references/method-decisions.md Q3/Q14. Read it before you
re-add anything.
Mode 0 — Create or Review? (decide first)
- CREATE (default) — build page-briefs from JTBDs / journeys / wireflow / live design.
- REVIEW — critique an existing page-brief or screen catalog against the method.
Ambiguous intent → ask. Artifact + "what's wrong" → REVIEW. Raw material + "spec the pages" →
CREATE.
Creating page-briefs
Three movements: (0) gate on the upstream jobs, (1) draft each card — grilled per page
standalone, derived-with-flags in pipeline, (2) run the generate → rasterize → Read pipeline
until every card renders cleanly, then deliver.
The method is draft-then-confirm, per page: the design/prototype is the WHAT (the page's
capabilities are readable off the live screen), the human is the WHY and the whether-it's-good
(responsibilities, which jobs truly pass through, ambiguous mappings, the acceptance criteria).
Drafting first grounds the conversation so the human reacts rather than authors from scratch.
Movement 0 — Gather inputs, and GATE on the jobs
A page-brief cannot be better than the JTBDs feeding it. Thin cards trace back to
feature-shaped jobs, every time. Check the jobs before drafting.
1. Assemble the inputs:
| Input |
Supplies |
If missing |
The JTBD set (docs/product/jtbd/, active) |
the jobs every card tags against |
Stop — gate below. |
The journeys / wireflow (briefs/wireflow/board.json) |
page set + "Appears in journeys" linkage |
Degraded mode (below). |
prd.md |
scope the cards must live within |
Proceed; cards feed the PRD later. |
| The live design/prototype |
what each page actually does; the design-ref link |
Draft from the wireflow alone, flag heavily. |
2. Run the job gate. Even A-Team jobs that passed jobs-to-be-done's gates get rechecked —
defense in depth, and standalone runs may bring outside jobs:
- Progress-shaped, not feature-shaped? A job is macro, about progress or feeling — never a
feature or a screen. ("One place to work my leads" → reject; "Have fluid control over my leads
and any opportunity that comes" → accept.)
- Template followed?
When [situation], I want [motivation], so I can [desired outcome] —
motivation ≠ outcome.
- Attached to an actor-in-situation? Jobs belong to people in situations, never to "the
platform". The same product serves two people at the same company with different jobs; one
flat product-owned job list is a smell. (Not personas — the A-Team works situations and
struggles, not demographics; the job's Context section carries the who/when.)
- Names a feature at all? Then it isn't a job yet.
3. Act on the gate. If the jobs fail: say so plainly, quote the offending job, show the
progress-shaped version beside it, and route to jobs-to-be-done. Explain the downstream cost —
every checklist item and criterion inherits the weakness. Proceed on insistence, but say once,
clearly, that the cards will be limited by it. Never silently draft on bad jobs.
Degraded mode (no wireflow): run from design + JTBDs alone; leave "Appears in journeys" as
an explicit TODO per card — that field is the one thing only a wireflow can supply.
Movement 1 — Draft each card, then confirm it (the core loop)
Work one unique page at a time. The unit is the unique page, deduplicated into a catalog —
one card per page, not one per journey-occurrence. Materially different behavior by context is a
variant inside the one card, never a second card.
For each page: draft the card from the live screen + wireflow + jobs — responsibility,
job-tagged checklist, connections, acceptance criteria — flagging every gap and guess. Then:
standalone, grill the human on that card one thing at a time (confirm the responsibility,
validate each job mapping, resolve every "unlisted job?" flag, land the criteria — especially the
qualitative ones, which you cannot write alone); pipeline, keep the flags on the card and move
on — the gate is the confirmation pass.
Rules to enforce while drafting (full reasoning in references/method-decisions.md):
- Responsibilities translate the job. 1–3 lines of page accountability; variants noted here.
- Checklist items are TASKS, not jobs. Each a concrete thing the user must be able to do or
see on this page, tagged
task ——▷ [[NN]]. Test: an item that could appear unchanged on
three pages is a job — rewrite until it's true of this page only.
- The checklist is a job-alignment audit — a gap-finder. An item mapping to no listed job
branches two ways: drop it, or flag "serves an unlisted job?" — that flag is a signal
the upstream job set is missing something. Surface it prominently (gate headline in pipeline
mode); route to
jobs-to-be-done.
- Connects to = outbound, and it's what makes this a graph. Cross-page (
→ P2) and
cross-job, including non-navigational connections (open WhatsApp, notify someone, open an
external form) — exactly what a sitemap would miss.
- Acceptance criteria have two layers, both required.
- Factual — present and true, binary, checkable by anyone.
- Qualitative — the cotton test: hand a person only the criterion and the screen and
ask "can you do this?" Never self-certify this layer. Draft the criteria, then state
plainly they need to be run with a person — in pipeline mode, every qualitative criterion
ships marked "not yet run with a human", and running them lands on the research plan as an
activity.
- Every reference declares its kind: JOB or JOURNEY. Job pills are
[[NN]] ids — stable
board-wide, never invented on a card. Journey chips come from the wireflow. No field mixes the
namespaces.
- ID-based page↔journey linkage. Pages carry stable IDs (
P1, P2, …); link by ID, not
drawn connectors.
- Say nothing about the surface. No components, layout, hierarchy. If you catch yourself
describing the screen you would draw — stop; that's design's step.
- Open questions live on the board, not on the card. Raise in the grill (standalone) or as a
pinned note beside the card (pipeline); once answered they become a checklist item or a
criterion. Genuinely open ones mirror into the context ledger.
Movement 2 — The build pipeline (the reliability core)
Do not build straight onto a FigJam board via the API first — you'd be building blind.
- Write the board spec (
board.json) — title, jtbds (ids + verbatim headlines + the
actor-in-situation each belongs to), pages. Schema + worked example:
references/spec-schema.md.
- Generate:
python scripts/page-brief.py board.json --out docs/features/<slug>/briefs/pages --rasterize
(add --columns N for the card grid). Emits the SVG, combined HTML, PNG — including the JTBD
definitions page and the job → pages reverse index.
- Read the PNG. See your own output; catch overflow, glyph problems, cramped columns before
anyone else does. Verify every card — never skip.
- Iterate on the spec until clean —
references/card-layout.md.
- Deliver the combined HTML + SVG. Header design-refs point to live routes, not screenshots.
- If requested, rebuild natively in FigJam (
references/figjam-rebuild.md).
- Hand off. Upward:
prd-writer consumes (or re-scopes against) the catalog — pass the
job-tagged checklists, acceptance criteria, and "unlisted job?" flags. Sideways to design: the
acceptance criteria are the brief a designer works against, and the cotton tests validate
their output. Cotton-test runs land as research-plan activities.
Reviewing page-briefs
Critique against the method — don't redraw unless asked.
- Take in the artifact (Read images; screenshot FigJam; read specs). Note what you can't see.
- Score against
references/review-criteria.md. Headline checks: unit = unique page,
deduplicated? Checklist = tasks-not-jobs, each [[NN]]-tagged? Acceptance criteria present
with a qualitative layer, not self-certified? Connects-to a real graph (cross-page and
cross-job)? Job vs journey explicit, codes stable board-wide? Below the PRD and above the
screen? Upstream jobs progress-shaped and actor-attached? Digestible to a cold reader?
- Check upstream too. Weak cards usually trace to weak jobs — say which it is; fixing cards
without fixing jobs is wasted work.
- Structured verdict: Verdict (one line + biggest issue) · Strengths · Findings (ordered by
impact, each with the fix) · Fastest wins (2–3).
- Offer to apply the fixes via CREATE (grill only the gaps).
Guardrails to hold throughout
- Unit = the unique page. Variants within one card, never new cards.
- 7 fields, no more. What you want to add was removed on purpose — check Q3.
- Checklist = tasks tagged to jobs. The card's only concrete layer.
- Qualitative criteria are human-run. Never self-certify a cotton test.
- Job vs journey always explicit; job codes are the durable
[[NN]] ids. Never invented.
- Below the PRD, above the screen.
- Gate on the jobs before drafting. Feature-shaped jobs produce thin cards, every time.
- Always verify by rasterize → Read before showing anyone. No blind delivery.
What ships in this skill
scripts/page-brief.py — the spec-driven card engine (3-block layout, job pills with explicit
kind, JTBD definitions page, job → pages reverse index, N-up grid, combined HTML, optional PNG).
references/method-decisions.md — the method: each locked decision (Q1–Q14) + why, including
what v2 removed and the reasoning.
references/spec-schema.md — the board JSON schema + worked example.
references/card-layout.md — card layout rules and debugging.
references/pipeline.md — the end-to-end build checklist (incl. rasterizer fallbacks).
references/review-criteria.md — the REVIEW rubric.
references/figjam-rebuild.md — native FigJam mechanics (load only for an editable board).
references/examples/ — a worked example spec (illustration only, not method).
1---2name: page-brief3description: Create OR review a page-brief — the artifact BETWEEN a wireflow and the full PRD. It turns each unique page/screen of a product into documented requirements TIED TO JOBS: a self-contained board card per page (what the page is accountable for, the job-tagged checklist of what it must let you do, the journeys it appears in, what it connects to, and the acceptance criteria that say how you'd know it's right). It is the "PRD per page", not a sitemap — and it stops ABOVE the screen: no components, no layout, no hierarchy. Use whenever the user wants to "spec the pages", "document each screen", turn a wireflow + live design into per-page requirements, or asks "what does this page need to do / which jobs pass through it" — even if they never say "page-brief". Natural NEXT STEP after the wireflow skill. ALSO use it to REVIEW an existing page-brief / screen catalog. In the A-Team pipeline this is a definition-phase skill: output lands in docs/features/<slug>/briefs/pages/, job codes are the durable [[NN]] ids from doc4---56# Page-brief78A **page-brief** is the layer *between the wireflow and the full PRD*. It turns each **unique9page/screen** into documented **requirements tied to jobs** — the "PRD per page", not a sitemap. It10makes the implicit decisions baked into an existing design **explicit and documentable**: what the11page is accountable for, what it must let a user do (and which job each of those rolls up to), where12it sits in the product's journeys and graph, and how you would know the page is actually right.1314Pipeline position: **JTBDs → journeys → wireflow → `page-brief` → PRD → wireframes/build.** (In an15A-Team feature run the PRD may exist first — then the cards check against its scope and roll up16into its revision rather than being consumed by a later PRD.)1718It is **bounded on both sides**, and both boundaries are load-bearing:1920- It stops **below the PRD** — no business goals, metrics, or scope/phasing.21- It stops **above the screen** — no components, no layout, no hierarchy, no information design.22 That's design's work, and the live design is its source of truth.2324The success metric to hold onto: **the output must be digestible by a human, not just the AI.** A25cold reader should be able to pick up one card and understand the page.2627## Place in the A-Team pipeline2829Definition-phase skill. Output home: **`<target>/docs/features/<slug>/briefs/pages/`** —30`board.json` (spec — breadcrumbed source of truth), combined HTML + SVG (deliverable), PNG31(verification copy for gate reviewers). Per-feature artifact: overwrite cleanly on revision.32Commit per run: `docs(<slug>): page briefs`.3334- **Job codes are the durable ids.** Board-wide job codes ARE `[[NN-<slug>]]` from35 `docs/product/jtbd/`, headlines quoted verbatim. Never invent a job label on a card — an36 "unlisted job?" flag routes to `jobs-to-be-done`.37- **The wireflow is machine-readable input**: read `briefs/wireflow/board.json` for the page set,38 the journey↔page linkage, and where each job enters a screen — that entry-point detail is39 flow-level and lives there, not here.40- **Two interaction modes, one method:**41 - **Standalone (human present)** — full draft-then-grill per page (Movement 1 below).42 - **Pipeline (definition phase — draft + review, no interrogation)** — **derive all cards** from43 wireflow + PRD + jobs + the live design. Every guess and every "serves an unlisted job?"44 signal is flagged **on the card**; qualitative acceptance criteria are marked45 **"not yet run with a human"** (never self-certified); the gate reviews the full catalog with46 the flags headlined, and the revise loop fixes what's wrong.4748## The card (7 fields, 3 blocks)4950```51Header P{n} · Page name · route · design-ref52Purpose 1. Responsibilities — 1–3 lines translating the JTBD into page accountability53 2. Checklist — TASKS, each tagged to the JTBD it rolls up to54Connections 3. Appears in journeys — inbound journey·step chips55 4. Connects to — outbound, cross-page AND cross-job56Validation 5. Acceptance criteria — factual + qualitative (the cotton test)57Footer 6. Reading key58```5960That's the whole card. **Do not add fields.** Everything that used to be here and isn't was removed61deliberately — the reasoning is in `references/method-decisions.md` Q3/Q14. Read it before you62re-add anything.6364## Mode 0 — Create or Review? (decide first)6566- **CREATE** (default) — build page-briefs from JTBDs / journeys / wireflow / live design.67- **REVIEW** — critique an *existing* page-brief or screen catalog against the method.6869Ambiguous intent → ask. Artifact + "what's wrong" → REVIEW. Raw material + "spec the pages" →70CREATE.7172---7374## Creating page-briefs7576Three movements: **(0) gate on the upstream jobs, (1) draft each card — grilled per page77standalone, derived-with-flags in pipeline, (2) run the generate → rasterize → Read pipeline**78until every card renders cleanly, then deliver.7980The method is **draft-then-confirm, per page**: the **design/prototype is the WHAT** (the page's81capabilities are readable off the live screen), the **human is the WHY and the whether-it's-good**82(responsibilities, which jobs truly pass through, ambiguous mappings, the acceptance criteria).83Drafting first grounds the conversation so the human *reacts* rather than authors from scratch.8485### Movement 0 — Gather inputs, and GATE on the jobs8687**A page-brief cannot be better than the JTBDs feeding it.** Thin cards trace back to88feature-shaped jobs, every time. Check the jobs *before* drafting.8990**1. Assemble the inputs:**9192| Input | Supplies | If missing |93|---|---|---|94| **The JTBD set** (`docs/product/jtbd/`, active) | the jobs every card tags against | **Stop — gate below.** |95| **The journeys / wireflow** (`briefs/wireflow/board.json`) | page set + "Appears in journeys" linkage | Degraded mode (below). |96| **`prd.md`** | scope the cards must live within | Proceed; cards feed the PRD later. |97| **The live design/prototype** | what each page actually does; the design-ref link | Draft from the wireflow alone, flag heavily. |9899**2. Run the job gate.** Even A-Team jobs that passed `jobs-to-be-done`'s gates get rechecked —100defense in depth, and standalone runs may bring outside jobs:101102- **Progress-shaped, not feature-shaped?** A job is macro, about progress or feeling — never a103 feature or a screen. ("One place to work my leads" → reject; "Have fluid control over my leads104 and any opportunity that comes" → accept.)105- **Template followed?** `When [situation], I want [motivation], so I can [desired outcome]` —106 motivation ≠ outcome.107- **Attached to an actor-in-situation?** Jobs belong to people in situations, never to "the108 platform". The same product serves two people at the same company with **different jobs**; one109 flat product-owned job list is a smell. (Not personas — the A-Team works situations and110 struggles, not demographics; the job's Context section carries the who/when.)111- **Names a feature at all?** Then it isn't a job yet.112113**3. Act on the gate.** If the jobs fail: say so plainly, quote the offending job, show the114progress-shaped version beside it, and route to `jobs-to-be-done`. Explain the downstream cost —115every checklist item and criterion inherits the weakness. Proceed on insistence, but say once,116clearly, that the cards will be limited by it. Never silently draft on bad jobs.117118**Degraded mode (no wireflow):** run from design + JTBDs alone; leave **"Appears in journeys" as119an explicit TODO** per card — that field is the one thing only a wireflow can supply.120121### Movement 1 — Draft each card, then confirm it (the core loop)122123Work **one unique page at a time**. The unit is the **unique page**, deduplicated into a catalog —124one card per page, not one per journey-occurrence. Materially different behavior by context is a125**variant inside the one card**, never a second card.126127For each page: **draft the card** from the live screen + wireflow + jobs — responsibility,128job-tagged checklist, connections, acceptance criteria — flagging every gap and guess. Then:129**standalone**, grill the human on that card one thing at a time (confirm the responsibility,130validate each job mapping, resolve every "unlisted job?" flag, land the criteria — especially the131qualitative ones, which you cannot write alone); **pipeline**, keep the flags on the card and move132on — the gate is the confirmation pass.133134Rules to enforce while drafting (full reasoning in **`references/method-decisions.md`**):135136- **Responsibilities translate the job.** 1–3 lines of page accountability; variants noted here.137- **Checklist items are TASKS, not jobs.** Each a concrete thing the user must be able to do or138 see **on this page**, tagged `task ——▷ [[NN]]`. *Test:* an item that could appear unchanged on139 three pages is a job — rewrite until it's true of *this* page only.140- **The checklist is a job-alignment audit — a gap-finder.** An item mapping to **no** listed job141 branches two ways: **drop it**, or **flag "serves an unlisted job?"** — that flag is a signal142 the upstream job set is missing something. Surface it prominently (gate headline in pipeline143 mode); route to `jobs-to-be-done`.144- **Connects to = outbound, and it's what makes this a graph.** Cross-page (`→ P2`) *and*145 cross-job, including non-navigational connections (open WhatsApp, notify someone, open an146 external form) — exactly what a sitemap would miss.147- **Acceptance criteria have two layers, both required.**148 1. **Factual** — present and true, binary, checkable by anyone.149 2. **Qualitative — the cotton test**: hand a person **only the criterion and the screen** and150 ask *"can you do this?"* **Never self-certify this layer.** Draft the criteria, then state151 plainly they need to be run with a person — in pipeline mode, every qualitative criterion152 ships marked "not yet run with a human", and running them lands on the research plan as an153 activity.154- **Every reference declares its kind: JOB or JOURNEY.** Job pills are `[[NN]]` ids — stable155 board-wide, never invented on a card. Journey chips come from the wireflow. No field mixes the156 namespaces.157- **ID-based page↔journey linkage.** Pages carry stable IDs (`P1`, `P2`, …); link by ID, not158 drawn connectors.159- **Say nothing about the surface.** No components, layout, hierarchy. If you catch yourself160 describing the screen you would draw — stop; that's design's step.161- **Open questions live on the board, not on the card.** Raise in the grill (standalone) or as a162 pinned note beside the card (pipeline); once answered they become a checklist item or a163 criterion. Genuinely open ones mirror into the context ledger.164165### Movement 2 — The build pipeline (the reliability core)166167Do **not** build straight onto a FigJam board via the API first — you'd be building blind.1681691. **Write the board spec** (`board.json`) — `title`, `jtbds` (ids + verbatim headlines + the170 actor-in-situation each belongs to), `pages`. Schema + worked example:171 **`references/spec-schema.md`**.1722. **Generate**:173 `python scripts/page-brief.py board.json --out docs/features/<slug>/briefs/pages --rasterize`174 (add `--columns N` for the card grid). Emits the SVG, combined HTML, PNG — including the JTBD175 definitions page and the job → pages reverse index.1763. **Read the PNG.** See your own output; catch overflow, glyph problems, cramped columns before177 anyone else does. Verify **every** card — never skip.1784. **Iterate** on the spec until clean — `references/card-layout.md`.1795. **Deliver** the combined HTML + SVG. Header design-refs point to live routes, not screenshots.1806. **If requested, rebuild natively in FigJam** (`references/figjam-rebuild.md`).1817. **Hand off.** Upward: `prd-writer` consumes (or re-scopes against) the catalog — pass the182 job-tagged checklists, acceptance criteria, and "unlisted job?" flags. Sideways to design: the183 acceptance criteria are the brief a designer works against, and the cotton tests validate184 their output. Cotton-test runs land as research-plan activities.185186---187188## Reviewing page-briefs189190Critique against the method — don't redraw unless asked.1911921. **Take in the artifact** (Read images; screenshot FigJam; read specs). Note what you can't see.1932. **Score against `references/review-criteria.md`.** Headline checks: unit = unique page,194 deduplicated? Checklist = tasks-not-jobs, each `[[NN]]`-tagged? Acceptance criteria present195 with a qualitative layer, not self-certified? Connects-to a real graph (cross-page and196 cross-job)? Job vs journey explicit, codes stable board-wide? Below the PRD and above the197 screen? Upstream jobs progress-shaped and actor-attached? Digestible to a cold reader?1983. **Check upstream too.** Weak cards usually trace to weak jobs — say which it is; fixing cards199 without fixing jobs is wasted work.2004. **Structured verdict**: Verdict (one line + biggest issue) · Strengths · Findings (ordered by201 impact, each with the fix) · Fastest wins (2–3).2025. **Offer to apply the fixes** via CREATE (grill only the gaps).203204---205206## Guardrails to hold throughout207- **Unit = the unique page.** Variants within one card, never new cards.208- **7 fields, no more.** What you want to add was removed on purpose — check Q3.209- **Checklist = tasks tagged to jobs.** The card's only concrete layer.210- **Qualitative criteria are human-run. Never self-certify a cotton test.**211- **Job vs journey always explicit; job codes are the durable `[[NN]]` ids.** Never invented.212- **Below the PRD, above the screen.**213- **Gate on the jobs before drafting.** Feature-shaped jobs produce thin cards, every time.214- **Always verify by rasterize → Read before showing anyone.** No blind delivery.215216## What ships in this skill217- `scripts/page-brief.py` — the spec-driven card engine (3-block layout, job pills with explicit218 kind, JTBD definitions page, job → pages reverse index, N-up grid, combined HTML, optional PNG).219- `references/method-decisions.md` — the method: each locked decision (Q1–Q14) + why, including220 what v2 removed and the reasoning.221- `references/spec-schema.md` — the board JSON schema + worked example.222- `references/card-layout.md` — card layout rules and debugging.223- `references/pipeline.md` — the end-to-end build checklist (incl. rasterizer fallbacks).224- `references/review-criteria.md` — the REVIEW rubric.225- `references/figjam-rebuild.md` — native FigJam mechanics (load only for an editable board).226- `references/examples/` — a worked example spec (illustration only, not method).