agentsclimarketplace

Frontend design quality

Skill bartoszarendt/agenticloop/skills/frontend-design-quality

Use when implementing or revising any frontend UI – landing pages, marketing sites, portfolios, app screens, dashboards, or components – and when choosing layout, typography, color, spacing, motion, or styling. Enforces a design-read first, real design systems, anti-slop discipline, accessibility, and a pre-flight visual audit so the interface does not look templated or AI-generated.From its SKILL.md

Install
npx -y skills add bartoszarendt/agenticloop --skill frontend-design-quality

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

11.3 KB, as published. Nobody here has run it

Frontend design

Good UI is not a default aesthetic applied on top of code. It is a decision made before the first line: read the brief, pick a direction that fits the audience, then build it without the tells that mark output as machine-generated. This skill is the engineer's domain reference for any task that changes how a feature looks, feels, moves, or is interacted with. The workflow authority is still the Agentic Loop: scope from the task record, build under [[tdd-implementation]], prove it under [[verification-evidence]], and accept under [[review-and-accept]].

Stack assumptions below (React/Tailwind/Motion) are defaults. When the target project uses a different stack, keep the principles and translate the mechanics.

1. Read the brief before generating

Most weak UI comes from jumping to a default look instead of reading the room. Before any markup, infer and state a one-line design read:

"Reading this as: <page or surface kind> for <audience>, with a <vibe> language, leaning toward <design system or aesthetic family>."

Signals to read: surface kind (landing, portfolio, dashboard, app screen, redesign), vibe words the user used, reference URLs or products named, the audience (the audience picks the aesthetic, not your taste), existing brand assets, and quiet constraints (accessibility-critical, public-sector, regulated, trust-first) that override aesthetic preference.

If the read genuinely diverges, ask one clarifying question. If you can infer confidently, state the read and proceed – do not stall.

2. Three dials

After the read, set three values and let them gate layout, motion, and density:

  • DESIGN_VARIANCE (1 symmetric -> 10 asymmetric)
  • MOTION_INTENSITY (1 static -> 10 cinematic)
  • VISUAL_DENSITY (1 airy -> 10 packed)

Defaults 7 / 6 / 4 for marketing surfaces. Trust-first / regulated / accessibility-critical pulls all three down (3 / 2 / 5). Dashboards and data UI raise density and lower variance. Overrides happen conversationally, never by asking the user to edit a config.

3. Use a real design system when the brief implies one

If the brief reads as an established system, install and use the official package rather than recreating its CSS or importing tokens then overriding them: Fluent, Material 3, Carbon, Polaris, Atlaskit, Primer, GOV.UK Frontend, USWDS, Radix Themes, shadcn/ui, or Tailwind utilities for modern SaaS. One system per project. When the brief is an aesthetic (glassmorphism, bento, brutalism, editorial, dark tech) there is no official package – build it honestly with native CSS plus a maintained library, and label borrowed inspiration as such in comments.

Before importing any third-party library, check the project manifest and output the install command if it is missing. Never assume a package exists.

4. Anti-default discipline

Reach past the machine defaults deliberately:

  • No auto AI-purple/blue glow gradients; one accent under ~80% saturation, locked across the page.
  • Avoid Inter as a reflex default; pick a brand-appropriate face. Serif only when the brand is genuinely editorial/luxury and you can say why.
  • No centered-hero-over-dark-mesh, no three identical feature cards, no generic glass on everything.
  • Cards only when elevation marks real hierarchy; otherwise group with borders, dividers, or space.
  • One corner-radius scale, one icon family, one copy register, one theme (sections do not invert).

5. Mandatory pre-flight audit (a failing item is shipping broken work)

  • Hero fits the first viewport: headline <= 2 lines, subtext <= 20 words, CTA visible without scrolling. A 4-line headline is a font-size error, not a copy-length one.
  • One nav line on desktop, height <= 80px.
  • One label per CTA intent across the whole page; CTA text never wraps at desktop.
  • Contrast: every button, form input, placeholder, focus ring, and helper text passes WCAG AA (4.5:1 body, 3:1 large). No white-on-white CTAs, no placeholder-as-label.
  • Layout variety: a layout family appears at most once; max two consecutive image+text splits; eyebrows limited to one per three sections.
  • Real images, not unlabeled div fakes: use a real or generated image, picsum.photos/seed/... placeholders, or a clearly-labeled TODO slot. Do not present CSS mock UI as a real product screenshot; label it as a concept/mock when real assets do not exist. Never hand-roll decorative SVG icons.
  • Full interactive states: loading (skeletons, not spinners), empty, error, and tactile :active feedback – not just the happy path.
  • Copy self-audit: re-read every visible string; cut AI-cute phrasing and fake-precise numbers.

For dashboards, data tables, charts, forms, navigation, and mobile/native surfaces, also use the product UI checklist below.

6. Motion and accessibility guardrails

  • Animate only transform and opacity. Never bind animations to scroll via addEventListener("scroll") or drive continuous values through component state; use the framework's motion-value / scroll hooks, IntersectionObserver, or CSS scroll-driven animations.
  • Every animation must be motivated (hierarchy, storytelling, feedback, or state). "It looked cool" is not a reason. If MOTION_INTENSITY > 3, honor prefers-reduced-motion and collapse to static.
  • Design light and dark together from the start; keep hierarchy, brand, and contrast intact in both. Avoid pure #000/#fff. Respect prefers-color-scheme unless the brand insists on one mode.

7. Product UI checklist

The marketing-page rules above cover landing pages, portfolios, and redesigns. This checklist covers dashboards, data tables, charts, forms, navigation, and mobile/native surfaces. Use the sections relevant to the surface. The critical and high-priority groups are a hard final pass.

Accessibility (critical)

  • Text contrast >= 4.5:1 (3:1 for large text 18px+). Verify in both light and dark.
  • Visible focus rings (2-4px) on every interactive element; never remove them.
  • Descriptive alt for meaningful images; aria-label or native accessibility label for icon-only buttons.
  • Tab order matches visual order; full keyboard support, including a path out of every modal.
  • Sequential heading hierarchy (h1 -> h6), no skipped levels.
  • Never convey meaning by color alone; pair it with text, icon, or pattern.
  • Respect prefers-reduced-motion and system text scaling without truncation or layout breakage.

Touch and interaction (critical)

  • Touch targets >= 44x44pt (iOS) / 48x48dp (Android); expand hit area when the glyph is smaller.
  • Keep >= 8px gaps between adjacent touch targets.
  • Use tap/click for primary actions; never rely on hover alone.
  • Disable buttons during async work and show progress.
  • Visual press feedback within about 100ms; do not redefine system gestures such as back-swipe or pinch-zoom.
  • Keep primary controls clear of notches, Dynamic Island, and gesture bars.

Performance (high)

  • Use WebP/AVIF, responsive srcset, and lazy-load below-the-fold media.
  • Declare width/height or aspect-ratio to keep CLS < 0.1; reserve space for async content.
  • Use font-display: swap; preload only critical fonts.
  • Animate transform/opacity only; batch DOM reads then writes; debounce/throttle scroll/resize.
  • Virtualize lists of 50+ items; keep per-frame work under about 16ms for 60fps.
  • Use skeletons or shimmer for operations over about 1s, not long blocking spinners.

Layout and responsive (high)

  • Use width=device-width, initial-scale=1; never disable zoom.
  • Build mobile-first, then scale up with systematic breakpoints such as 375 / 768 / 1024 / 1440.
  • Body text >= 16px on mobile; 35-60 chars/line mobile, 60-75 desktop.
  • No horizontal scroll on mobile; consistent desktop max-width.
  • Use a 4/8pt spacing system, a defined z-index scale, and min-h-dvh over 100vh.
  • Fixed bars reserve safe padding so content is not hidden behind them.

Forms, navigation, charts

  • Forms need visible labels, field-local errors, submit loading/success/error, semantic input types, autofill support, first-invalid-field focus, and aria-live/role="alert" for screen readers.
  • Navigation needs a visible current location, predictable back behavior, deep-linkable screens, and clear separation between primary, secondary, and destructive actions.
  • Charts need the right chart type for the data, nearby legends, keyboard/touch reachable interactions, table alternatives, screen-reader summaries, empty/loading/error states, and non-color-only encoding.

Light/dark and visual polish

  • Primary text >= 4.5:1 and secondary text >= 3:1 in both themes.
  • Borders, dividers, focus rings, disabled states, and interaction states must remain visible in both themes.
  • Use one icon family with consistent stroke width and sizing tokens; vector only, no emoji as structural icons.
  • Press states use color/opacity/elevation without shifting layout bounds.
  • Use official brand assets only, with correct proportions and clear space.

8. The em-dash and AI-tell ban

The em-dash (U+2014) and en-dash-as-separator (U+2013) are banned in all user-visible text: headlines, labels, buttons, body, captions, attribution, and alt text. Use a regular hyphen, a comma, a colon, parentheses, or two sentences. A single visible em-dash fails the pre-flight audit.

Also banned by default (allow only when the brief explicitly calls for them): version/status eyebrows in the hero, section-number eyebrows (001 / Capabilities), decorative status dots, locale/weather strips, scroll cues, atmospheric photo-credit captions, and generic placeholder names/avatars.

9. Redesigns

Detect the mode first: greenfield, redesign-preserve, or redesign-overhaul. For a preserve redesign, audit the current state and extract brand tokens before changing anything, and never silently change URL structure, nav labels, form field names, the logo, or legal/consent copy. SEO and analytics regressions are the biggest redesign risk.

Red flags

  • Code was written before any design read was stated.
  • A design-system's tokens were imported, then 90% overridden by hand.
  • The page claims motion but is static, or animates width/height/top/left.
  • A CTA wraps at desktop, the hero overflows the fold, or contrast fails.
  • An unlabeled CSS mockup presented as a real product screenshot, hand-rolled SVG icon, or AI-purple gradient shipped as a default.
  • Any em-dash is visible in the rendered output.
  • A redesign changed routes, nav labels, or form field names without explicit approval.

See also

  • [[tdd-implementation]] for the build cycle behind a component or screen.
  • [[verification-evidence]] before claiming a UI change is done.
  • [[review-and-accept]] for design-quality acceptance.

Sources

Distilled from two MIT-licensed community skills, adapted to Agentic Loop conventions: taste-skill (anti-slop frontend taste) and ui-ux-pro-max (UI/UX guideline database).

Keep looking

Skills are one crate of 627,801. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.