UI/UX Design System - Nivo Money
Version: 1.0.0 Last Updated: 2025-11-28 Status: Active
Overview
This document defines the comprehensive design system for Nivo Money’s frontend applications, ensuring consistency, accessibility, and excellent user experience across both user-facing and administrative interfaces.
1. Color Schemes
User App - Blue Theme (Trust & Security)
Primary Blue
- Purpose: Main brand color, primary actions, navigation
- Use cases: Buttons, links, headers, active states
primary-50: #eff6ff /* Lightest backgrounds */
primary-100: #dbeafe /* Light backgrounds, badges */
primary-200: #bfdbfe /* Hover states for light elements */
primary-300: #93c5fd /* Secondary UI elements */
primary-400: #60a5fa /* Secondary interactions */
primary-500: #3b82f6 /* Main brand blue */
primary-600: #2563eb /* Primary button default */
primary-700: #1d4ed8 /* Primary button hover */
primary-800: #1e40af /* Primary button active */
primary-900: #1e3a8a /* Dark text on light backgrounds */
primary-950: #172554 /* Darkest shades */
Secondary Indigo
- Purpose: Complementary accents, secondary actions
- Use cases: Secondary buttons, tags, highlights
secondary-500: #6366f1 /* Main secondary color */
secondary-600: #4f46e5 /* Secondary actions */
Admin App - Orange Theme (Energy & Action)
Primary Orange
- Purpose: Main admin brand, administrative actions
- Use cases: Buttons, admin navigation, action items
primary-50: #fff7ed /* Lightest backgrounds */
primary-100: #ffedd5 /* Light backgrounds */
primary-500: #f97316 /* Main brand orange */
primary-600: #ea580c /* Primary button default */
primary-700: #c2410c /* Primary button hover */
primary-800: #9a3412 /* Primary button active */
Accent Purple
- Purpose: Admin badges, special indicators, priority items
- Use cases: Admin role badges, priority notifications
accent-100: #f3e8ff /* Admin badge background */
accent-500: #a855f7 /* Admin accent color */
accent-800: #6b21a8 /* Admin badge text */
Semantic Colors (Both Apps)
Success Green
success-50: #f0fdf4 /* Success backgrounds */
success-100: #dcfce7 /* Success badges */
success-500: #22c55e /* Success icons */
success-600: #16a34a /* Success buttons */
success-800: #166534 /* Success text */
Warning/Alert
warning-50: #fffbeb /* Warning backgrounds */
warning-100: #fef3c7 /* Warning badges */
warning-500: #f59e0b /* Warning icons */
warning-800: #92400e /* Warning text */
Error/Danger
error-50: #fef2f2 /* Error backgrounds */
error-100: #fee2e2 /* Error badges */
error-500: #ef4444 /* Error icons */
error-600: #dc2626 /* Danger buttons */
error-800: #991b1b /* Error text */
2. Typography
Font Stack
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto',
'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans',
'Helvetica Neue', sans-serif;
Type Scale
/* Headings */
text-5xl: 3rem (48px) /* Hero headings */
text-4xl: 2.25rem (36px) /* Page titles */
text-3xl: 1.875rem (30px) /* Section titles */
text-2xl: 1.5rem (24px) /* Card headings */
text-xl: 1.25rem (20px) /* Subheadings */
text-lg: 1.125rem (18px) /* Large body */
/* Body */
text-base: 1rem (16px) /* Default body */
text-sm: 0.875rem (14px) /* Small text */
text-xs: 0.75rem (12px) /* Micro text, badges */
Font Weights
font-bold: 700 /* Headings, emphasis */
font-semibold: 600 /* Buttons, labels */
font-medium: 500 /* Subheadings */
font-normal: 400 /* Body text */
Line Heights
leading-tight: 1.25 /* Headings */
leading-normal: 1.5 /* Body text */
leading-relaxed: 1.75 /* Paragraphs */
3. Spacing System
Scale (Tailwind CSS)
0: 0px
0.5: 0.125rem (2px)
1: 0.25rem (4px)
1.5: 0.375rem (6px)
2: 0.5rem (8px)
3: 0.75rem (12px)
4: 1rem (16px)
5: 1.25rem (20px)
6: 1.5rem (24px)
8: 2rem (32px)
12: 3rem (48px)
16: 4rem (64px)
Usage Guidelines
- Component padding: 1.5rem (p-6)
- Button padding: 0.5rem 1rem (py-2.5 px-4)
- Input padding: 0.625rem 0.75rem (py-2.5 px-3)
- Section spacing: 2rem - 3rem (py-8 to py-12)
- Grid gaps: 1rem - 1.5rem (gap-4 to gap-6)
4. Component Library
Buttons
Primary Button
.btn-primary {
background: primary-600
color: white
padding: 0.625rem 1rem
border-radius: 0.5rem
font-weight: 600
transition: all 200ms
hover: primary-700, shadow-md
active: primary-800, scale-95
focus: ring-2 ring-primary-500 ring-offset-2
disabled: opacity-50, cursor-not-allowed
}
Secondary Button
.btn-secondary {
background: gray-100
color: gray-700
padding: 0.625rem 1rem
border-radius: 0.5rem
font-weight: 600
hover: gray-200, shadow-sm
}
Outline Button
.btn-outline {
border: 2px solid primary-600
color: primary-600
background: transparent
hover: primary-50
}
Danger Button
.btn-danger {
background: error-600
color: white
hover: error-700
}
Success Button (Admin only)
.btn-success {
background: success-600
color: white
hover: success-700
}
Form Inputs
Input Field
.input-field {
width: 100%
padding: 0.625rem 0.75rem
border: 1px solid gray-300
border-radius: 0.5rem
focus: ring-2 ring-primary-500, border-transparent
placeholder: gray-400
disabled: bg-gray-50, text-gray-500
}
Error Input
.input-field-error {
border-color: error-500
focus: ring-error-500
}
Label
.label {
display: block
font-size: 0.875rem
font-weight: 500
color: gray-700
margin-bottom: 0.375rem
}
Cards
Standard Card
.card {
background: white
border-radius: 0.75rem
box-shadow: 0 1px 3px rgba(0,0,0,0.05)
padding: 1.5rem
border: 1px solid gray-100
}
Hover Card
.card-hover {
/* extends .card */
hover: shadow-md
transition: shadow 200ms
}
Badges
.badge {
display: inline-flex
align-items: center
padding: 0.125rem 0.625rem
border-radius: 9999px
font-size: 0.75rem
font-weight: 500
}
.badge-success { bg: success-100, text: success-800 }
.badge-warning { bg: warning-100, text: warning-800 }
.badge-error { bg: error-100, text: error-800 }
.badge-info { bg: primary-100, text: primary-800 }
.badge-admin { bg: accent-100, text: accent-800 }
Alerts
.alert {
padding: 1rem
border-radius: 0.5rem
border-left: 4px solid
}
.alert-success { bg: success-50, border: success-400, text: success-800 }
.alert-warning { bg: warning-50, border: warning-400, text: warning-800 }
.alert-error { bg: error-50, border: error-400, text: error-800 }
.alert-info { bg: primary-50, border: primary-400, text: primary-800 }
5. Layout Guidelines
Responsive Breakpoints
sm: 640px /* Small tablets */
md: 768px /* Tablets */
lg: 1024px /* Laptops */
xl: 1280px /* Desktops */
2xl: 1536px /* Large screens */
Container Widths
max-width: 1280px (max-w-7xl) /* Main content container */
padding: 1rem (px-4) mobile
padding: 1.5rem (px-6) tablet
padding: 2rem (px-8) desktop
Grid Systems
/* Dashboard cards */
grid-cols-1 md:grid-cols-2 lg:grid-cols-3
gap-4 md:gap-6
/* Stats cards */
grid-cols-1 md:grid-cols-5
gap-4
6. Interaction States
Transitions
/* Standard transition */
transition-all duration-200 ease-in-out
/* Color transition only */
transition-colors duration-200
/* Shadow transition */
transition-shadow duration-200
Hover Effects
- Buttons: Color darkening + shadow elevation
- Cards: Shadow elevation
- Links: Color change + underline
- Icons: Scale 110% + color change
Active States
- Buttons: Scale 95% + darker color
- Inputs: Ring + border color change
- Navigation: Bold + color indicator
Disabled States
- Opacity: 50%
- Cursor: not-allowed
- Hover effects: Disabled
7. Accessibility Guidelines
Color Contrast
- Body text on white: Minimum 4.5:1 (WCAG AA)
- Large text on white: Minimum 3:1
- Button text: Always use sufficient contrast
- White text on primary-600: ✅ Pass
- Dark text on primary-50: ✅ Pass
Focus Indicators
- All interactive elements: Visible focus ring
- Ring style: 2px solid, offset 2px
- Ring color: Matches element theme
Keyboard Navigation
- Tab order: Logical flow
- Skip links: Implemented on complex pages
- Enter/Space: Activates buttons and links
ARIA Labels
- Icons without text: aria-label required
- Loading states: aria-busy=”true”
- Error states: aria-invalid=”true”
8. Animation Principles
Durations
/* Micro-interactions */
duration-150: 150ms (buttons, hover states)
/* Standard transitions */
duration-200: 200ms (cards, modals)
/* Page transitions */
duration-300: 300ms (route changes)
Easing
ease-in-out: cubic-bezier(0.4, 0, 0.2, 1) /* Standard */
ease-out: cubic-bezier(0, 0, 0.2, 1) /* Entrances */
ease-in: cubic-bezier(0.4, 0, 1, 1) /* Exits */
Scale Effects
hover: scale-105 /* Subtle emphasis */
active: scale-95 /* Button press feedback */
9. Shadow System
/* Elevation levels */
shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05) /* Cards at rest */
shadow: 0 1px 3px rgba(0, 0, 0, 0.1) /* Default elevation */
shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* Hover states */
shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1) /* Modals */
shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1) /* Overlays */
10. Icon System
Icon Library
- Source: Heroicons (inline SVG)
- Sizes:
- Small: 1rem (16px) - w-4 h-4
- Medium: 1.25rem (20px) - w-5 h-5
- Large: 1.5rem (24px) - w-6 h-6
- XL: 2rem (32px) - w-8 h-8
Usage
// Success icon
<svg className="w-5 h-5 text-success-500" fill="currentColor" viewBox="0 0 20 20">
<path fillRule="evenodd" d="..." clipRule="evenodd" />
</svg>
11. Page Templates
User App Pages
- Landing Page: Hero + Features + CTA
- Auth Pages: Centered card on gradient background
- Dashboard: Nav + Stats grid + Content sections
- Form Pages: Centered form with sidebar info
Admin App Pages
- Admin Login: Centered card with security notices
- Admin Dashboard: Stats grid + Tabs + Action cards
- Detail Pages: Header + Info grid + Action buttons
12. Implementation Checklist
For New Components
- Uses design system colors (primary, success, error, etc.)
- Follows spacing scale (p-6, gap-4, etc.)
- Has all interaction states (hover, active, focus, disabled)
- Includes focus indicators for accessibility
- Uses consistent typography scale
- Has smooth transitions (duration-200)
- Responsive across all breakpoints
- Color contrast meets WCAG AA standards
For New Pages
- Consistent navigation header
- Proper content container (max-w-7xl)
- Responsive grid layouts
- Loading states implemented
- Error states handled
- Breadcrumbs/back navigation where needed
- Page title follows hierarchy
13. Design Tokens Reference
Quick Reference Table
| Element | User App | Admin App |
|---|---|---|
| Primary Color | Blue (#2563eb) | Orange (#ea580c) |
| Button Hover | Blue-700 | Orange-700 |
| Focus Ring | Blue-500 | Orange-500 |
| Success | Green (#16a34a) | Green (#16a34a) |
| Error | Red (#dc2626) | Red (#dc2626) |
| Warning | Amber (#d97706) | Yellow (#ca8a04) |
| Badge Accent | Indigo | Purple (#9333ea) |
14. Best Practices
Do’s ✅
- Use semantic colors (success, warning, error) for status
- Maintain consistent spacing throughout pages
- Provide clear visual feedback for interactions
- Use loading states for async operations
- Keep button labels concise and action-oriented
- Use proper heading hierarchy (h1 > h2 > h3)
Don’ts ❌
- Don’t mix color systems between apps
- Don’t skip hover/focus states on interactive elements
- Don’t use color as the only indicator of state
- Don’t nest cards more than 2 levels deep
- Don’t use custom shadows outside the system
- Don’t override Tailwind classes with inline styles
15. Version History
| Version | Date | Changes |
|---|---|---|
| 1.0.0 | 2025-11-28 | Initial design system with blue/orange theme separation |
Maintained by: Engineering Team Contact: For questions or suggestions, create an issue on GitHub