Design craft

Seven references that give DevFlow’s design skills taste: reading a brief, tuning dials, a catalogue of generated-look patterns, a mechanical pre-flight gate, and a redesign protocol.

DevFlow’s design skills already enforce correctness: brand tokens, dark mode, contrast, semantic markup, performance budgets. Correctness does not buy taste. A surface can pass every one of those checks and still look generated, because the model reached for a default instead of making a decision.

Seven references close that gap. They ship in the DevFlow runtime, so every design skill loads the same judgement:

ReferenceCoversLoaded by
design-craft.mdDesign read, three dials, four consistency locks, typography, colour, layout discipline, motion, content, floorsBoth design skills, brand-builder
design-tells.mdThe catalogue of generated-look patterns, seven categoriesBoth design skills
design-preflight.mdThe gate run before a surface is called doneBoth design skills
design-redesign.mdChanging a surface that already existsOn demand, when redesign mode is detected
design-stack-web.mdHugo + Tailwind: font loading, icons, breakpoints, motion, performanceeden-web:frontend-design, brand-builder
design-stack-flutter.mdFlutter + eden-ui: EdenTheme tokens, motion, states, performanceeden-flutter:frontend-design
full-output.mdOutput-completeness enforcementThe executor agent
~/.claude/devflow/references/

That last one is not a design concern. It applies to every agent that writes files, and it is wired into the executor.

Which skills use them

SkillPluginWhat it gained
eden-web:frontend-designeden-ui-webDesign read, redesign detection, tells audit, pre-flight gate
eden-flutter:frontend-designeden-ui-flutterSame, with /devflow:ui-eval as the evidence step
eden-web:brand-buildereden-ui-webRecords a per-brand design posture the others inherit
executor (agent)devflow<output_completeness>: scope locking and a placeholder ban

The design skills live in companion plugins from the same marketplace. The references live in the devflow plugin runtime because that is the one every install has, and because @~/.claude/devflow/references/... resolves at runtime where a repo-relative path does not.

The four moves

1. State a design read

Before any markup, one line naming the surface kind, the audience, the visual language and the foundation:

Reading this as: a pricing page for procurement-minded B2B buyers, restrained editorial language, on the project’s existing brand tokens with low motion.

The read forces decisions that otherwise get made by accident — most importantly that the audience picks the register, not the agent’s preference. If the read is genuinely ambiguous, the skill asks exactly one question. Not a questionnaire; a questionnaire is a way of avoiding the decision.

2. Set three dials

Dial110
EXPRESSIONsymmetrical, conventionalasymmetric, art-directed
MOTIONstaticchoreographed
DENSITYgallery-airyinstrument-panel

Derived from the surface kind, then bounded by two DevFlow-specific rules:

Dial values get recorded in the job’s SUMMARY.md, so a reviewer can tell whether restraint was a decision or an omission.

3. Sweep the tells

A catalogue of what generated interfaces look like, organised as a review checklist: structure, typography, colour, motion, decoration, placeholder content, and interface copy.

Most of these were good ideas before they became defaults. They are tells because a model reaches for them when it has not made a decision — so their presence is evidence, not a crime. Representative entries:

A tell is a finding only when the brief does not call for it

The skills are instructed to name the justification they looked for rather than listing a pattern name on its own. A brutalist brief genuinely wants raw hairline grids; a trading dashboard genuinely wants status dots. The rule is that the pattern needs a reason, not that the pattern is banned.

4. Clear the floors, then pre-flight

Floors are not dials and do not move for aesthetics: AA contrast in both themes, visible focus, 44×44 targets, a real prefers-reduced-motion path, semantic landmarks, deliberate alt text, no horizontal scroll at 320px.

The pre-flight check is a gate, not a checklist to note. A failure means fix and re-check. Three of its items need actual rendering — both themes, the 320/768/1280 breakpoints, and evidence capture — because reasoning about markup is not checking.

For Flutter, /devflow:ui-eval is the stronger evidence path: it scores every declared state offline and writes output the verifier consumes, which catches the usual gap of a widget test that exercises the happy path and ignores loading, empty and error.

The stack layer

The principles are stack-neutral; the recommendations are not. Upstream they assume React, Next.js, Motion and GSAP. Here they are re-grounded twice:

UpstreamHugo + TailwindFlutter + eden-ui
next/fontSelf-host via resources.Get + @font-face, or preconnect for a hosted foundryBundle in pubspec.yaml; never fetch at runtime
React icon packagesOne vendored SVG set rendered through a partial that errorfs on a missOne icon family, one optical weight, tooltip as accessible name
GSAP ScrollTrigger sticky-stackposition: sticky plus animation-timeline: view()AnimationController with disposal, AnimatedBuilder with a child
Motion useMotionValueIntersectionObserver fallback; never a scroll listenerNever setState per frame; ValueListenable or a controller
min-h-[100dvh]Same — dvh, never vhEdenResponsive bands at 600 / 1024dp
Exact banned hex valuesNamed palette families to avoid, with alternativesSame, applied at brand-authoring time
npm install …hugo mod graph, hugo version | grep extendedflutter pub get, flutter analyze

Two details worth calling out, because they are easy to get wrong in both directions:

Attribution

DevFlow’s design guidance is derived from taste-skill by Leonxlnx, used under the MIT License. This is derivation, not inspiration: structure, many rules, and specific thresholds are adapted from that project, and the MIT license text and copyright notice are reproduced in NOTICE.md as that license requires. Every derived file carries an attribution header.

Nothing is copied verbatim and no taste-skill files are redistributed. The material was adapted rather than vendored:

taste-skill is worth reading directly for a much larger pattern catalogue, its research notes on model truncation, and a set of style-variant skills DevFlow does not mirror.