Prowrit / prompt engineering studio
pipeline · 3 steps · 2 skill files

The Reading Tracker Build — the workflow, engineered

You want: a reading tracker built to conventions, not to chance.

why this shape spec and build are sequential transforms, and a fresh-context review against the conventions catches what the builder can't see — three steps, no more

✓ Reviewed before you saw it passed all 5 checks — an automated, fresh-context review

how this was engineeredanalyzed 2 assumptions surfaceddesigned 3 steps · 2 skill files · 1 gatereviewed 5/5 checks ✓

3 chat runs · 1 thing you paste in · quality-checked (retries ≤2×)

you start withyour app idea and any stack preferences↓ SPEC.md — data model, API surface, screens,…↓ the app: code, passing tests, README with r…↓ ✓ pass — continuesyou geta running local reading-tracker app with aconventions-clean API, tests on the tricky parts, and a…1agent⚙ 2 skill filesArchitectturn the wish into a buildable spec: data model, APIsurface, screens, test list2agent⚙ 2 skill filesBuilderimplement the spec exactly — code, tests from thetest list, run instructions3quality check⚙ 2 skill filesCode Reviewreview the built app against the spec andconventions with fresh eyes↩ fix-list — back to 2. Builder · ≤2×

The Reading Tracker Build — the workflow in words

Shape: pipeline. 3 steps, in this order.

  1. Step 1 of 3: Architect — Agent. turn the wish into a buildable spec: data model, API surface, screens, test list. Takes the material you supply. Produces SPEC.md — data model, API surface, screens, test list. Relies on the skill files: api-conventions, definition-of-done.
  2. Step 2 of 3: Builder — Agent. implement the spec exactly — code, tests from the test list, run instructions. Takes Architect. Produces the app: code, passing tests, README with run commands. Relies on the skill files: api-conventions, definition-of-done.
  3. Step 3 of 3: Code Review — Quality check. review the built app against the spec and conventions with fresh eyes. Takes Builder. Produces PASS, or a numbered fix-list with file-level precision. On failure, sends its fix-list back to Builder, up to 2 times. Relies on the skill files: api-conventions, definition-of-done.

Final output: a running local reading-tracker app with a conventions-clean API, tests on the tricky parts, and a README that works

in plain words The Architect turns your wish into a concrete spec using the two convention files, the Builder implements exactly that spec, and the Code Review checks the result against the conventions — sending misses back with file-and-line precision.

What I assumed — if a guess is wrong, fix the brief and rerun

  • assumed a single-user local app — no accounts, no deployment
  • assumed your AI can write files and run commands (Claude Code, Cursor, or similar)

Would sharpen the result

  • your preferred stack, if you have one — otherwise the conventions file picks a sensible default

Run it — 3 steps, in this order

Architect (paste your wish) → Builder (paste SPEC.md) → Code Review (paste spec + build); a fix-list goes back to the Builder, at most twice. Include the two skill files with every step.

  1. 1

    Architect

    Agent◆ your strongest model⚙ uses API conventions⚙ uses Definition of done

    turn the wish into a buildable spec: data model, API surface, screens, test list

    give it your material — whatever this step's {{PLACEHOLDER}} asks for it returns SPEC.md — data model, API surface, screens, test list
    Show the prompt for this step
    ## Role
    You are a pragmatic software architect specifying a small single-user web app. Small and finished beats grand and half-done.
    
    ## The wish
    ```
    {{PASTE_YOUR_APP_IDEA_AND_ANY_STACK_PREFERENCES_HERE}}
    ```
    
    ## Instructions
    Follow the conventions in the two skill files (API conventions, Definition of done) — they decide anything the wish leaves open.
    1. Data model: entities, fields, types — nothing speculative.
    2. API: every endpoint as `METHOD /path → what it returns`, per the API conventions.
    3. Screens: each screen in two lines — what it shows, what you can do there.
    4. TEST LIST: the 5-8 behaviors worth a test (the tricky parts: state transitions, stats math, edge inputs) — not CRUD boilerplate.
    
    ## Output contract
    SPEC.md with exactly those four sections. Short enough to read in five minutes; precise enough to build without asking questions.
    copy & open in: ·
  2. 2

    Builder

    Agent◆ your strongest model⚙ uses API conventions⚙ uses Definition of done

    implement the spec exactly — code, tests from the test list, run instructions

    give it the output of Architect it returns the app: code, passing tests, README with run commands
    Show the prompt for this step
    ## Role
    You are a senior developer implementing a written spec. The spec decides scope; the skill files decide style. Where they're silent, choose the boring option.
    
    ## The spec
    ```
    {{PASTE_SPEC_MD_HERE}}
    ```
    
    ## Instructions
    1. Implement every endpoint and screen in the spec — and nothing not in it.
    2. Write the tests named in the spec's TEST LIST first, then make them pass. Show the passing test output — evidence, not assertions of success.
    3. Follow the API conventions file for routes, errors, and shapes.
    4. Finish with README run instructions: the exact commands from empty folder to open app.
    
    ## Output contract
    The project files (path + content each), the passing test output, and the README. If something in the spec is impossible as written, stop and say exactly what and why — do not improvise around it.
    copy & open in: ·
  3. 3

    Code Review

    Quality check◆ your strongest model↩ on fail, back to Builder (≤2×)⚙ uses API conventions⚙ uses Definition of done

    review the built app against the spec and conventions with fresh eyes

    give it the output of Builder it returns PASS, or a numbered fix-list with file-level precision
    Show the prompt for this step
    ## Role
    You are a code reviewer who has the spec and the conventions but did NOT write this code. Judge the end state only.
    
    ## The spec, and the code to review
    ```
    {{PASTE_SPEC_MD_AND_THE_BUILDERS_OUTPUT_HERE}}
    ```
    
    ## Rubric — fail the build if ANY of these holds
    1. An endpoint or screen from the spec is missing, or an unspecced feature crept in.
    2. Any TEST LIST behavior lacks a test, or the claimed test output doesn't match the tests present.
    3. Routes, error shapes, or response shapes break the API conventions file.
    4. The README commands would not take a fresh machine from empty folder to running app.
    
    ## Output contract
    Either exactly `PASS` plus the one file you'd polish next —
    or `FAIL` plus a numbered fix-list: file, what's wrong, what the spec or convention says instead.
    copy & open in: ·

Skill files — background notes your AI should know

Our design decisions and definitions (what “API”, “document”, “done” mean here) — so no AI has to guess. Working in a browser chat? Use Copy prompt + skill files on a step: everything pastes as one message. Working in Claude Code / Cursor / a project? Save each file (e.g. .claude/skills/<name>.md).

api-conventions.md

⚙ API conventions9 lines · 108 words of guidance

one way to build the API, so 'clear API' means the same thing to every step

Show the file
# API conventions

When this workflow says API it means:
- REST, resource-oriented routes, versioned under `/v1`: `GET /v1/books`, `POST /v1/books`, `PATCH /v1/books/:id`.
- JSON bodies in and out; ids are server-generated strings.
- Errors are always `{ "code": "machine_readable", "message": "human readable" }` with a matching HTTP status.
- List endpoints return `{ "items": [...], "total": n }` — even when there's one page.
- Reading states are exactly: `want`, `reading`, `finished`. State changes go through `PATCH`, and the server records the transition date.
- No auth (single local user) — but keep handlers separate from storage so adding it later is a seam, not a rewrite.

definition-of-done.md

⚙ Definition of done8 lines · 90 words of guidance

what 'built properly' means here — the bar every step builds to and the review checks against

Show the file
# Definition of done

The app is done when:
- `README.md` gets a fresh machine from empty folder to running app with copy-paste commands.
- Every behavior on the spec's TEST LIST has a passing test, and test output is shown, not claimed.
- The stats view computes from stored data at request time — no cached numbers to drift.
- Empty states are designed: a new user with zero books sees guidance, not a blank page.
- No TODOs in committed code: small and finished beats grand and half-done.

The .zip is a spec-valid Agent Skill — upload it to claude.ai (Settings → Skills), or unzip into .claude/skills/ for Claude Code, Cursor, and any tool that reads the open skills format.

Worth keeping: The conventions files are the contract — change them once, and every step follows.
copy & open in: ·
take it with you — 9 files — the workflow, AGENTS.md, 2 skill files, the eval suite, and a README saying where each one goes
install in your tool —
test it yourself — 3 promptfoo configs, one per step + a README · built from this workflow's own output contracts