This guide explains CheckTick's 3-tier theme system and how to customize the appearance at different levels. Whether you're a platform admin (Enterprise tier), organization owner, or survey creator, you can control the look and feel of your CheckTick instance.
Overview: 3-Tier Theme Hierarchy
CheckTick uses a cascading theme system with three levels:
```- BRAND_TITLE (str) โ Default site title. Example: "CheckTick"
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ- BRAND_ICON_URL (str) โ URL or static path to the site icon shown in the navbar and as favicon if no uploaded icon.
โ 1. Platform Theme โ โ Superuser sets (affects all users)- BRAND_ICON_URL_DARK (str) โ Optional dark-mode icon URL. Shown when dark theme is active.
โ (Deployment default) โ- BRAND_ICON_ALT (str) โ Alt text for the brand icon. Defaults to BRAND_TITLE.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ- BRAND_ICON_TITLE (str) โ Title/tooltip for the brand icon. Defaults to BRAND_TITLE.
โ Overrides- BRAND_ICON_SIZE_CLASS (str) โ Tailwind size classes for the icon. Example: "w-8 h-8".
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ- BRAND_ICON_SIZE (int or str) โ Numeric size that maps to w-{n} h-{n}. Example: 6, 8. Ignored if BRAND_ICON_SIZE_CLASS is set.
โ 2. Organization Theme โ โ Org owner sets (affects org members)
โ (Per-organization) โ## Theme settings (environment variables)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Overrides- BRAND_THEME (str) โ Default logical theme name. Values: "checktick-light" or "checktick-dark". Default: "checktick-light".
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ- BRAND_THEME_PRESET_LIGHT (str) โ daisyUI preset for light mode. Default: "nord". Available: light, cupcake, bumblebee, emerald, corporate, retro, cyberpunk, valentine, garden, lofi, pastel, fantasy, nord, cmyk, autumn, acid, lemonade, winter, nord, sunset.
โ 3. Survey Theme โ โ Survey creator sets (affects survey pages)- BRAND_THEME_PRESET_DARK (str) โ daisyUI preset for dark mode. Default: "business". Available: dark, synthwave, halloween, forest, aqua, black, luxury, dracula, business, night, coffee, dim.
โ (Per-survey) โ- BRAND_FONT_HEADING (str) โ CSS font stack for headings.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ- BRAND_FONT_BODY (str) โ CSS font stack for body.
```- BRAND_FONT_CSS_URL (str) โ Optional font CSS href (e.g., Google Fonts).
- BRAND_THEME_CSS_LIGHT (str) โ Custom DaisyUI variable overrides for light theme (advanced).
How it works:- BRAND_THEME_CSS_DARK (str) โ Custom DaisyUI variable overrides for dark theme (advanced).
-
Each level can override the level above it## Organization-level theming (SiteBranding model)
-
Changes at one level don't affect other levels
-
Users see the theme from the most specific level that applies to themOrganization admins can override environment defaults via the Profile page. Settings are stored in the
SiteBrandingdatabase model:
Permissions- default_theme โ Logical theme name (checktick-light or checktick-dark)
- theme_preset_light โ daisyUI preset for light mode (20 options)
Different users can control different levels:- theme_preset_dark โ daisyUI preset for dark mode (12 options)
- icon_file / icon_url โ Light mode icon (uploaded file takes precedence over URL)
| Level | Who Can Configure | Where | Affects |- icon_file_dark / icon_url_dark โ Dark mode icon
|-------|------------------|-------|---------|- font_heading / font_body / font_css_url โ Font configuration
| Platform | Superusers only | Django Admin or environment variables | All users (default) |- theme_light_css / theme_dark_css โ Custom CSS from daisyUI Theme Generator (optional, overrides presets)
| Organization | Organization owners | Profile page | All organization members |
| Survey | Survey creators | Survey dashboard | Survey pages only |
Platform Branding Configuration (Enterprise Tier)
New in CheckTick: Enterprise tier users and self-hosted superusers can now configure platform-level branding through a web interface.
Who Can Access
- Enterprise tier users (on hosted CheckTick)
- Superusers on self-hosted deployments (with
SELF_HOSTED=true)
How to Configure Branding
Web Interface (Recommended):
- Navigate to your Profile page
- Click on "Configure Branding" (visible only to Enterprise/superuser users)
- Or go directly to
/branding/ - Configure the following:
- Default Theme: checktick-light or checktick-dark
- Light Mode Preset: Choose from 20+ daisyUI themes (nord, cupcake, etc.)
- Dark Mode Preset: Choose from 12+ dark daisyUI themes (business, dracula, etc.)
- Logo & Icons: Upload light/dark mode logos or provide URLs
- Typography: Set custom fonts for headings and body text
- Click "Save" to apply changes instantly
Command Line (For self-hosted deployments):
# Show current branding configuration
python manage.py configure_branding --show
# Set theme presets
python manage.py configure_branding --theme-light nord --theme-dark business
# Upload logo files
python manage.py configure_branding --logo path/to/logo.png --logo-dark path/to/logo-dark.png
# Set logo URLs
python manage.py configure_branding --logo-url https://example.com/logo.png
# Configure fonts
python manage.py configure_branding --font-heading "Inter, sans-serif" --font-body "Open Sans, sans-serif"
# Reset to defaults
python manage.py configure_branding --reset
Configuration Storage
All branding settings are stored in the SiteBranding database model (singleton pattern):
- default_theme โ Logical theme name (checktick-light or checktick-dark)
- theme_preset_light โ daisyUI preset for light mode (20 options)
- theme_preset_dark โ daisyUI preset for dark mode (12 options)
- icon_file / icon_url โ Light mode icon (uploaded file takes precedence over URL)
- icon_file_dark / icon_url_dark โ Dark mode icon
- font_heading / font_body / font_css_url โ Font configuration
- theme_light_css / theme_dark_css โ Custom CSS from daisyUI Theme Generator (optional, overrides presets)
Precedence: Database values โ Environment variables โ Built-in defaults
1. Platform-Level Themes (Superusers)
Platform administrators set the default theme for the entire CheckTick deployment.
Who Can Configure
-
Database field values
-
Superusers only - Users with Django admin access
-
Regular users and organization owners cannot change platform defaults2. Actual daisyUI preset names (nord, business, etc.) are applied to the DOM:
-
<html data-theme="nord">for light mode
Where to Configure - <html data-theme="business"> for dark mode
- JavaScript maps logical names to presets based on SiteBranding settings
Django Admin (recommended for runtime changes):
-
Custom CSS overrides from daisyUI Theme Generator can override preset colors while keeping the base theme structure.
-
Log in as superuser
-
Navigate to
/admin/## Survey style fields (per-survey) -
Click "Site Branding" under Core
-
Edit theme presets, icons, fonts, custom CSS- title โ Optional page title override
-
icon_url โ Optional per-survey favicon/icon
Environment Variables (recommended for deployment):- theme_name โ DaisyUI theme name for the survey pages
-
primary_color โ Hex color (e.g., #ff3366); normalized to the correct color variables
-
See Self-Hosting: Platform Theme Configuration- font_heading โ CSS font stack
-
Set
BRAND_THEME_PRESET_LIGHT,BRAND_THEME_PRESET_DARK, etc.- font_body โ CSS font stack -
font_css_url โ Optional font CSS href
What You Can Configure- theme_css_light โ Light theme DaisyUI variable overrides (from builder)
-
theme_css_dark โ Dark theme DaisyUI variable overrides (from builder)
-
Theme presets - Choose from 20 light themes and 12 dark themes
-
Site icons - Upload or provide URLs for light/dark mode icons## Where to look in the code
-
Fonts - Set heading and body font stacks, external font CSS
-
Custom CSS (advanced) - Paste variables from daisyUI Theme Generator- Tailwind v4 entry point:
checktick_app/static/css/daisyui_themes.css(CSS-based config, no JS config file) -
Theme utility:
checktick_app/core/themes.py(preset lists, parsing functions)
Available Theme Presets- Base templates: checktick_app/templates/base.html, base_minimal.html, admin/base_site.html
- Branding context:
checktick_app/context_processors.py(builds thebrandobject)
20 Light Themes:- Profile UI: checktick_app/core/templates/core/profile.html (theme preset dropdowns)
nord (default), nord, light, cupcake, bumblebee, emerald, corporate, retro, cyberpunk, valentine, garden, lofi, pastel, fantasy, cmyk, autumn, acid, lemonade, winter, sunset- Theme switcher JS: checktick_app/static/js/theme-toggle.js, admin-theme.js
- Survey dashboard style form:
checktick_app/surveys/templates/surveys/dashboard.html
12 Dark Themes:
business (default), dark, synthwave, halloween, forest, aqua, black, luxury, dracula, night, coffee, dim## Rebuilding the CSS
2. Organization-Level Themes (Organization Owners)Tailwind CSS v4 uses the @tailwindcss/cli package:
Organization owners can customize their organization's appearance, overriding platform defaults for all members.```bash
npm run build:css
Who Can Configure```
-
Organization owners only - The user who created the organizationOr in Docker:
-
Organization members and survey creators cannot change organization themes
### Where to Configuredocker compose exec web npm run build:css
-
Log in as organization owner
-
Navigate to
/profileThe build process: -
Scroll to "Organization Theme" section
-
Click "Edit Theme" button- Input:
checktick_app/static/css/daisyui_themes.css -
Output:
checktick_app/static/build/styles.css(minified)
What You Can Configure- Build time: ~250ms
- All 39 daisyUI themes included (192KB minified)
Basic Settings:
- Light theme preset (choose from 20 options)
- Dark theme preset (choose from 12 options)
Advanced Settings (optional):
- Custom CSS for light theme
- Custom CSS for dark theme
How to Select a Theme Preset
- Click "Edit Theme" in your profile
- Choose a light theme from the first dropdown
- Choose a dark theme from the second dropdown
- Click "Save"
Example: Select "corporate" for light mode and "luxury" for dark mode to give your organization a professional look.
How to Reset to Platform Defaults
If you want your organization to use the platform's default theme again:
- Navigate to
/profile - Scroll to "Organization Theme" section
- Click "Reset to Defaults" button
- Confirm
This clears all custom organization theme settings and falls back to the platform theme.
Viewing Current Theme
The profile page shows your current theme status:
- "Platform Default" - Using the deployment's default theme
- Theme name (e.g., "corporate") - Using a custom organization theme
3. Survey-Level Themes (Survey Creators)
Survey creators can customize individual surveys with unique branding and colors.
Who Can Configure
- Survey owners - The user who created the survey
- Survey creators - Users with creator role on the survey
- Organization admins cannot override survey themes (surveys retain autonomy)
Where to Configure
- Open your survey
- Click "Dashboard" tab
- Scroll to "Survey Style" section
- Edit theme settings
- Save changes
What You Can Configure
- Title override - Custom page title for survey pages
- Icon URL - Custom icon/favicon for survey
- Theme name - daisyUI theme preset
- Primary color - Hex color code (e.g.,
#ff3366) - Fonts - Heading/body font stacks, external font CSS
- Custom CSS (advanced) - Light/dark theme variables
When to Use Survey Themes
Survey-level themes are useful when:
- Running multiple surveys with different branding
- Creating survey-specific color schemes
- Testing new themes without affecting other surveys
- White-labeling surveys for different clients/departments
Using the daisyUI Theme Generator
For advanced customization beyond preset themes, use the daisyUI Theme Generator to create custom color schemes.
When to Use Custom CSS
Use custom CSS when:
- Your organization has specific brand colors
- Preset themes don't match your color scheme
- You need precise control over colors, borders, shadows
Use preset themes when:
- You're happy with one of the 32 built-in themes
- You want quick, professional results
- You don't have specific brand color requirements
How to Generate Custom Theme CSS
- Visit the Theme Generator:
-
Choose a base preset:
- Start with a preset that's close to your desired look
-
This provides a good foundation
-
Customize colors:
- Adjust primary, secondary, accent colors
- Modify background, text colors
-
Set border radius, shadows
-
Copy the CSS variables:
- Click "Copy CSS" button
-
The generated code contains CSS variable declarations
-
Paste into CheckTick:
- For organizations: Paste into "Advanced: Custom CSS" fields in profile
- For surveys: Paste into survey style form
- Paste light theme variables in "Light theme CSS"
- Paste dark theme variables in "Dark theme CSS"
What to Paste
โ DO paste:
--color-primary: oklch(65% 0.21 25);
--color-secondary: oklch(70% 0.15 200);
--radius-selector: 1rem;
โ DON'T paste:
:root {
--color-primary: oklch(65% 0.21 25);
}
Important: Paste only the variable declarations, not the :root or [data-theme="..."] selectors. CheckTick automatically adds the proper selectors.
Theme Selection (Light/Dark/System)
End users can choose how CheckTick appears on their device:
User Preference Options
- System - Follow operating system theme (auto-switches)
- Light - Always use light mode theme
- Dark - Always use dark mode theme
How Users Change Theme
- Log in to CheckTick
- Navigate to
/profile - Find "Theme Selection" section
- Choose "System", "Light", or "Dark"
- Theme changes immediately
How It Works
- User preference stored in browser localStorage
- JavaScript applies the correct theme on page load
- When "System" is selected, theme updates automatically when OS theme changes
- Light/Dark choice overrides system preference
Understanding Theme Precedence
When multiple theme levels are configured, CheckTick uses this precedence:
Precedence Order (Highest to Lowest)
- Survey theme - Applies only on survey pages
- Organization theme - Applies to all org members (except on survey pages with custom themes)
- Platform theme - Default for all users
Example Scenarios
Scenario 1: Platform + Organization
- Platform set to: nord (light), business (dark)
- Organization set to: corporate (light), luxury (dark)
- Result: Organization members see corporate/luxury, non-members see nord/business
Scenario 2: All Three Levels
- Platform: nord/business
- Organization: corporate/luxury
- Survey: cupcake/forest
- Result: Survey pages show cupcake/forest, other pages show corporate/luxury
Scenario 3: Organization Reset
- Organization previously had custom theme
- Owner clicks "Reset to Defaults"
- Result: Organization members now see platform theme (nord/business)
Troubleshooting
Theme Not Applying
Problem: Changed theme but still seeing old theme
Solutions:
- Hard refresh browser (
Ctrl+Shift+RorCmd+Shift+R) - Clear browser localStorage:
localStorage.removeItem('checktick-theme') - Check that you have permission to change that theme level
- Verify you saved the changes
Colors Look Wrong
Problem: Custom colors not showing correctly
Solutions:
- Verify you pasted only CSS variables (no selectors)
- Ensure OKLCH color format is correct
- Test colors in daisyUI Theme Generator first
- Check both light and dark theme CSS
Permission Denied
Problem: Can't access theme settings
Check your role:
- Platform themes: Must be superuser
- Organization themes: Must be organization owner
- Survey themes: Must be survey owner/creator
Icons Not Showing
Problem: Custom icon not appearing
Solutions:
- For uploaded files: Ensure file is SVG, PNG, JPG, or WebP
- For URLs: Verify URL is absolute and accessible
- Check file size is within limits
- Verify media files are served correctly
Theme Doesn't Persist
Problem: Theme resets when changing pages
Solution: This is likely a browser localStorage issue. Check:
- Browser allows localStorage (not in incognito/private mode)
- No browser extensions blocking storage
- Cookie/storage settings allow site data
Best Practices
For Platform Administrators
- Set sensible defaults that work for most users
- Choose accessible themes with good contrast
- Test both light and dark modes
- Document any custom CSS for future reference
For Organization Owners
- Consider your organization's brand colors
- Test themes with actual users before rolling out
- Keep accessibility in mind (contrast ratios)
- Use "Reset to Defaults" if unsure about changes
For Survey Creators
- Only customize surveys that truly need unique branding
- Stick to presets unless you have specific requirements
- Test survey themes on different devices
- Ensure colors work for both light and dark modes
Accessibility Considerations
- Maintain sufficient color contrast (WCAG AA minimum: 4.5:1)
- Test themes with screen readers
- Don't rely on color alone to convey information
- Consider colorblind users when choosing colors
Related Documentation
- Self-Hosting: Platform Theme Configuration - Deployment and environment variable configuration
- Themes (Developer Guide) - Technical implementation details
- User Management - Understanding user roles and permissions
Getting Help
If you encounter issues with theming:
- Check this guide first
- Review Getting Help for support options
- Search existing GitHub discussions
- Create a new discussion with:
- Your role (superuser/org owner/survey creator)
- What you're trying to achieve
- Steps you've already tried
- Screenshots if applicable