Userinterface Wiki
UI/UX best practices for web interfaces. Use when reviewing animations, CSS, audio, typography, UX patterns, prefetching, or icon implementations. Covers 11 categories from animation principles to typography. Outputs file:line findings.
Specification
- Skill ID
- raphaelsalaja/userinterface-wiki/userinterface-wiki
- Publisher
- raphaelsalaja
- Repository
- userinterface-wiki
- Installs
- 0
- Files
- 157
- License
- MIT
- Synced
- Sep 23, 2026
How to use it
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
raphaelsalaja/userinterface-wiki/userinterface-wikiInstalls these files- AGENTS.md
- SKILL.md
- metadata.json
- rules/_sections.md
- rules/_template.md
- rules/a11y-reduced-motion-check.md
- rules/a11y-toggle-setting.md
- rules/a11y-visual-equivalent.md
- rules/a11y-volume-control.md
- rules/appropriate-confirmations-only.md
- rules/appropriate-errors-warnings.md
- rules/appropriate-no-decorative.md
- rules/appropriate-no-high-frequency.md
- rules/appropriate-no-punishing.md
- rules/container-callback-ref.md
- rules/container-guard-initial-zero.md
- rules/container-no-excessive-use.md
- rules/container-overflow-hidden.md
- rules/container-transition-delay.md
- rules/container-two-div-pattern.md
- rules/container-use-resize-observer.md
- rules/context-cleanup-nodes.md
- rules/context-resume-suspended.md
- rules/context-reuse-single.md
- rules/design-filter-for-character.md
- rules/design-noise-for-percussion.md
- rules/design-oscillator-for-tonal.md
- rules/duration-max-300ms.md
- rules/duration-press-hover.md
- rules/duration-shorten-before-curve.md
- rules/duration-small-state.md
- rules/easing-entrance-ease-out.md
- rules/easing-exit-ease-in.md
- rules/easing-for-state-change.md
- rules/easing-linear-only-progress.md
- rules/easing-natural-decay.md
- rules/easing-no-linear-motion.md
- rules/easing-transition-ease-in-out.md
- rules/envelope-exponential-decay.md
- rules/envelope-no-zero-target.md
- rules/envelope-set-initial-value.md
- rules/exit-key-required.md
- rules/exit-matches-initial.md
- rules/exit-prop-required.md
- rules/exit-requires-wrapper.md
- rules/impl-default-subtle.md
- rules/impl-preload-audio.md
- rules/impl-reset-current-time.md
- rules/mode-pop-layout-for-lists.md
- rules/mode-sync-layout-conflict.md
- rules/mode-wait-doubles-duration.md
- rules/morphing-aria-hidden.md
- rules/morphing-consistent-viewbox.md
- rules/morphing-group-variants.md
- rules/morphing-jump-non-grouped.md
- rules/morphing-reduced-motion.md
- rules/morphing-spring-rotation.md
- rules/morphing-strokelinecap-round.md
- rules/morphing-three-lines.md
- rules/morphing-use-collapsed.md
- rules/native-backdrop-styling.md
- rules/native-placeholder-styling.md
- rules/native-selection-styling.md
- rules/nested-consistent-timing.md
- rules/nested-propagate-required.md
- rules/none-context-menu-entrance.md
- rules/none-high-frequency.md
- rules/none-keyboard-navigation.md
- rules/param-click-duration.md
- rules/param-filter-frequency-range.md
- rules/param-q-value-range.md
- rules/param-reasonable-gain.md
- rules/physics-active-state.md
- rules/physics-no-excessive-stagger.md
- rules/physics-spring-for-overshoot.md
- rules/physics-subtle-deformation.md
- rules/prefetch-hit-slop.md
- rules/prefetch-keyboard-tab.md
- rules/prefetch-not-everything.md
- rules/prefetch-touch-fallback.md
- rules/prefetch-trajectory-over-hover.md
- rules/prefetch-use-selectively.md
- rules/presence-disable-interactions.md
- rules/presence-hook-in-child.md
- rules/presence-safe-to-remove.md
- rules/pseudo-content-required.md
- rules/pseudo-first-line-styling.md
- rules/pseudo-hit-target-expansion.md
- rules/pseudo-marker-styling.md
- rules/pseudo-over-dom-node.md
- rules/pseudo-position-relative-parent.md
- rules/pseudo-z-index-layering.md
- rules/spring-for-gestures.md
- rules/spring-for-interruptible.md
- rules/spring-params-balanced.md
- rules/spring-preserves-velocity.md
- rules/staging-dim-background.md
- rules/staging-one-focal-point.md
- rules/staging-z-index-hierarchy.md
- rules/timing-consistent.md
- rules/timing-no-entrance-context-menu.md
- rules/timing-under-300ms.md
- rules/transition-name-cleanup.md
- rules/transition-name-required.md
- rules/transition-name-unique.md
- rules/transition-over-js-library.md
- rules/transition-style-pseudo-elements.md
- rules/type-antialiased-on-retina.md
- rules/type-disambiguation-stylistic-set.md
- rules/type-font-display-swap.md
- rules/type-justify-with-hyphens.md
- rules/type-letter-spacing-uppercase.md
- rules/type-no-font-synthesis.md
- rules/type-oldstyle-nums-for-prose.md
- rules/type-opentype-contextual-alternates.md
- rules/type-optical-sizing-auto.md
- rules/type-proper-fractions.md
- rules/type-slashed-zero.md
- rules/type-tabular-nums-for-data.md
- rules/type-text-wrap-balance-headings.md
- rules/type-text-wrap-pretty.md
- rules/type-underline-offset.md
- rules/type-variable-weight-continuous.md
- rules/ux-aesthetic-usability.md
- rules/ux-cognitive-load-reduce.md
- rules/ux-common-region-boundaries.md
- rules/ux-doherty-perceived-speed.md
- rules/ux-doherty-under-400ms.md
- rules/ux-fitts-hit-area.md
- rules/ux-fitts-target-size.md
- rules/ux-goal-gradient-progress.md
- rules/ux-hicks-minimize-choices.md
- rules/ux-jakobs-familiar-patterns.md
- rules/ux-millers-chunking.md
- rules/ux-pareto-prioritize-features.md
- rules/ux-peak-end-finish-strong.md
- rules/ux-postels-accept-messy-input.md
- rules/ux-pragnanz-simplify.md
- rules/ux-progressive-disclosure.md
- rules/ux-proximity-grouping.md
- rules/ux-serial-position.md
- rules/ux-similarity-consistency.md
- rules/ux-teslers-complexity.md
- rules/ux-uniform-connectedness.md
- rules/ux-von-restorff-emphasis.md
- rules/ux-zeigarnik-show-incomplete.md
- rules/visual-animate-shadow-pseudo.md
- rules/visual-border-alpha-colors.md
- rules/visual-button-shadow-anatomy.md
- rules/visual-concentric-radius.md
- rules/visual-consistent-spacing-scale.md
- rules/visual-layered-shadows.md
- rules/visual-no-pure-black-shadow.md
- rules/visual-shadow-direction.md
- rules/visual-shadow-matches-elevation.md
- rules/weight-duration-matches-action.md
- rules/weight-match-action.md
What this skill tells the agent
User Interface Wiki
Comprehensive UI/UX best practices guide for web interfaces. Contains 152 rules across 12 categories, prioritized by impact to guide automated code review and generation.
When to Apply
Reference these guidelines when:
- Implementing or reviewing animations (CSS transitions, Motion/Framer Motion)
- Choosing between springs, easing curves, or no animation
- Working with AnimatePresence and exit animations
- Writing CSS with pseudo-elements or View Transitions API
- Adding audio feedback or procedural sound to UI
- Building morphing icon components
- Animating container width/height with dynamic content
- Designing UI that respects cognitive psychology (Fitts's, Hick's, Miller's laws)
- Implementing predictive prefetching for perceived performance
- Setting up typography, OpenType features, or numeric formatting
Rule Categories by Priority
| Priority | Category | Impact | Prefixes |
|---|---|---|---|
| 1 | Animation Principles | CRITICAL | timing-, physics-, staging- |
| 2 | Timing Functions | HIGH | spring-, easing-, duration-, none- |
| 3 | Exit Animations | HIGH | exit-, presence-, mode-, nested- |
| 4 | CSS Pseudo Elements | MEDIUM | pseudo-, transition-, native- |
| 5 | Audio Feedback | MEDIUM | a11y-, appropriate-, impl-, weight- |
| 6 | Sound Synthesis | MEDIUM | context-, envelope-, design-, param- |
| 7 | Morphing Icons | LOW | morphing- |
| 8 | Container Animation | MEDIUM | container- |
| 9 | Laws of UX | HIGH | ux- |
| 10 | Predictive Prefetching | MEDIUM | prefetch- |
| 11 | Typography | MEDIUM | type- |
| 12 | Visual Design | HIGH | visual- |
Quick Reference
1. Animation Principles (CRITICAL)
timing-under-300ms- User animations must complete within 300mstiming-consistent- Similar elements use identical timing valuestiming-no-entrance-context-menu- Context menus: no entrance animation, exit onlyeasing-natural-decay- Use exponential ramps for natural decay, not lineareasing-no-linear-motion- Linear easing only for progress indicatorsphysics-active-state- Interactive elements need :active scale transformphysics-subtle-deformation- Squash/stretch in 0.95-1.05 rangephysics-spring-for-overshoot- Springs for overshoot-and-settle, not easingphysics-no-excessive-stagger- Stagger delays under 50ms per itemstaging-one-focal-point- One prominent animation at a timestaging-dim-background- Dim modal/dialog backgroundsstaging-z-index-hierarchy- Animated elements respect z-index layers
2. Timing Functions (HIGH)
spring-for-gestures- Gesture-driven motion (drag, flick) must use springsspring-for-interruptible- Interruptible motion must use springsspring-preserves-velocity- Springs preserve input energy on releasespring-params-balanced- Avoid excessive oscillation in spring paramseasing-for-state-change- System state changes use easing curveseasing-entrance-ease-out- Entrances use ease-outeasing-exit-ease-in- Exits use ease-ineasing-transition-ease-in-out- View transitions use ease-in-outeasing-linear-only-progress- Linear only for progress/time representationduration-press-hover- Press/hover: 120-180msduration-small-state- Small state changes: 180-260msduration-max-300ms- User-initiated max 300msduration-shorten-before-curve- Fix slow feel with shorter duration, not curvenone-high-frequency- No animation for high-frequency interactionsnone-keyboard-navigation- Keyboard navigation instant, no animationnone-context-menu-entrance- Context menus: no entrance, exit only
3. Exit Animations (HIGH)
exit-requires-wrapper- Conditional motion elements need AnimatePresence wrapperexit-prop-required- Elements in AnimatePresence need exit propexit-key-required- Dynamic lists need unique keys, not indexexit-matches-initial- Exit mirrors initial for symmetrypresence-hook-in-child- useIsPresent in child, not parentpresence-safe-to-remove- Call safeToRemove after async cleanuppresence-disable-interactions- Disable interactions on exiting elementsmode-wait-doubles-duration- Mode "wait" doubles duration; halve timingmode-sync-layout-conflict- Mode "sync" causes layout conflictsmode-pop-layout-for-lists- Use popLayout for list reorderingnested-propagate-required- Nested AnimatePresence needs propagate propnested-consistent-timing- Coordinate parent-child exit durations
4. CSS Pseudo Elements (MEDIUM)
pseudo-content-required- ::before/::after need content propertypseudo-over-dom-node- Pseudo-elements over extra DOM nodes for decorationpseudo-position-relative-parent- Parent needs position: relativepseudo-z-index-layering- Z-index for correct pseudo-element layeringpseudo-hit-target-expansion- Negative inset for larger hit targetspseudo-marker-styling- Use ::marker for custom list bullet stylespseudo-first-line-styling- Use ::first-line for typographic treatmentstransition-name-required- View transitions need view-transition-nametransition-name-unique- Each transition name unique during transitiontransition-name-cleanup- Remove transition name after completiontransition-over-js-library- Prefer View Transitions API over JS librariestransition-style-pseudo-elements- Style ::view-transition-group for custom animationsnative-backdrop-styling- Use ::backdrop for dialog backgroundsnative-placeholder-styling- Use ::placeholder for input stylingnative-selection-styling- Use ::selection for text selection styling
5. Audio Feedback (MEDIUM)
a11y-visual-equivalent- Every sound must have a visual equivalenta11y-toggle-setting- Provide toggle to disable soundsa11y-reduced-motion-check- Respect prefers-reduced-motion for sounda11y-volume-control- Allow independent volume adjustmentappropriate-no-high-frequency- No sound on typing or keyboard navappropriate-confirmations-only- Sound for payments, uploads, submissionsappropriate-errors-warnings- Sound for errors that can't be overlookedappropriate-no-decorative- No sound on hover or decorative momentsappropriate-no-punishing- Inform, don't punish with harsh soundsimpl-preload-audio- Preload audio files to avoid delayimpl-default-subtle- Default volume subtle (0.3), not loudimpl-reset-current-time- Reset currentTime before replayweight-match-action- Sound weight matches action importanceweight-duration-matches-action- Sound duration matches action duration
6. Sound Synthesis (MEDIUM)
context-reuse-single- Reuse single AudioContext, don't create per soundcontext-resume-suspended- Resume suspended AudioContext before playingcontext-cleanup-nodes- Disconnect audio nodes after playbackenvelope-exponential-decay- Exponential ramps for natural decayenvelope-no-zero-target- Exponential ramps target 0.001, not 0envelope-set-initial-value- Set initial value before rampingdesign-noise-for-percussion- Filtered noise for clicks/tapsdesign-oscillator-for-tonal- Oscillators with pitch sweep for tonal soundsdesign-filter-for-character- Bandpass filter to shape percussive soundsparam-click-duration- Click sounds: 5-15ms durationparam-filter-frequency-range- Click filter: 3000-6000Hzparam-reasonable-gain- Gain under 1.0 to prevent clippingparam-q-value-range- Filter Q: 2-5 for focused but natural
7. Morphing Icons (LOW)
morphing-three-lines- Every icon uses exactly 3 SVG linesmorphing-use-collapsed- Unused lines use collapsed constantmorphing-consistent-viewbox- All icons share same viewBox (14x14)morphing-group-variants- Rotational variants share group and base lines
More from raphaelsalaja
Use this skill in a project
Open any RiverX project, search the Skills panel for raphaelsalaja/userinterface-wiki/userinterface-wiki, and install it in one click.
