feat(rules): add shared development and security rules

This commit is contained in:
Julian lechner
2026-09-11 14:42:29 +02:00
parent 25bc29b8a4
commit 8b5a7e39b3
12 changed files with 2169 additions and 0 deletions
+306
View File
@@ -0,0 +1,306 @@
# UI & UX Guidelines
* Design for clarity first.
* Prefer simple, modern and predictable interfaces.
* Optimize for fast understanding and low cognitive load.
* Every screen should have a clear primary purpose.
* Every important action should be easy to discover.
* Prefer familiar interaction patterns over novel ones.
* Do not require users to learn unnecessary custom behavior.
* Keep layouts visually calm and structured.
* Use consistent spacing, typography, colors and interaction patterns.
* Avoid visual noise.
* Avoid decorative elements that do not improve usability.
* Avoid unnecessary complexity in navigation and workflows.
* Minimize the number of steps required to complete common tasks.
* Keep related information and actions close together.
* Group content logically.
* Use clear visual hierarchy.
* Make primary actions visually distinct from secondary actions.
* Avoid giving multiple actions equal visual priority when one is clearly more important.
* Use whitespace intentionally.
* Prefer readable line lengths and sufficient spacing.
* Avoid dense walls of content.
* Avoid oversized empty areas that reduce information efficiency.
* Keep important information visible without unnecessary scrolling where practical.
## Navigation
* Navigation must be predictable and consistent.
* Users should always understand where they are.
* Users should always understand how to go back.
* Avoid hidden navigation when visible navigation is practical.
* Keep navigation depth shallow where possible.
* Use clear and descriptive navigation labels.
* Do not use ambiguous icons without labels when meaning is not obvious.
* Preserve navigation state when users return to a previous view where practical.
* Avoid resetting filters, search state or scroll position unnecessarily.
* Avoid unexpected redirects.
* Do not change navigation behavior between similar screens without a clear reason.
## Actions
* Use clear action labels.
* Prefer verbs that describe the actual outcome.
* Avoid vague labels such as `OK`, `Submit`, `Proceed` or `Execute` when a more specific label is possible.
* Make destructive actions clearly distinguishable.
* Keep dangerous actions away from common actions.
* Require confirmation for destructive or difficult-to-reverse actions.
* Do not require unnecessary confirmation for safe, reversible actions.
* Disable unavailable actions when the reason is obvious.
* Explain why an action is unavailable when it is not obvious.
* Avoid actions that appear clickable but are not.
* Provide immediate visual feedback after user actions.
* Prevent accidental duplicate submissions.
* Make loading, success and failure states visible.
## Forms
* Keep forms as short as practical.
* Ask only for information that is actually required.
* Group related fields together.
* Use clear field labels.
* Do not rely on placeholders as the only label.
* Use appropriate input controls for the expected value.
* Provide useful defaults where safe and predictable.
* Preserve user input when validation or network errors occur.
* Validate fields at useful moments without interrupting normal input.
* Show validation errors close to the affected field.
* Explain how to fix invalid input.
* Avoid technical validation messages.
* Clearly mark optional fields where useful.
* Avoid asking the same information multiple times.
* Use autocomplete and autofill where appropriate.
* Make keyboard navigation logical.
* Use sensible tab order.
* Support Enter and Escape behavior where users expect it.
## Content and Language
* Use plain, concise language.
* Prefer user terminology over internal technical terminology.
* Avoid jargon unless the target users are expected to understand it.
* Use consistent naming for the same concepts.
* Do not rename concepts between screens.
* Keep button labels, headings and descriptions concise.
* Put the most important information first.
* Avoid unnecessary explanatory text.
* Add explanation only where users may reasonably be confused.
* Error messages should explain what happened and what the user can do next.
* Avoid blaming the user.
* Avoid exposing stack traces, exception names or internal implementation details.
## Feedback and System State
* Always communicate important system state.
* Show loading states for operations that are not immediate.
* Avoid indefinite loading indicators without context.
* Use progress indicators for longer operations where progress can be measured.
* Clearly distinguish loading, empty, error and success states.
* Do not leave blank screens where an empty state is expected.
* Empty states should explain what the user can do next.
* Show success feedback when the result is not otherwise obvious.
* Keep transient notifications concise.
* Do not hide important errors in temporary notifications.
* Preserve actionable errors until the user has had a chance to understand them.
* Do not silently fail.
* Do not silently discard user input.
## Responsiveness
* The interface should feel responsive at all times.
* Provide immediate feedback after interaction.
* Avoid blocking the entire interface when only one section is loading.
* Prefer localized loading states.
* Use optimistic UI only when failures can be handled safely.
* Avoid layout jumps during loading.
* Reserve space for content where practical.
* Keep animations short and functional.
* Do not use animations that delay task completion.
* Respect reduced-motion preferences.
* Avoid unnecessary transitions and visual effects.
## Visual Design
* Prefer modern, clean and restrained visual design.
* Use a consistent design system.
* Keep typography hierarchy clear.
* Maintain sufficient contrast.
* Use color intentionally.
* Do not rely on color alone to communicate state.
* Keep the number of accent colors limited.
* Avoid excessive gradients, shadows and decorative effects.
* Use rounded corners, borders and elevation consistently.
* Keep icons stylistically consistent.
* Use familiar icons for familiar actions.
* Pair unclear icons with text labels.
* Avoid tiny click targets.
* Keep interactive targets large enough for comfortable use.
* Maintain consistent alignment.
* Avoid arbitrary spacing values.
* Prefer reusable spacing and sizing tokens.
## Accessibility
* Accessibility is part of the default design, not an optional enhancement.
* Use semantic controls and elements.
* Ensure full keyboard usability.
* Maintain visible focus indicators.
* Use sufficient color contrast.
* Do not rely solely on hover interactions.
* Do not rely solely on color to indicate status.
* Provide accessible names for controls.
* Keep focus order logical.
* Move focus intentionally after dialogs, navigation or major state changes.
* Support screen readers where applicable.
* Use ARIA only when native semantics are insufficient.
* Respect reduced-motion and system accessibility preferences.
* Avoid flashing or distracting content.
## Responsive Design
* Design for the available viewport instead of fixed screen sizes.
* Prioritize important content on smaller screens.
* Avoid horizontal scrolling unless the content genuinely requires it.
* Keep controls usable on touch devices.
* Do not simply shrink desktop layouts.
* Adapt navigation and layout intentionally for smaller screens.
* Preserve core functionality across supported screen sizes.
* Avoid hiding important actions solely because space is limited.
* Test common breakpoints and extreme content lengths.
## Tables and Data-Dense Views
* Use tables only for genuinely tabular data.
* Keep column names concise.
* Align numeric data consistently.
* Make sorting and filtering discoverable.
* Preserve filter and sort state where useful.
* Do not overload tables with too many actions.
* Prefer a clear primary row action and secondary contextual actions.
* Keep important columns visible.
* Allow horizontal scrolling only when necessary.
* Use pagination, virtualization or incremental loading for large data sets.
* Provide clear empty states.
* Avoid showing unnecessary columns by default.
* Use sensible formatting for dates, numbers and units.
## Search and Filtering
* Search should behave predictably.
* Make active filters visible.
* Make filters easy to remove.
* Provide a clear way to reset filters.
* Preserve search and filter state when navigating back where practical.
* Avoid requiring users to configure many filters before seeing results.
* Use sensible defaults.
* Clearly distinguish no results from loading or errors.
* Suggest recovery options when no results are found.
## Dialogs and Modals
* Use dialogs only when interruption is justified.
* Avoid stacking dialogs.
* Keep dialogs focused on one decision or task.
* Use clear titles.
* Keep primary and secondary actions obvious.
* Make cancellation easy.
* Support Escape where appropriate.
* Do not use dialogs for information that belongs inline.
* Avoid large workflows inside modal dialogs.
* Do not close dialogs unexpectedly while users are entering data.
## Destructive Actions
* Clearly label destructive actions.
* Use confirmations for irreversible or high-impact operations.
* Explain the consequence before confirmation.
* Prefer reversible actions when possible.
* Offer undo where practical.
* Do not use generic confirmation text for destructive operations.
* Make the safe action visually distinct.
* Do not preselect destructive choices.
## Error Prevention
* Prevent invalid actions before they occur where practical.
* Use constraints and suitable controls instead of relying only on validation errors.
* Provide sensible defaults.
* Confirm only high-impact decisions.
* Warn users before losing unsaved changes.
* Do not clear entered data unexpectedly.
* Avoid ambiguous state transitions.
* Make dependencies between fields or actions visible.
## Consistency
* Similar problems should have similar UI solutions.
* Similar actions should use the same wording and placement.
* Do not introduce custom patterns when an existing pattern already solves the problem.
* Reuse components and design tokens.
* Keep interaction behavior consistent across the application.
* Preserve platform conventions unless there is a strong reason not to.
## User Control
* Keep users in control of important actions.
* Do not perform surprising destructive actions automatically.
* Do not change user data without a clear action or established behavior.
* Make automatic behavior visible when it materially affects the user.
* Allow users to cancel long-running operations where practical.
* Allow recovery from mistakes where possible.
* Avoid dark patterns.
* Never manipulate users into actions they did not intend.
## Progressive Disclosure
* Show the most important options first.
* Hide advanced complexity until it is needed.
* Do not overwhelm users with every possible setting at once.
* Keep advanced options discoverable.
* Avoid forcing expert workflows on normal users.
* Avoid hiding frequently used functionality behind excessive menus.
## Performance Perception
* Optimize perceived performance as well as actual performance.
* Show useful content as early as possible.
* Avoid blocking initial rendering on non-critical data.
* Use skeletons only when they improve comprehension.
* Avoid fake progress.
* Do not use loading animations to mask avoidable slowness.
* Keep interactions responsive even while background work continues.
## Defaults
* Choose safe and sensible defaults.
* Defaults should match the most common expected user intent.
* Avoid defaults with destructive consequences.
* Preserve user preferences when appropriate.
* Do not force repeated configuration for common workflows.
## Design Decision Rule
* Every UI element should have a clear purpose.
* Every additional interaction adds cognitive cost.
* Prefer removing complexity over explaining unnecessary complexity.
* Prefer familiar patterns over clever ones.
* Prefer fewer clear choices over many ambiguous choices.
* Prefer predictable behavior over surprising automation.
* If a design decision introduces ambiguity, unnecessary complexity, or multiple equally valid UX directions, ask the user instead of deciding autonomously.
## Priority Order
Prioritize UI/UX decisions in this order:
* Correctness
* Clarity
* Safety
* Accessibility
* User control
* Task efficiency
* Consistency
* Responsiveness
* Visual polish
Visual polish must never reduce usability.