diff options
| author | Craig Jennings <c@cjennings.net> | 2026-04-19 15:57:50 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-04-19 15:57:50 -0500 |
| commit | a8deb6af6a14bc5e56e86289a2858a0258558388 (patch) | |
| tree | 274bde1b3f7f592ad9e0462d4069863f9e287727 /frontend-design/references/design-review.md | |
| parent | ec31be0eb39f5b86c62729a24914c2e699b42232 (diff) | |
| download | rulesets-a8deb6af6a14bc5e56e86289a2858a0258558388.tar.gz rulesets-a8deb6af6a14bc5e56e86289a2858a0258558388.zip | |
feat: adopt frontend-design (Apache 2.0 fork) + progressive-disclosure extensions
Forked verbatim from anthropics/skills/skills/frontend-design (Apache 2.0).
LICENSE.txt preserved. Upstream SKILL.md prose (aesthetic guidance,
archetype list, anti-pattern callouts) kept intact.
Extensions added (clearly marked, load progressively — base SKILL.md
stays lean for simple cases):
SKILL.md:
- Description extended with explicit negative triggers: narrow
maintenance (single CSS bug, dependency upgrade, a11y-only retrofit),
operational contexts where stakeholder has specified "minimal,
functional, no creative direction," backend / API work, non-web UIs
(mobile native, desktop, terminal), and refactoring without visible
design component.
- New "Workflow" section at the end of SKILL.md: four phases (intake,
commitment, build, review) with pointers to reference files. Simple
component tweaks skip the workflow; non-trivial redesigns walk it.
- New "References" section: table mapping file → load-when condition.
- Attribution footer marking upstream source + what's locally added.
references/workflow.md (~150 lines)
Intake questions (purpose, audience, operational context, functional
priority, technical constraints, brand references, success criteria).
Commitment step (archetype pick, trade-offs, font pairing, palette,
motion, layout as one-line decisions). Build reminders. Review
pointer. Guidance on when to skip phases.
references/accessibility.md (~200 lines)
WCAG AA contrast thresholds + practical check guidance. Keyboard
navigation + focus management. Semantic HTML + ARIA rules. Reduced-
motion CSS snippet. Smoke checklist. Operational-context note for
defense / ISR work.
references/responsive.md (~160 lines)
Mobile-first vs desktop-first decision. Named breakpoints (Tailwind-
style) vs magic pixels. Container queries. Aesthetic translation
table — how each archetype handles small-screen scaling. Responsive
typography with clamp(). Operational-dashboard note: desktop-primary
is a legitimate product decision.
references/design-review.md (~170 lines)
Archetype check (does the build read as what was committed to?).
Anti-pattern grep for fonts, palette, layout, motion, backgrounds,
components. Code-quality-match check (ornate design + lazy code =
failure). Performance sanity. Convergence check (if last 3 builds
all used the same archetype, break the pattern). The one-sentence
test for memorability.
references/rationale-template.md (~160 lines)
Template for design-rationale.md alongside the build. Nine sections
(purpose, archetype, locked decisions, deliberately absent,
accessibility, responsive, implementation, open questions,
references). Filled example using a DeepSat SOCOM demo landing page
to show density and specificity.
Structure matches Anthropic's own pdf / docx / webapp-testing pattern
(SKILL.md entry + references/ for progressive disclosure). Makefile
SKILLS extended; make install symlinks globally.
Adoption caveat resolved: name kept as `frontend-design` (not renamed
to ui-design) — "frontend" signals scope (web code, not mobile /
desktop / terminal UIs), upstream parity preserved for attribution.
Diffstat (limited to 'frontend-design/references/design-review.md')
| -rw-r--r-- | frontend-design/references/design-review.md | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/frontend-design/references/design-review.md b/frontend-design/references/design-review.md new file mode 100644 index 0000000..656b488 --- /dev/null +++ b/frontend-design/references/design-review.md @@ -0,0 +1,93 @@ +# Design Review + +Self-audit before handoff. The goal isn't "did I follow the rules" — it's "does the build match the commitment, and are any AI-slop defaults hiding in here?" Assume defaults crept in somewhere; find them. + +## Archetype Check + +Pull up the commitment from Phase 2 (or the `design-rationale.md` if you emitted one). Answer honestly: + +- [ ] Does the build read as the chosen archetype to a stranger? +- [ ] Are the font pairing, palette, motion philosophy, and layout approach the ones committed to, or did they drift? +- [ ] Is the archetype recognizable on the first five seconds of viewing, or does it require explanation? + +A build that "sort of" hits the archetype usually hits none cleanly. Better to overshoot than hedge. + +## Anti-Pattern Grep + +These are specific defaults that sneak back in even after you committed to something else. Check for each: + +**Fonts:** +- [ ] No Inter, Roboto, Arial, Helvetica (unless deliberately justified for this archetype) +- [ ] No "system-ui" family unless the archetype is literally "system-native" +- [ ] Display font is distinct from body font — if both are the same (e.g., all Inter), that's a miss +- [ ] Variable fonts with too many weights load-heavy — pick 2-3 weights max + +**Palette:** +- [ ] No purple-to-pink gradient on white +- [ ] No "evenly-distributed" palette — 6 colors all at 50% saturation reading as "gray blah" +- [ ] Dominant colors take more space than accents; accents have real contrast +- [ ] No "generic teal" (#14b8a6 and its cousins) unless the archetype specifically earns it + +**Layout:** +- [ ] Not a cards-in-a-grid with no hierarchy +- [ ] Not centered-column-of-text-with-a-hero-image (the default blog post) +- [ ] Not three-equal-feature-boxes (the default SaaS landing page) +- [ ] There's at least one layout choice the reader will remember + +**Motion:** +- [ ] Hover states exist and surprise (not just `opacity: 0.8`) +- [ ] Page load has a considered reveal (staggered, or deliberately instant — not "jump in as DOM parses") +- [ ] `prefers-reduced-motion` respected +- [ ] No unrequested scroll-jacking or mandatory scroll animations + +**Background / Atmosphere:** +- [ ] Not plain white or plain `#0a0a0a` background (unless that's the archetype's literal point) +- [ ] Some depth: gradient mesh, noise, dramatic shadow, decorative border, ambient texture — something +- [ ] Whatever's chosen, it feels *designed* not *applied* (random noise texture on anything = lazy) + +**Components:** +- [ ] Buttons don't look like every shadcn button ever +- [ ] Cards aren't the generic "rounded-lg shadow-md bg-white p-6" pattern +- [ ] Form fields have considered states (hover, focus, error, disabled, loading) +- [ ] Custom cursor, custom selection color, custom scrollbar where fitting for the archetype + +## Code Quality Match + +The aesthetic and the code have to agree. Red flags: + +- [ ] Ornate maximalist design + 40 lines of CSS = mismatch (ornate needs elaborate code) +- [ ] Claimed "minimalism" + 2000 lines of utility classes + 5 dependencies = mismatch (minimal aesthetic needs restrained code) +- [ ] No CSS variables in a multi-page design = palette will drift across components +- [ ] Inline styles scattered in JSX = the system hasn't been thought through + +Elegance in the code is part of the deliverable, not an afterthought. + +## Accessibility Smoke Check + +Run through [accessibility.md](accessibility.md)'s smoke checklist at minimum. If the build will ship, run Lighthouse + axe as well; fix CRITICAL and SERIOUS findings before handoff. + +## Responsive Smoke Check + +Resize the viewport to `sm` (~640px) and `lg` (~1024px). Does the aesthetic translate, or does the layout collapse to the AI-default "one centered column of stacked elements"? Some archetypes *should* collapse to a single column on mobile — but that's a choice, not a fallback. Verify via [responsive.md](responsive.md)'s checklist. + +## Performance Sanity + +- [ ] No 5MB hero image +- [ ] No autoplay video that isn't essential +- [ ] Font loading isn't blocking render (use `font-display: swap` or similar) +- [ ] Animations don't thrash layout (use `transform` and `opacity`, not `width` / `top` / `left`) +- [ ] Third-party scripts loaded async / deferred + +If the aesthetic requires heavy assets (hero videos, WebGL, etc.), that's fine — but it's a documented trade-off, not an accident. + +## Convergence Check + +If you've used this skill recently, what did the last build look like? If the last three builds all picked "brutally minimal" or all used the same font pairing — convergence. Break the pattern deliberately on the next invocation. The aesthetic space is large; defaulting to the same corner repeatedly is a failure. + +## Final: The One-Sentence Test + +Can you write one sentence describing what's memorable about this build? Not "it's clean and modern" — that applies to everything and nothing. A real answer: "The asymmetric terminal-green monospace hero with the brutalist grid and tiny rotating pixel cursor." If the sentence is vague, the design didn't commit hard enough. + +## Handoff + +Emit a `design-rationale.md` via [rationale-template.md](rationale-template.md) so the next iteration has context. Commit the rationale alongside the code — future work starts with it loaded, not with the aesthetic forgotten. |
