Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Frontend design entry point: direction, design system, visual philosophy. Use whenever building or touching the look of any web UI (components, pages, dashboards, React/Vue/HTML-CSS) or when the user says "make this look better", "fix the spacing/layout", or mentions styling, color, type, or polish.
.claude/skills/sickn33-ckw-design/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 69% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 283% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 102% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 33% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 94% | 0% |
Use whenever building or styling web UIs — components, pages, dashboards, landing pages, React/Vue/HTML-CSS layouts — or whenever the user asks to make something "look better/nicer", fix spacing/layout, or mentions styling, color, typography, fonts, responsive design, polish, or aesthetics, even without the word "design".
_Source: connerkward/ckw-design-skill (MIT)._
Use this skill when the user asks to build or style web UIs: components, pages, dashboards, landing pages, React/Vue/HTML-CSS layouts, or any frontend interface. Goal: distinctive, production-grade output that avoids generic AI aesthetics.
Before reporting any design "done": render it and have a separate judge critique the image (not the code, not self-grading) — see design-spatial §1. Blind generation can't see its own collisions; this applies to all design output, not just spatial work.
> MANDATORY HORIZONTAL-OVERFLOW GATE — runs before ANY web UI is "done". > Measure document.documentElement.scrollWidth - document.documentElement.clientWidth > at a narrow width (~390px and ~1024px), this turn, and confirm it's 0. This > bug is invisible at desktop width and re-appears every time a row (header, nav, > toolbar) gains an item, so it ships repeatedly. Default to flex-wrap:wrap on > header/toolbar rows + body{overflow-x:clip}, and re-measure after adding any > element to a horizontal row. Full procedure + recurrence cases: design-spatial §4. > If you haven't measured narrow, you are not done — don't claim it.
When design-thinking identifies a need for visual assets (logos, icons, hero images, textures, backgrounds):
When design work involves running an LLM (generative assets, VLM analysis, layout critique, prompt generation, etc.):
media-attribution-rule for generative assets and extends it to any LLM operation in the design workflow.Examples:
Whenever a UI surfaces an algorithm or model to the user (an "ⓘ how this works" panel, a model breakdown, a methods note), include the actual equation, typeset, with its key terms annotated — don't settle for prose. A scorer described only in words ("ranks by how much of the picked color is present") is unfalsifiable hand- waving; the formula score = Σ fracᵢ · max(0, 1 − ΔEᵢ/τ) with each term labelled tells the user exactly what the knob does and builds trust that there's real math under the hood.
How to apply:
detail. Use proper notation: σ for sigmoid, Σ for sums, ‖·‖ for norms, superscripts, ΔE, ∇²; a monospace/serif-math block set off from the prose.
e_x, w, τ, Q each are,in one line each. An unlabelled equation is decoration; a labelled one is a spec.
reach for KaTeX/MathJax if the expressions genuinely need it.
computes, the model/cost line says what ran it and for how much.
Example (a logistic head): > P(personal │ x) = σ(w·eₓ + b), σ(z) = 1 / (1 + e⁻ᶻ) > • eₓ — the image's 768-d embedding · w, b — weights learned from your labels > · decision: personal if P ≥ 0.55, reference if P ≤ 0.40.
Any "Select all" affordance MUST be paired with a way to clear the selection — preferably the same button, label-flipped when everything is already selected ("Select all" ⇄ "Deselect all"). A select-all with no inverse is a trap: the user over-selects (or hits it by reflex), then has to un-click items one by one, or reload the page, to get back. The cost is silent — it only bites after they've committed to the wrong set.
How to apply:
selected, the button reads "Deselect all" and clears; otherwise "Select all". One control, no dead end.
filtered, all on this page) — don't let "Select all" grab 500 but "Clear" only drop the 50 on screen.
check-all) needs its inverse one tap away. Symmetry of action — see restraint-rule (don't strand the user mid-task).
User request:
> Review this interface with @ckw-design, identify the highest-impact design problems, and propose an implementation-ready improvement.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-15 | pass→pass | 21,030 | 26,951 | +28% | 1 | 1 | 0% | 4,928 | 8,460 | +72% | 0 | 0 | — |
case-16 | fail→fail | 17,599 | 25,359 | +44% | 1 | 1 | 0% | 3,790 | 8,468 | +123% | 0 | 0 | — |
case-01 | fail→fail | 25,709 | 25,129 | -2% | 1 | 1 | 0% | 6,188 | 8,490 | +37% | 0 | 0 | — |
case-02 | fail→fail | 24,502 | 24,991 | +2% | 1 | 1 | 0% | 6,192 | 8,494 | +37% | 0 | 0 | — |
case-03 | fail→fail | 18,743 | 19,762 | +5% | 1 | 1 | 0% | 4,432 | 6,900 | +56% | 0 | 0 | — |
case-04 | fail→fail | 16,664 | 16,220 | -3% | 1 | 1 | 0% | 3,150 | 5,599 | +78% | 0 | 0 | — |
case-05 | pass→fail | 22,003 | 24,687 | +12% | 1 | 1 | 0% | 4,529 | 8,469 | +87% | 0 | 0 | — |
case-06 | fail→fail | 18,749 | 25,529 | +36% | 1 | 1 | 0% | 4,373 | 8,470 | +94% | 0 | 0 | — |
case-07 | fail→pass | 18,994 | 16,996 | -11% | 1 | 1 | 0% | 3,719 | 6,293 | +69% | 0 | 0 | — |
case-08 | fail→fail | 5,828 | 6,714 | +15% | 1 | 1 | 0% | 921 | 3,389 | +268% | 0 | 0 | — |
case-09 | fail→fail | 15,065 | 22,616 | +50% | 1 | 1 | 0% | 2,478 | 6,029 | +143% | 0 | 0 | — |
case-10 | pass→pass | 16,094 | 20,701 | +29% | 1 | 1 | 0% | 2,725 | 6,167 | +126% | 0 | 0 | — |
case-11 | fail→pass | 11,273 | 23,172 | +106% | 1 | 1 | 0% | 2,041 | 7,823 | +283% | 0 | 0 | — |
case-12 | fail→pass | 16,277 | 23,288 | +43% | 1 | 1 | 0% | 4,009 | 8,092 | +102% | 0 | 0 | — |
case-13 | fail→fail | 20,225 | 24,219 | +20% | 1 | 1 | 0% | 4,742 | 8,470 | +79% | 0 | 0 | — |
case-14 | fail→fail | 12,478 | 27,918 | +124% | 1 | 1 | 0% | 2,167 | 8,460 | +290% | 0 | 0 | — |
case-17 | pass→pass | 20,012 | 28,032 | +40% | 1 | 1 | 0% | 3,391 | 8,459 | +149% | 0 | 0 | — |
case-18 | fail→pass | 21,519 | 17,689 | -18% | 1 | 1 | 0% | 4,842 | 6,431 | +33% | 0 | 0 | — |
case-19 | fail→pass | 13,661 | 15,495 | +13% | 1 | 1 | 0% | 2,462 | 4,779 | +94% | 0 | 0 | — |
case-20 | pass→pass | 16,161 | 13,891 | -14% | 1 | 1 | 0% | 3,732 | 5,739 | +54% | 0 | 0 | — |
case-21 | pass→pass | 12,020 | 10,631 | -12% | 1 | 1 | 0% | 2,657 | 4,587 | +73% | 0 | 0 | — |
case-22 | pass→pass | 9,156 | 6,642 | -27% | 1 | 1 | 0% | 1,898 | 3,462 | +82% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +18 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
The publisher has shipped newer versions since this run, so these numbers describe v1, not the version currently listed.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.