assets — ingest what exists before inventing
Stage: Phase 1 — Understand (immediately after brief) - Reads: the paths/folder/files the user named + design/BRIEF.md - Writes: design/ASSETS.md
Standard
A first-grade intake is exhaustive, classified, and honest about its own authority:
- Exhaustive: every file in the named source is accounted for — used, superseded, or rejected with a reason. A silently ignored asset becomes the client's first review comment: "why isn't our logo on it?"
- Classified by what it can become, not by extension. A 4000px flat-lay is hero media; the same shot at 380px is a thumbnail. Classification records that ceiling, so
imagery never plans a full-bleed around a file that cannot carry one.
- Slotted: each kept asset names the page slot that consumes it and the ONE treatment it passes through. An inventory that stops at "we have 40 photos" hands the build a shoebox, not a decision.
- Advisory, never sovereign: extracted palette and type facts are CANDIDATES.
taste and contrast math still govern; a client hex that fails AA loses. What the client owns is input to the design, not a veto over it.
- Honest about absence: no assets is a finding, not a blank. It gets written down so §Assumed facts stays truthful about what the studio invented.
Process
- Resolve the sources. Enumerate the folder, paths, or attachments the user named —
find <dir> -type f -not -path '*/.*' | sort — then file each hit for its real type. A named URL is not an asset source: hand it to direction and move on.
- Classify every find into one of seven buckets: vector logo (
.svg, .ai, .eps, live-path .pdf) · raster logo · photography · illustration/pattern · copy documents (.docx, .md, .txt, exported site copy) · brand-guide PDF · font files (.otf, .ttf, .woff2). Anything unclassifiable is listed as unknown with its type string — never dropped.
- Record the ceiling per asset: pixel dimensions and orientation for raster, viewBox for vector, page count for documents. Photography under 1600px on the long edge cannot hold a hero — say so in the row instead of discovering it in Phase 6.
- Assign the slot and the treatment. Slot comes from BRIEF.md §Pages and §Content inventory (
/shop grid card, hero, about portrait); when wireframe later names the real section, tighten the column to that name. Treatment names what the asset must survive: imagery's single named treatment, media-optimization's pipeline, background removal, re-crop.
- Sample color candidates. Pull 3–6 values from the vector source or the brand guide, converted to
oklch(L C H) — never carried forward as hex. They are proposals for color's ramp, labeled as such.
- Contrast pass, non-negotiable. Compute every candidate proposed as a foreground or surface against its intended pair. Failing AA: keep the hue, move L (cap C if the hue can't hold it), log BOTH values and both ratios. An unreadable client color is a defect with a brand story attached.
- Check the typeface license before committing anything. A named face enters SYSTEM.md only if web embedding is permitted — open-licensed, or a webfont license the client actually holds. Desktop-only licenses, "we bought it for the logo", and unverifiable claims all resolve the same way: name the nearest licensable alternative on
typography's terms and log the substitution with its reason. Never ship an unlicensed .otf out of a client folder as a webfont.
- Read the mark, don't redraw it. Record clear-space in mark-heights, minimum legible size, whether a mono variant exists, and whether it survives knocked out on dark. Vector →
identity formalizes the lockup around it. Raster-only → flag it for identity and stop: never auto-trace a client mark. A traced logo is a forgery with wrong curves, and it gets compared against the printed one.
- Mine the copy documents for voice, not paragraphs. Extract the phrases the client genuinely uses — product names, process terms, how they describe their craft — and hand them to
copywriting as source. Their existing About page is evidence of voice, never approved copy.
- If nothing exists, write the file anyway with exactly the line
No client assets provided — everything visual is invented. and mirror it into BRIEF.md §Assumed facts. That line is why the first review is a correction and not a betrayal.
- Write design/ASSETS.md in the format below. Every Foundation-phase skill reads it before inventing.
ASSETS.md format
# Assets — <client>
Source: <path or "none provided"> · <n> files scanned, <n> kept
| Asset | Class | Ceiling | Slot | Treatment |
|---|---|---|---|---|
| `label-scan.jpg` | raster logo | 1200×800 | header, footer, favicon | → identity: formalize as vector, never traced |
| `throw-flatlay-*.jpg` (12) | photography | 3000px | /shop cards, /products/[slug] gallery | linen-ground treatment + blob pipeline |
| `brand-2019.pdf` | brand guide | 6pp | constraints only | — |
## Color candidates (input to `color`, not law)
- `oklch(0.42 0.06 148)` — thread green, sampled from label. AA fail on linen (3.1:1) → **use `oklch(0.36 0.07 148)`** (5.4:1), hue held.
## Type
- Named in guide: <face> — <license verdict> → <committed face or nearest licensable alternative, with reason>
## Mark
- Clear space: <n>× mark height · min size: <n>px · mono variant: yes/no · knockout: holds/fails
## Voice source
- <document> → phrases handed to `copywriting`
## Not used
- <file> — <one-line reason>
Anti-patterns
- Auto-tracing a raster logo and calling it the vector — wrong curves, forged authority
- Adopting a client hex that fails AA because "it's their brand color" — the ratio is not negotiable, the hue is
- Treating a brand-guide PDF as SYSTEM.md — it is evidence;
color, typography, and identity still decide
- Installing a font found in a client folder without a license check
- "40 photos in /assets" as an inventory — no ceiling, no slot, no treatment is a shoebox
- Pasting the client's existing About page in as copy —
copywriting writes every string on the site
- Skipping the file when nothing was supplied, leaving the brief silently implying the visuals came from the client
- Chasing the reference site the user linked instead of handing it to
direction
Worked example — Loop & Thread, a shoebox of shop assets
Moved to references/example.md — read only when this build's case is genuinely ambiguous; the sections above are the decision material.
Composes with
Moved to references/composes.md — the handoff map; load it when orchestrating this skill against its neighbors.
1---2name: assets3description: assets — ingest what exists before inventing4---56# assets — ingest what exists before inventing78**Stage:** Phase 1 — Understand (immediately after `brief`) - **Reads:** the paths/folder/files the user named + design/BRIEF.md - **Writes:** design/ASSETS.md910## Standard1112A first-grade intake is exhaustive, classified, and honest about its own authority:1314- **Exhaustive:** every file in the named source is accounted for — used, superseded, or rejected with a reason. A silently ignored asset becomes the client's first review comment: "why isn't our logo on it?"15- **Classified by what it can become**, not by extension. A 4000px flat-lay is hero media; the same shot at 380px is a thumbnail. Classification records that ceiling, so `imagery` never plans a full-bleed around a file that cannot carry one.16- **Slotted:** each kept asset names the page slot that consumes it and the ONE treatment it passes through. An inventory that stops at "we have 40 photos" hands the build a shoebox, not a decision.17- **Advisory, never sovereign:** extracted palette and type facts are CANDIDATES. `taste` and contrast math still govern; a client hex that fails AA loses. What the client owns is input to the design, not a veto over it.18- **Honest about absence:** no assets is a finding, not a blank. It gets written down so §Assumed facts stays truthful about what the studio invented.1920## Process21221. **Resolve the sources.** Enumerate the folder, paths, or attachments the user named — `find <dir> -type f -not -path '*/.*' | sort` — then `file` each hit for its real type. A named URL is not an asset source: hand it to `direction` and move on.232. **Classify every find** into one of seven buckets: vector logo (`.svg`, `.ai`, `.eps`, live-path `.pdf`) · raster logo · photography · illustration/pattern · copy documents (`.docx`, `.md`, `.txt`, exported site copy) · brand-guide PDF · font files (`.otf`, `.ttf`, `.woff2`). Anything unclassifiable is listed as `unknown` with its type string — never dropped.243. **Record the ceiling per asset:** pixel dimensions and orientation for raster, viewBox for vector, page count for documents. Photography under 1600px on the long edge cannot hold a hero — say so in the row instead of discovering it in Phase 6.254. **Assign the slot and the treatment.** Slot comes from BRIEF.md §Pages and §Content inventory (`/shop` grid card, hero, about portrait); when `wireframe` later names the real section, tighten the column to that name. Treatment names what the asset must survive: `imagery`'s single named treatment, `media-optimization`'s pipeline, background removal, re-crop.265. **Sample color candidates.** Pull 3–6 values from the vector source or the brand guide, converted to `oklch(L C H)` — never carried forward as hex. They are proposals for `color`'s ramp, labeled as such.276. **Contrast pass, non-negotiable.** Compute every candidate proposed as a foreground or surface against its intended pair. Failing AA: keep the hue, move L (cap C if the hue can't hold it), log BOTH values and both ratios. An unreadable client color is a defect with a brand story attached.287. **Check the typeface license before committing anything.** A named face enters SYSTEM.md only if web embedding is permitted — open-licensed, or a webfont license the client actually holds. Desktop-only licenses, "we bought it for the logo", and unverifiable claims all resolve the same way: name the nearest licensable alternative on `typography`'s terms and log the substitution with its reason. Never ship an unlicensed `.otf` out of a client folder as a webfont.298. **Read the mark, don't redraw it.** Record clear-space in mark-heights, minimum legible size, whether a mono variant exists, and whether it survives knocked out on dark. Vector → `identity` formalizes the lockup around it. Raster-only → flag it for `identity` and stop: **never auto-trace a client mark.** A traced logo is a forgery with wrong curves, and it gets compared against the printed one.309. **Mine the copy documents for voice, not paragraphs.** Extract the phrases the client genuinely uses — product names, process terms, how they describe their craft — and hand them to `copywriting` as source. Their existing About page is evidence of voice, never approved copy.3110. **If nothing exists**, write the file anyway with exactly the line `No client assets provided — everything visual is invented.` and mirror it into BRIEF.md §Assumed facts. That line is why the first review is a correction and not a betrayal.3211. Write design/ASSETS.md in the format below. Every Foundation-phase skill reads it before inventing.3334## ASSETS.md format3536```md37# Assets — <client>38Source: <path or "none provided"> · <n> files scanned, <n> kept3940| Asset | Class | Ceiling | Slot | Treatment |41|---|---|---|---|---|42| `label-scan.jpg` | raster logo | 1200×800 | header, footer, favicon | → identity: formalize as vector, never traced |43| `throw-flatlay-*.jpg` (12) | photography | 3000px | /shop cards, /products/[slug] gallery | linen-ground treatment + blob pipeline |44| `brand-2019.pdf` | brand guide | 6pp | constraints only | — |4546## Color candidates (input to `color`, not law)47- `oklch(0.42 0.06 148)` — thread green, sampled from label. AA fail on linen (3.1:1) → **use `oklch(0.36 0.07 148)`** (5.4:1), hue held.4849## Type50- Named in guide: <face> — <license verdict> → <committed face or nearest licensable alternative, with reason>5152## Mark53- Clear space: <n>× mark height · min size: <n>px · mono variant: yes/no · knockout: holds/fails5455## Voice source56- <document> → phrases handed to `copywriting`5758## Not used59- <file> — <one-line reason>60```6162## Anti-patterns6364- Auto-tracing a raster logo and calling it the vector — wrong curves, forged authority65- Adopting a client hex that fails AA because "it's their brand color" — the ratio is not negotiable, the hue is66- Treating a brand-guide PDF as SYSTEM.md — it is evidence; `color`, `typography`, and `identity` still decide67- Installing a font found in a client folder without a license check68- "40 photos in /assets" as an inventory — no ceiling, no slot, no treatment is a shoebox69- Pasting the client's existing About page in as copy — `copywriting` writes every string on the site70- Skipping the file when nothing was supplied, leaving the brief silently implying the visuals came from the client71- Chasing the reference site the user linked instead of handing it to `direction`7273## Worked example — Loop & Thread, a shoebox of shop assets7475Moved to `references/example.md` — read only when this build's case is genuinely ambiguous; the sections above are the decision material.7677## Composes with7879Moved to `references/composes.md` — the handoff map; load it when orchestrating this skill against its neighbors.