This design system document serves as the single source of truth for Leafdex's visual language, component behavior, and implementation guidelines. It ensures consistency across the application while enabling efficient collaboration.
Purpose of this document:
- Define shared design vocabulary
- Document implementation standards
- Establish quality and accessibility requirements
- Support design and development workflows
Team Members:
- Chandan Marle
- Nikolay Ostroukhov
- Omar Natour
- Samuel Hernandez
Referenced Design Guidelines:
- Primary:
primary(semantic color) - Secondary:
secondary(semantic color) - Accent:
accent(semantic color) - Base:
base-100(background),base-content(text) - Neutral:
neutral(semantic color)
- Base Font: System font stack (DaisyUI default)
- Base Size: 16px (DaisyUI default)
- Line Height: 1.5 (DaisyUI default)
- DaisyUI uses Tailwind's default spacing scale
- Base Unit: 4px (1rem = 16px)
- Common Values:
- xs: 0.5rem (8px)
- sm: 1rem (16px)
- md: 1.5rem (24px)
- lg: 2rem (32px)
- xl: 3rem (48px)
- sm: 640px
- md: 768px
- lg: 1024px
- xl: 1280px
- 2xl: 1536px
<!-- Primary Button -->
<button class="btn btn-primary">Button Text</button>
<!-- Secondary Button -->
<button class="btn btn-secondary">Button Text</button>
<!-- Accent Button -->
<button class="btn btn-accent">Button Text</button>
<!-- Ghost Button -->
<button class="btn btn-ghost">Button Text</button><!-- Standard Card -->
<div class="card bg-base-100 shadow-xl">
<div class="card-body">
<h2 class="card-title">Card Title</h2>
<p>Card content</p>
</div>
</div><!-- Text Input -->
<div class="form-control">
<label class="label">
<span class="label-text">Input Label</span>
</label>
<input type="text" class="input input-bordered" />
</div>- Hover: DaisyUI default transitions
- Active: DaisyUI default states
- Focus: DaisyUI default focus rings
- Disabled: DaisyUI default disabled states
- DaisyUI default transitions
- DaisyUI default loading states
- DaisyUI themes are WCAG compliant by default
- Text contrast: 4.5:1 minimum
- UI components: 3:1 minimum
- Target size: 44×44px minimum
- Spacing: 8px minimum between targets
Leafdex's design is guided by four core principles:
-
Collectible and Engaging
Interface elements inspire users to discover and collect more plants, with gamification elements and collection-focused features. -
Educational and Informative
Every design decision prioritizes clearly communicating plant information in an educational context, making learning about plants fun and rewarding. -
Accessible to All
The app is designed to be usable by everyone, regardless of device, ability, or technical proficiency. -
Efficient and Responsive
The interface responds quickly to user input with appropriate feedback, minimizing steps for common tasks.
- Primary: Semantic color for main actions
- Secondary: Semantic color for secondary actions
- Accent: Semantic color for highlights
- Base: Background and text colors
- Neutral: Neutral colors for UI elements
- Use semantic color names (primary, secondary, accent)
- Avoid hardcoded colors
- Let DaisyUI handle dark mode colors
- System font stack by default
- Responsive text sizes
- DaisyUI default line heights
- DaisyUI default letter spacing
- Use Tailwind's spacing scale
- Responsive spacing utilities
- Consistent spacing patterns
- DaisyUI responsive grid system
- Flexbox utilities
- Grid utilities
<div class="card bg-base-100 shadow-xl">
<figure class="px-10 pt-10">
<img src="/plant.jpg" alt="Plant" class="rounded-xl" />
</figure>
<div class="card-body items-center text-center">
<h2 class="card-title">Plant Name</h2>
<p>Collection status</p>
<div class="card-actions">
<button class="btn btn-primary">Collect</button>
</div>
</div>
</div><!-- Primary Button -->
<button class="btn btn-primary">Collect</button>
<!-- Secondary Button -->
<button class="btn btn-secondary">Share</button>
<!-- Ghost Button -->
<button class="btn btn-ghost">Learn More</button><!-- Text Input -->
<div class="form-control">
<label class="label">
<span class="label-text">Plant Name</span>
</label>
<input type="text" class="input input-bordered" />
</div>
<!-- Search Bar -->
<div class="form-control">
<div class="input-group">
<input
type="text"
placeholder="Search plants..."
class="input input-bordered"
/>
<button class="btn btn-square">
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
/>
</svg>
</button>
</div>
</div>DaisyUI components are built with accessibility in mind:
- Proper ARIA attributes
- Keyboard navigation
- Focus management
- Color contrast
- Screen reader support
- Use semantic HTML
- Follow DaisyUI component patterns
- Maintain proper heading structure
- Ensure keyboard navigation
- Support screen readers
// style.css
@import 'tailwindcss';
@plugin '@tailwindcss/typography';
@plugin 'daisyui' {
themes: light, dark, lemonade --default, forest --prefersdark;
root: ':root';
logs: true;
}Buttons:
<button class="btn btn-primary">Primary Button</button>
<button class="btn btn-secondary">Secondary Button</button>
<button class="btn btn-accent">Accent Button</button>
<button class="btn btn-ghost">Ghost Button</button>Cards:
<div class="card bg-base-100 shadow-xl">
<div class="card-body">
<h2 class="card-title">Card Title</h2>
<p>Card content</p>
</div>
</div>Form Inputs:
<div class="form-control">
<label class="label">
<span class="label-text">Input Label</span>
</label>
<input type="text" class="input input-bordered" />
</div><div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
<!-- Grid items -->
</div>
<div class="p-4 md:p-6 lg:p-8">
<!-- Content with responsive padding -->
</div><div class="bg-base-100 text-base-content">
<!-- Content that adapts to theme -->
</div>- Follow DaisyUI versioning
- Update Tailwind CSS as needed
- Document any customizations
- Request: Team member identifies need for new component or modification
- Review: Team reviews request against DaisyUI components
- Implementation: Component is implemented using DaisyUI patterns
- Documentation: Update documentation with DaisyUI references
- Release: Component added to next version release
For All Components:
- Uses DaisyUI components where possible
- Follows DaisyUI patterns
- Maintains accessibility
- Responsive across breakpoints
- Dark mode compatible
- Documentation complete
- Design File Location: [Figma Link]
- Component Storybook: [Storybook Link]
- Design Token Repository: [GitHub Link]
- Implementation Examples: [CodeSandbox Link]