ui-audit
Finding the marks of generated work in an interface that already exists: what to search the code for, how to judge each finding, and how to report and fix them. Read before reviewing, improving or redesigning an existing page or app.
- License 许可
- Apache-2.0
- 所属仓库
- enowdev/enowxcli
- 最近更新
- 2026-10-06
- Stars
- ★ 67
- Forks
- 21
01 前言 Front Matter
- name
- ui-audit
- description
- Finding the marks of generated work in an interface that already exists: what to search the code for, how to judge each finding, and how to report and fix them. Read before reviewing, improving or redesigning an existing page or app.
02 资源文件 12
- 参考文档references/ai-cost-analysis.md2.1 KB
- 参考文档references/aks-anomaly.md4.5 KB
- 参考文档references/aks-cost-analysis.md1.5 KB
- 参考文档references/aks-enablement.md1.4 KB
- 参考文档references/cost-investigation.md3.2 KB
- 参考文档references/cost-query/dimensions-by-scope.md1.5 KB
- 参考文档references/cost-query/error-handling.md1.5 KB
- 参考文档references/cost-query/examples.md1.2 KB
- 参考文档references/cost-query/guardrails.md1.7 KB
- 参考文档references/cost-query/request-body-schema.md1.4 KB
- 参考文档references/cost-query/workflow.md2.6 KB
- 参考文档references/tools-and-safety.md2.2 KB
03 SKILL.md 正文
Auditing an existing interface
A page built by a model, or by hand from generated snippets, carries recognisable marks. Most can be found in the code before the page is even opened. Audit first, then change: fixing a page without knowing what is wrong with it produces a different generic page.
1. How to audit
- Read the structure: the page files, the components, the stylesheet or
theme,
DESIGN.mdif any. Note the direction the project already has. An audit does not replace the owner's direction with yours. - Search: run the
ui_checktool on the interface; it runs most of the searches in section 2 in one pass and lists the hits by priority. Usegrepfor anything it does not cover. Each hit is a candidate, not a verdict. - Judge each candidate: a technique is slop when it is there by default rather than for a reason (section 3). A gradient in the brand's own palette is fine; the default blue-to-purple on every section is not.
- Look at the rendered page with the
previewtool: overflow on a phone, contrast as rendered, dead links, controls without a name, small touch targets, console errors, a sidebar left open on a phone, content floating beside a sidebar. A screen behind a sign-in is looked at withloginand a test account; without it the preview shows only the sign-in form. Then the layout against the checks in theui-layoutskill: positioning, focal point, text measure, rhythm, phone layout. - Check the structure against
ui-structure: does the page have the regions its kind needs, in an order that answers the reader's questions, on one skeleton (one container, gutters, one left edge, one surface per level, the spacing scale, a breakpoint plan)? Then each control against its contract inui-anatomy: its variant fits its job, its size is on the scale, it shows every state, the keyboard drives it. Structure comes before taste: a tidy palette on a page with three left edges is a broken page. - Report (section 4), then fix what the task covers.
2. What to search for
Search the source for each pattern; the list is where generated work usually shows.
Colour and effects
- Default gradients:
linear-gradient\(.*(purple|violet|indigo|#6366f1|#8b5cf6|#a855f7),from-(purple|violet|indigo|blue)-[0-9]+ .*to-(purple|violet|pink|indigo),bg-clip-textwith a gradient (gradient headline text). - Glass everywhere:
backdrop-filter,backdrop-bluron more than one or two elements. - Glow:
box-shadow: 0 0 [0-9]+px,shadow-.*/(50|60|70),drop-shadowwith a colour, on many elements. - Heavy shadows by default:
shadow-(xl|2xl)on most cards. - Pills everywhere:
rounded-fullorborder-radius: 9999pxon buttons, inputs, cards and badges together. - Decorative backgrounds:
radial-gradientblobs,bg-grid, dot or grid patterns,blur-3xlorbs. - Colours outside the tokens:
#[0-9a-fA-F]{3,8},rgb\(outside the token definitions; Tailwind arbitrary values\[#.
Type
- Default fonts chosen without a reason:
Inter,Geist,Space Grotesk,Poppinswith no design note. - Decorative labels:
uppercasetogether withtracking-widestorletter-spacing: 0.2emand more above headings. - Monospace as costume:
font-monoon headings.
Copy
- Buzzwords:
unlock|elevate|empower|seamless|revolutioni|next-gen|cutting-edge|supercharge|effortless|game-chang|world-class|powerful(and the same words in the project's language). - Generic actions:
>\s*(Get Started|Learn More|Try Now|Explore|Discover|Submit|Click here)\s*<. - Em dashes in interface copy:
\u2014(search for the character itself). - Emoji in interface text: characters in the emoji ranges inside JSX, HTML or strings rendered to the page (? ✨ ⚡ ? ✅ ? ?).
- Placeholder text left in:
lorem ipsum,John Doe,jane@example,Acme,Your Company.
Fabricated content
- Invented figures:
[0-9]+[kKmM]?\+,[0-9.]+%,99\.9,10x, near words like users, customers, uptime, faster, rating. - Testimonials, star ratings, "trusted by" logo rows: search for
testimonial,rating,stars,trusted,logos. Real only with a source.
Structure and behaviour
- Dead controls:
href="#",href="",onClick={() => {}}, buttons with no handler, nav links to anchors that do not exist. - Removed focus:
outline: none,outline-nonewithout afocus-visiblereplacement. - Fixed viewport heights:
100vh,h-screenon sections. - Fixed widths that break phones:
width: [0-9]{3,}px,w-\[[0-9]{3,}px\],min-widthon text containers. - Missing states: data fetching with no empty, loading or error branch.
- Div soup: clickable
divs (<div onClick),divs wherebutton,a,nav,mainorulbelong; images with noalt. - Repetition: the same card markup copied three or more times instead of a component; the same section composition repeated down the page.
- Icons: emoji as icons; more than one icon library imported
(
lucide-reactandreact-iconsand@heroiconstogether); the generic set (sparkles, rocket, zap, wand) on feature cards.
Positioning (application screens)
- A page column centred inside a shell:
mx-autowith amax-w-*in the component that wraps every screen (aPageContainer, a layout), ormargin: 0 autoon the content beside a sidebar (ui-layout2b). - A sidebar with no narrow-screen state: an
asideor sidebar with a fixed width (w-56,w-64,width: 240px) and nohidden,lg:or media query around it, and no Menu button that opens it as a drawer. - A filter or search area in its own card with a heading ("Search and
filter", a
SlidersHorizontalicon before a title). - Controls in every row: steppers, inputs or selects inside table cells; two or more buttons repeated on every row.
- The same status badge on every row ("Active" on each).
- A second job stacked under the first: another kind of record managed in a section below the list.
- A "Reload" or "Refresh" button beside the primary action.
- Layout by hand:
float:,display: inline-blockrows,position: absoluteplacing content (not an overlay),<br>or emptydivs for space,margin-(left|right|top): -hacks, runs. - Gaps faked with margins: children with
margin-bottom/mb-*inside a grid or flex row instead of the container'sgap; gaps that differ between rows of one grid. - Cards of one grid in different shapes: a
width/w-*on a card, images without a fixedaspect-ratio, a fixedheight/h-*on cards, actions not pushed down (mt-auto), so buttons sit at different heights. - Controls of different heights side by side: an input, a select and a button in one row with different heights or padding.
- Native dropdowns:
<select(or aSelectfrom no component library) outside a phone-first form. They render differently on every OS; use a custom select (ui-part-choices, section 7).
3. Judging a finding
For each candidate ask: what does this serve? Keep it when the answer names a purpose (the brand's colour, a real hierarchy, a real status). It is slop when the only answer is "it looks modern" or there is no answer.
Rank what is left:
- High: dishonest, broken or structurally wrong. Invented figures, testimonials or logos, dead controls, removed focus, contrast below AA, horizontal scroll or content cut off on a phone, content touching the window's edge, sections on different left edges, panels of one level on different surfaces, a page missing a region its kind needs (a dashboard with no page header, a landing page with no clear primary action), a selected state shown by a shade alone, a submit that accepts invalid input, missing loading, empty or error states.
- Medium: generated look. Default gradients and glass, identical card grids, centred everything, buzzword copy, generic actions, emoji icons, one composition repeated.
- Low: consistency. Colours outside tokens, mixed icon sets, stray radii, duplicated markup that should be a component.
4. Reporting
Open with one verdict, the same scale as review: Good (sound
structure, tidy, nothing generated-looking left; never with a high
finding open, and never for a page you have not seen rendered), Good with fixes, Needs work, or Bad (the
layout or direction is wrong at the root; say what should replace it). Say
it plainly: an untidy screen is untidy, a good one is good, with the reason.
Drifting spacing, cards of different sizes and controls of different
heights are findings, never left out to be kind.
Then report findings as a numbered list, highest first, each with the file and line, what it is, why it reads as generated or what breaks, and the fix in one line:
1. HIGH app/page.tsx:42 "10,000+ happy clients" has no source.
Fix: remove the figure, or mark it [REAL FIGURE].
2. MED components/Hero.tsx:12 purple-to-pink gradient headline, not in
the brand palette. Fix: solid text colour from the tokens.
Then, when the task is to improve the interface, fix the high and medium
findings in scope, following the ui, ui-layout, ui-page-* and ui-part-*
skills, and say which you left and why. When the task is only to review,
change nothing.
04 同仓库更多 Skills
demo-skill
Project-scope demo skill for tests.
writing
Writing words people read: the specific thing instead of claims, words to drop, sentences, interface copy (buttons, labels, errors, empty states, confirmations), page copy, notifications and emails, alt text and link text, numbers and dates, words that translate well, documentation and voice. Read before writing a page's copy, an interface's text or a document.
ui
Designing or restyling an interface: direction, layout, type, colour, icons, components, states, responsive behaviour. Read before building a page, a screen or a set of components.
ui-themes
Light and dark themes, and colour that holds in both: tokens with a value per theme, and what each kind of content needs to stay visible (icons, SVG drawings and line art, logos, photos, screenshots, charts, code, maps, borders, shadows, focus, form controls), switching without a flash, and checking both. Read before building a second theme or a theme toggle, and before any drawing, logo or chart on a page that has two themes.
ui-structure
Structure before styling: the blueprint written before any interface code (the screen's job, the regions its kind of page needs, their order and why, the layout skeleton in numbers, the components and their states), the anatomy and order of a homepage, a dashboard, a list, a detail page, settings, a form, sign-in, pricing, docs, an article and a checkout, and how to turn the blueprint into code (tokens, layout primitives, components, sections, page). Read first, before building or rebuilding any page or screen.
ui-stack-vue
Building interfaces in Vue 3 and Nuxt: project layout, script setup with typed defineProps, defineEmits and defineModel, attribute fallthrough, slots and scoped slots, template refs, ref, reactive and computed, watch versus watchEffect, composables and VueUse, provide and inject, Pinia, keyed v-for, transitions, Nuxt 4 (app directory, pages, layouts, useFetch and useAsyncData keys, $fetch in handlers, server routes, runtime config, useSeoMeta, NuxtImg, middleware), VeeValidate forms, Reka UI and Nuxt UI, testing, vue-tsc, and the traps. Read when the project uses Vue or Nuxt.