canvas-design
When to use
Use when:
- User asks for a poster, marketing visual, brand asset, social-media graphic, cover art
- Output is a static
.pdf or .png design piece (not a UI mockup, not a wireframe)
- The deliverable is the visual artifact itself
Do NOT use when:
- Designing a UI component or app screen →
fe-design, ui-component-architect, react-shadcn-ui, blade-ui, flux
- Tailwind / shadcn / Flux component styling →
tailwind-engineer
- Brand voice / tone definition →
voice-and-tone-design
- Release announcement copy →
release-comms
Goal
Produce one finished visual artifact (.pdf or .png) backed by an original design philosophy. Both files ship together.
The work emphasizes: visual expression over text · original direction (no artist mimicry) · composition that looks deliberated, not generated.
Preconditions
- Brief from user (theme, intent, occasion, target medium, size constraint)
- Output directory:
agents/design-assets/{slug}/ — create if missing
- Image-generation tooling available (Python with Pillow / matplotlib / cairo, SVG → PNG conversion, or whatever the environment ships)
Procedure
1. Brief intake
One numbered-options block surfaces: theme / occasion · target medium + dimensions (web 1200×630? print A3? square 1080×1080?) · color & mood direction · hard constraints (logo required? color to avoid?) · single page or series.
If the brief says "in the style of [living artist]", flag the copyright risk and propose an original direction.
2. Design philosophy
Author agents/design-assets/{slug}/philosophy.md — 4–6 paragraphs naming:
- Movement name — 1–2 words ("Chromatic Silence", "Brutalist Joy", "Analog Meditation")
- Visual language — how the philosophy manifests through space, form, color, scale, composition, rhythm
- Text role — sparse, accent only; never paragraphs
- Craftsmanship anchor — visible deliberation, not template polish
Stay aesthetically specific but leave interpretive room for the canvas execution.
3. Subtle conceptual thread
Identify a single niche reference embedded in the work — not announced, woven into form / color / composition. A jazz musician quoting another song: those who know catch it, others enjoy the music.
Document it in philosophy.md under ## Subtle reference.
4. Canvas execution
Produce agents/design-assets/{slug}/{slug}.{pdf|png}:
- Pick the execution tool (Pillow, matplotlib, SVG, or framework-native)
- Font selection — pick a font that earns the philosophy. Inspect a working dir (e.g.
agents/design-assets/{slug}/fonts/ — create if missing) and place the chosen file there before render. System defaults (Arial, Helvetica, DejaVu, the matplotlib default sans) are the AI-template tell; reach for them only as deliberate fallback, never as the unexamined default
- Limited palette — 2–5 colors, intentional and cohesive
- Geometric or organic forms per philosophy
- Text — sparse, design-forward, integrated as visual element; never overlapping, never falling off canvas
- Margins — every element contained, breathing room
- Repeating patterns, layered elements, systematic markers as the philosophy permits
5. Refinement pass
After the first render, do not add more graphics. Refine what exists:
- Tighten composition cohesion
- Adjust spacing, alignment, color balance
- Replace fonts if they fight the philosophy
- Remove any element that doesn't earn its place
Render the refined version. Overwrite the artifact.
6. Multi-page (optional)
If the user requests a series, treat each page as a story beat — distinct but philosophically continuous. Bundle as a multi-page PDF or numbered PNGs ({slug}-01.png, {slug}-02.png, …).
7. Validation
philosophy.md exists with movement name + 4–6 paragraphs + subtle-reference section
- Artifact file exists at the expected path
- Open and verify: nothing falls off canvas, no overlapping text, palette ≤ 5 distinct colors, every element has margin
- Original work — no traceable artist-style copy
Output format
agents/design-assets/{slug}/philosophy.md
agents/design-assets/{slug}/{slug}.{pdf|png} (or numbered series for multi-page)
- One concluding line stating both file paths
Gotcha
- No artist mimicry — copying a living artist's signature style is copyright risk and breaks the original-work mandate. Propose an original direction.
- Text discipline — most pieces fail because text creeps in as paragraphs. Words are visual accents, not explanation.
- One canvas — single page unless multi-page is explicitly requested.
- Font availability — the environment may not ship your target font. Procedure step 4.2 governs selection; pick a fallback before render time and place the file in the working fonts dir.
- Output location — always
agents/design-assets/{slug}/. Never write binary artifacts to the repo root or to source-of-truth dirs.
- Refinement loop is real — first render is the draft, not the deliverable.
Craftsmanship standard
The deliverable is judged against human-crafted work, not against AI-generated comparables. Visible deliberation, intentional asymmetry, and palette restraint are the markers; default templates, generic gradients, and centered safe layouts are the failure mode. If the artifact would pass for "auto-generated stock visual", it has not earned its place — refine until intent is legible.
Frugality Standards
Apply the Frugality Charter.
- Per the default-terse rule,
philosophy.md opens with the movement name — no "In this document I will describe …" frame.
- Per the cheap-question check, numbered-options blocks only at brief intake (where consequences differ).
- Per the post-action summary suppression, ship the files; skip an "## Artist statement" wrapper.
Pre-save self-check:
- Does
philosophy.md carry filler superlatives ("absolute pinnacle", "transcendent")?
- Does the canvas include explanatory text instead of visual-accent text?
- Are more than 5 distinct colors present without justification in the philosophy?
- Is the subtle reference announced explicitly in the visual, breaking the "those who know" principle?
Do NOT
- Copy a living artist's signature visual style
- Generate cartoony / amateur / template-store output
- Add paragraphs of text — visuals communicate, words accent
- Skip the philosophy file — the artifact without it is just an image
- Skip the refinement pass
- Write binary artifacts to the repo root or to source-of-truth dirs
See also
html-deck — multi-slide HTML presentations
(fixed-canvas deck with navigation); this skill owns single-frame static
art, not decks.
1---2name: canvas-design3description: Creating static visual art — posters, marketing visuals, brand assets, PDF/PNG design pieces — on 'design a poster' or 'mach uns ein Visual'. Grounded by design-intelligence.4---56# canvas-design78## When to use910Use when:1112* User asks for a poster, marketing visual, brand asset, social-media graphic, cover art13* Output is a static `.pdf` or `.png` design piece (not a UI mockup, not a wireframe)14* The deliverable is the visual artifact itself1516Do NOT use when:1718* Designing a UI component or app screen → `fe-design`, `ui-component-architect`, `react-shadcn-ui`, `blade-ui`, `flux`19* Tailwind / shadcn / Flux component styling → `tailwind-engineer`20* Brand voice / tone definition → `voice-and-tone-design`21* Release announcement copy → `release-comms`2223## Goal2425Produce one finished visual artifact (`.pdf` or `.png`) backed by an original design philosophy. Both files ship together.2627The work emphasizes: visual expression over text · original direction (no artist mimicry) · composition that looks deliberated, not generated.2829## Preconditions3031* Brief from user (theme, intent, occasion, target medium, size constraint)32* Output directory: `agents/design-assets/{slug}/` — create if missing33* Image-generation tooling available (Python with Pillow / matplotlib / cairo, SVG → PNG conversion, or whatever the environment ships)3435## Procedure3637### 1. Brief intake3839One numbered-options block surfaces: theme / occasion · target medium + dimensions (web 1200×630? print A3? square 1080×1080?) · color & mood direction · hard constraints (logo required? color to avoid?) · single page or series.4041If the brief says "in the style of [living artist]", flag the copyright risk and propose an original direction.4243### 2. Design philosophy4445Author `agents/design-assets/{slug}/philosophy.md` — 4–6 paragraphs naming:4647* **Movement name** — 1–2 words ("Chromatic Silence", "Brutalist Joy", "Analog Meditation")48* **Visual language** — how the philosophy manifests through space, form, color, scale, composition, rhythm49* **Text role** — sparse, accent only; never paragraphs50* **Craftsmanship anchor** — visible deliberation, not template polish5152Stay aesthetically specific but leave interpretive room for the canvas execution.5354### 3. Subtle conceptual thread5556Identify a single niche reference embedded in the work — not announced, woven into form / color / composition. A jazz musician quoting another song: those who know catch it, others enjoy the music.5758Document it in `philosophy.md` under `## Subtle reference`.5960### 4. Canvas execution6162Produce `agents/design-assets/{slug}/{slug}.{pdf|png}`:63641. Pick the execution tool (Pillow, matplotlib, SVG, or framework-native)652. **Font selection** — pick a font that earns the philosophy. Inspect a working dir (e.g. `agents/design-assets/{slug}/fonts/` — create if missing) and place the chosen file there before render. System defaults (Arial, Helvetica, DejaVu, the matplotlib default sans) are the AI-template tell; reach for them only as deliberate fallback, never as the unexamined default663. Limited palette — 2–5 colors, intentional and cohesive674. Geometric or organic forms per philosophy685. Text — sparse, design-forward, integrated as visual element; never overlapping, never falling off canvas696. Margins — every element contained, breathing room707. Repeating patterns, layered elements, systematic markers as the philosophy permits7172### 5. Refinement pass7374After the first render, **do not add more graphics**. Refine what exists:7576* Tighten composition cohesion77* Adjust spacing, alignment, color balance78* Replace fonts if they fight the philosophy79* Remove any element that doesn't earn its place8081Render the refined version. Overwrite the artifact.8283### 6. Multi-page (optional)8485If the user requests a series, treat each page as a story beat — distinct but philosophically continuous. Bundle as a multi-page PDF or numbered PNGs (`{slug}-01.png`, `{slug}-02.png`, …).8687### 7. Validation8889* `philosophy.md` exists with movement name + 4–6 paragraphs + subtle-reference section90* Artifact file exists at the expected path91* Open and verify: nothing falls off canvas, no overlapping text, palette ≤ 5 distinct colors, every element has margin92* Original work — no traceable artist-style copy9394## Output format95961. `agents/design-assets/{slug}/philosophy.md`972. `agents/design-assets/{slug}/{slug}.{pdf|png}` (or numbered series for multi-page)983. One concluding line stating both file paths99100## Gotcha101102* **No artist mimicry** — copying a living artist's signature style is copyright risk and breaks the original-work mandate. Propose an original direction.103* **Text discipline** — most pieces fail because text creeps in as paragraphs. Words are visual accents, not explanation.104* **One canvas** — single page unless multi-page is explicitly requested.105* **Font availability** — the environment may not ship your target font. Procedure step 4.2 governs selection; pick a fallback before render time and place the file in the working fonts dir.106* **Output location** — always `agents/design-assets/{slug}/`. Never write binary artifacts to the repo root or to source-of-truth dirs.107* **Refinement loop is real** — first render is the draft, not the deliverable.108109## Craftsmanship standard110111The deliverable is judged against human-crafted work, not against AI-generated comparables. Visible deliberation, intentional asymmetry, and palette restraint are the markers; default templates, generic gradients, and centered safe layouts are the failure mode. If the artifact would pass for "auto-generated stock visual", it has not earned its place — refine until intent is legible.112113## Frugality Standards114115Apply the [Frugality Charter](../../contexts/contracts/frugality-charter.md).116117* Per the default-terse rule, `philosophy.md` opens with the movement name — no "In this document I will describe …" frame.118* Per the cheap-question check, numbered-options blocks only at brief intake (where consequences differ).119* Per the post-action summary suppression, ship the files; skip an "## Artist statement" wrapper.120121**Pre-save self-check:**1221231. Does `philosophy.md` carry filler superlatives ("absolute pinnacle", "transcendent")?1242. Does the canvas include explanatory text instead of visual-accent text?1253. Are more than 5 distinct colors present without justification in the philosophy?1264. Is the subtle reference announced explicitly in the visual, breaking the "those who know" principle?127128## Do NOT129130* Copy a living artist's signature visual style131* Generate cartoony / amateur / template-store output132* Add paragraphs of text — visuals communicate, words accent133* Skip the philosophy file — the artifact without it is just an image134* Skip the refinement pass135* Write binary artifacts to the repo root or to source-of-truth dirs136137## See also138139- [`html-deck`](../html-deck/SKILL.md) — multi-slide HTML presentations140 (fixed-canvas deck with navigation); this skill owns single-frame static141 art, not decks.