Methodology
Data sources
The palette library is built from openly published color references. Palettes are sourced from the Lospec palette list, a public, community-maintained repository of more than 5,000 named palettes that exposes its data via a JSON endpoint. Color names are matched against Chirag Mehta's Name That Color dataset, which provides ~1,500 named CSS colors with their canonical hex values. Both sources are publicly available and credited here.
The build script (php seed.php) downloads the source data, normalizes it, computes per-palette characteristics (average lightness, saturation, dominant hue, contrast), tags each palette with the rooms and moods it suits, and writes the result to JSON files on disk. Page templates read from those JSON files at request time.
Categorization rules
Each palette is converted to HSL values for analysis. The following rules then assign rooms and moods:
- Calm — average saturation below 30% and average lightness above 55%.
- Bold — average saturation above 55% and contrast above 45%.
- Neutral — average saturation below 18%.
- Cozy — warm-hue dominant (red, orange, amber) with mid-low average lightness.
- Cool — blue-cyan dominant with average lightness above 55%.
- Coastal — light cyan-blue dominant with average lightness above 60%.
- Forest — green-dominant with at least moderate saturation.
- Modern — low saturation with high contrast (a black-and-white feel).
- Vintage — low-to-mid saturation in the warm-yellow range with mid-low lightness.
Room assignments use overlapping rules — a single palette can appear in several rooms when its characteristics genuinely fit more than one. Bedrooms favor high lightness and low saturation; kitchens favor warm yellow-amber dominance; bathrooms favor the cyan-blue family; home offices favor strong contrast for visual focus.
Why automated categorization
Manual tagging at this scale is brittle and inconsistent. Two reviewers will disagree on whether a palette is "calm" or "neutral" if you don't define those terms numerically. By committing to thresholds and applying them uniformly, the library is internally consistent: every palette in Calm shares the same numeric definition of calm, and every palette in Bedroom shares the same numeric definition of bedroom-suitable. This trades a little hand-curated nuance for a lot of consistency.
Limitations
The library is a starting point, not a final answer. Three caveats worth knowing:
- Undertone is sensitive to lighting. A palette that looks warm on screen can read cool under daylight, and vice versa. Always sample on the actual wall.
- Sheen changes color. The same hex on flat, eggshell, satin, and semi-gloss will read differently. The palette pages assume a low-sheen finish (matte or eggshell) on walls.
- Surroundings change color. Paint reads against the floors, ceiling, trim, and existing furniture in the room. Two rooms with identical wall paint can feel completely different because of what surrounds the wall.
Updates
The dataset is rebuilt by re-running the seed script. Counts at the time of this build: 1,200 palettes, 5,178 distinct colors, 31,898 named colors. Generated 2026-05-03T06:29:51+00:00.