Senior Frontend
borghei/Claude-Skills
Frontend development for React, Next.js, TypeScript, and Tailwind CSS.
A skill your agent uses when designing or refreshing a web UI or landing page — visual concept, type/color/spacing/motion tokens, composition, rescuing a UI that reads AI-generic, or a graded design…
$ npx skills add ericrisco/rsc-harness --skill design -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ericrisco/rsc-harness design --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/design .claude/skills/design && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "design" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/design into .claude/skills/design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "design", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ericrisco/rsc-harness/tree/main/skills/designType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ericrisco/rsc-harness --skill design -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ericrisco/rsc-harness design --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/design .agents/skills/design && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "design" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/design into .agents/skills/design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "design", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill design -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ericrisco/rsc-harness design --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/design .cursor/skills/design && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "design" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/design into .cursor/skills/design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "design", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ericrisco/rsc-harness.git --path skills/design--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ericrisco/rsc-harness --skill design -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ericrisco/rsc-harness design --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/design .gemini/skills/design && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "design" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/design into .gemini/skills/design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "design", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ericrisco/rsc-harness designInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ericrisco/rsc-harness --skill design -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/design .github/skills/design && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "design" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/design into .github/skills/design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "design", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill design -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ericrisco/rsc-harness design --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/design .opencode/skills/design && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "design" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/design into .opencode/skills/design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "design", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
designA skill your agent uses when designing or refreshing a web UI or landing page — visual concept, type/color/spacing/motion tokens, composition, rescuing a UI that reads AI-generic, or a graded design…
Design is an agent skill from ericrisco/rsc-harness. Use when designing or refreshing a web UI or landing page — visual concept, type/color/spacing/motion tokens, composition, rescuing a UI that reads AI-generic, or a graded design review. Brand-grounded and research-first; ships Tailwind v4 + Next.js 15 under WCAG 2.2 AA and Core Web Vitals budgets. NOT the words on the page (that is marketing), NOT the App Router build (that is nextjs).
Its SKILL.md is about 6.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 18 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/ai-tells.md`).
It sits in Frontend & Design, covering Landing pages, Accessibility and Frontend development. It works with Next.js and Tailwind CSS. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 92fde8f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Shell), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Design loads about 6.6k tokens when it runs, and up to ~31k if it reads all its reference files. Until then it costs about 100 tokens; SKILL.md has 3,109 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from ericrisco/rsc-harness at commit 92fde8f, republished under its MIT licence (© ericrisco). 3,109 words, ~6,588 tokens.
.claude/skills/design/SKILL.md (or your agent's skills folder). This skill also uses 15 other files; get the full folder from GitHub.Hand-off — the visual system vs the craft of motion. This skill owns the visual system and page
composition, and sets motion intent + budget only. The implementation of an animation is
../motion-craft/SKILL.md's; how a piece of interface should be BUILT — boundaries, state, the
loading and empty and error states — is ../ui-engineering/SKILL.md's. When a request could belong to
several of those, start from the one that owns the decision, not the one that owns the file. The motion reference in
this skill defers its mechanics to them rather than restating them.
Research the best current work, then ship a premium, accessible, fast, high-converting interface.
SDD gate. If this fired on a new, non-trivial feature or behaviour change and there is no approved spec + plan under
02-DOCS/wiki/sdd/, hand off to../specify/SKILL.mdfirst — it runs brainstorm → spec → plan → tasks before any code, then routes back here once the plan is approved. Build straight from here only for a genuinely one-line / low-risk change. Method:../sdd/SKILL.md.
Hand-offs. The WORDS are ../marketing/SKILL.md's: it co-owns the 02-DOCS/wiki/brand/ study (the words dimensions there, the visual ones here), and deep keyword research, GEO, or a technical SEO audit belongs to it — this skill only enforces SEO-aware structure in markup. The BUILD (App Router / React 19) is ../nextjs/SKILL.md's. Mirroring the brand tokens into a Flutter app is ../flutter/SKILL.md's. Pure backend/data/infra with no UI surface: decline — there is nothing to design. Three references live outside this repo and are named for direction only, not invocable here: frontend-design-direction for dense internal tooling used daily (never paint a marketing skin on a tool that needs repeated daily use — fold its judgment in via the DIRECTION BRIEF); liquid-glass-design for native iOS 26 SwiftUI Liquid Glass (this skill ships the web glass approximation only); motion-ui / motion-foundations for motion-code mechanics (springs, AnimatePresence internals, layout animations — this skill sets motion intent + budget).
A design with no brand behind it is a guess, and a guess defaults to your AI-generic prior. That is why this gate is a hard stop rather than a warning: an incomplete brand study blocks the work.
Follow the harness 02-DOCS convention (brand study = wiki articles under 02-DOCS/wiki/brand/, raw inputs under 02-DOCS/raw/brand/, linked from root CLAUDE.md):
CLAUDE.md and look for a ## Brand & voice section pointing into 02-DOCS/wiki/brand/.... If present, read those articles.references/brand-grounding.md). Write/update the brand study into 02-DOCS/wiki/brand/ (and paste any raw inputs the user gives — screenshots, existing palettes, competitor lists — into 02-DOCS/raw/brand/), following the wiki article format, update wiki/index.md + wiki/log.md, and add/update a ## Brand & voice section in the root CLAUDE.md linking to it (create CLAUDE.md if absent).02-DOCS/wiki/brand/visual-identity.md").The completeness checklist spans visual identity (OKLCH color system, type pairing & scale, logo, imagery/illustration mood, density, radius/shadow/motion personality), reference/inspiration sites the user loves, layout preferences, dark-mode stance, accessibility & performance constraints, and brand voice/positioning (so copy and design agree). Full checklist + exact question script → references/brand-grounding.md.
When a dimension has no answer — the non-technical default, and the reason this gate used to be impassable: do not invent one and do not wave the STOP through. references/starting-point.md is how a starting point gets proposed instead: what the project already owns is checked first, the value comes from a reference you opened and measured, and it is written marked propuesto — which does not count as complete until the user confirms it.
The order is: brand grounding → trend research → build.
Fill the direction brief before you write a single line of markup:
DIRECTION BRIEF (fill before coding)
1. Purpose .......... what job does this interface do, in one sentence?
2. Audience ......... who repeats this workflow; what do they scan first?
3. Tone ............. pick: utilitarian | editorial | playful | industrial | refined | technical | minimal | dense | calm
4. Memorable detail . the ONE idea that makes it feel intentional (not a gradient)
5. Constraints ...... framework, a11y, perf budget, existing design system/tokensThen map the project type to composition, density, and motion budget. Density and composition follow the audience and the job, not a template — a SaaS operations tool should be dense, quiet, and scannable.
| Project type | Composition | Density | Motion budget |
|---|---|---|---|
| SaaS marketing | Full landing stack, hero→CTA | Generous | Tasteful reveals, hover affordances |
| Dev tool | Show the product/CLI first, then proof | Medium | Subtle, fast (≤200ms) |
| Dashboard / internal tool | Data-first, no hero | Dense, scannable | State-only (loading, success) |
| Portfolio / editorial | Expressive, asymmetric | Airy | Expressive but reduced-motion-safe |
| E-commerce | Product grid, fast PDP | Medium | Micro-interactions on add-to-cart |
| Docs | Sidebar + reading column | Calm, 65ch measure | Near-zero |
Trends churn quarterly and your built-in aesthetic prior is the median of every AI template ever scraped. Never prescribe from stale memory; counter it with a loop:
references/inspiration-sources.md — whole pages to beat, SaaS and conversion surfaces, real product flows (Mobbin, Page Flows), single patterns, and the design systems that are specification rather than inspiration — plus the tier-1 sites (Linear, Stripe, Vercel, Cursor, Resend). Every entry there carries a verification date; godly.website now redirects to recent.design, which is exactly why the list is dated and not inline.Re-research per project — trends churn, competitors moved, and the domain dictates the reference set. Whenever the brand study lacks aesthetic direction or the user asks for "modern" / "2026" / "premium", run this loop, fold the findings into the output with citations + dates, and refresh references/trends-2026.md. Full loop, source map, and synthesis template → references/research-method.md. Current snapshot (dated, cited) → references/trends-2026.md.
Obeying every constraint gets you to competent — a page that ships and passes review. It does NOT get you to premium, because every constraint catches an absence (no missing <h1>, contrast passes), while premium is a presence: a point of view. Competent-but-generic is the default failure mode of under-specified design output. Close it with four deliberate moves, in order, before and during the build:
[feeling] + [structural metaphor] for [audience doing job] (e.g. "quiet instrument-panel precision for ops engineers"). Drawn from the brand study + research exemplars, never your prior. If you cannot name what makes this surface different from the median SaaS page, you have no concept yet, and the output will default to generic.py-24 white card-grid sections read as one stripe. Vary format (full-bleed vs. contained, alternate media sides), background (a dark section between light ones anchors a CTA), density (a breathing statement after a dense grid), and container idiom (not everything is a bordered card). Inter-section gap > intra-section gap, padding stepping on the scale.Then, before claiming done, run the senior-designer crit and make at least one concrete change as a result: What is the one idea here (name it in a sentence)? Would this place on Awwwards/Godly or just pass review? What is the single most generic element right now — and replace it. Where does the eye land first, and is that what should win? If the logo were removed, would anyone know whose product this is? Does every section earn its place, or is one there out of habit (cut it)?
Concept formula, signature vocabulary, scale/rhythm rules, the crit, and a worked generic→signature dev-tool hero → references/signature-and-craft.md.
Copy-pasteable foundation. Tokens once, consume everywhere — design tokens, never magic numbers.
@theme block (OKLCH): tokens become CSS vars and utilities automatically — no tailwind.config.js.next/font (one display + one text face) plus a fluid clamp() ladder./* Good — Tailwind v4 @theme: OKLCH palette, tokens become CSS vars + utilities */
@import "tailwindcss";
@theme {
--color-bg: oklch(0.99 0 0);
--color-fg: oklch(0.21 0.01 256);
--color-muted: oklch(0.55 0.01 256);
--color-brand-500: oklch(0.62 0.19 256);
--color-brand-600: oklch(0.55 0.19 256);
--font-display: "Geist", ui-sans-serif, system-ui, sans-serif;
--font-text: "Inter", ui-sans-serif, system-ui, sans-serif;
--radius-card: 0.875rem;
--shadow-card: 0 1px 2px oklch(0 0 0 / 0.06), 0 8px 24px oklch(0 0 0 / 0.08);
--ease-out: cubic-bezier(0.22, 1, 0.36, 1);
}<!-- Bad — magic hex + arbitrary px, no system -->
<div style="background:#5b54ff;border-radius:13px;padding:17px">…</div>
<!-- Good — token-driven utilities -->
<div class="bg-brand-500 rounded-card p-4">…</div>Full token system, type scale, OKLCH ramp, bento, glass → references/visual-system.md.
Each section has ONE job. Cut any section that has none.
// app/page.tsx — Server Component, LCP-safe hero (Next.js 15 / React 19)
import Image from "next/image";
export default function Page() {
return (
<main>
<section className="mx-auto max-w-5xl px-6 pt-24 text-center">
<h1 className="text-balance text-5xl font-semibold tracking-tight md:text-6xl">
Ship the change in an afternoon, not a sprint
</h1>
<p className="mx-auto mt-5 max-w-xl text-pretty text-lg text-fg/70">
Concrete benefit, who it is for, and why now — no hype.
</p>
<a
href="#start"
className="mt-8 inline-flex min-h-11 items-center rounded-card bg-brand-500 px-6 font-medium text-white transition-colors hover:bg-brand-600"
>
Start free
</a>
<Image
src="/hero.avif"
alt="Product dashboard showing a one-click deploy"
width={1200}
height={720}
priority
className="mt-16 rounded-card shadow-card"
/>
</section>
</main>
);
}Full section-by-section anatomy, CTA cadence, pricing psychology, JSON-LD → references/landing-anatomy-and-cro.md.
Copy is benefit-led and specific, or the page has no value prop. One <h1> per page; semantic landmarks (header/nav/main/section/footer).
Bad — "Revolutionize your workflow with our seamless platform"
Good — "Deploy a fix in 4 minutes — no YAML, no on-call page"Ban: revolutionary · game-changer · cutting-edge · "In today's landscape" · unlock · seamless · elevate · supercharge · bait questions · "not X, just Y" · forced lowercase · "Excited to share".
Frameworks, value-prop canvas, Bad→Good rewrites, VOICE block → references/copywriting-frameworks.md.
scale(0.97).transition: all — it animates layout props and janks.transform, opacity, filter.prefers-reduced-motion is required, not optional.animation-timeline: view() FIRST (no JS, no CLS) before any JS library./* Good — native scroll-driven reveal, zero JS, explicit @supports fallback */
.reveal { opacity: 1; } /* default visible: no scroll-timeline support => never hidden */
@supports (animation-timeline: view()) {
@media (prefers-reduced-motion: no-preference) {
.reveal {
animation: reveal linear both;
animation-timeline: view();
animation-range: entry 0% cover 30%;
}
}
}
@keyframes reveal {
from { opacity: 0; translate: 0 16px; }
to { opacity: 1; translate: 0 0; }
}Timing tokens, micro-interactions, scroll/parallax, when to escalate to motion/react → references/motion-and-interaction.md.
Small things, applied consistently, are what reads as "designed".
| Detail | Bad | Good |
|---|---|---|
| Nested radius | Same radius parent + child | outer = inner + padding (concentric) |
| Shadows | One hard 0 4px 8px #000 | Layered transparent OKLCH shadows |
| Separation | Heavy drop shadow everywhere | Hairline 1px border first, shadow only for lift |
| Headings | Ragged wrap | text-wrap: balance |
| Body / captions | Orphan last word | text-wrap: pretty |
| Numbers/prices | Width jitters | font-variant-numeric: tabular-nums |
| Images | Edge blurs into bg | 1px neutral outline, outline-offset: -1px |
| Glass | backdrop-blur on everything | Blur + 1px hairline + subtle noise, sparingly |
html { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
img { outline: 1px solid oklch(0 0 0 / 0.1); outline-offset: -1px; }
.price { font-variant-numeric: tabular-nums; }Depth recipes, glass, noise, concentric math → references/visual-system.md.
A long page generated in passes drifts against itself. Three things must be one thing for the whole page, and they are not preferences — a page that breaks one of them is defective:
rounded-* scales in one tree means
there is no system, and scripts/verify.sh counts them.scripts/verify.sh carries a registry of mechanical tells and reports each with file and
line: dashes in rendered copy, scroll cues, numbered eyebrows, build stamps on marketing
pages, unstable viewport heights, middot chains, hype words, plus counted ratios (eyebrows
against sections, double-bordered rows, radius scales). Run it; do not re-derive that list
from memory, and do not treat its silence as a design review.
What it cannot see is the other half: fabricated substance (a product UI built from divs,
invented photo credits, the Jane Doe cast), decoration posing as information, labels that say
nothing, and composition habits like three identical feature cards. That half is
references/ai-tells.md, and it is read with your eyes on the page.
When the brief corresponds to an official, maintained design system rather than an aesthetic —
UK or US public sector, Shopify admin, Carbon, Atlassian, Primer, Fluent — install the
official package instead of approximating it: references/design-systems.md.
| Rationalization | Reality / Fix |
|---|---|
| "Purple→blue gradient on everything looks modern" | It reads AI-generic. Pick a domain-true palette; gradients are seasoning. |
| "Centered text over an atmospheric gradient is a hero" | Show the product. Vague hero fails the 5s test. |
| "Cards inside cards add structure" | They add noise. Flatten; use spacing + one border. |
| "I know good design, I'll skip research" | Taste ≠ current trend. Re-research every project. |
| "The image sells it, copy can be vague" | Copy carries the value prop. Pass the 5s test. |
| "Animate everything on scroll" | CLS + INP cost. Reveal sparingly, transform/opacity only. |
| "Ship now, check contrast later" | Contrast is a constraint, not polish. 4.5:1 or it ships broken. |
| "Glass everywhere looks premium" | Glass on everything looks cheap. Reserve for floating surfaces. |
"transition: all is convenient" | It animates layout props → jank. List exact properties. |
Accessibility and Core Web Vitals are design constraints, not post-launch tuning — violating one is a defect, not a style choice. WCAG 2.2 AA: 4.5:1 text contrast (3:1 large text / UI), visible focus, prefers-reduced-motion honored. Target size: 24×24px is the AA floor (SC 2.5.8 Target Size (Minimum)); 44×44px is the recommended quality bar (Apple HIG / pointer comfort) — aim for 44, never ship below 24. Core Web Vitals: LCP < 2.5s, INP < 200ms, CLS < 0.1. (INP replaced FID in March 2024 — measure INP.)
| Lever | Default | Token / where |
|---|---|---|
| Type scale ratio | 1.25 | modular scale |
| Body size | 16–18px | --font-text |
| Line-height | 1.5 body / 1.1 display | per element |
| Spacing base | 4 / 8px | Tailwind spacing |
| Color allocation | 60-30-10 | bg / fg / brand |
| Text contrast | ≥ 4.5:1 (3:1 large) | verify with checker |
| Card radius | 0.875rem | --radius-card |
| Touch target | 44×44px recommended; 24×24px AA floor (SC 2.5.8) | min-h-11 |
| Enter / exit motion | 250ms / 150ms | --ease-out |
| LCP | < 2.5s | next/image priority |
| INP | < 200ms | compositor-only motion |
| CLS | < 0.1 | reserved space, next/font |
| Hero | passes 5s test | value prop above fold |
Run before claiming done. Same checks scripts/verify.sh falls back to.
prefers-reduced-motion honored.<h1> on the page.header/nav/main/section/footer).priority.next/font (no CLS / FOUT swap shift).transition: all / transition-all.Automate → scripts/verify.sh (runs Lighthouse if a dev server is up, else static grep checks + this list).
The checklist above is pass/fail. When the user asks for a design review, a critique, or a quality grade — or when you want to argue a surface is genuinely premium rather than merely compliant — score these 11 dimensions 0–10 and report the weighted total. Pass/fail tells you it ships; the rubric tells you how good it is.
| # | Dimension | What a 10 looks like | Weight |
|---|---|---|---|
| 1 | First impression & value clarity | Passes the 5s test instantly; product shown, not a gradient | 1.5 |
| 2 | Concept & signature | A nameable visual concept; one distinctive, domain-true signature element; logo-removed it's still recognizably this product, not a template | 1.5 |
| 3 | Typographic craft | Modular scale, ≤2 families, balanced headings, 45–75ch measure, tabular numerals; deliberate 3–5× scale contrast | 1.0 |
| 4 | Color & contrast | Disciplined 60-30-10 OKLCH system, all text ≥ 4.5:1, dark mode via token swap | 1.0 |
| 5 | Layout, spacing & rhythm | Consistent 4/8px scale, intentional asymmetry/bento, clear focal point; sections vary in format/background/density, not one repeated stripe | 1.0 |
| 6 | Hierarchy & scannability | Eye lands in the right order; one primary action per viewport | 1.0 |
| 7 | Depth & detail polish | Concentric radius, layered shadows, hairline borders, restrained glass | 1.0 |
| 8 | Motion quality | Purposeful only, compositor-only props, reduced-motion + @supports guards | 1.0 |
| 9 | Accessibility | Landmarks, one <h1>, visible focus, 24px+ targets (44 ideal), no motion-only meaning | 1.0 |
| 10 | Performance (CWV) | LCP < 2.5s, INP < 200ms, CLS < 0.1; LCP image priority, next/font | 1.0 |
| 11 | Copy & brand fidelity | Benefit-led, specific, ban-list clean, voice matches the 02-DOCS/wiki/brand/ study | 0.5 |
Score = Σ(dimension × weight), max 115 (normalize to /100 by ×100/115 if you want a percentage). Bands (on the /115 raw total): < 69 ships generic — redo; 69–91 competent but improvable — name the lowest two and fix; 92–108 premium; 109+ award-tier. (These are the prior 60/80/95-per-100 cutoffs rescaled to 115.) A surface that scores well on every constraint dimension but low on #1–2 is the classic "competent but generic" result — fix concept and signature first, it has the most leverage. For each dimension below 8, give one concrete, actionable fix (not "improve spacing" but "section padding jumps 48→96px with no 64px step — add py-16 on mobile"). Cite the brand article or trend source that sets the bar where relevant.
Two records, both indexed in 02-DOCS/wiki/index.md (the Knowledge map; root CLAUDE.md keeps only a short pointer to it), both read first on every use so outputs stay consistent with them:
02-DOCS/wiki/brand/ — the hard gate above: missing or incomplete → ask until complete before designing.02-DOCS/wiki/stack/design.md — the chosen tokens (color/OKLCH, type scale, spacing, radius, shadow, motion), the 2026 direction picked, and the reference sites. Recorded, not gated; create/update it as decisions are made. Read it before fixing type and palette on a new surface, and either reuse what is there or state why you are departing — otherwise every surface of the project drifts into a different design. (Across different projects this record cannot help: it lives inside each one. Distrusting your own second default is the only guard there — see the repetition note in references/ai-tells.md.)The wiki article protocol both follow is ../harness/SKILL.md's.
© ericrisco, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 15 other files (scripts, references) in skills/design of ericrisco/rsc-harness.
Open the folder on GitHubat commit 92fde8f
Design next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Design this skillericrisco/rsc-harness | 156 | — | ~6.6k | Automated safety check: Pass | MIT | |
| Senior Frontendborghei/Claude-Skills | 874 | — | ~1.7k | Automated safety check: Pass | MIT | |
| UI/UX Design System AdvisorGalaxy-Dawn/claude-scholar | 5.7k | 1 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Design StyleCastor6/tactus | 376 | 1 repos | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Gridgeistohmiler/gridgeist | 115 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Frontend Designjjyaoao/HelloAgents | 3.2k | 1 repos | ~7k | Automated safety check: Pass | MIT |
borghei/Claude-Skills
Frontend development for React, Next.js, TypeScript, and Tailwind CSS.
Galaxy-Dawn/claude-scholar
Turns a vague UI request into a concrete design system with style, palette, typography and layout guidance from a search script, plus stack-specific implementation advice.
Castor6/tactus
A skill your agent uses whenever the user asks to build, create, design, develop, improve, or style any frontend interface or visual element.
ohmiler/gridgeist
A skill your agent uses when creating, redesigning, or reviewing web interfaces that need product-specific structure, clear hierarchy, responsive composition, accessible interaction, or relief from…
jjyaoao/HelloAgents
Transform UI style requirements into production-ready frontend code with systematic design tokens, accessibility compliance, and creative execution.
aAAaqwq/AGI-Super-Team
Create distinctive, production-grade static sites with React, Tailwind CSS, and shadcn/ui — no mockups needed.
ericrisco/rsc-harness
A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…
ericrisco/rsc-harness
A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…
ericrisco/rsc-harness
A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…
ericrisco/rsc-harness
A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…
ericrisco/rsc-harness
A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…
ericrisco/rsc-harness
A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.
Works with
Categories
A skill your agent uses when designing or refreshing a web UI or landing page — visual concept, type/color/spacing/motion tokens, composition, rescuing a UI that reads AI-generic, or a graded design…. Design is an agent skill from ericrisco/rsc-harness. Use when designing or refreshing a web UI or landing page — visual concept, type/color/spacing/motion tokens, composition, rescuing a UI that reads AI-generic, or a graded design review.
Design fits situations like: refreshing a web UI; landing page — visual concept; type/color/spacing/motion tokens; rescuing a UI that reads AI-generic.
Run `npx skills add ericrisco/rsc-harness --skill design -a claude-code`. Or copy the skill folder (skills/design in ericrisco/rsc-harness) into .claude/skills/design in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ericrisco/rsc-harness --skill design -a codex`. Or copy the skill folder (skills/design in ericrisco/rsc-harness) into .agents/skills/design in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill design -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/design, .gemini/skills/design, .github/skills/design and .opencode/skills/design in your project.
Going by SKILL.md and its folder, Design needs a shell for the scripts in its folder. Our summary lists: A Bash shell.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Design is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.6k tokens (SKILL.md is roughly 26k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 25k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Design: Senior Frontend (borghei/Claude-Skills, 874 stars), UI/UX Design System Advisor (Galaxy-Dawn/claude-scholar, 5.7k stars), Design Style (Castor6/tactus, 376 stars) and Gridgeist (ohmiler/gridgeist, 115 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 156 GitHub stars. The repository holds 229 skills in this directory. The repository was last updated on October 6, 2026.
Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.