Install
$ agentstack add skill-plugin87-full-stack-design-skills-anti-ai-design-patterns ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Anti-AI Design Patterns
A field guide to the visual tells that mark an interface as machine-generated, and the intentional choices that replace them. The goal is not a different template — it is design that reads as deliberate: chosen neutrals, a real type system, asymmetry with reason, and iconography that belongs to one family.
Core principle: intentional beats default
An AI tell is almost never a single ugly element. It is the absence of a decision — the palette that was inherited instead of chosen, the border that decorates instead of encodes, the emoji dropped in because a real icon was more work. Every rule below reduces to one question:
> Did a human decide this, or did it fall out of a default?
If you cannot state why a color, radius, border, or glyph is there, it is probably a tell.
1. The border tell — single-side accent rails
The single most common AI slop signature: a rounded card with a colored stripe on one side (usually left) and neutral borders on the other three.
/* ❌ AI TELL — accent rail on a rounded card */
.card {
border: 1px solid #e5e7eb;
border-left: 4px solid #6366f1; /* the giveaway */
border-radius: 12px;
}
Why it reads as AI: the accent has no informational job — it is applied to every card regardless of state, so it decorates rather than encodes. A colored edge on a rounded corner also fights the geometry (the stripe clips awkwardly at the radius).
Fixes — pick based on intent:
/* ✅ A. If the color means nothing: drop it. Let type + spacing carry the card. */
.card { border: 1px solid var(--line); border-radius: 12px; }
/* ✅ B. If the color must encode STATE (error/warn/success): use a full token
set — background tint + text + a same-color full border, not a lone rail. */
.card--critical {
border: 1px solid var(--danger-line);
background: var(--danger-bg);
color: var(--danger-ink);
}
/* ✅ C. If you genuinely want an edge accent, make it a deliberate full-bleed
top border on a SQUARE-topped card, or an inset marker — a decision, not a default. */
.stat { border-top: 3px solid var(--accent); border-radius: 0 0 10px 10px; }
Rule of thumb: a colored border must earn its place by encoding something true (severity, category, selection). If it is on everything, it is on nothing.
2. The emoji / emoticon tell — use an icon library only
Emoji as UI is the loudest AI-alien signal. It renders differently on every OS, breaks visual weight, ignores your stroke width, and cannot inherit color or a11y semantics.
{/* ❌ AI TELL — emoji as icons / section markers / bullets */}
🎨 Design
✅ Ship it
🚀 Deploy
Nice work! 😄 {/* emoticons in product copy */}
Rule: emoji and emoticons never appear in product UI. Use one icon library.
{/* ✅ Icons from a single library — inherits color, size, stroke, a11y */}
import { Palette, Check, Rocket } from "lucide-react";
Design
Ship it
Deploy
Icon-library discipline (see references/icon-library-guide.md):
- One family per product. Never mix Lucide + Heroicons + Font Awesome — differing stroke widths and metaphors read as incoherent.
- Recommended sets: Lucide, Heroicons, Phosphor, Radix Icons, Tabler. Pick one.
- Size on a scale (16 / 20 / 24), match the icon stroke to your type weight, align to the text baseline.
- Decorative icon →
aria-hidden="true". Meaningful icon (icon-only button) →aria-label. - Never rasterize emoji into an `` to "use it as an icon." That is the same tell with extra steps.
> Exception: genuinely emoji-native surfaces (a chat reactions bar, an emoji picker, a flag/country selector) — there the emoji is the content, not decoration.
3. The palette tell — inherited, not chosen
/* ❌ AI TELL — raw framework defaults, straight out of the box */
color: #6366f1; /* Tailwind indigo-500, untouched */
background: linear-gradient(135deg, #a855f7, #3b82f6); /* the purple→blue hero */
--gray: #808080; /* pure, hueless mid-grey */
Tells: the default Tailwind/Bootstrap swatches used verbatim, the purple-to-blue gradient hero, and pure hueless greys.
/* ✅ Choose a palette. Bias neutrals slightly toward the accent hue so they
read as selected, not inherited. Define as tokens; style through tokens. */
:root {
--accent: #0c7c7c; /* a specific teal, not indigo-500 */
--ink: #1a1d23; /* near-black with a cool bias */
--ink-soft:#575d68; /* grey that leans blue toward the accent */
--line: #dce0e6; /* borders share the same bias */
}
Guidance:
- Never ship raw default swatches. Shift hue/lightness even slightly so the palette is yours.
- Neutrals get a subtle hue bias toward the accent — a pure
#808080is the tell. - Spend boldness in one place; keep everything around it quiet. If the accent fights the ground, drop saturation or move to an analogous hue rather than adding a second loud color.
- Semantic colors (success/warn/danger) are a separate system from your brand accent.
4. The layout & shape tells
| Tell | Fix | |---|---| | Everything centered (text-align:center on whole sections) | Use a real grid; left-align running text; center only what deserves emphasis | | One radius everywhere (rounded-lg on cards, buttons, inputs, avatars) | A radius scale (e.g. 6 / 10 / 16 / full) mapped to element size | | Perfect symmetry, no focal point | Intentional asymmetry — an off-center hero, an uneven 60/40 split | | Uniform spacing (everything gap-4) | A spacing scale with rhythm — tight within groups, generous between them | | Drop shadow + glassmorphism on every surface | Elevation as a system (0/1/2 levels); most surfaces are flat | | Pill/badge on every label | Badges encode state; plain text labels for everything else |
5. The typography tell
❌ Inter (or Space Grotesk) as the reflexive "safe" choice for every project,
at one weight, one size, no scale.
Fixes:
- Pair two deliberate typefaces (a display face used with restraint + a readable body face); add a mono utility face for data/labels if the subject is technical.
- Commit to a type scale and stay on it. Give headings
text-wrap: balance, body ~65ch line length, uppercase labels a touch of letter-spacing. - Inter is not banned — but if it is there because it is the default, that is the tell. Choose it for a reason.
6. The content tell
- Lorem ipsum is an instant AI/placeholder signal. Always write real, specific copy.
- Fake data that looks fake ("John Doe", "$1,234.56", "Lorem Company") — use plausible, varied, domain-true content.
- Copy written from the system's side ("webhook config") instead of the user's ("Notifications"). See
design-fundamentals. - Em-dash-heavy, evenly-hedged marketing prose — write specific, active, human copy.
7. The "AI-alien" uncanny tells
Subtler signals that something is off even when nothing is obviously wrong:
- Too consistent. Real design has intentional exceptions; machine output is eerily uniform. Vary card heights, let one item break the grid on purpose.
- Gradient text on headings, rainbow or purple→pink. Almost always a tell.
- Icon + emoji mixed in the same list. Pick one system (icons).
- Over-rounded everything including images and section containers.
- Centered max-w-prose everything with no layout ambition.
- Decorative dividers/numbers (01 / 02 / 03) on content that is not actually a sequence. Structure must encode something true.
Workflow: generate, then de-slop
- Build to spec using the other skills (
design-fundamentals,css-styling-pixel-perfect, etc.). - Run the anti-AI review pass — walk
references/review-checklist.mdagainst the output. - For each flagged item, state the decision it should encode. If there is none, remove it.
- Swap every emoji/emoticon for an icon from the chosen library; verify a single family.
- Verify tokens — no raw default swatches, neutrals biased, one accent.
When NOT to over-correct
Avoiding AI slop is not "add more decoration." Restraint is the point:
- A clean, flat, well-spaced page with one accent is never the wrong answer.
- Do not replace an emoji tell with an over-designed icon-and-gradient tell.
- A deliberately single-theme, minimal aesthetic is a valid choice, not an omission.
References
references/ai-tells-catalog.md— full before/after catalog with code.references/icon-library-guide.md— choosing and using one icon set correctly.references/review-checklist.md— the de-slop audit rubric.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: plugin87
- Source: plugin87/full-stack-design-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.