Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Coming Soon
Ceibo Travel
C
Ceibo Design System
v1.0.0

Design System

A comprehensive collection of reusable components, design tokens, and patterns for building consistent, accessible user interfaces. All components follow Ceibo brand guidelines and are optimized for usability.

Foundation

Core design elements and tokens

Colors

Our color palette is carefully crafted to ensure accessibility, brand consistency, and visual hierarchy across the platform.

Brand Colors

Primary (Coral)

#E1685A

Coral Light

#ED9286

Coral Dark

#C54E40

Coral Darker

#B03C2E

Secondary (Sage)

#BBCEA8

Sage Dark

#ADC179

Sage Light

#E4EADE

Sage Lightest

#EBF0E5

Semantic Colors

Success

#78EEA0

Error

#FF4162

Warning

#FFDD35

Info

#61B4FC

Grayscale

White

#FFFFFF

Light

#F3F3F3

Input

#A7A6A6

Default

#838383

Black

#39393C

Link Colors

Link

#288DE4

Link Hover

#1A6DB5

Link Disabled

#AAC8E3

Typography

Consistent typography creates hierarchy and improves readability. Use our predefined text styles to maintain visual consistency across the application.

Hero Title

Largest heading for landing pages and major sections. Use sparingly for maximum impact.

Welcome to Ceibo Travel

98px / Bold

Title

Main page headings and section titles. Used for primary content organization.

Explore Amazing Destinations

80px / SemiBold

Subtitle

Secondary headings and subsection titles. Perfect for introducing content blocks.

Featured Walking Tours

40px / Bold

Body Text

Standard body copy for paragraphs, descriptions, and general content. Use font-bold for emphasis within text.

Discover the world with our curated travel guides and walking tours. Experience local culture, hidden gems, and authentic adventures in cities around the globe.

To book your tour,register before December 31stto receive a special discount.

28px / Regular

Mini Footer

Small text for captions, footnotes, helper text, and metadata.

15px / SemiBold

Typography Scale

Complete typography scale showing all text styles in context with recommended colors.

98px / Bold

80px / SemiBold

40px / Bold

28px / Regular

Typography Best Practices

Hierarchy
  • Use only one Hero Title per page for the main heading
  • Maintain consistent heading levels (don't skip from h1 to h3)
  • Use Titles (h2) for main sections, Subtitles (h3) for subsections
  • Keep body text for paragraphs and general content
Color Pairing
  • Hero/Title: ceibo-sage-dark for primary headings
  • Subtitle: ceibo-coral for accented subsections
  • Body: gray-black for optimal readability
  • Mini Footer: gray for secondary information
Accessibility
  • Always use semantic HTML tags (h1, h2, h3, p) with utility classes
  • Ensure sufficient color contrast (WCAG AA minimum)
  • Don't rely solely on font size to convey importance
  • Use appropriate line-height for readability (1.5 for body text)
  • Avoid long line lengths (max 75 characters for body text)

Components

Interactive UI components for building interfaces

Buttons

Buttons trigger actions and communicate what will happen when clicked. Use button variants to indicate hierarchy and importance.

Primary Button

Use for the main action on a page. There should only be one primary button per section.

Secondary Button

Use for secondary actions that support the primary action.

Destructive Button

Use for destructive actions like delete or remove. Always confirm before executing.

Button Sizes

Buttons come in different sizes to fit various contexts and layouts.

Buttons with Icons

Add icons to provide visual context and improve scannability.

Usage Guidelines

When to use
  • To trigger an action or navigate to a new page
  • When the action is a primary goal of the user
  • In forms to submit or reset data
Best practices
  • Use clear, action-oriented labels (e.g., "Save changes" not "Submit")
  • Place primary buttons on the right in forms
  • Limit primary buttons to one per section
  • Always confirm destructive actions

Form Components

Form components allow users to input and edit data. Use proper labels, validation states, and accessibility attributes to create intuitive forms.

Text Input

Standard text input field for single-line text entry.

Input Validation States

Show validation feedback with visual indicators and error messages.

This field is required

We'll never share your information.

Textarea

Multi-line text input for longer content like comments or descriptions.

Textarea Validation

Textarea with validation states and feedback.

Message must be at least 10 characters

Label

Labels provide accessible names for form controls. Always associate labels with inputs.

Form Best Practices

Accessibility
  • Always use labels with form controls and associate them with htmlFor/id
  • Provide clear error messages that explain how to fix issues
  • Use appropriate input types (email, tel, url, etc.) for better mobile keyboards
  • Include helper text for complex requirements or formatting
Validation
  • Validate on blur to provide immediate feedback without being intrusive
  • Use clear visual indicators (color, icons) for validation states
  • Show success states sparingly - absence of errors is usually sufficient
  • Disable submit buttons until required fields are valid
User Experience
  • Keep forms as short as possible - only ask for necessary information
  • Group related fields together with clear section headings
  • Use placeholder text as examples, not as labels
  • Maintain focus state visibility for keyboard navigation

Selection Components

Selection components allow users to choose options from a set of choices. Use select dropdowns for moderate lists, comboboxes for large searchable lists, checkboxes for multiple selections, radio buttons for single choice selections, switches for binary on/off states, and sliders for numeric ranges.

Select Dropdown

Standard dropdown for selecting a single option from a list.

Select with Default Value

Set a default selected option using defaultValue.

Disabled Select

Disable the select when it should not be interactive.

Combobox

Searchable dropdown that combines an input with a dropdown list. Ideal for large lists with filtering.

Switch Toggle

Binary toggle for on/off states. Commonly used in settings and preferences.

Disabled Switch

Disable switches when they should not be interactive.

Switch in Settings

Real-world example of using switches in a settings panel.

Receive emails about your account activity

Receive emails about new products and features

Receive emails for friend requests

Checkbox

Checkboxes allow users to select multiple options from a list.

Radio Group

Radio buttons allow users to select a single option from a list.

Slider

Sliders allow users to select a numeric value within a range.

Selection Component Best Practices

Select Dropdown
  • Use for lists with 5+ options where space is limited
  • Always include clear placeholder text
  • Group related options using SelectGroup when appropriate
  • Consider using radio buttons for 2-4 options instead
Combobox
  • Use for large lists (10+ items) that benefit from search/filtering
  • Perfect for country selectors, city pickers, or tag selection
  • Provides better UX than Select for long lists
  • Ensure the search is performant and filters as user types
Checkbox
  • Use for multiple selections where users can pick zero or more options
  • Always pair with a descriptive label using htmlFor
  • Group related checkboxes together visually
  • Use for accepting terms, enabling features, or filtering content
Radio Group
  • Use for single choice selections with 2-4 visible options
  • Always have one option selected (use defaultValue)
  • Best for mutually exclusive options like plan selection or preferences
  • For 5+ options, consider using a Select dropdown instead
Switch Toggle
  • Use for binary on/off settings that take effect immediately
  • Always pair with a descriptive label
  • Consider adding helper text for complex settings
  • Group related switches together in settings panels
Slider
  • Use for selecting numeric values within a defined range
  • Display the current value in the label for clarity
  • Set appropriate min, max, and step values
  • Use range sliders for selecting a range (e.g., price filters)
Design System Consistency
  • All components use focus-visible for keyboard navigation focus rings
  • Consistent disabled state: opacity-70, gray background, gray border
  • Ceibo brand colors for active/checked states
  • All components follow the same 2px border and border radius standards
Accessibility
  • Always use Label components with htmlFor attribute
  • Provide clear feedback for disabled states
  • Ensure keyboard navigation works properly (Tab, Space, Arrow keys)
  • Use aria-label for components without visible labels
  • Group related options with fieldset and legend when appropriate

Date Picker

Date pickers allow users to select dates from a calendar interface. Use single date pickers for one-time selections, range pickers for start/end dates, and preset pickers for common date choices like "Today" or "Next week".

Date Picker

Select a single date from a calendar. Opens in a popover for clean UI integration.

Date Range Picker

Select a date range with start and end dates. Perfect for booking flows, filtering, and scheduling.

Date Picker with Presets

Quick date selection with preset options like Today, Tomorrow, and Next Week. Improves UX for common date choices.

Disabled Date Pickers

Examples of disabled date pickers and date validation patterns.

Date Picker Best Practices

When to Use
  • Booking dates for reservations, appointments, or travel
  • Scheduling events or setting deadlines
  • Filtering data by date or date range
  • Date-based form inputs (birth date, expiration date, etc.)
  • Any scenario where visual calendar selection improves UX
Accessibility
  • Always pair date pickers with descriptive labels using htmlFor
  • Keyboard navigation: Tab to focus, Space/Enter to open, Arrow keys to navigate dates
  • Screen readers announce selected dates and disabled states
  • Focus is automatically moved to calendar when opened (initialFocus)
  • Popover can be closed with Escape key
Date Validation
  • Use disablePastDates for future-only selections (bookings, deadlines)
  • Use disabledDates function for custom logic (weekends, holidays, blackout dates)
  • Combine multiple validation rules for complex scenarios
  • Provide clear error messages when date selection fails validation
  • Consider min/max date ranges for constrained selections
Formatting & Display
  • Display format: PPP ("April 29, 2023") for user-friendly reading
  • API format: Use yyyy-MM-dd for backend communication
  • Consider locale-specific formats for international users
  • Show placeholder text when no date is selected
  • For ranges, display both dates with clear separator (dash or "to")
UX Patterns
  • Auto-close: Single picker closes on selection, range picker on both dates selected
  • Presets: Offer common selections (Today, Tomorrow, This Week) for faster input
  • Visual feedback: Today is highlighted in light sage, selected in full sage
  • Range selection: Show visual connection between start and end dates
  • Keep popover aligned with trigger button (align="start")
Component Variants
  • DatePicker: Use for single date selection (appointments, deadlines)
  • DateRangePicker: Use for start/end date pairs (bookings, reports, filters)
  • DatePickerWithPresets: Use when common dates are frequently selected
  • Choose the variant that best matches your user's mental model
Design System Consistency
  • Matches input height (h-10) and border style (2px ceibo-sage) across forms
  • Uses Ceibo brand colors for selected states (ceibo-sage)
  • Consistent focus ring styling with other form components
  • Disabled state follows system-wide opacity and cursor patterns

Data Display Components

Components for presenting information and data to users in clear, organized ways. Use these to highlight statuses, show messages, group content, and display tabular data.

Badge

Small labels for displaying status, categories, or counts. Available in multiple variants for different meanings.

Default
Secondary
Destructive
Success
Warning
Info
Outline

Badge Usage Examples

Common patterns for using badges in real-world scenarios.

Order Status:
Completed
User Role:
Admin
Notifications:
5
Categories:
Travel
Adventure
City

Alert Component

Call attention to important information with contextual feedback messages. Always include an icon and descriptive title.

Card Component

Flexible container for grouping related content and actions together.

Simple Card
A basic card with header and content

Cards are flexible containers for grouping related content and actions. They can include headers, content, and footers with action buttons.

Card with Footer Actions

Add a footer to cards when action buttons are needed.

Card with Footer
Includes action buttons in the footer

Use the footer for actions related to the card content. Common actions include Save, Cancel, Delete, or navigation.

Table Component

Display data in rows and columns. Use for structured data like user lists, reports, or dashboards.

NameStatusRoleActions
John Doe
Active
Admin
Jane Smith
Pending
User
Bob Johnson
Inactive
Viewer

Data Display Best Practices

Badges
  • Use semantic variants (success, warning, destructive) for status indicators
  • Keep badge text short - 1-2 words maximum
  • Use outline variant for category tags that don't need emphasis
  • Place badges next to the content they describe, not floating alone
Alerts
  • Always include both a title and description for clarity
  • Use appropriate icons that match the alert variant
  • Reserve destructive alerts for actual errors, not warnings
  • Consider dismissible alerts for non-critical information
Cards
  • Use cards to group related content and create visual hierarchy
  • Keep card titles concise and descriptive
  • Place primary actions in the footer, secondary in the header
  • Maintain consistent card sizing within the same view
Tables
  • Always include clear column headers
  • Right-align numeric data and actions columns
  • Use font-medium for the primary identifier column
  • Consider pagination for tables with more than 10-15 rows
  • Make row actions consistent across all rows

Overlay Components

Overlay components appear on top of the main content to display additional information, gather input, or require user decisions. Use these components to focus user attention without leaving the current context.

Dialog

Modal windows that interrupt the user workflow for important information or forms. Requires explicit user action to dismiss.

Alert Dialog

Critical confirmation dialogs for destructive or irreversible actions. Use for deletions, data loss warnings, or major changes.

Sheet (Side Panel)

Slide-in panels from the edges of the screen. Perfect for navigation menus, settings panels, or supplementary content.

Popover

Contextual overlays that appear near their trigger element. Use for date pickers, color pickers, or additional options that don't need full modal focus.

Dropdown Menu

Contextual menus with lists of actions or navigation options. Perfect for user menus, table row actions, or contextual operations.

Overlay Component Best Practices

Dialog vs Alert Dialog
  • Dialog: General purpose modals for forms, content, confirmations
  • Alert Dialog: Critical confirmations for destructive actions only
  • Always provide clear Cancel and Confirm actions in Alert Dialogs
  • Use Alert Dialogs sparingly - only for truly important decisions
Sheet (Side Panel)
  • Use right sheets for settings, edit forms, and detailed information
  • Use left sheets for navigation menus and primary navigation
  • Use top/bottom sheets for mobile-friendly interfaces
  • Include a clear close button or allow backdrop click to dismiss
  • Keep sheet content focused - don't overload with too much information
Popover
  • Use for lightweight, non-critical content and quick actions
  • Position popovers near their trigger element for context
  • Keep popover content concise - no more than 2-3 form fields
  • Auto-dismiss when clicking outside or pressing Escape
  • Don't nest popovers within other popovers
Dropdown Menu
  • Use for contextual actions and navigation options
  • Group related items with separators
  • Limit menu items to 7-10 options for usability
  • Use clear, action-oriented labels (verbs)
  • Place destructive actions at the bottom, separated
  • Add icons to improve scannability and recognition
Accessibility
  • All overlays must be keyboard accessible (Tab, Enter, Escape)
  • Focus should trap inside modals (Dialog, Alert Dialog)
  • Provide clear focus indicators for all interactive elements
  • Use proper ARIA attributes (handled by components)
  • Ensure sufficient color contrast for all text

Feedback Components

Feedback components provide visual responses to user actions and system states. Use these to communicate progress, provide context, and improve user experience.

Toast Notifications

Brief, non-intrusive messages that appear temporarily to provide feedback about operations. Auto-dismiss after a few seconds.

Tooltip

Contextual information that appears on hover or focus. Perfect for explaining icons, providing additional details, or clarifying actions.

Progress Bar

Visual indicator showing task completion percentage. Use for file uploads, form submissions, or any determinate loading state.

Loading...25%
Processing50%
Almost done...75%
Complete!100%

Skeleton Loaders

Placeholder components that mimic the layout of content while it loads. Better UX than spinners for known layouts.

Card Skeleton

List Skeleton

Separator

Visual divider for organizing content into distinct sections. Use horizontal separators between content blocks.

Section One

Content for the first section

Section Two

Content for the second section

Section Three

Content for the third section

Feedback Component Best Practices

Toast Notifications
  • Use for confirming actions (save, delete, update)
  • Keep messages brief and actionable (max 2 lines)
  • Auto-dismiss success toasts after 3-5 seconds
  • Keep error toasts visible until user dismisses
  • Don't use toasts for critical information
Tooltips
  • Keep tooltip text concise (1-2 short sentences)
  • Use for explaining icons, abbreviations, or disabled states
  • Always wrap app with TooltipProvider
  • Don't put critical information in tooltips
  • Ensure tooltips are accessible via keyboard (focus state)
Progress Bars
  • Use for operations with known duration or progress
  • Always show percentage or status text with the bar
  • Update progress smoothly, not in large jumps
  • Consider indeterminate loading for unknown durations
Skeleton Loaders
  • Use for initial content loading, not user actions
  • Match skeleton shape to actual content layout
  • Prefer skeletons over spinners for better perceived performance
  • Show skeletons immediately, don't delay

Loading

Loading indicators communicate that content is being fetched or processed. Use appropriate sizes and variants to match your UI context.

Loading Sizes

Choose a size based on the context - small for inline loading, default for content areas, large for full-page loading.

Small

Default

Large

Color Variants

Different color variants to match your UI theme or background. Use white variant on dark backgrounds.

Primary

Secondary

Shadow

White

Loading in Buttons

Show loading state in buttons during async operations like form submissions or API calls.

Full Page Loading

Use large loading indicator centered on the page for initial page loads or major content changes.

Loading content...

Loading Best Practices

When to Use
  • Initial page or component loading
  • Async operations like form submissions or data fetching
  • File uploads or downloads in progress
  • Content that takes more than 300ms to load
Choosing Size
  • Small: Inline loading, buttons, small components
  • Default: Cards, lists, content areas
  • Large: Full page loading, major content sections
Best Practices
  • Always show loading states for operations taking longer than 300ms
  • Pair with descriptive text ("Loading...", "Saving...")
  • Disable interactive elements while loading to prevent double-submissions
  • Use skeleton loaders for complex layouts instead of spinners
  • Consider progress bars for operations with known duration
  • Match loading indicator color to your UI theme

Notifications

Display important messages to users with contextual feedback. Notifications are dismissible and should be used for system messages, form feedback, or status updates.

Info Notification

Use for general information and neutral messages that don't require urgent action.

Informational Message
We've updated our privacy policy. Please review the changes at your convenience.

Success Notification

Display successful operations like saved changes, completed actions, or confirmed submissions.

Success!
Your profile has been updated successfully and changes are now live.

Warning Notification

Alert users to potential issues or actions that need attention, but aren't critical errors.

Warning
Your session will expire in 5 minutes. Please save your work to avoid losing changes.

Error Notification

Show critical errors that require immediate attention or prevent the user from continuing.

Error
Failed to save your changes. Please check your internet connection and try again.

All Notification Variants

Overview of all notification types. Choose the appropriate variant based on message severity and context.

New Features Available
Check out our latest updates in the dashboard.
Payment Processed
Your subscription has been renewed successfully.
Storage Almost Full
You're using 90% of your storage quota. Consider upgrading.
Connection Lost
Unable to reach the server. Retrying...

Notification Best Practices

When to Use
  • Form submission results (success or error)
  • System status updates and announcements
  • Background task completion notifications
  • Session warnings or connection issues
Choosing the Right Variant
  • Info: Neutral messages, feature announcements, tips
  • Success: Completed actions, saved changes, confirmed submissions
  • Warning: Attention needed, non-critical issues, quota warnings
  • Error: Failed operations, validation errors, connection problems
Best Practices
  • Keep titles short and descriptive (2-4 words)
  • Provide actionable descriptions with clear next steps
  • Always make notifications dismissible with onClose
  • Don't show multiple notifications of the same type simultaneously
  • Consider auto-dismissing success notifications after 3-5 seconds
  • Keep error and warning notifications visible until user dismisses them