Methodology · open-source
The editorial coherence score computed.
The score is a single number between 0 and 100. It is computed locally in the visitor's browser. Nothing is sent to a server. The formula is published below.
The formula.
score = 100
− (palette_entropy × 30)
− (typeface_variance × 25)
− (image_density_outlier × 15)
− (saturation_outlier × 20)
+ hue_bucket_modifier
clamped to 0–100 Each variable, plainly.
- Palette entropy
- The extracted colours are binned into 12 hue ranges of 30 degrees each. Shannon entropy is computed on the distribution. Normalised 0 to 1. More entropy = colours scattered across the spectrum = weaker visual cohesion.
- Typeface variance
- One or two type families = 0. Three = 0.5. Four or more = 1. The penalty assumes editorially mature brands work within disciplined type pairs.
- Image density outlier
- Currently set to 0 in this version. Reserved for a future iteration that measures inconsistent image density across the visited landing page.
- Saturation outlier
- Measured as the gap between the most saturated extracted colour and the mean saturation across all colours. A gap of 50 saturation points scores 1.0. Penalises a single hyper-saturated colour amid an otherwise muted palette.
- Hue bucket modifier
- The matched bucket (12 total) brings its own signal — some palette choices sit higher than others in editorial defensibility. Range: −12 to +5.
Reading the result.
- 75 and above · coherent editorial system
- 50 to 74 · fragmented at two or three points
- 25 to 49 · inconsistent · clear opportunity
- below 25 · no detectable editorial system
The score is one signal among others. It does not replace judgment. The reading paragraph beside it is doing most of the work.
Source code reference: see
src/lib/score.ts and src/content/readings.json in the public repository.