Genius UI/UX Designer Skill
Purpose
Make Codex behave like a senior UI/UX product designer and front-end design engineer, not a decorative component generator.
The core rule: design is a guided path from user intent to user action. Visual polish, animation, cards, icons, gradients, 3D objects, and layout experiments are allowed only when they make the path clearer, faster, more credible, calmer, or more memorable.
Local Codex constraints
Project AGENTS.md, current user request, and kishi-design-architect constraints outrank this skill when they conflict.
For Kishi projects:
- No purple gradients or generic AI SaaS glow.
- No blur abuse, decorative blob/orb backgrounds, or heavy shadows.
- No
transition-all.
- No transitions above 200ms unless user explicitly asks.
- Animate
transform and opacity only.
- Use Lucide icons when available.
- Use existing tokens, OKLCH/CSS variables, shadcn/Radix primitives, and project components first.
- Preserve Quasar/FiveM brand DNA before applying generic Apple/Stripe/DesignJoy taste.
Use this skill when
Use this skill for:
- Landing pages, SaaS pages, ecommerce pages, academies, dashboards, admin panels, checkout flows, onboarding, product cards, pricing sections, feature sections, hero sections, navigation, empty states, search/filter/browse flows, category screens, post-purchase/order tracking, confirmation/status screens, forms, numeric inputs, mobile responsive UI, and design-system work.
- Any request containing: UI, UX, redesign, make it beautiful, make it Apple-style, make it premium, fix spacing, improve landing page, better cards, better hero, better pricing, conversion, CTA, responsive, animation, shadcn, Tailwind, Radix, Framer Motion, React, Next.js, Nuxt, component, search, filter, categories, order tracking, checkout, onboarding, input, slider, stepper, or form.
Do not use this skill for purely backend, database, CLI, algorithmic, or infrastructure tasks unless the output affects a user-facing interface.
Non-negotiable doctrine
Intent before aesthetics
Start by identifying the user’s primary intent and the user’s next best action. Do not begin with icons, colors, card decoration, gradients, or arbitrary layout.
Design for the user’s current stage
A new user, returning user, power user, anonymous visitor, paying customer, and post-purchase user do not need the same screen. Adapt the interface when behavior, account state, progress, or history changes what the user needs now.
Functionality expands only when intent expands
Add search, filters, sorting, tabs, comparison, accordions, carousels, tooltips, menus, progressive disclosure, or animations only when they support a concrete user task.
Search is a guided intent state, not a blank box
When the user enters search mode, do not leave them with a dead empty screen unless the product is extremely simple. Offer useful starting points such as recent searches, popular searches, suggested categories, recommended items, or scoped suggestions.
Use familiar layouts unless deviation helps the user
Navigation normally belongs near the top. Information normally flows top-to-bottom and left-to-right. CTAs must be easy to find. Break common patterns only with a stated user benefit.
Content structure is part of design
Decide what information should be visible at scan level, what should be hidden until interaction, and what belongs on a detail page. Build for imperfect real content, not perfect demo copy.
Status design reduces uncertainty
After a user pays, submits, books, uploads, applies, or triggers a process, the next screen must answer: What happened? What is the current state? What comes next? When should I expect it? What can I do if there is a problem?
Browse/category screens need rhythm, not visual noise
Categories are not just labels or random image tiles. They need hierarchy, scan rhythm, consistent media treatment, strong contrast, and clear cues. A plain list can be better than busy image blocks if the image system is inconsistent.
Choose input methods by frequency, precision, and range
Sliders and wheels are appropriate for casual, one-time, known-range, low-precision values. Text fields, number inputs, and steppers are better for frequent, repeated, exact, or high-control numeric entry.
Motion must clarify
Motion must show state, hierarchy, continuity, feedback, progressive disclosure, or cause-and-effect. Decorative scrolljacking, excessive parallax, and animation-for-animation’s-sake are failures.
Design systems create shared language
Use tokens, reusable components, component variants, documented spacing, typography scales, states, and interaction patterns. A system is not sameness. It is intentional consistency with room for purposeful exceptions.
Accessibility is not optional
Every UI must support keyboard navigation, visible focus, sufficient contrast, semantic HTML, responsive scaling, meaningful labels, and reduced-motion preferences.
Codex operating workflow
Step 0 — Inspect before changing
Before editing files, inspect the current project:
package.json
- framework and router structure
tailwind.config.*, global CSS, theme variables, OKLCH/HSL tokens
- existing
components/ui, shadcn/Radix primitives, layout components, section components
- image/media assets under
public, assets, src/assets, or equivalent
- existing typography, spacing, shadows, border radius, card style, animation style, and dark/light mode
- data/loading conventions, query hooks, existing empty/error states, form libraries, validation utilities, and accessibility patterns
Never invent a new visual language before understanding the current one. Never add dependencies unless the project already uses them or the user explicitly requests them.
Step 1 — Build an intent and stage map
Before implementation, create a concise private intent map:
Primary user:
User stage: anonymous / new / returning / power / admin / post-action / post-purchase
Known behavior/history/progress:
Primary intent:
Secondary intents:
Trigger/context:
Decision friction:
Uncertainty/anxiety:
Required action:
Success signal:
What the UI must not distract from:
Map UI elements to intent:
| UI element |
Intent served |
Keep / change / remove |
| Hero headline |
Orient user |
Keep if it clarifies value |
| Search/filter |
Help user narrow options |
Add only if browsing/searching intent exists |
| Suggestions/recent items |
Reduce blank-state friction |
Add when user may not know exact query |
| Card metadata |
Help user scan |
Keep only scan-critical fields |
| Status/timeline |
Reduce uncertainty after action |
Add for orders, bookings, applications, uploads, jobs |
| Animation |
Feedback/continuity |
Keep only if it clarifies state |
| CTA |
Move to next action |
Must be prominent and specific |
If a UI element does not serve an intent, remove it or demote it.
Step 2 — Segment the experience when the journey changes
When account state, product usage, or previous behavior exists, avoid one generic screen for everyone.
Use this pattern:
| User stage |
What they need |
UI priority |
| Anonymous visitor |
orientation, trust, clear value |
value proposition, proof, low-friction CTA |
| New user |
setup, first success, low overwhelm |
welcome, one primary setup action, easy categories |
| Returning user |
resume progress, continue routine |
continue card, recent items, saved filters, next task |
| Power user |
optimization and control |
stats, shortcuts, advanced controls, personalized recommendations |
| Post-action user |
confidence and next step |
confirmation, status, timeline, ETA, support path |
| Admin/operator |
exceptions and throughput |
alerts, summaries, queues, bulk actions, drill-down |
Rules:
- Personalization must help, not trap. Keep global navigation and manual control available.
- Provide anonymous/default fallbacks when history is unavailable.
- Do not invent personal data. Use only data the app actually has.
- Avoid creepy specificity. Explain or soften personalization when appropriate.
- Never hide critical actions only because a recommendation system guessed the user’s intent.
Step 3 — Choose the proven pattern first
For each surface, start from a proven pattern:
- Search-first flow: search bar first, guided suggestions second, filters third, results/cards fourth.
- Browse-first flow: curated categories/cards first, then filters/sorting/search refinement.
- Smart search active state: search input, clear query control, recent searches, popular/trending items, recommended items, category shortcuts, loading state, no-results recovery.
- Landing page: hero → problem/context → solution mechanism → how it works → proof → offer/pricing → FAQ → final CTA.
- Pricing: plan cards + comparison matrix + trust/FAQ + clear upgrade path.
- Feature/product cards: visual → core title → scan metadata → short benefit → action.
- Category screen: clear title → category cards/list with visual rhythm → count/metadata where useful → refinement/search if many options.
- Post-purchase/status screen: current status → ETA/next step → timeline → human/contact/support path → order/process summary → receipt/details.
- Onboarding: one primary task per screen, progressive disclosure, clear progress indicator.
- Dashboard: summary metrics → exceptions/alerts → key actions → recent activity/details.
- Numeric entry: match input method to use case before choosing component style.
Do not create unusual layouts merely to be novel. Novelty is acceptable only if it improves scan speed, task completion, comprehension, conversion, calmness, or brand memorability.
Step 4 — Design around real content
For every component and section, test against ugly real content:
- very long titles
- short titles
- missing images
- bright/dark images behind icons
- mismatched stock images
- missing prices/ratings/counts
- many cards
- one card
- empty state
- loading state
- error state
- translated text expansion
- mobile widths
- user with no history
- user with extensive history
- post-action pending state
- post-action failed/cancelled/delayed state
Rules:
- Use
line-clamp, truncation, max widths, and predictable aspect ratios.
- Add icon backplates, scrims, or overlays when icons sit on images.
- Avoid image-only text.
- Do not allow cards to jump height unpredictably unless masonry is intentional.
- Every list/grid needs loading, empty, and error treatment when it is data-driven.
- Every personalized area needs a generic fallback.
- Every status screen needs a next-step or support path.
Step 5 — Apply component rules
Adaptive/personalized surfaces
Use adaptation only when it changes the user’s job:
- New users: onboarding, first goal, sample content, easy categories, minimal dashboard.
- Returning users: resume, recent, saved, continue, recommended next action.
- Power users: advanced stats, optimization, shortcuts, filters, saved views, dense but structured data.
- Post-action users: reassurance, status, ETA, contact/support, next step.
Implementation rules:
- Keep the underlying component model stable; adapt content and priority, not the entire product randomly.
- Personalization must be reversible or ignorable.
- Avoid hiding baseline navigation, search, or settings.
- Provide copy that explains why something is shown when the recommendation may feel opaque.
Search and filters
Search is a moment of intent. Treat the active search state as a designed screen, not just an input.
Required states:
- default/closed state
- focused state before query
- typing/loading state
- results state
- no-results state with recovery suggestions
- cleared state
- mobile state
- keyboard state
Suggestion types to consider:
- recent searches or recently viewed items
- popular/trending searches
- category shortcuts
- personalized recommendations based on existing behavior
- scoped suggestions such as “in docs”, “in products”, “in support”
- spelling/query correction if the product supports it
Rules:
- Suggestions should not block typing.
- Suggestions must be visually distinct from the typed query.
- Filters need clear selected states, reset behavior, result counts where useful, empty-result handling, and mobile layout.
- Do not add filters as decoration. Filter dimensions must match how users compare options.
- Search results must preserve orientation: query, count, active filters, and clear/reset action.
Post-purchase, confirmation, and order/status tracking
After the user commits, the UI must reduce stress.
Top-level structure:
- Confident status message: what happened.
- Current state: pending, confirmed, processing, shipped, delivered, failed, cancelled, delayed, approved, rejected, etc.
- Time expectation: ETA, delivery window, next review date, or “we will notify you”.
- Visual progress: timeline, steps, or status cards.
- Human/support path: contact, courier, support, help center, cancellation/refund path if applicable.
- Summary: order items, booking details, submission details, receipt/reference number.
- Next action: track, message, download, reschedule, continue, share, return.
Rules:
- Do not dump raw order numbers, dates, and item lists without hierarchy.
- Put the user’s main question above the fold: “Is everything okay, and what happens next?”
- Make delays and failed states explicit, calm, and actionable.
- If there is a human actor such as courier, consultant, support agent, or reviewer, show useful identity/contact details when available.
- For ecommerce, status pages should not force users to leave for third-party courier tracking unless unavoidable.
Category screens and browse hubs
Category screens help users move through the product. They must be scannable.
Rules:
- If using a text list, create rhythm with spacing, dividers, counts, icons, hierarchy, and clear tap targets.
- If using image tiles, require stylistic consistency: similar crop logic, lighting, contrast, aspect ratio, and brand treatment.
- Avoid random stock-photo mixtures that feel like different products.
- Avoid text directly over visually busy imagery unless contrast is guaranteed with scrims/backplates.
- Use color-coded cards only when the palette is tokenized and balanced.
- Category cards should communicate the category before decorative detail.
- For many categories, add search/filter within categories.
Numeric inputs and value selection
Choose the input method by the moment, not the data type alone.
| Use case |
Best pattern |
Avoid |
| One-time setup, known range, low precision |
slider, wheel, segmented presets |
long free typing if values are obvious |
| Frequent repeated exact entry |
text field, number input, stepper + text field |
slider/wheel that requires fiddly adjustment |
| Small adjustments near a default |
stepper, plus/minus, editable field |
huge slider if precision matters |
| Continuous relative value |
slider |
forcing exact text entry |
| Large range with exact value |
text field plus validation, optional presets |
stepper-only with many clicks |
| Units like kg/lb, cm/ft, AED/USD |
input + unit selector + validation |
ambiguous unlabeled numeric field |
Rules:
- Do not use sliders because they look modern. Use them when approximate selection is acceptable.
- Text fields need labels, units, validation, allowed ranges, examples, keyboard type, and error messages.
- Steppers should allow direct text entry when exact values matter.
- Repeated data entry must minimize taps.
- Mobile numeric inputs should request the correct keyboard, for example
inputmode="numeric" or inputmode="decimal" when appropriate.
Buttons and CTAs
- One dominant primary CTA per decision area.
- Secondary CTAs must be visually subordinate.
- Buttons need hover, active, disabled, loading, and focus-visible states.
- Button labels must be action-specific. Avoid vague labels like “Learn more” when a clearer verb is available.
- Micro-animation is acceptable for press/hover/focus feedback, but should be subtle.
Navigation
- Keep core navigation predictable.
- If links overflow, consolidate into an accessible menu/sheet/drawer.
- Menus must be keyboard reachable and dismissible.
- Mobile nav must not trap focus incorrectly.
- Avoid hiding primary actions behind ambiguous icons.
Cards and lists
- Cards must support real content: long titles, missing images, bright images, multiple badges, and varying metadata length.
- Use truncation or line clamps deliberately. Do not let text overflow destroy the grid.
- Icons over images need contrast protection, such as a scrim, contained circle, or tokenized overlay.
- Cards must have clear click targets and avoid nested interactive ambiguity.
- Cards need enough scan-level metadata for comparison, but not full detail-page content.
Forms
- Reduce required fields.
- Group related inputs.
- Use labels, not placeholder-only labels.
- Provide inline errors close to the relevant field.
- Use progressive disclosure for advanced or conditional fields.
- Preserve user input after errors.
- One question per step is acceptable when the task is complex or high-risk.
Tables and dense data
- Show only decision-critical columns by default.
- Support horizontal overflow on mobile rather than breaking columns into unreadable fragments.
- Provide sorting/filtering only where it supports the user’s task.
- Empty, loading, error, and partial-data states must be designed.
Motion
Use motion for:
- State feedback: hover, press, selected, expanded, loading, completion.
- Spatial continuity: menu opens from trigger, drawer enters from edge, accordion reveals content.
- Progressive disclosure: advanced options, collapsed filters, compact search expansion.
- Attention: briefly guide focus to newly revealed content or errors.
Avoid:
- Scrolljacking.
- Decorative animation loops that compete with CTAs or reading.
- Excessive parallax.
- Motion on frequently repeated interactions if it slows the user down.
- Motion that prevents users from understanding where content went.
Always respect reduced motion when implementing custom animation:
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
scroll-behavior: auto !important;
transition-duration: 0.01ms !important;
}
}
Step 6 — Build the visual system
Use the existing system first. If missing, define a minimal one:
- spacing: 4/8px rhythm, avoid random one-off margins
- typography: restrained scale; default to 3–5 sizes per surface, not 12
- weights: usually regular/medium/semibold; avoid unnecessary bold stacking
- radius: one dominant radius plus one special radius if needed
- shadows: subtle elevation only where hierarchy needs it
- color: semantic tokens first; avoid raw arbitrary colors unless documented
- borders: use to separate structure, not decorate every block
- cards: clear hierarchy, enough breathing room, consistent inner rhythm
- CTAs: one primary, one secondary maximum in the same decision area
- media: consistent crop, style, treatment, and fallback
- status: semantic colors and icons with text labels, never color alone
Preferred implementation for React/Next/Tailwind projects:
- Use shadcn/ui and Radix primitives when available.
- Use Tailwind design tokens and CSS variables instead of hardcoded color soup.
- Keep components small and composable.
- Put reusable UI primitives under
components/ui or the existing equivalent.
- Put landing/page sections under
components/sections or the existing equivalent.
- Use project-native image handling:
next/image, Nuxt image, or existing image component.
User default taste profile when project context does not specify otherwise:
- premium Apple/Stripe-level clarity
- calm dark neutrals, restrained contrast, no cheap neon gradients
- visual depth through spacing, hierarchy, real assets, subtle shadows, glass only when controlled
- for Quasar projects, respect Quasar orange
#FF7A00 as the primary accent and use cyan/blue only as a subtle support accent
- use real local images/assets when available; do not default to fake placeholder visuals
Step 7 — Accessibility and usability gates
Before finishing, verify:
- semantic landmarks:
header, nav, main, section, footer where appropriate
- meaningful headings in order
- buttons are buttons; links are links
- icon-only buttons have accessible names
- focus states are visible
- keyboard navigation works for menus, dialogs, tabs, accordions, carousels, search suggestions, comboboxes, and steppers
- text contrast is sufficient
- text can resize without breaking layout
- mobile target sizes are comfortable
- no critical information depends only on color, animation, hover, or image text
- reduced motion is respected
- responsive layout works at mobile, tablet, desktop, and wide screens
- personalized content has safe fallback states
- status changes are communicated with text, not color alone
- numeric inputs have labels, units, validation, and appropriate mobile keyboard hints
Step 8 — Real-content and state stress pass
Before finalizing, test or reason through:
Long title / long label:
Short title / one-word content:
Missing image:
Very bright image:
Mismatched images:
Many badges:
No badges:
Empty list:
One result:
Many results:
Search focused before query:
Search no-results state:
User with no history:
User with rich history:
New user:
Returning user:
Power user:
Post-action success:
Post-action pending:
Post-action failed/delayed:
Loading state:
Error state:
Disabled state:
Focus-visible state:
Keyboard navigation:
Mobile 360–390px:
Tablet:
Desktop wide:
Reduced motion:
Dark mode:
Light mode:
Numeric input precision:
Numeric input repeated use:
If any state is likely to break, fix it before returning the final answer.
Step 9 — Conversion and scan-speed audit
For landing, sales, ecommerce, or activation pages, ask:
- Can a user understand the value in 5 seconds?
- Is the primary CTA visible without hunting?
- Does every major section answer a buying objection or move the user forward?
- Are claims specific enough to be credible?
- Is proof close to the claims it supports?
- Are pricing differences obvious?
- Is the next action always clear?
- Is there too much text competing with the decision?
- Does the page support both direct intent and browse intent?
- Does the experience after the action reduce uncertainty?
Every major section should have one clear job. If a section has three jobs, split it or reduce it.
Step 10 — Audit against this scorecard
Use this 140-point quality score before final response:
User intent clarity: /15
Journey/stage fit: /10
Content hierarchy: /15
Pattern familiarity: /10
Search/browse support: /10
Status/uncertainty handling: /10
Input-method fit: /10
Conversion/action clarity: /10
Accessibility: /15
Responsive behavior: /10
Real-content resilience: /10
Motion purpose: /5
Design-system consistency: /10
Do not call the result good if any of these are true:
- Primary intent is unclear.
- Primary CTA is hidden, duplicated, or visually weak.
- A personalized surface has no default/no-history fallback.
- Search focus leads to a blank dead end when suggestions would help.
- Post-action users cannot tell what happens next.
- A numeric input uses a slider/wheel for frequent exact entry.
- Category tiles are visually busy or inconsistent.
- Component breaks with long content.
- Important interactive states are missing.
- Keyboard/focus behavior is not considered.
- Mobile layout is an afterthought.
- Motion is decorative or distracting.
- Styling bypasses the existing design system without reason.
Step 11 — Output format after implementation
After making changes, Codex must report:
Intent map:
- Primary user intent:
- User stage considered:
- Primary action:
- Design decision tied to that intent:
What changed:
- Files changed:
- Components/sections changed:
- Key UX improvements:
Quality checks:
- Responsive:
- Accessibility:
- Real-content stress:
- Search/browse states:
- Status/post-action states:
- Input-method fit:
- Motion:
- Tests/commands run:
Remaining risks:
- Anything that needs a screenshot, user test, content review, data integration, analytics check, or asset replacement.
Hard anti-patterns
Avoid:
- starting with decoration before intent
- showing the exact same screen to every user stage when useful behavioral/progress data exists
- personalization without fallback, user control, or privacy awareness
- blank active search states with no guidance when the search domain is broad
- search suggestions that hide the ability to type freely
- filters that do not match how users compare options
- dumping post-purchase/order/status data without hierarchy, timeline, ETA, or support path
- category screens made of low-contrast text over random stock photos
- sliders/wheels for frequent exact numeric entry such as quantities, grams, calories, macros, prices, or repeated logs
- generic AI gradient backgrounds everywhere
- excessive glassmorphism without structural purpose
- carousels that hide core information
- infinite scroll on task-oriented pages without a strong reason
- scrolljacking
- text over images without contrast protection
- icon-only controls without labels
- one-off colors outside the token system
- unbounded arbitrary Tailwind values everywhere
- fake perfect content that breaks with real data
- desktop-only compositions that collapse badly on mobile
- decorative animation that delays comprehension
- pricing cards where the differences are unclear
- CTAs that say vague things like “Learn More” when a specific action exists
Useful Codex commands/checks
When possible, run the project’s normal validation commands:
- package manager install state: do not reinstall unless required
npm run lint, pnpm lint, bun run lint, or project equivalent
npm run build, pnpm build, bun run build, or project equivalent
- unit/component tests if present
- visual/manual check if screenshots are available
Optional local audit script included in this skill:
node ~/.codex/skills/genius-uiux-designer/scripts/check-uiux-antipatterns.mjs .
The script reports suspicious UI/UX implementation patterns. Treat its output as review prompts, not absolute errors.
Final principle
Do not break the design system by accident. Break it only with intention, and explain the user benefit.
1---2name: genius-uiux-designer3description: Use this skill whenever Codex is asked to design, audit, redesign, or implement any UI-facing product surface, landing page, dashboard, component, flow, pricing page, onboarding, navigation, search/browse experience, post-action status experience, form, input pattern, or visual system. It turns intent-first UI/UX thinking into concrete front-end implementation rules.4---56# Genius UI/UX Designer Skill78## Purpose910Make Codex behave like a senior UI/UX product designer and front-end design engineer, not a decorative component generator.1112The core rule: design is a guided path from user intent to user action. Visual polish, animation, cards, icons, gradients, 3D objects, and layout experiments are allowed only when they make the path clearer, faster, more credible, calmer, or more memorable.1314## Local Codex constraints1516Project `AGENTS.md`, current user request, and `kishi-design-architect` constraints outrank this skill when they conflict.1718For Kishi projects:1920- No purple gradients or generic AI SaaS glow.21- No blur abuse, decorative blob/orb backgrounds, or heavy shadows.22- No `transition-all`.23- No transitions above 200ms unless user explicitly asks.24- Animate `transform` and `opacity` only.25- Use Lucide icons when available.26- Use existing tokens, OKLCH/CSS variables, shadcn/Radix primitives, and project components first.27- Preserve Quasar/FiveM brand DNA before applying generic Apple/Stripe/DesignJoy taste.2829## Use this skill when3031Use this skill for:3233- Landing pages, SaaS pages, ecommerce pages, academies, dashboards, admin panels, checkout flows, onboarding, product cards, pricing sections, feature sections, hero sections, navigation, empty states, search/filter/browse flows, category screens, post-purchase/order tracking, confirmation/status screens, forms, numeric inputs, mobile responsive UI, and design-system work.34- Any request containing: UI, UX, redesign, make it beautiful, make it Apple-style, make it premium, fix spacing, improve landing page, better cards, better hero, better pricing, conversion, CTA, responsive, animation, shadcn, Tailwind, Radix, Framer Motion, React, Next.js, Nuxt, component, search, filter, categories, order tracking, checkout, onboarding, input, slider, stepper, or form.3536Do not use this skill for purely backend, database, CLI, algorithmic, or infrastructure tasks unless the output affects a user-facing interface.3738## Non-negotiable doctrine39401. **Intent before aesthetics**41 Start by identifying the user’s primary intent and the user’s next best action. Do not begin with icons, colors, card decoration, gradients, or arbitrary layout.42432. **Design for the user’s current stage**44 A new user, returning user, power user, anonymous visitor, paying customer, and post-purchase user do not need the same screen. Adapt the interface when behavior, account state, progress, or history changes what the user needs now.45463. **Functionality expands only when intent expands**47 Add search, filters, sorting, tabs, comparison, accordions, carousels, tooltips, menus, progressive disclosure, or animations only when they support a concrete user task.48494. **Search is a guided intent state, not a blank box**50 When the user enters search mode, do not leave them with a dead empty screen unless the product is extremely simple. Offer useful starting points such as recent searches, popular searches, suggested categories, recommended items, or scoped suggestions.51525. **Use familiar layouts unless deviation helps the user**53 Navigation normally belongs near the top. Information normally flows top-to-bottom and left-to-right. CTAs must be easy to find. Break common patterns only with a stated user benefit.54556. **Content structure is part of design**56 Decide what information should be visible at scan level, what should be hidden until interaction, and what belongs on a detail page. Build for imperfect real content, not perfect demo copy.57587. **Status design reduces uncertainty**59 After a user pays, submits, books, uploads, applies, or triggers a process, the next screen must answer: What happened? What is the current state? What comes next? When should I expect it? What can I do if there is a problem?60618. **Browse/category screens need rhythm, not visual noise**62 Categories are not just labels or random image tiles. They need hierarchy, scan rhythm, consistent media treatment, strong contrast, and clear cues. A plain list can be better than busy image blocks if the image system is inconsistent.63649. **Choose input methods by frequency, precision, and range**65 Sliders and wheels are appropriate for casual, one-time, known-range, low-precision values. Text fields, number inputs, and steppers are better for frequent, repeated, exact, or high-control numeric entry.666710. **Motion must clarify**68 Motion must show state, hierarchy, continuity, feedback, progressive disclosure, or cause-and-effect. Decorative scrolljacking, excessive parallax, and animation-for-animation’s-sake are failures.697011. **Design systems create shared language**71 Use tokens, reusable components, component variants, documented spacing, typography scales, states, and interaction patterns. A system is not sameness. It is intentional consistency with room for purposeful exceptions.727312. **Accessibility is not optional**74 Every UI must support keyboard navigation, visible focus, sufficient contrast, semantic HTML, responsive scaling, meaningful labels, and reduced-motion preferences.7576## Codex operating workflow7778### Step 0 — Inspect before changing7980Before editing files, inspect the current project:8182- `package.json`83- framework and router structure84- `tailwind.config.*`, global CSS, theme variables, OKLCH/HSL tokens85- existing `components/ui`, shadcn/Radix primitives, layout components, section components86- image/media assets under `public`, `assets`, `src/assets`, or equivalent87- existing typography, spacing, shadows, border radius, card style, animation style, and dark/light mode88- data/loading conventions, query hooks, existing empty/error states, form libraries, validation utilities, and accessibility patterns8990Never invent a new visual language before understanding the current one. Never add dependencies unless the project already uses them or the user explicitly requests them.9192### Step 1 — Build an intent and stage map9394Before implementation, create a concise private intent map:9596```text97Primary user:98User stage: anonymous / new / returning / power / admin / post-action / post-purchase99Known behavior/history/progress:100Primary intent:101Secondary intents:102Trigger/context:103Decision friction:104Uncertainty/anxiety:105Required action:106Success signal:107What the UI must not distract from:108```109110Map UI elements to intent:111112| UI element | Intent served | Keep / change / remove |113|---|---|---|114| Hero headline | Orient user | Keep if it clarifies value |115| Search/filter | Help user narrow options | Add only if browsing/searching intent exists |116| Suggestions/recent items | Reduce blank-state friction | Add when user may not know exact query |117| Card metadata | Help user scan | Keep only scan-critical fields |118| Status/timeline | Reduce uncertainty after action | Add for orders, bookings, applications, uploads, jobs |119| Animation | Feedback/continuity | Keep only if it clarifies state |120| CTA | Move to next action | Must be prominent and specific |121122If a UI element does not serve an intent, remove it or demote it.123124### Step 2 — Segment the experience when the journey changes125126When account state, product usage, or previous behavior exists, avoid one generic screen for everyone.127128Use this pattern:129130| User stage | What they need | UI priority |131|---|---|---|132| Anonymous visitor | orientation, trust, clear value | value proposition, proof, low-friction CTA |133| New user | setup, first success, low overwhelm | welcome, one primary setup action, easy categories |134| Returning user | resume progress, continue routine | continue card, recent items, saved filters, next task |135| Power user | optimization and control | stats, shortcuts, advanced controls, personalized recommendations |136| Post-action user | confidence and next step | confirmation, status, timeline, ETA, support path |137| Admin/operator | exceptions and throughput | alerts, summaries, queues, bulk actions, drill-down |138139Rules:140141- Personalization must help, not trap. Keep global navigation and manual control available.142- Provide anonymous/default fallbacks when history is unavailable.143- Do not invent personal data. Use only data the app actually has.144- Avoid creepy specificity. Explain or soften personalization when appropriate.145- Never hide critical actions only because a recommendation system guessed the user’s intent.146147### Step 3 — Choose the proven pattern first148149For each surface, start from a proven pattern:150151- **Search-first flow:** search bar first, guided suggestions second, filters third, results/cards fourth.152- **Browse-first flow:** curated categories/cards first, then filters/sorting/search refinement.153- **Smart search active state:** search input, clear query control, recent searches, popular/trending items, recommended items, category shortcuts, loading state, no-results recovery.154- **Landing page:** hero → problem/context → solution mechanism → how it works → proof → offer/pricing → FAQ → final CTA.155- **Pricing:** plan cards + comparison matrix + trust/FAQ + clear upgrade path.156- **Feature/product cards:** visual → core title → scan metadata → short benefit → action.157- **Category screen:** clear title → category cards/list with visual rhythm → count/metadata where useful → refinement/search if many options.158- **Post-purchase/status screen:** current status → ETA/next step → timeline → human/contact/support path → order/process summary → receipt/details.159- **Onboarding:** one primary task per screen, progressive disclosure, clear progress indicator.160- **Dashboard:** summary metrics → exceptions/alerts → key actions → recent activity/details.161- **Numeric entry:** match input method to use case before choosing component style.162163Do not create unusual layouts merely to be novel. Novelty is acceptable only if it improves scan speed, task completion, comprehension, conversion, calmness, or brand memorability.164165### Step 4 — Design around real content166167For every component and section, test against ugly real content:168169- very long titles170- short titles171- missing images172- bright/dark images behind icons173- mismatched stock images174- missing prices/ratings/counts175- many cards176- one card177- empty state178- loading state179- error state180- translated text expansion181- mobile widths182- user with no history183- user with extensive history184- post-action pending state185- post-action failed/cancelled/delayed state186187Rules:188189- Use `line-clamp`, truncation, max widths, and predictable aspect ratios.190- Add icon backplates, scrims, or overlays when icons sit on images.191- Avoid image-only text.192- Do not allow cards to jump height unpredictably unless masonry is intentional.193- Every list/grid needs loading, empty, and error treatment when it is data-driven.194- Every personalized area needs a generic fallback.195- Every status screen needs a next-step or support path.196197### Step 5 — Apply component rules198199#### Adaptive/personalized surfaces200201Use adaptation only when it changes the user’s job:202203- New users: onboarding, first goal, sample content, easy categories, minimal dashboard.204- Returning users: resume, recent, saved, continue, recommended next action.205- Power users: advanced stats, optimization, shortcuts, filters, saved views, dense but structured data.206- Post-action users: reassurance, status, ETA, contact/support, next step.207208Implementation rules:209210- Keep the underlying component model stable; adapt content and priority, not the entire product randomly.211- Personalization must be reversible or ignorable.212- Avoid hiding baseline navigation, search, or settings.213- Provide copy that explains why something is shown when the recommendation may feel opaque.214215#### Search and filters216217Search is a moment of intent. Treat the active search state as a designed screen, not just an input.218219Required states:220221- default/closed state222- focused state before query223- typing/loading state224- results state225- no-results state with recovery suggestions226- cleared state227- mobile state228- keyboard state229230Suggestion types to consider:231232- recent searches or recently viewed items233- popular/trending searches234- category shortcuts235- personalized recommendations based on existing behavior236- scoped suggestions such as “in docs”, “in products”, “in support”237- spelling/query correction if the product supports it238239Rules:240241- Suggestions should not block typing.242- Suggestions must be visually distinct from the typed query.243- Filters need clear selected states, reset behavior, result counts where useful, empty-result handling, and mobile layout.244- Do not add filters as decoration. Filter dimensions must match how users compare options.245- Search results must preserve orientation: query, count, active filters, and clear/reset action.246247#### Post-purchase, confirmation, and order/status tracking248249After the user commits, the UI must reduce stress.250251Top-level structure:2522531. Confident status message: what happened.2542. Current state: pending, confirmed, processing, shipped, delivered, failed, cancelled, delayed, approved, rejected, etc.2553. Time expectation: ETA, delivery window, next review date, or “we will notify you”.2564. Visual progress: timeline, steps, or status cards.2575. Human/support path: contact, courier, support, help center, cancellation/refund path if applicable.2586. Summary: order items, booking details, submission details, receipt/reference number.2597. Next action: track, message, download, reschedule, continue, share, return.260261Rules:262263- Do not dump raw order numbers, dates, and item lists without hierarchy.264- Put the user’s main question above the fold: “Is everything okay, and what happens next?”265- Make delays and failed states explicit, calm, and actionable.266- If there is a human actor such as courier, consultant, support agent, or reviewer, show useful identity/contact details when available.267- For ecommerce, status pages should not force users to leave for third-party courier tracking unless unavoidable.268269#### Category screens and browse hubs270271Category screens help users move through the product. They must be scannable.272273Rules:274275- If using a text list, create rhythm with spacing, dividers, counts, icons, hierarchy, and clear tap targets.276- If using image tiles, require stylistic consistency: similar crop logic, lighting, contrast, aspect ratio, and brand treatment.277- Avoid random stock-photo mixtures that feel like different products.278- Avoid text directly over visually busy imagery unless contrast is guaranteed with scrims/backplates.279- Use color-coded cards only when the palette is tokenized and balanced.280- Category cards should communicate the category before decorative detail.281- For many categories, add search/filter within categories.282283#### Numeric inputs and value selection284285Choose the input method by the moment, not the data type alone.286287| Use case | Best pattern | Avoid |288|---|---|---|289| One-time setup, known range, low precision | slider, wheel, segmented presets | long free typing if values are obvious |290| Frequent repeated exact entry | text field, number input, stepper + text field | slider/wheel that requires fiddly adjustment |291| Small adjustments near a default | stepper, plus/minus, editable field | huge slider if precision matters |292| Continuous relative value | slider | forcing exact text entry |293| Large range with exact value | text field plus validation, optional presets | stepper-only with many clicks |294| Units like kg/lb, cm/ft, AED/USD | input + unit selector + validation | ambiguous unlabeled numeric field |295296Rules:297298- Do not use sliders because they look modern. Use them when approximate selection is acceptable.299- Text fields need labels, units, validation, allowed ranges, examples, keyboard type, and error messages.300- Steppers should allow direct text entry when exact values matter.301- Repeated data entry must minimize taps.302- Mobile numeric inputs should request the correct keyboard, for example `inputmode="numeric"` or `inputmode="decimal"` when appropriate.303304#### Buttons and CTAs305306- One dominant primary CTA per decision area.307- Secondary CTAs must be visually subordinate.308- Buttons need hover, active, disabled, loading, and focus-visible states.309- Button labels must be action-specific. Avoid vague labels like “Learn more” when a clearer verb is available.310- Micro-animation is acceptable for press/hover/focus feedback, but should be subtle.311312#### Navigation313314- Keep core navigation predictable.315- If links overflow, consolidate into an accessible menu/sheet/drawer.316- Menus must be keyboard reachable and dismissible.317- Mobile nav must not trap focus incorrectly.318- Avoid hiding primary actions behind ambiguous icons.319320#### Cards and lists321322- Cards must support real content: long titles, missing images, bright images, multiple badges, and varying metadata length.323- Use truncation or line clamps deliberately. Do not let text overflow destroy the grid.324- Icons over images need contrast protection, such as a scrim, contained circle, or tokenized overlay.325- Cards must have clear click targets and avoid nested interactive ambiguity.326- Cards need enough scan-level metadata for comparison, but not full detail-page content.327328#### Forms329330- Reduce required fields.331- Group related inputs.332- Use labels, not placeholder-only labels.333- Provide inline errors close to the relevant field.334- Use progressive disclosure for advanced or conditional fields.335- Preserve user input after errors.336- One question per step is acceptable when the task is complex or high-risk.337338#### Tables and dense data339340- Show only decision-critical columns by default.341- Support horizontal overflow on mobile rather than breaking columns into unreadable fragments.342- Provide sorting/filtering only where it supports the user’s task.343- Empty, loading, error, and partial-data states must be designed.344345#### Motion346347Use motion for:348349- State feedback: hover, press, selected, expanded, loading, completion.350- Spatial continuity: menu opens from trigger, drawer enters from edge, accordion reveals content.351- Progressive disclosure: advanced options, collapsed filters, compact search expansion.352- Attention: briefly guide focus to newly revealed content or errors.353354Avoid:355356- Scrolljacking.357- Decorative animation loops that compete with CTAs or reading.358- Excessive parallax.359- Motion on frequently repeated interactions if it slows the user down.360- Motion that prevents users from understanding where content went.361362Always respect reduced motion when implementing custom animation:363364```css365@media (prefers-reduced-motion: reduce) {366 *, *::before, *::after {367 animation-duration: 0.01ms !important;368 animation-iteration-count: 1 !important;369 scroll-behavior: auto !important;370 transition-duration: 0.01ms !important;371 }372}373```374375### Step 6 — Build the visual system376377Use the existing system first. If missing, define a minimal one:378379- spacing: 4/8px rhythm, avoid random one-off margins380- typography: restrained scale; default to 3–5 sizes per surface, not 12381- weights: usually regular/medium/semibold; avoid unnecessary bold stacking382- radius: one dominant radius plus one special radius if needed383- shadows: subtle elevation only where hierarchy needs it384- color: semantic tokens first; avoid raw arbitrary colors unless documented385- borders: use to separate structure, not decorate every block386- cards: clear hierarchy, enough breathing room, consistent inner rhythm387- CTAs: one primary, one secondary maximum in the same decision area388- media: consistent crop, style, treatment, and fallback389- status: semantic colors and icons with text labels, never color alone390391Preferred implementation for React/Next/Tailwind projects:392393- Use shadcn/ui and Radix primitives when available.394- Use Tailwind design tokens and CSS variables instead of hardcoded color soup.395- Keep components small and composable.396- Put reusable UI primitives under `components/ui` or the existing equivalent.397- Put landing/page sections under `components/sections` or the existing equivalent.398- Use project-native image handling: `next/image`, Nuxt image, or existing image component.399400User default taste profile when project context does not specify otherwise:401402- premium Apple/Stripe-level clarity403- calm dark neutrals, restrained contrast, no cheap neon gradients404- visual depth through spacing, hierarchy, real assets, subtle shadows, glass only when controlled405- for Quasar projects, respect Quasar orange `#FF7A00` as the primary accent and use cyan/blue only as a subtle support accent406- use real local images/assets when available; do not default to fake placeholder visuals407408### Step 7 — Accessibility and usability gates409410Before finishing, verify:411412- semantic landmarks: `header`, `nav`, `main`, `section`, `footer` where appropriate413- meaningful headings in order414- buttons are buttons; links are links415- icon-only buttons have accessible names416- focus states are visible417- keyboard navigation works for menus, dialogs, tabs, accordions, carousels, search suggestions, comboboxes, and steppers418- text contrast is sufficient419- text can resize without breaking layout420- mobile target sizes are comfortable421- no critical information depends only on color, animation, hover, or image text422- reduced motion is respected423- responsive layout works at mobile, tablet, desktop, and wide screens424- personalized content has safe fallback states425- status changes are communicated with text, not color alone426- numeric inputs have labels, units, validation, and appropriate mobile keyboard hints427428### Step 8 — Real-content and state stress pass429430Before finalizing, test or reason through:431432```text433Long title / long label:434Short title / one-word content:435Missing image:436Very bright image:437Mismatched images:438Many badges:439No badges:440Empty list:441One result:442Many results:443Search focused before query:444Search no-results state:445User with no history:446User with rich history:447New user:448Returning user:449Power user:450Post-action success:451Post-action pending:452Post-action failed/delayed:453Loading state:454Error state:455Disabled state:456Focus-visible state:457Keyboard navigation:458Mobile 360–390px:459Tablet:460Desktop wide:461Reduced motion:462Dark mode:463Light mode:464Numeric input precision:465Numeric input repeated use:466```467468If any state is likely to break, fix it before returning the final answer.469470### Step 9 — Conversion and scan-speed audit471472For landing, sales, ecommerce, or activation pages, ask:473474- Can a user understand the value in 5 seconds?475- Is the primary CTA visible without hunting?476- Does every major section answer a buying objection or move the user forward?477- Are claims specific enough to be credible?478- Is proof close to the claims it supports?479- Are pricing differences obvious?480- Is the next action always clear?481- Is there too much text competing with the decision?482- Does the page support both direct intent and browse intent?483- Does the experience after the action reduce uncertainty?484485Every major section should have one clear job. If a section has three jobs, split it or reduce it.486487### Step 10 — Audit against this scorecard488489Use this 140-point quality score before final response:490491```text492User intent clarity: /15493Journey/stage fit: /10494Content hierarchy: /15495Pattern familiarity: /10496Search/browse support: /10497Status/uncertainty handling: /10498Input-method fit: /10499Conversion/action clarity: /10500Accessibility: /15501Responsive behavior: /10502Real-content resilience: /10503Motion purpose: /5504Design-system consistency: /10505```506507Do not call the result good if any of these are true:508509- Primary intent is unclear.510- Primary CTA is hidden, duplicated, or visually weak.511- A personalized surface has no default/no-history fallback.512- Search focus leads to a blank dead end when suggestions would help.513- Post-action users cannot tell what happens next.514- A numeric input uses a slider/wheel for frequent exact entry.515- Category tiles are visually busy or inconsistent.516- Component breaks with long content.517- Important interactive states are missing.518- Keyboard/focus behavior is not considered.519- Mobile layout is an afterthought.520- Motion is decorative or distracting.521- Styling bypasses the existing design system without reason.522523### Step 11 — Output format after implementation524525After making changes, Codex must report:526527```text528Intent map:529- Primary user intent:530- User stage considered:531- Primary action:532- Design decision tied to that intent:533534What changed:535- Files changed:536- Components/sections changed:537- Key UX improvements:538539Quality checks:540- Responsive:541- Accessibility:542- Real-content stress:543- Search/browse states:544- Status/post-action states:545- Input-method fit:546- Motion:547- Tests/commands run:548549Remaining risks:550- Anything that needs a screenshot, user test, content review, data integration, analytics check, or asset replacement.551```552553## Hard anti-patterns554555Avoid:556557- starting with decoration before intent558- showing the exact same screen to every user stage when useful behavioral/progress data exists559- personalization without fallback, user control, or privacy awareness560- blank active search states with no guidance when the search domain is broad561- search suggestions that hide the ability to type freely562- filters that do not match how users compare options563- dumping post-purchase/order/status data without hierarchy, timeline, ETA, or support path564- category screens made of low-contrast text over random stock photos565- sliders/wheels for frequent exact numeric entry such as quantities, grams, calories, macros, prices, or repeated logs566- generic AI gradient backgrounds everywhere567- excessive glassmorphism without structural purpose568- carousels that hide core information569- infinite scroll on task-oriented pages without a strong reason570- scrolljacking571- text over images without contrast protection572- icon-only controls without labels573- one-off colors outside the token system574- unbounded arbitrary Tailwind values everywhere575- fake perfect content that breaks with real data576- desktop-only compositions that collapse badly on mobile577- decorative animation that delays comprehension578- pricing cards where the differences are unclear579- CTAs that say vague things like “Learn More” when a specific action exists580581## Useful Codex commands/checks582583When possible, run the project’s normal validation commands:584585- package manager install state: do not reinstall unless required586- `npm run lint`, `pnpm lint`, `bun run lint`, or project equivalent587- `npm run build`, `pnpm build`, `bun run build`, or project equivalent588- unit/component tests if present589- visual/manual check if screenshots are available590591Optional local audit script included in this skill:592593```bash594node ~/.codex/skills/genius-uiux-designer/scripts/check-uiux-antipatterns.mjs .595```596597The script reports suspicious UI/UX implementation patterns. Treat its output as review prompts, not absolute errors.598599## Final principle600601Do not break the design system by accident. Break it only with intention, and explain the user benefit.