Best for
- Use it whenever you design or review web UI: a landing page, a dashboard, a component, a form, a marketing section. Use it before you call a screen "done." Don't treat it as always-on — it's a lens for visual/frontend w…
DanielC000/loom/packages/daemon/assets/skills/web-design/SKILL.md
Apply when designing, building, or reviewing web UI / frontend — visual polish, typography, color, layout, spacing, motion, accessibility, and UX copy. Use to avoid the generic "AI default" look and to make deliberate, restrained design choices. Shipped and kept current by Loom.
Decision brief
Guidance for producing web UI that looks deliberately designed, not auto-generated. The single failure mode this skill exists to prevent: shipping something a viewer can immediately tell an AI made. If it reads as the AI default — purple gradients, beige hero, three equal cards,…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/DanielC000/loom --skill "packages/daemon/assets/skills/web-design"Inspect the Agent Skill "web-design" from https://github.com/DanielC000/loom/blob/b9ec7a777037f7e368211c61de6bddbbfb3d0424/packages/daemon/assets/skills/web-design/SKILL.md at commit b9ec7a777037f7e368211c61de6bddbbfb3d0424. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Read the brief (below) — infer intent, write a one-line Design Read, set the dials. 2. Apply the fundamentals — type, color, spacing, the interactive states. Pull depth from references/ as needed. 3. Avoid the anti-patterns — references/anti-patterns.md is the load-bearing do…
Use it whenever you design or review web UI: a landing page, a dashboard, a component, a form, a marketing section. Use it before you call a screen "done." Don't treat it as always-on — it's a lens for visual/frontend work, not a tax on every code change.
Before writing any CSS, infer from what you were asked:
Three orthogonal knobs, each at three named levels. Set them from the brief; they bias every later choice. They are set conversationally — say what they are, don't write them into a file.
The corroborated core. Compact here; full treatment in references/.
Permission review
The documentation asks the agent to create, modify, or delete local files.
later choice. They are set conversationally — say what they are, don't write them into a file.Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 85/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 6 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Guidance for producing web UI that looks deliberately designed, not auto-generated. The single failure mode this skill exists to prevent: shipping something a viewer can immediately tell an AI made. If it reads as the AI default — purple gradients, beige hero, three equal cards, em-dashes, Inter on slate-900 — it failed, regardless of how clean the code is.
Three ideas run through everything here:
Use it whenever you design or review web UI: a landing page, a dashboard, a component, a form, a marketing section. Use it before you call a screen "done." Don't treat it as always-on — it's a lens for visual/frontend work, not a tax on every code change.
references/ as needed.references/anti-patterns.md is the load-bearing don't-list.Before writing any CSS, infer from what you were asked:
Then write a one-line Design Read ("Internal analytics dashboard, dense, calm, a11y-first — restrained/standard/dense") so the intent is explicit and checkable. Ask at most one clarifying question, and only when the brief is genuinely ambiguous — otherwise pick sensible defaults and proceed.
Three orthogonal knobs, each at three named levels. Set them from the brief; they bias every later choice. They are set conversationally — say what they are, don't write them into a file.
| Dial | Levels (low → high) | What it controls |
|---|---|---|
| EXPRESSIVENESS | restrained · balanced · expressive | asymmetry, decoration, type personality, layout variety |
| MOTION | minimal · standard · rich | how much animates and how present it is |
| DENSITY | airy · standard · dense | information per screen, whitespace, sizing |
Default = restrained / standard / standard. This is restraint-biased on purpose: most real
work is product UI and dashboards, where high expressiveness actively harms usability. Move a dial up
only when the brief earns it — an expressive marketing hero is legitimate; an expressive settings
page is not. Whatever the dials, a mobile single-column override and the accessibility constraints
still apply.
The corroborated core. Compact here; full treatment in references/.
references/typography.mdreferences/color.md9999); ≥44×44px touch targets; pass the squint test. → references/layout-spacing.md:focus-visible ring always; placeholders aren't labels;
undo beats confirm; skeletons beat spinners. → references/interaction.mdease-in for UI; animate only transform/opacity;
respect prefers-reduced-motion. Decide whether to animate before how — and motion you commit to
must actually ship: a page that reads as animated but sits static is broken, so if you can't land it
cleanly, dial motion down and ship clean static. → references/motion.mdreferences/ux-writing.mdThe highest-value content in this skill is the don't-list in references/anti-patterns.md — a
cross-corroborated catalogue of the tells that mark generated UI (AI-purple gradients, reflexive
beige/cream, gradient text, eyebrow chips, numbered section markers, three equal feature cards,
em-dashes, overused fonts). Read it before building and check against it before shipping. The framing:
if you can tell an AI made it, it failed.
If the project already uses — or the brief clearly calls for — an established design system, adopt its official package rather than hand-rolling CSS that approximates it. One system per project; don't recreate its tokens by hand, and don't import a system and then override most of it. Match the brief to the ecosystem it lives in:
| Brief reads as… | Reach for its official system |
|---|---|
| Microsoft / enterprise SaaS / dashboards | Fluent UI |
| Google-flavored / Material product | Material 3 (Material Web) |
| IBM-style B2B / data-dense analytics | Carbon |
| Shopify app surface | Polaris |
| Atlassian / Jira-style product | Atlaskit |
| GitHub-style devtool or marketing | Primer (Brand variant for marketing) |
| UK / US public-sector service | GOV.UK Frontend / USWDS — often legally expected |
(This skill is stack-agnostic and prescribes no framework or package beyond naming these systems.) If the brief is an aesthetic (glassmorphism, bento, brutalist, editorial) rather than a system, there's no official package — build it with native CSS and be honest about what's borrowed inspiration vs. official material. If nothing fits, build restrained native CSS on the fundamentals above.
| Before | After | Why | table, one row per change. This is the
default review format: concrete, scannable, each change justified.references/anti-patterns.md (heuristics + cognitive-load + persona lenses).A redesign is not a greenfield build — misclassifying the mode is the biggest source of bad redesign output. First decide: preserve (modernise without breaking the brand) or overhaul (a new visual language over the same content and IA). If genuinely ambiguous, ask once.
Audit before you touch anything. Record the current brand tokens (accent, type stack, radii), the information architecture (page tree, nav labels, conversion paths), and the SEO/analytics baseline — SEO and analytics migration is the #1 redesign risk. Extract the existing brand accent before applying the color rules: a brand that is already purple stays purple (the anti-AI-purple rule governs your defaults, not an established identity).
Apply the levers in priority order and stop when the brief is satisfied — each is more risk than the last: (1) typography, (2) spacing & rhythm, (3) color recalibration (unify neutrals, keep the brand accent), (4) a motion layer, (5) hero / key-section recomposition, (6) full block replacement (only for a block that's unsalvageable). Targeted evolution (1–4) is most of the value at a fraction of the risk.
Never change silently — get explicit sign-off before touching URL slugs / anchor IDs, primary nav labels, form field names or order (breaks analytics + autofill), the brand logo/wordmark, or legal / consent copy.
Looking at the rules is not the same as looking at the result. If this session has browser testing available (a browser-testing-capable profile — a QA or web-design rig with a Playwright/browser MCP — spawns with one), use it:
Local: http://…:PORT — is one way but not the only
one); never assume a default port. If that port is already held by another process, the dev server
binds another port or fails, so eyeballing the default would render the wrong, stale server.
For a static on-disk HTML file with no dev server (a CV, a rendered report), don't navigate
file:// — Playwright's browser_navigate blocks it outright — and don't hand-roll a web server
per render cycle. Serve its directory over loopback with the bundled helper and open the printed
URL instead: node .claude/skills/web-design/scripts/serve-static.mjs <dir>.git status will flag
it). The auto-name-into-scratch and $LOOM_SCRATCH_DIR mechanics here are @playwright/mcp-specific:
only a session that mounts Playwright gets that allowed root exposed as the $LOOM_SCRATCH_DIR
environment variable — persist a shot there rather than your generic session scratch/temp dir. A
session on a DIFFERENT browser tool (e.g. claude-in-chrome) has no $LOOM_SCRATCH_DIR and no
auto-naming — use that tool's own capture flow instead. To persist a shot as a file under
Playwright, don't rely on claude-in-chrome save_to_disk — it renders the inline base64 but writes no
reachable file (Claude Code issue #40141). Use Playwright page.screenshot({ path }) against the
loopback page (launch with { channel: 'chrome' } to reuse system Chrome and skip a download), or
decode the base64 from the transcript for a shot you already captured.Do not declare a visual task done without having looked at the rendered result. If no browser is available in this session, say so explicitly rather than implying you eyeballed it.
A short gate — not an exhaustive audit. Run it before calling any screen done:
prefers-reduced-motion honored.object-fit: cover or a fixed container aspect ratio. Verify against the
ACTUAL rendered crop in the browser, not the source image — a center-crop that looks fine full-bleed
can decapitate a portrait once it's constrained to the container. And don't reach for an optional,
IRREVERSIBLE transform (a square/center crop, a destructive resize) unless the layout truly needs it:
correctness of the shown subject comes before optimization, and a crop you can't undo isn't worth a
marginal layout gain.This skill distills three public design skills into Loom's own guidance. See the NOTICE file in this
directory for full attribution: Impeccable (Apache-2.0, Paul Bakaus — itself building on
Anthropic's frontend-design skill and ehmo's typecraft additions), taste-skill (MIT, Leonxlnx —
including its v2 "design-taste-frontend" rewrite), and Emil Kowalski's design-engineering skill (MIT).
Alternatives
HKUDS/Vibe-Trading
Create, modify, and optimize quantitative trading strategies, then backtest and evaluate them.
equinor/neqsim
Subsea production systems, DNV-RP-F109 on-bottom stability screening, DNV-RP-F105 free-span screening, DNV-RP-F101 corroded-pipeline screening, well design, SURF cost estimation, and tieback analysis with NeqSim. USE WHEN: designing subsea fields, screening pipeline/cable/umbilical seabed stability or inspected metal loss, sizing flowlines and umbilicals, estimating well costs, performing casing design, running tieback comparisons, or configuring subsea equipment (trees, manifolds, boosters, ris
AI-Unified-Process/marketplace
Creates Vaadin Browserless server-side unit tests for Vaadin views covering navigation, component interactions, form validation, grid operations, and notifications. Use when the user asks to "write Browserless tests", "write Vaadin UI unit tests", "unit test a Vaadin view without a browser", "create view tests with the official Vaadin testing framework", or mentions Browserless testing, SpringBrowserlessTest, browserless-test-junit6, UI Unit Testing, or server-side Vaadin testing.
freenet/freenet-agent-skills
Build and maintain decentralized applications on Freenet using river as a template. Guides through designing contracts (shared state), delegates (private state), and UI, and through upgrading a live dApp safely. Use when user wants to create a new Freenet dApp, design contract state, implement delegates, build a Freenet-connected UI, OR upgrade an existing dApp — bump freenet-stdlib, ship a new contract/delegate version (v2), fix a bug that re-keys the WASM, or migrate state across a contract/de