# Agent instructions — Portfolio

Read this file at the **start of any task** in this repo.

## Backlog (required)

1. Read [`BACKLOG.md`](BACKLOG.md) and [`backlog/items.yaml`](backlog/items.yaml).
2. If the user named an id (e.g. `A-003`), work that item.
3. Else if doing unlisted work, check the backlog anyway — avoid duplicating ready items.
4. For **new** tasks Vincent describes, add an entry to both files (use the template in `BACKLOG.md`).
5. When you **start** an item: set `status: in_progress` in yaml and move it in `BACKLOG.md`.
6. When you **finish**: set `status: done`, move to Done, note commit in `done_note`. Run `node scripts/build-cases.mjs` if `cases/` changed.

**Pickable agent work:** `owner: agent` and `status: ready` in `backlog/items.yaml`.

**Human-owned:** `owner: human` (screenshots, client content, strategic decisions) — do not mark done without Vincent's input.

## Repo map

| Path | Role |
|------|------|
| `index.html` | Homepage (inline CSS/JS) |
| `cases/{slug}/` | Case source: `meta.json` + `body.html` |
| `scripts/build-cases.mjs` | Generates `work/*.html`, fragments, sitemap |
| `work/` | Built case pages + carousel (`cases.html`) |
| `templates/standalone.html` | Shell for standalone case pages |

## Build

```bash
node scripts/build-cases.mjs
```

Run before deploy and after editing `cases/`. Vercel runs this in `vercel.json` `buildCommand`.

## Case header convention

`meta.json` → `header` block. `body.html` uses `{{CASE_HEADER}}`, `{{CASE_TAGS}}` inside `.case-lead`. See any `cases/*/meta.json` for examples.

## Constraints

- Static site — no framework on homepage.
- Do not commit unless Vincent asks.
- Minimise scope; match existing patterns.

## LLM context (published site)

- `/llms.txt` · `/llms-full.txt` — public site summary (also link backlog when deployed).
