Color Is Not the Only Signal
Every meaning conveyed by color is also conveyed by a second signal (icon, label, pattern).
Error states use icon + color + text (never color alone). Status indicators use icon or label alongside color. Charts use pattern or shape in addition to color.
accessibility · color-blindnesspractical ui →
Every list, table, and data view has a designed empty state.
Every view that can be empty (no data, no results, first-time user) has a designed empty state with: an explanation of why it's empty, and a clear next action.
empty-state · contentpractical ui →
Validation errors are shown inline, immediately, with clear corrective guidance.
Validation errors appear inline below the field (not in a summary banner), trigger on blur (not on submit only), use red border + icon + specific message ("Email must include @" not "Invalid email"), and disappear as soon as the user corrects the input.
forms · validationux psychology →
Every error state tells users what went wrong and provides a specific next action.
Every error message: (1) states what went wrong in plain language, (2) explains why if not obvious, (3) provides a specific action button (Retry, Go back, Contact support). No error shows only a code or generic "Something went wrong".
errors · recoverypractical ui →
All layouts tested and functional at mobile (375px), tablet (768px), and desktop (1280px+).
Every page tested at 375px (iPhone SE), 768px (iPad), and 1280px+. No horizontal scroll at any breakpoint. Touch targets ≥ 44px on mobile. Navigation accessible on all sizes.
responsive · mobilepractical ui →
Focus is managed correctly when UI changes — modals, navigation, dynamic content.
When a modal opens: focus moves to first focusable element inside. When a modal closes: focus returns to the trigger. When a route changes: focus moves to the page heading or skip link. Dynamic content added to DOM: announced via aria-live if important.
accessibility · focusux psychology →
Page headings follow a logical h1→h2→h3 sequence with no skipped levels.
Every page has exactly one h1 (the page title). Subsections use h2. Sub-subsections use h3. No levels are skipped (no h1 → h3). Heading levels are not chosen for visual size — use CSS for size, HTML for structure.
accessibility · headingspractical ui →
LCP, FID/INP, and CLS scores meet Google's "Good" threshold before launch.
LCP < 2.5s, INP < 200ms, CLS < 0.1. Run Lighthouse in Chrome DevTools on the 3 most-visited pages. Test on throttled mobile (Moto G4 preset). All three scores in "Good" range.
performance · core-web-vitalsux psychology →
Design Handoff Completeness
Developers have everything they need to implement without guessing.
Every design file includes: all interactive states (default, hover, focus, active, disabled, error, loading), exact spacing values (not "about 16px"), component names matching code, and annotation for non-obvious behaviors (animations, conditional visibility, validation logic).
handoff · design-systemdesign systems →
All animations respect prefers-reduced-motion and have a no-motion fallback.
All CSS animations and transitions are wrapped in a @media (prefers-reduced-motion: no-preference) block, OR individually reduced/removed with @media (prefers-reduced-motion: reduce). Skeleton shimmer, loading spinners, and page transitions all have static fallbacks.
animation · accessibilitydesigning brand identity →
Launch Readiness Checklist
Final verification sweep before shipping to production.
Verify all of: (1) favicon present and correct, (2) page titles and meta descriptions set, (3) 404 page designed, (4) error pages designed (500, offline), (5) no console errors in production build, (6) all external links open in new tab with rel="noopener", (7) forms have success and error states, (8) all images have alt text, (9) no placeholder copy (Lorem ipsum), (10) privacy policy and terms links present if required.
launch · productionpractical ui →
Essential on-page SEO requirements for public-facing pages.
Every public page has: (1) unique <title> under 60 chars, (2) meta description 120–160 chars, (3) one H1 matching the page intent, (4) descriptive URL slug (no /page?id=42), (5) Open Graph tags for social sharing (og:title, og:description, og:image), (6) canonical URL tag.
seo · metapractical ui →
Internationalisation Readiness
Layouts and strings are ready for translation without breaking.
All UI strings use a translation function or key lookup (not hardcoded English). Layouts accommodate 30% text expansion (German, Finnish expand significantly). Date, time, number, and currency formats use locale-aware formatting. Text containers don't clip at fixed widths. RTL languages don't break layout.
i18n · l10nux psychology →
UI copy is clear, consistent, and serves user goals — not internal jargon.
All UI strings: (1) use plain language (8th grade reading level for general audiences), (2) are consistent — same action always uses the same verb, (3) use active voice, (4) have no jargon unexplained to new users, (5) use second person ("your") not third ("the user"), (6) button labels are verb-first ("Save changes" not "Changes saved").
content · copyux psychology →
All UI elements use system components — no one-off implementations.
Every button, input, modal, toast, badge, and navigation element in production uses the design system component — not a one-off implementation. No hardcoded hex values outside the token file. No arbitrary spacing values. All component names match between Figma and code.
design-system · consistencydesign systems →
Minimum security requirements before shipping a product to users.
Verify all of: (1) HTTPS enforced everywhere with HSTS header, (2) auth tokens stored in httpOnly cookies (not localStorage), (3) all user inputs sanitized before rendering (XSS prevention), (4) CSRF tokens on state-changing forms, (5) sensitive data not logged or exposed in client-side JS, (6) rate limiting on auth endpoints, (7) dependency audit run (npm audit / Dependabot).
security · httpsux psychology →
Verify type scale, weights, and line lengths are consistent across the product.
Audit confirms: (1) only defined scale sizes in use (no one-off px values), (2) maximum 2 font weights used (regular + bold), (3) body text line-height ≥ 1.5, (4) no line longer than 680px for body text, (5) no pure black (#000) text — use near-black, (6) no light grey text failing 4.5:1 contrast on white.
typography · auditpractical ui →
Verify no hardcoded hex values exist outside the token file.
Search the codebase for hardcoded hex values (#[0-9a-fA-F]{3,6}) outside the token definition file. Zero should exist in component files. All colors must reference CSS custom properties (var(--color-*)). All color pairs used for text meet WCAG AA.
color · tokensinteraction of color →
Touch interactions work correctly and don't conflict with system gestures.
Verify: (1) all tappable elements ≥ 44×44px, (2) horizontal swipe in carousels/drawers doesn't conflict with browser back gesture, (3) no hover-only interactions (hover is unavailable on touch), (4) tap delay eliminated (touch-action: manipulation), (5) scroll areas work with one-finger scroll, (6) pinch-to-zoom not disabled on content pages.
mobile · touchux psychology →
Pages that users are likely to print render cleanly in print view.
Pages users might print (invoices, reports, reference content, tickets) have a @media print stylesheet that: hides navigation, sidebars, and CTAs; removes background colors; ensures text is black on white; includes the page URL in the footer; breaks pages logically (avoid breaking headings from their content).
print · cssux psychology →
Notification Center / Activity Feed
Full-page inbox for user activity, mentions, and system notifications.
Slots
Filter sidebar · required
Notification list · required
Notification item · required
notifications · inboxux psychology →
Brand Color Specification
How to specify brand color values correctly across all production media.
Every brand color must be specified in all four formats: Pantone (coated + uncoated), CMYK, RGB, and hex. Never specify a brand color as just a hex value — vendors producing print materials cannot use hex.
color · branddesigning brand identity →
How the brand sounds across all written communications — consistent personality, adaptive tone.
Voice is constant across all channels; tone adapts to context. Define voice with 3–5 behavioral adjectives (not aspirational ones). For each, write what it means in practice and what it explicitly is not.
voice · tonedesigning brand identity →
Image and Photography Style
How imagery reinforces brand personality — subject matter, color treatment, and composition.
All brand photography must be consistent in: color temperature (warm or cool, never both), subject matter (people/product/abstract — pick a primary mode), treatment (natural light vs. studio, color vs. black-and-white), and composition (negative space proportion).
photography · imagerydesigning brand identity →
The base spacing unit and grid that creates visual rhythm across all surfaces.
All spacing values must be multiples of the base unit (8px). No arbitrary values (7px, 13px, 19px). Use a defined scale: 4, 8, 16, 24, 32, 48, 64, 96. Page layouts align to a 12-column grid with 24px gutters.
spacing · griddesign systems →
How elements animate — timing, easing, and purpose — as an expression of brand character.
All motion must have purpose: guide attention, communicate state change, or confirm an action. Decorative animation is prohibited. Use standard durations: 100ms (micro), 200ms (standard), 300ms (complex), 500ms (page transitions).
motion · animationdesigning brand identity →
How to use, size, and apply the brand icon system consistently.
Use only the approved icon library (Lucide React). Never mix icon styles from different libraries. All icons must use currentColor inheritance — never hardcoded hex. Standard sizes: 12px (dense UI), 16px (default), 20px (prominent), 24px (large). Never scale icons between these sizes.
icons · iconographydesigning brand identity →
Social Media Specifications
Approved dimensions and brand treatments for social media assets.
All social media assets must use approved brand colors, the correct logo variant for the background, and the specified dimensions. Open Graph images must not contain text that becomes illegible at link preview size.
social-media · branddesigning brand identity →
Brand standards for transactional and marketing emails.
All brand emails use the standard template: white content card (600px wide) on light grey background (#F5F5F5), logo at top (120–160px wide), navy text (#0F172A), accent orange for primary CTAs, footer with legal text and unsubscribe. No custom fonts — use system fallbacks.
email · templatedesigning brand identity →
Brand standards for slides, decks, and presentations.
All external presentations use the approved template: navy title slides, white content slides, logo bottom-right on every slide. One idea per slide. Headlines are complete sentences (the takeaway), not topic labels. Max 5 bullet points per slide. Fonts: Poppins (display) or Inter (body).
presentation · slidesux psychology →
Brand standards for internal documents, specs, and wikis.
Internal documents follow: one H1 per doc (the title), H2 for major sections, H3 for sub-sections. Bullet points for lists of 3+ items. Tables for comparisons. Code blocks for all code/values. Documents start with a TL;DR or summary section. Status labels: Draft / In Review / Final.
documentation · wikidesign systems →
Common logo applications that damage brand equity and must be avoided.
The logo must never be altered, recolored, distorted, shadowed, or placed on insufficiently contrasting backgrounds.
logo · misusedesigning brand identity →
Co-branding and Partnerships
How to display the Mathesis logo alongside partner or client logos.
When appearing alongside a partner logo: both logos must be equal in optical size (not bounding-box size), separated by a vertical divider or minimum 3× clear space, and neither logo may be modified to match the other's style.
co-branding · partnershipsdesigning brand identity →
Approved and prohibited background treatments for logo placement.
The logo may only appear on: white, light grey (>90% lightness), the brand navy (#0F172A), or solid accent orange (#F97316). On photographs, use a white or navy container with clear space. Never place the logo directly on a patterned, textured, or busy background without a container.
logo · backgroundinteraction of color →
How and when the logo mark may be animated.
The logo mark may animate in loading screens and brand intro sequences only. Animation must be subtle: reveal (fade in or draw), not distortion (no morphing, bouncing, or spinning). The orange chevron element may pulse once on first load. Maximum animation duration: 800ms. All animations must respect prefers-reduced-motion.
logo · animationdesigning brand identity →