01Which homepages
This edition ranks 98 AI and software homepages: model labs, developer tools, creative tools, productivity tools and AI tool directories. We pick them by hand and add more each month.
We score the homepage only, at https://<domain>/ and wherever it redirects. A site is ranked only when its screenshots show its homepage. If we get a block page, an error page, an overlay we can’t clear or large blank areas, the site sits out the edition with no penalty, and we try again the next month.
To suggest a company, email hello@headoftaste.ai.
02Capture
Our crawler, TasteIndexBot, runs Google Chrome through Playwright and obeys robots.txt. It captures each homepage twice, once as a desktop browser and once as a phone.
- Screens
- Desktop at 1440 × 900. Phone at 390 × 844, with 2× pixel density, touch and a mobile user agent. The browser asks for reduced motion, a light colour scheme and US English, so a page renders the same way each month.
- Waiting
- Each load waits up to 45 seconds for the page’s load event, then up to 10 seconds for the network to go quiet, up to 4 seconds for web fonts, and 1.5 seconds more.
- Scrolling
- The browser scrolls one screen at a time and captures each screen while it is in view, so scroll effects, lazy images and video show up as a visitor sees them. It stitches up to 7,200 px of the desktop page, about eight screens, into one image and shows fixed headers once. On the phone it measures up to six screens and keeps the first two for the judge.
- Pop-ups
- We hide consent banners from the well-known consent platforms, large or modal dialogues, marketing pop-ups and chat widgets, in our own browser only. Content that belongs to the page, such as a sign-up form, stays.
- Speed
- Before the captures, each site gets one cold desktop load of its own, with an empty cache and one site at a time. Speed comes from that load, before any scrolling.
03The judge
The judge is Claude, a model made by Anthropic. One model judges every site in an edition. It gets three images: the first desktop screen at full size, the top five desktop screens, and the first two phone screens.
- Blind
- The judge never sees the domain or the company name. Its instructions tell it to ignore fame, brand and product quality.
- Rubric
- The judge scores every site against the same rubric, in whole numbers from 1 to 10, for typography, colour, layout, imagery, polish, distinctiveness and mobile, plus one overall score. The rubric describes every step of the scale. It expects a median of 5 to 6 and keeps 10 for work that designers study and save. Pages lose points for defaults, inconsistency, clutter and sloppiness.
- Three runs
- The judge scores each site three times and we average the runs. A run counts only if it answers in full and confirms that the screenshots show the homepage.
- Notes
- The judge also writes the verdict, strengths and improvements on each company page. We edit them into plain English and keep the meaning.
- Calibration
- This edition is the reference. From Edition 02 we plan to re-judge a fixed set of anchor sites each month and adjust scores against them, so a score means the same across months and model upgrades.
04Measurements
The browser takes these from the desktop page, except the phone checks and speed. Between the end points shown, a signal scores on a straight line from 0 to 100. If a signal can’t be measured on a page, for example because the page has too few paragraphs, we leave it out and re-weight the rest of its category.
| Signal | What is measured | Scoring |
|---|---|---|
| Typography families 25% · font sizes 35% · readability 40% | ||
| Font families | Families that set at least 3% of the text. One monospace face is free, and icon fonts are ignored. | 2 or fewer → 100; 3 → 65; 4 → 40; 5 or more → 20 |
| Font sizes | The fewest font sizes that cover 95% of the text, and pairs of near-duplicate sizes. | 5 sizes or fewer → 100; no near-duplicates → 100 |
| Line length | Characters per line in paragraphs of more than one line. | Share of text at 45–90 characters |
| Line spacing | Line height of body paragraphs relative to font size. | Share of text at 1.3–1.9 |
| Body size | The main paragraph font size. | 16 px or more → 100 |
| Colour contrast 55% · palette 30% · neutrals 15% | ||
| Contrast | WCAG 2 contrast of each piece of text against whatever is painted beneath it. | 98% of text passing AA → 100; 60% → 0 |
| Palette | Hue families among the non-grey colours of text, backgrounds and borders. | 2 or fewer → 100; 6 or more → 25 |
| Neutrals | Distinct greys, blacks and whites in use. | 6 or fewer → 100; 11 or more → 40 |
| Layout and spacing grid 60% · spacing values 40% | ||
| Spacing grid | Share of padding, margin and gap values that are multiples of 4 px. | 92% → 100; 50% → 0 |
| Spacing values | The fewest distinct spacing values that cover 90% of uses. | 10 or fewer → 100; 30 → 0 |
| Mobile overflow 30% · viewport 10% · small text 20% · tap targets 25% · body size 15% | ||
| Overflow | Whether the page scrolls sideways on a phone. | No → 100; yes → 0 |
| Viewport | A responsive viewport tag. | Present → 100 |
| Small text | Share of text under 12 px. | 2% → 100; 20% → 0 |
| Tap targets | Share of links and buttons at least 24 × 24 px, as in WCAG 2.5.8. | 95% → 100; 50% → 0 |
| Body size | The main paragraph font size on the phone. | 16 px or more → 100 |
| Performance largest paint 40% · layout shift 20% · weight 30% · requests 10% | ||
| Largest paint | Largest contentful paint on the cold desktop load. | 1.5 s → 100; 4.5 s → 0 |
| Layout shift | Cumulative layout shift, as in Core Web Vitals. | 0.05 → 100; 0.35 → 0 |
| Page weight | Bytes transferred on that load. | 1.5 MB → 100; 12 MB → 0 |
| Requests | Requests completed on that load. | 60 → 100; 300 → 0 |
For contrast, the browser hit-tests each line of text while it is in view, finds everything painted beneath it and composites down to the first opaque layer. The worst point counts. Text over photos, video or canvas can’t be measured reliably, so we leave it out and record the share of text measured. Decorative, hidden and screen-reader-only text doesn’t count.
05The score
Taste Score = 80% × the weighted categories + 20% × the judge’s overall score
Judge scores from 1 to 10 are multiplied by 10. Within each category, the measured and judged parts mix in the split below. If a site is missing one part, the other counts alone. A category with neither is left out and the other weights are re-normalised.
| Category | Weight | Measured | Judged |
|---|---|---|---|
| Typography | 20% | 40% | 60% |
| Colour | 12% | 40% | 60% |
| Layout and spacing | 20% | 25% | 75% |
| Imagery and polish average of imagery and polish | 15% | – | 100% |
| Distinctiveness | 13% | – | 100% |
| Mobile | 12% | 40% | 60% |
| Performance | 8% | 100% | – |
| Share of a full Taste Score | 24.5% | 75.5% |
The overall score is the judge’s answer to one question. Would a demanding design lead be proud to ship this page? It is not an average of the other scores.
Scores are shown as whole numbers. Ranks follow the score to one decimal. Equal scores share a rank, shown as 6=, and are listed by domain, A to Z.
06Rules
- Every homepage gets the same crawl, the same judge and the same weights. We do not change scores by hand.
- Any company can ask for a re-crawl or for removal.
- We do not name low scorers in our marketing.
- Badges are re-issued with each edition. If a homepage later scores under 80, its badge image turns into a neutral “Listed” mark at the same address, so embedded badges keep working.
07Known limits
- The browser can’t read text drawn inside images or canvas.
- Text that never scrolls into view is checked against its own backgrounds, which can differ from what is painted behind it. Gradients count as the average of their colour stops.
- Two close blues can count as two hue families, because the colour model we use spreads blues wider apart than the eye sees them.
- Text split into one element per line or per word, for animation, does not count as a paragraph. On those pages, line length and line spacing can go unmeasured.
- Speed comes from one cold desktop load per edition, from one location. Single loads vary. In our tests, loads minutes apart differed by up to 1 s of largest paint, and a first visit transferred up to twice the bytes. That can move the performance score by about 10 points and a Taste Score by less than 1. We plan to take the median of three loads.
- Animated sites are judged on still frames, captured with reduced motion. Scroll-driven sections can repeat, shift or get cut where screens are stitched together.
- We match pop-ups by pattern, so an unfamiliar one can stay in a screenshot.
- The crawler checks robots.txt at the start address and at the final address of each load. Redirect hops in between go unchecked.
- The judge is a model. It makes mistakes.
08Versions
Any change to a threshold or a definition gets a new version, so every score traces back to the method that produced it.
- Crawler
- c5
- Measured signals
- m2
- Judge rubric
- r2-085042ff a fingerprint of the judge’s full instructions and image preparation
- Edition
- Edition 01, crawled 4 October 2026