New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Review and redesign an app or website UI to strip out

Unslop design

by marcosnovo · MIT license · ★ 14 on GitHub

Unslop design cover

Review and redesign an app or website UI to strip out the "slop" (decorative accent color, gradients, glows, noisy badges, emoji as icons, eyeballed spacing, greetings as titles, Title Case, flat hierarchy, repeated numbers) with a…

---
name: unslop-design
description: Review and redesign an app or website UI to strip out the "slop" (decorative accent color, gradients, glows, noisy badges, emoji as icons, eyeballed spacing, greetings as titles, Title Case, flat hierarchy, repeated numbers) with a system (spacing, type, color roles, elevation) and two modes: a quick five-fix pass for one screen, or an orchestrated process for a whole app (parallel reviewers, a published winning proposal, devs per area, audits, PR). Covers SwiftUI, Compose and web (dashboards, landing pages, Tailwind), with scripts that scan the code, measure the rendered page and score it from 0 to 100. Use it when asked to "review the design", "make it look less AI", "unslop", "polish this screen", "design review", "winning proposal", "audit this dashboard", or when given videos or screenshots of an app or site asking for feedback or a redesign. Also use it to start a design system (spacing, type, palette, shadow scales) or to audit tokens, contrast or consistency across screens.
license: MIT
metadata:
  author: marcosnovo
  version: "1.7.0"
  homepage: https://github.com/marcosnovo/unslop-design
---

# Unslop design

Three parts: **what to fix** (`checklist.md`, each fix with its reason),
**how to orchestrate it** (`process.md`, rounds with reviewers and devs in
parallel) and **cases and sources** (`references.md`: the before/afters
that shaped this skill and a map of *Refactoring UI*). The spec card every
reviewer fills is in `spec-card.md`. Per-platform notes
(SwiftUI, Compose, web, widgets, watch, car) live in `platforms.md`; websites,

Overview

Three parts: what to fix (checklist.md, each fix with its reason), how to orchestrate it (process.md, rounds with reviewers and devs in parallel) and cases and sources (references.md: the before/afters that shaped this skill and a map of Refactoring UI). The spec card every reviewer fills is in spec-card.md. Per-platform notes (SwiftUI, Compose, web, widgets, watch, car) live in platforms.md; websites, web apps and dashboards have their own playbook in web.md. Read the one you need, not all of them.

Manual install (npx, ZIP)
Claude Codenpx skills add marcosnovo/unslop-design -g -a claude-code
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md9.2 KB
Read SKILL.md here
marcosnovo/main1 file
SKILL.md
Show the full text162 lines

Unslop design

Three parts: what to fix (checklist.md, each fix with its reason), how to orchestrate it (process.md, rounds with reviewers and devs in parallel) and cases and sources (references.md: the before/afters that shaped this skill and a map of Refactoring UI). The spec card every reviewer fills is in spec-card.md. Per-platform notes (SwiftUI, Compose, web, widgets, watch, car) live in platforms.md; websites, web apps and dashboards have their own playbook in web.md. Read the one you need, not all of them.

Three scripts measure instead of guessing:

  • python3 scripts/slop-scan.py <paths> — slop patterns in source (web, SwiftUI, Compose) with file, line and fix number. Standard library only.
  • node scripts/web-audit.mjs <url> — the rendered page at 390/768/1280 px: horizontal scroll, a census of every size/color/radius/shadow/spacing in use, computed contrast, focus states, emoji, glows, plus a grayscale screenshot. Needs Playwright.
  • python3 scripts/unslop-score.py <paths> [--audit report.json] — both as one number from 0 to 100 with where the points went, plus a README badge. Run it before and after: "score 41 → 88" is the PR's headline.

examples/dashboard-before.html and -after.html show both on one page.

Principles (non-negotiable)

  1. A fix is a rule, not a tweak. Every change ships as a token or component (spacing, font size, weight, color role, radius, shadow, button), never as a literal in the view. If the token is missing, create it in the same change. Pick values by elimination within the scale (try the value and its two neighbors; the middle wins or you repeat), never pixel by pixel.
  2. Hierarchy before color. The screen has to work in grayscale: spacing, size, weight and contrast do the work; color comes afterwards and only to mean something. If it's unclear in gray what matters, color won't fix it.
  3. The first thing you read is the answer. One hero number per screen (the balance, the price, today's progress); everything else steps back. Emphasize by de-emphasizing the competition, not by inflating the hero. At most one dark/hero surface per screen, and none in sheets or modals.
  4. Color says one thing. One brand accent for the action or the hero number; everything else is a role with meaning (money/success, up/danger, status, reward) and gray for what only navigates. Decorative color = slop. Color never works alone: shape or a word goes with it.
  5. Measured contrast, not assumed. WCAG AA (4.5:1 text, 3:1 large text and icons) computed from the real hex values against the real backgrounds, light and dark. White on a green/yellow brand color almost never passes; gray text on a colored background doesn't either (pick a shade of the same hue).
  6. Nothing the screen can't deliver. No invented numbers, no projection presented as data, no implied feature that doesn't exist, no empty state that lies. Design the smallest version you can actually ship.
  7. One signature gesture, taken from the domain. A brand detail born from what the app shows (a price-board price with a smaller last digit, dot-matrix numerals on a running app), not a new font or effect; and it degrades gracefully where it doesn't apply. Everything else is native: don't fight the tab bar, switches or system sheets.
  8. Platforms ship together. If the project has iOS and Android (or app and web), the change goes to both in the same PR, in every language.
  9. Verify what the user sees. Screenshots in light and dark, largest text size, a non-default currency/language, real data (long names, empty, 2,000 items). What can't be compiled in your environment gets audited by reading, and the PR says so.

Any agent (Claude Code, Codex, Cursor, Copilot, Gemini…)

The rules are the same everywhere. Where it says "agents", use what your tool has: subagents if it has them (Claude Code, Codex…), with a git worktree each for devs. With no subagents, run the reviewers one after another, each with its own brief, and keep their outputs separate before the jury step. Where it says "publish", Claude Code publishes an artifact; other agents write an HTML file the user opens. In a chat app without a codebase, stop after the before/after proposal.

Quick mode (the default for one screen)

One screenshot, one screen or one page, or the user says "quick": no subagents, no jury, one pass you can finish in a few minutes.

  1. Ground it in one line (what the screen is for, its surface mode) and measure what you can: scripts/unslop-score.py on the screen's code (with --audit for a web page). Then the passes on the render (process.md § 2): one second, squint, cover the logo, left edges, gray.
  2. Pick the five fixes that change the screen most, each with its checklist.md number and one line of why. Hierarchy and spacing before color, color before polish. Say what you would not change.
  3. Show the before/after: the edited code's render, or an HTML mock of the screen if there's no code, with the filled spec-card.md rows it uses. Score it on the six axes of process.md § 4 first; under 3 on any axis, revise before showing.
  4. On "yes", apply them as tokens (principle 1), rerun the score and report "score X → Y" and what's still left.

Switch to the full flow below when there are several screens or videos, no design system yet, platforms to ship together, or the user asks for a full review.

Surface modes

Not every screen gets the same ambition. Name the mode before judging:

Mode Screens What wins Expression budget
Operate dashboards, settings, editors, admin scanning, consistency, platform conventions low: one signature at most
Persuade landing pages, onboarding, paywalls one message, one action, a real product shot higher: one bold idea
Read articles, docs, detail pages line length, rhythm, quiet chrome low
Experience games, maps, camera, media the content itself as the canvas (#59) high, from the domain

The checklist applies to all four; the budget decides how far #47 and #58 go.

Working agreement (full flow)

  • Reviewers = senior product designers and devs = senior devs, as agents (use the model the user asks for). The orchestrator doesn't build the areas: it does the shared work, integrates and audits.
  • Every decision comes with an explicit, actionable recommendation.
  • Before implementing, publish the before/after and wait for the user's "yes".
  • Every round also reviews what earlier rounds shipped and all the videos/screenshots received, not just the latest.
  • When merging is allowed once CI is green: close with a list of what to check when compiling (concrete risks) and, if there's no Mac/simulator, a self-contained prompt for a local session.
  • On "is everything done?": done (with PRs) · pending on you · left out on purpose.
  • After the last round, update the project's design system.

Full flow

  1. Inventory: frames from the videos (process.md § 1), screens and states, and each screen located in the code. Run scripts/slop-scan.py on the UI code and, for the web, scripts/web-audit.mjs on each key page.
  2. System: check (or create) the spacing, type, color and elevation scales (checklist.md § System). Without scales, reviewers judge by eye; the audit's census shows which values the page really uses.
  3. Grayscale pass + parallel reviewers (3-4, one per area) against checklist.md, applying fixes one at a time.
  4. Winning proposal: one HTML page with before/after, the spec card and the list of decisions; the user chooses.
  5. Devs per area in isolated worktrees with a closed brief; integrate, compile, audit, PR, answer review bots, merge when green.
  6. Finally: update the project's design system (doc + tokens + its own skill) with what's new.

If the project already has its own design skill

Use it for concrete tokens and components; this one brings the method and the general checklist. If a rule here clashes with a written project decision, the project wins and the proposal points it out.

1---
2name: unslop-design
3description: Review and redesign an app or website UI to strip out the "slop" (decorative accent color, gradients, glows, noisy badges, emoji as icons, eyeballed spacing, greetings as titles, Title Case, flat hierarchy, repeated numbers) with a system (spacing, type, color roles, elevation) and two modes: a quick five-fix pass for one screen, or an orchestrated process for a whole app (parallel reviewers, a published winning proposal, devs per area, audits, PR). Covers SwiftUI, Compose and web (dashboards, landing pages, Tailwind), with scripts that scan the code, measure the rendered page and score it from 0 to 100. Use it when asked to "review the design", "make it look less AI", "unslop", "polish this screen", "design review", "winning proposal", "audit this dashboard", or when given videos or screenshots of an app or site asking for feedback or a redesign. Also use it to start a design system (spacing, type, palette, shadow scales) or to audit tokens, contrast or consistency across screens.
4license: MIT
5metadata:
6 author: marcosnovo
7 version: "1.7.0"
8 homepage: https://github.com/marcosnovo/unslop-design
9---
10 
11# Unslop design
12 
13Three parts: **what to fix** (`checklist.md`, each fix with its reason),
14**how to orchestrate it** (`process.md`, rounds with reviewers and devs in
15parallel) and **cases and sources** (`references.md`: the before/afters
16that shaped this skill and a map of *Refactoring UI*). The spec card every
17reviewer fills is in `spec-card.md`. Per-platform notes
18(SwiftUI, Compose, web, widgets, watch, car) live in `platforms.md`; websites,
19web apps and dashboards have their own playbook in `web.md`. Read the one
20you need, not all of them.
21 
22Three scripts measure instead of guessing:
23- `python3 scripts/slop-scan.py <paths>` — slop patterns in source (web,
24 SwiftUI, Compose) with file, line and fix number. Standard library only.
25- `node scripts/web-audit.mjs <url>` — the rendered page at 390/768/1280 px:
26 horizontal scroll, a census of every size/color/radius/shadow/spacing in
27 use, computed contrast, focus states, emoji, glows, plus a grayscale
28 screenshot. Needs Playwright.
29- `python3 scripts/unslop-score.py <paths> [--audit report.json]` — both
30 as one number from 0 to 100 with where the points went, plus a README
31 badge. Run it before and after: "score 41 → 88" is the PR's headline.
32 
33`examples/dashboard-before.html` and `-after.html` show both on one page.
34 
35## Principles (non-negotiable)
36 
371. **A fix is a rule, not a tweak.** Every change ships as a token or
38 component (spacing, font size, weight, color role, radius, shadow,
39 button), never as a literal in the view. If the token is missing, create
40 it in the same change. Pick values **by elimination** within the scale
41 (try the value and its two neighbors; the middle wins or you repeat),
42 never pixel by pixel.
432. **Hierarchy before color.** The screen has to work **in grayscale**:
44 spacing, size, weight and contrast do the work; color comes afterwards and
45 only to mean something. If it's unclear in gray what matters, color won't
46 fix it.
473. **The first thing you read is the answer.** One hero number per screen
48 (the balance, the price, today's progress); everything else steps back.
49 Emphasize by **de-emphasizing the competition**, not by inflating the
50 hero. At most one dark/hero surface per screen, and **none in sheets or
51 modals**.
524. **Color says one thing.** One brand accent for the action or the hero
53 number; everything else is a role with meaning (money/success, up/danger,
54 status, reward) and gray for what only navigates. Decorative color =
55 slop. Color never works alone: shape or a word goes with it.
565. **Measured contrast, not assumed.** WCAG AA (4.5:1 text, 3:1 large text
57 and icons) computed from the real hex values against the real
58 backgrounds, light and dark. White on a green/yellow brand color almost
59 never passes; gray text on a colored background doesn't either (pick a
60 shade of the same hue).
616. **Nothing the screen can't deliver.** No invented numbers, no projection
62 presented as data, no implied feature that doesn't exist, no empty state
63 that lies. Design the smallest version you can actually ship.
647. **One signature gesture, taken from the domain.** A brand detail born
65 from what the app shows (a price-board price with a smaller last digit,
66 dot-matrix numerals on a running app), not a new font or effect; and it
67 degrades gracefully where it doesn't apply. Everything else is native:
68 don't fight the tab bar, switches or system sheets.
698. **Platforms ship together.** If the project has iOS and Android (or app
70 and web), the change goes to both in the same PR, in every language.
719. **Verify what the user sees.** Screenshots in light and dark, largest
72 text size, a non-default currency/language, real data (long names, empty,
73 2,000 items). What can't be compiled in your environment gets audited by
74 reading, and the PR says so.
75 
76## Any agent (Claude Code, Codex, Cursor, Copilot, Gemini…)
77 
78The rules are the same everywhere. Where it says "agents", use what your
79tool has: subagents if it has them (Claude Code, Codex…), with a git
80worktree each for devs. With no subagents, run the reviewers one after another,
81each with its own brief, and keep their outputs separate before the jury
82step. Where it says "publish", Claude Code publishes an artifact; other agents
83write an HTML file the user opens. In a chat app without a codebase, stop
84after the before/after proposal.
85 
86## Quick mode (the default for one screen)
87 
88One screenshot, one screen or one page, or the user says "quick": no
89subagents, no jury, one pass you can finish in a few minutes.
90 
911. Ground it in one line (what the screen is for, its surface mode) and
92 measure what you can: `scripts/unslop-score.py` on the screen's code
93 (with `--audit` for a web page). Then the passes on the render
94 (`process.md` § 2): one second, squint, cover the logo, left edges, gray.
952. Pick the **five fixes that change the screen most**, each with its
96 `checklist.md` number and one line of why. Hierarchy and spacing before
97 color, color before polish. Say what you would *not* change.
983. Show the before/after: the edited code's render, or an HTML mock of the
99 screen if there's no code, with the filled `spec-card.md` rows it uses.
100 Score it on the six axes of `process.md` § 4 first; under 3 on any
101 axis, revise before showing.
1024. On "yes", apply them as tokens (principle 1), rerun the score and report
103 "score X → Y" and what's still left.
104 
105Switch to the full flow below when there are several screens or videos,
106no design system yet, platforms to ship together, or the user asks for a
107full review.
108 
109## Surface modes
110 
111Not every screen gets the same ambition. Name the mode before judging:
112 
113| Mode | Screens | What wins | Expression budget |
114|---|---|---|---|
115| Operate | dashboards, settings, editors, admin | scanning, consistency, platform conventions | low: one signature at most |
116| Persuade | landing pages, onboarding, paywalls | one message, one action, a real product shot | higher: one bold idea |
117| Read | articles, docs, detail pages | line length, rhythm, quiet chrome | low |
118| Experience | games, maps, camera, media | the content itself as the canvas (#59) | high, from the domain |
119 
120The checklist applies to all four; the budget decides how far #47 and
121#58 go.
122 
123## Working agreement (full flow)
124 
125- Reviewers = *senior product designers* and devs = *senior devs*, as
126 agents (use the model the user asks for). The orchestrator doesn't build
127 the areas: it does the shared work, integrates and audits.
128- Every decision comes with an **explicit, actionable recommendation**.
129- **Before implementing, publish the before/after** and wait for the user's
130 "yes".
131- Every round also reviews what earlier rounds shipped and **all** the
132 videos/screenshots received, not just the latest.
133- When merging is allowed once CI is green: close with a list of what to
134 check when compiling (concrete risks) and, if there's no Mac/simulator, a
135 self-contained prompt for a local session.
136- On "is everything done?": done (with PRs) · pending on you · left out on
137 purpose.
138- After the last round, update the project's design system.
139 
140## Full flow
141 
1421. Inventory: frames from the videos (`process.md` § 1), screens and
143 states, and each screen located in the code. Run `scripts/slop-scan.py` on the
144 UI code and, for the web, `scripts/web-audit.mjs` on each key page.
1452. System: check (or create) the spacing, type, color and elevation scales
146 (`checklist.md` § System). Without scales, reviewers judge by eye; the
147 audit's census shows which values the page really uses.
1483. Grayscale pass + parallel reviewers (3-4, one per area) against
149 `checklist.md`, applying fixes **one at a time**.
1504. Winning proposal: one HTML page with before/after, the spec card and
151 the list of decisions; the user chooses.
1525. Devs per area in isolated worktrees with a closed brief; integrate,
153 compile, audit, PR, answer review bots, merge when green.
1546. Finally: update the project's design system (doc + tokens + its own
155 skill) with what's new.
156 
157## If the project already has its own design skill
158 
159Use it for concrete tokens and components; this one brings the method and
160the general checklist. If a rule here clashes with a written project
161decision, the project wins and the proposal points it out.
162 
View all files on GitHub →

Details

License
MIT
Stars on the repo
★ 14
Checked
Source
marcosnovo/unslop-design ↗
Creator
marcosnovo · 1 listing
View creator

Similar skills

See all →
SkillCurated aphorism collection with CRUDAphorismsdanielmiessler/LifeOS · by danielmiesslerCurated aphorism collection with CRUD — content-based matching, themed search, thinker research, DB maintenance. Quotes organized by author/theme/context/usage to prevent repetition. Four workflows: FindAphorism, AddAphorism, ResearchThinker, SearchAphorisms. Themes: Stoicism, Wisdom, Truth-seeking, Excellence, Resilience, Curiosity. USE WHEN aphorism, quote, find a quote, research thinker, add aphorism, quote for newsletter, what did X say about, quote bank. NOT FOR creative writing or social posts.★ 19.3k GitHub starsSkillNegotiates a commercial deal without giving away the termsDeal negotiationcbrock84/headcount · by cbrock84Negotiates a commercial deal without giving away the terms that matter — preparing your walk-away and theirs, trading concessions rather than conceding them, recognizing the tactics that create false urgency, protecting price by moving other variables, and closing on terms someone can actually deliver. Use this to prepare for a negotiation, respond to a demand mid-deal, work out why discounts keep landing at quarter end, or review terms before they are signed.★ 2k GitHub starsSkillInfluence and negotiation toolkit for any interactionsamber/cc-skills · by samberInfluence and negotiation toolkit for any interaction needing another person's agreement, even when the user never says 'negotiation'. Covers B2B sales, salary reviews and raise asks, collective bargaining and unions, hard 1:1s, recruitment closes, cross-cultural deals, mediation, and diplomatic messages — declining, pushing back on scope, justifying a delay, raising a concern, getting alignment. Use when the user says 'they just said X, what do I say' or 'draft a reply', or mentions a buyer, champion, procurement, RFP, sponsor, HR, union, or candidate, or a pushback, refusal, ghosting, no-decision, escalation, fixed budget, counter-offer, comp band, strike, BATNA, anchor, or concession.★ 222 GitHub starsSkillCreates professional case studies, engagement summariesCase Study Builder Assistantrealjaymes/marketingagentskills · by realjaymesCreates professional case studies, engagement summaries, and project summaries. Use when the user wants to create a 'case study,' 'client success story,' 'engagement summary,' 'project summary,' or 'portfolio piece.'★ 65 GitHub starsSkillTurn any YouTube video into a beautiful case-study📊 YouTube to Case Studytstfully/youtube-to-case-study · by tstfullyTurn any YouTube video (founder interview, product teardown, conference talk, marketing breakdown, UX walkthrough, podcast) into a beautiful case-study slideshow: one HTML file that opens in any browser, built on reveal.js, with speaker notes and every fact linked to the exact second in the video. Use this skill whenever someone wants a case study, business case study, marketing case study, UX case study, product teardown, growth teardown, competitor breakdown, swipe file, lesson deck, or presentation / slides / deck from a YouTube video or link. Also trigger on 'turn this video into a case study', 'make slides from this YouTube video', 'case study from this talk', 'teardown of this video', 'youtube to slides', 'youtube to presentation', or 'summarize this video as a deck'. Works for marketers, educators, product managers, students, and consultants; no coding needed.★ 3 GitHub starsSkillTell us what you sell and who buys it; get back a pitchSales materials that help you close dealscoreyhaines31/marketingskills · by coreyhaines31Tell us what you sell and who buys it; get back a pitch outline, a one-page leave-behind, and ready answers to the objections you hear most.★ 51.1k GitHub stars