Design rules and a zero-dependency checker for interfaces built with AI coding agents, on the web and in SwiftUI and Jetpack Compose apps. English and Turkish.
# Add to your Claude Code skills
git clone https://github.com/enmerasoftware/ai-design-checkGuides for using ai agents skills like ai-design-check.
See how ai-design-check compares with popular alternatives.
ai-design-check is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by enmerasoftware. Design rules and a zero-dependency checker for interfaces built with AI coding agents, on the web and in SwiftUI and Jetpack Compose apps. English and Turkish. It has 66 GitHub stars.
ai-design-check's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/enmerasoftware/ai-design-check" and add it to your Claude Code skills directory (see the Installation section above).
ai-design-check is primarily written in JavaScript. It is open-source under enmerasoftware on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh ai-design-check against similar tools.
No comments yet. Be the first to share your thoughts!
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.

Finds and fixes what makes interfaces built with AI coding agents (Claude Code, Cursor, Codex) look generated: 76 design rules, a zero-dependency checker that marks every finding, and an agent skill that fixes the screen and proves it by checking again. For dashboards, admin panels, SaaS screens and landing pages, and for SwiftUI and Jetpack Compose apps.
npx @enmera/ai-design-check # check the project (or: ai-design-check src lang)
npx skills add enmerasoftware/ai-design-check # the rules and the fix skill for your agent
npx @enmera/ai-design-check system --brand "#1E5A63" # fonts, type and colours that pass contrast
Then ask your agent to "fix the design of this screen". It measures, proposes a direction from your product, fixes spacing, colour, icons, copy, type, layout, components and motion in passes, and shows the count before and after. Fixing is what most tools stop at; the checker keeps the next agent edit from bringing the slop back.
The rules come from real screens shipped by Enmera and Searvia: what read as "generated", what broke at narrow widths, what people did not understand. They were then compared with 16 high-rated dashboard designs on Dribbble and Behance: the patterns the strongest work shared became rules (stat card anatomy, one card header, one highlighted chart series, flat buttons, surface steps instead of shadows), and where the popular shots themselves show the tells (half of them open with "Welcome back 👋") the rule stayed. Method and findings: RESEARCH.md. Each rule says what, why and how to fix it, in English and Turkish.
npx @enmera/ai-design-check inventory # how many different buttons, inputs, headings, badges, cards you have
npx @enmera/ai-design-check rules # list the rules (--tr for Turkish)
npx @enmera/ai-design-check init # write a config with the defaults
npx @enmera/ai-design-check story before.html after.html # a square before/after video, like the one above
No LLM, no API key, no dependencies: it catches measurable defects (a focus ring removed, an icon button with no
name, a font size off the scale, spacing off the 4 px grid, a raw <button> next to your Button, emoji as icons,
"Welcome back, Alex!", a Turkish toUpperCase()), and leaves taste to you and the fix skill.
| Area | Examples |
|---|---|
| Writing | Sentence case for interface text (Turkish and English), no tracked uppercase labels, labels that fit |
| Type and shape | One type scale (text-2xs = 11 px is the floor), one radius scale, no cards inside cards |
| Components | Buttons, inputs and selects from shared components, no outside styling of them, repeated markup becomes a component |
| Accessibility | Focus ring never removed without a replacement, icon-only buttons have a name |
| Localisation | Locale-aware case changes (Turkish i/İ), numbers through the locale formatter, real plurals, no glued sentences |
| Selectors | Segmented control for the primary choice, plain sub-tabs on the same row, pill chips only for filters |
| Layout | Wide tables span the page, uneven cards in a grid masonry, readable line length, spacing rhythm |
| Navigation | Menu grouped by job, place and URL decided before the feature, moved URLs redirect |
| Visual language | Line icons instead of emoji, no gradient text or purple gradients, no side stripes, glow only in charts |
| Motion | No transition-all, no bounce easing, reduced motion, pulse only for live data, no auto-scrolling strips |
| Data and copy | Numbers carry their comparison, tabular numerals, empty states, buttons that say what they do, errors that say what to do, no buzzwords |
The full list with reasons: RULES.md.
The same rules read SwiftUI and Jetpack Compose: spacing off the 4 pt grid (.padding(13), 10.dp), radii off the
scale, fixed .system(size:) text that ignores Dynamic Type, .heavy and FontWeight.Black headings, purple
gradients, sparkles for AI, emoji in strings, Title Case labels, exclamation copy, heavy shadows, big blurs,
looping animations and tap targets under 44 pt / 48 dp (a small .frame on a button label or a .size() on a
clickable; padding or an outer frame around a small icon passes). Point it at the app folder:
npx @enmera/ai-design-check Cebbin/Views
Unslopping a SwiftUI app: our own iOS app, Cebbin, live on the App Store. The home screen goes through 16 fixes one at a time (spacing, one accent, decoration, copy, hierarchy, layout); every frame is the real app on the simulator and the card under it shows the SwiftUI line that changed. The first run took the same screen from 23 findings to 0.
Plain Node (20+), no dependencies. It reads .tsx, .jsx, .vue, .svelte, .html, Blade, CSS and i18n JSON, and native app code:
SwiftUI (.swift) and Jetpack Compose (.kt). It reports rule ids with file and line. Rules that need judgement (layout, selectors, empty states) are marked review
and are left to people and agents.
src/pages/dashboard.tsx
42 error Font sizes from the scale only: text-[10px] type-scale
88 warn No tracked uppercase labels: tracking-wide uppercase no-decorative-uppercase
lang/tr.json
812 error Translation in Title Case: "Sıra Takibi" (Rank tracking) sentence-case
2 errors, 1 warning, 0 notes.
Exit code 1 on errors (--strict: also on warnings). --json for machines, --format github for pull request
annotations. Class rules read class strings only (class, className, cn(), clsx(), cva(), twMerge()), so
comments and copy do not match.
inventoryButtons 726 uses · 149 different looks · 147 without a shared component
115× <Button variant=outline size=sm> src/pages/projects/show.tsx:212
9× <button> bg-brand-400 font-semibold px-4 py-2 rounded-full text-on-brand text-sm src/pages/home.tsx:91
Headings 229 uses · 69 different looks · 229 without a shared component
Layout classes (width, margin, position) are ignored, so two copies that differ only in where they sit count as one
look. Use it before a cleanup to see the drift and after to see it gone. repeated-markup reports the same long class
list repeated three or more times, with every place, so it can become one component.
npx @enmera/ai-design-check --write-baseline # record today's findings in .ai-design-check-baseline.json
npx @enmera/ai-design-check # from now on only new findings are reported
Ignore one place, always with a reason after -- (an ignore without a reason is not honoured):
{/* ai-design-check-ignore-next-line type-scale -- hero display size, see DESIGN.md */}
// ai-design-check-ignore-file use-shared-components -- this file is the Button component
ai-design-check.json (or the dotfile .design-rules.json) in the project root:
{
"include": ["resources/js", "lang"],
"ignore": ["resources/js/vendor/**"],
"i18n": { "files": ["lang/*.json"], "keysAreSource": true, "framework": ["Reset Password"] },
"properNouns": ["Brand Studio", "Core Web Vitals", "Privacy Policy"],
"componentDirs": ["**/components/ui/**"],
"components": { "button": "Button", "input": "Input" },
"sharedComponents": ["Button", "Badge", "Input", "Card"],
"looks": { "badge": "StatusBadge", "card": "Tile or SectionCard", "heading": "Heading", "link": "LinkButton" },
"rules": { "pulse-for-live-only": "off" },
"allow": {
"type-scale": ["src/marketing/hero.tsx:text-[44px]"],
"glow-in-charts-only": ["src/components/charts/**"]
}
}
i18n.files: JSON dictionaries. With keysAreSource the keys are the English source text and are checked too.
framework lists keys owned by a framework that you cannot rename.properNouns: names that keep their capitals ("Google Business Profile" is recognised from the brand list).allow: per rule, "glob" or "glob:exact match".rules: "off", "info", "warn" or "error" per rule id.componentDirs: where raw <button>/<input> are allowed (the components themselves).components: raw element → the shared component to use instead. sharedComponents: components whose look comes
from props; className on them may only place them (width, margin, grid position).looks: the component that owns each hand-written look found by use-shared-looks (a span styled as a badge, a
div styled as a card, a heading with size classes, a link styled as a button). false turns one kind off.- run: npx @enmera/ai-design-check
The package ships two skills:
npx skills add enmerasoftware/ai-design-check
narrownpx @enmera/ai-design-check narrow examples/narrow-de.html --width 320
Renders the page at phone width and at desktop width in your Chrome and reports what only a rendered page shows: the page scroll