Home / Editorial standards and method

Editorial standards and method

This page answers three questions: why a palette gets in, where the numbers on each page come from, and what happens when something is wrong. It is the editorial standard, not a pitch.

Last updated:2026-10-29

What the library holds

The library currently holds 100 palettes: 31 for apps, 34 for the web and 35 for mini programs. Each palette carries 10 color roles (primary, dark, light, secondary, accent, success, warning, danger, text, background, with slightly different field names per platform), 1000 color values in total.

Palettes are grouped into 43 color tags. 34 of those tags hold two or more palettes and therefore have an indexable aggregation page of their own; tags with a single palette still have a page, but it is marked noindex, because a page with one card has nothing to read.

The first palette was added on 2026-10-12, the most recent on 2026-10-28.

Three hard gates

Every palette clears three automated checks before it enters the dataset. Failing any one of them discards the candidate outright; nothing is kept around to be fixed later.

  • Body readability: text-to-background contrast ≥ 4.5:1. This is the WCAG 2.1 AA requirement for normal-size text, and below it text looks washed out on most screens.
  • Brand legibility: primary-to-background contrast ≥ 3.0:1. The primary has to work as a button fill and still read as an edge, which is what the WCAG non-text contrast requirement covers.
  • Near-duplicate rejection: a candidate whose overall distance from an existing palette (the mean across ten roles) is below 42 does not enter. The point is that each palette is genuinely its own set, not the previous one with half a color changed.

Those thresholds are defined once, in src/data/gates.mjs. The generator, this page and the verification script all read the same file, so there is no way for the docs to say 4.5 while the code runs 4.6.

The measured range

The gates are a floor, not the actual level. These figures are computed from the library itself, and each detail page shows its own row of the same measurements:

  • Body contrast: 13.0:1 to 17.9:1, median 14.7:1.
  • Primary contrast: 3.0:1 to 11.8:1, median 4.2:1.
  • Primary saturation: 13% to 92%.
  • Primary lightness: 24% to 77%.
  • Hue coverage: with the hue wheel cut into 12 segments of 30 degrees, 12 of them contain at least one palette.

Body contrast sits around 14.7:1 because backgrounds are deliberately kept in the near-white range and body text is dark. That is comfortable to read for long stretches, and it removes "the text is hard to read" at the source. Primary contrast only reaches about 4.2:1 because the primary also has to carry brand identity; pushing every primary darker would turn the whole library into one shade of heavy.

What the gates cannot do

Automated checks prevent mistakes, they do not create usefulness. Each detail page carries four layers of writing that are not template fills:

  • Scene notes: what kind of product and mood the palette suits (100 of 100).
  • Pairing notes: derived from that palette's own measurements, so the wording changes with the values rather than repeating a stock sentence (100 of 100).
  • Editorial review: four checks, each carrying its measured number, such as the distance between link and body color or the primary sitting on the background. No sentence repeats more than twice across the library.
  • Position in the library: how far this palette sits from the nearest and the furthest one, and where its saturation ranks among its platform peers. None of those numbers survive being copied to another library.

Those four layers are what separates this library from generic swatch collections. Color values are available anywhere; whether a palette belongs in a given product does not fall out of the hex codes.

What is deliberately not here

The following are omissions by choice, not shortcuts:

  • Light colors that cannot pass the gates. A bright teal cannot hold dark body text at 4.5:1, and darkening it until it can means it is no longer mint. The three palettes under the Mint tag are therefore cool blues and violets, and the tag page says so rather than staging a fake mint.
  • Tag pages with a single palette. One card is not a page worth reading, so those are marked noindex while staying reachable from detail pages.
  • Color-family topics without evidence in the library. Cyberpunk needs a library full of dark grounds; this one does not have that structure, so a page about it would be adjectives only, and it is not written.
  • Paid inclusion and advertiser placements. There is no position in this library that money can buy.

Why growth is paused

Daily additions stopped on 2026-10-28 and the count is fixed. Reviewing the pages turned up a structural problem: once two palettes differ only in their color values, their detail pages converge; the faster the count grows, the more often the same template gets copied. Adding palettes daily would have scaled that problem daily.

What happens during the pause: the repeated parts of a detail page get cut (eight code exports became one rendered block and seven generated on demand), the review and position blocks were rewritten to carry measured numbers, and tag pages gained measured ranges only this library can produce. Growth resumes on one condition: a new palette must arrive with its own editorial judgement rather than a copy of the previous sentence pattern. Until that holds, the count stays where it is.

Ads, inclusion and ordering

The site carries Google AdSense ads to cover server costs. Ad code appears only in fixed slots on HTML pages and takes no part in what gets included or how palettes are ordered: order comes from the date added and the quality score, and no advertiser can buy a position. The machine-readable endpoints (.json / .css / API / llms.txt / sitemap.xml) carry no ad scripts at all.

Corrections

A wrong color value, a contrast figure that does not add up, or a palette that clearly fails inside a real interface are all errors worth fixing. Write in with the palette name or page link and what is wrong; we check it against the data and correct it, then update the last-updated date on this page and on the page concerned.

The site is run independently. There is no editorial team and no submission queue: content is checked palette by palette against the standard above. That is why it stays consistent, and why it grows slowly.

Contact us

Questions about this page, or about how we handle data? Email [email protected], or see the contact page.