Skip to main content

Summary

The application utilizes a sophisticated Material 3 design system built entirely with Jetpack Compose. It features a dynamic color engine that generates complete light and dark palettes from single “seed” colors, ensuring accessible contrast and brand consistency. The system includes centralized tokens for typography, spacing, animation, and iconography, along with specialized components for grouped list layouts.

Theme Architecture

The theming engine does not rely on static hex codes for every surface. Instead, it uses the HCT (Hue, Chroma, Tone) color space to generate tonal palettes dynamically.

Color Palettes

The app supports multiple distinct themes. Changing the theme updates the “Seed Color,” which recalculates the entire UI color hierarchy.

Theme Seeds

  • Clarity Teal: #006a64
  • Focus Blue: #345ca8
  • Calm Lavender: #6750a4
  • Vitality Orange: #bd3400
  • Uplifting Green: #336b25
  • Optimistic Yellow: #6e5f00

Semantic Colors

  • Success: Green variants used for completion.
  • Error: Red variants for alerts and dismissals.
  • Feedback: A 5-step gradient from Red (Terrible) to Purple (Excellent).

Typography

The application uses Google Sans Flex, a variable font family. This allows for precise weight adjustments (e.g., weight 600 for SemiBold) rather than relying on separate font files.
StyleSizeWeightUsage
Display36-57spBlack / ExtraBoldHero numbers, large onboarding text
Headline24-32spBold / ExtraBoldScreen titles, section headers
Title14-22spMedium / SemiBoldCard titles, dialog headers
Body12-16spNormalMain content, descriptions
Label11-14spMedium / SemiBoldButtons, tags, navigation items

Spacing & Sizing

Spacing is standardized to ensure rhythm and alignment.
TokenValueUsed For
xs4dpTight grouping within elements
s8dpDefault spacing between small items
m16dpStandard padding, card internals
l24dpSection separation
xl32dpLarge layout gaps

Iconography

Icon sizes are tokenized to maintain visual hierarchy.
TokenValueUsed For
XS12dpInline badges
SM16dpDense lists, secondary info
MD24dpStandard buttons, navigation
LG28dpSection headers
HERO56dpMajor feature indicators

Animation System

Animations are centralized in AnimationTokens to ensure consistent motion feel across the app.
TokenValueUsage
Instant100msMicro-interactions, toggles
Fast150msButton presses
Normal300msStandard transitions, card expansion
Slow500msEmphasis, celebrations
Breathing1500msAmbient pulsing effects

Components

AppCard

What it is: The fundamental container for content. It wraps the standard Material Card with app-specific defaults for elevation, colors, and shape logic. Variants:
VariantBackground ColorUsage
TileSurface Container HighDashboard widgets, interactive tiles
List ItemSurface ContainerStandard rows in a list
InfoSecondary ContainerInformational callouts
ErrorError Container (Alpha)Error messages or alerts

Grouped Lists

What it is: A specialized pattern where a list of items appears as a single continuous block. The corners are rounded intelligently based on the item’s position. Logic:
  • Top Item: Rounds top-left and top-right corners.
  • Middle Items: No rounded corners (or very subtle inner radius).
  • Bottom Item: Rounds bottom-left and bottom-right corners.
  • Single Item: Rounds all corners.

Feedback Scales

What it is: A set of specialized colors and icons used for mood tracking and feedback. Levels:
  1. Terrible: Deep Red/Orange
  2. Bad: Orange/Brown
  3. Okay: Lime Green
  4. Good: Blue
  5. Excellent: Purple/Violet

Screen Structure

Most screens follow a standard scaffold pattern to ensure compatibility with the edge-to-edge design system.
ScreenScaffold
├── TopBar (Transparent/Translucent)
├── Content (Scrollable)
│   ├── Header (Display Text)
│   ├── Grouped List / Grid
│   │   ├── AppCard (Top)
│   │   ├── AppCard (Middle)
│   │   └── AppCard (Bottom)
│   └── Footer / Actions
└── BottomBar (Navigation)

Rules & Conventions

  1. Use Tokens, Not Values: Always use LocalSpacing.current.m instead of 16.dp.
  2. Theme Seeds: Do not hardcode colors. Use MaterialTheme.colorScheme which is derived from the active theme seed.
  3. Variable Fonts: Use AppTypography styles. Do not manually set font weights unless creating a custom display component, as the variable font settings are complex.
  4. Grouped Shapes: When displaying lists of related data, use the groupedItems extension or GroupedShapes logic to visually merge them into a single block.
  5. Edge-to-Edge: The theme enforces transparent status and navigation bars. Ensure content has enough bottom padding to avoid being covered by the system navigation bar.
Last modified on January 25, 2026