We Scanned 20 Startup Landing Pages for Accessibility — Here's What Broke
We ran AppVet's accessibility scan on 20 popular developer tool sites. 65% scored F. Average score: 54/100. Zero sites scored A or B.
What we tested
We ran AppVet's WCAG 2.1/2.2 Automated Compliance profile against the landing page of each site. This profile runs 12 checks using three tools: axe-core, pa11y, and Lighthouse. Every check maps to a specific WCAG success criterion.
The scan covers contrast ratios, alt text, heading structure, ARIA usage, form labels, link names, focus management, and reflow behavior. It does not cover manual-only criteria like cognitive load or screen reader flow, so these scores represent a floor, not a ceiling.
All scans were run in March 2026 against the publicly accessible landing page of each site. No authentication was used. Scores reflect the state of each site at scan time.
The results
Seven sites scored B- or above. Four landed in the D range. Nine scored F. No site scored A. The median score was 50, and the average was 54. The worst performer had 198 individual findings.
| Site | Score | Grade | Findings | Top Issue |
|---|---|---|---|---|
| turso.tech | 79 | B+ | 13 | Image alt text improvements |
| drizzle.team | 78 | B+ | 8 | Heading hierarchy gaps |
| mintlify.com | 77 | B+ | 16 | Transparency contrast warnings |
| neon.tech | 77 | B+ | 19 | Contrast on dark backgrounds |
| clerk.dev | 74 | B | 67 | Transparency and contrast ratios |
| fly.io | 73 | B | 27 | Link names and contrast |
| bolt.new | 70 | B- | 7 | Multiple unique issue types despite few instances |
| val.town | 57 | D+ | 15 | Fixed position scrolling, multiple ARIA issues |
| cal.com | 56 | D | 130 | Insufficient contrast, missing alt text |
| resend.com | 53 | D | 87 | Contrast and alt text across many elements |
| inngest.com | 51 | D- | 20 | Color contrast, form labels, ARIA |
| upstash.com | 48 | F | 56 | Contrast, image descriptions, heading structure |
| unkey.dev | 47 | F | 48 | Contrast, ARIA, heading hierarchy |
| v0.dev | 45 | F | 149 | Transparency contrast across many elements |
| convex.dev | 43 | F | 73 | Heading structure, contrast, duplicate IDs |
| plain.com | 41 | F | 91 | Form labels, contrast, heading structure |
| trigger.dev | 38 | F | 33 | Contrast, missing labels, many issue types |
| loops.so | 28 | F | 88 | Alt text, contrast, heading structure, ARIA |
| dub.co | 24 | F | 77 | Missing alt text, contrast, many violation types |
| linear.app | 15 | F | 198 | Contrast, alt text, ARIA across complex UI |
The 5 most common issues
Across all 20 sites, the same five issues appeared over and over. None of them are hard to fix.
1. Insufficient color contrast
WCAG 1.4.3 (Level AA) · Found on 19 of 20 sites
Text that doesn't meet the 4.5:1 contrast ratio against its background. The most common offender: light gray text on a slightly lighter gray background, or colored text on dark hero sections with transparency.
/* Before — fails contrast */
.subtitle { color: #888; background: #1a1a2e; }
/* After — passes 4.5:1 */
.subtitle { color: #a3a3c2; background: #1a1a2e; } 2. Missing or empty alt text
WCAG 1.1.1 (Level A) · Found on 14 of 20 sites
Images without alt attributes, or with empty alt on images that convey meaning. Decorative images should use alt="", but product screenshots and logos need descriptive text.
<!-- Before — no alt text -->
<img src="/hero-screenshot.png" />
<!-- After — descriptive alt -->
<img src="/hero-screenshot.png"
alt="Dashboard showing real-time API latency metrics" /> 3. Links and buttons without accessible names
WCAG 4.1.2 (Level A) · Found on 10 of 20 sites
Icon-only buttons and links that rely on visual context. Screen readers announce these as "button" or "link" with no indication of what they do. Social media icon links are a frequent offender.
<!-- Before — no accessible name -->
<a href="https://twitter.com/acme">
<svg>...</svg>
</a>
<!-- After — aria-label provides name -->
<a href="https://twitter.com/acme" aria-label="Acme on Twitter">
<svg aria-hidden="true">...</svg>
</a> 4. Broken heading hierarchy
WCAG 1.3.1 (Level A) · Found on 8 of 20 sites
Pages that skip heading levels (h1 to h3, or h2 to h5) or use multiple h1 tags. Screen reader users navigate by headings, so gaps in the hierarchy make the page structure unpredictable.
<!-- Before — skips h2 -->
<h1>Deploy anywhere</h1>
<h3>Edge functions</h3>
<!-- After — sequential hierarchy -->
<h1>Deploy anywhere</h1>
<h2>Edge functions</h2> 5. Fixed positioning without reflow
WCAG 1.4.10 (Level AA) · Found on 12 of 20 sites
Fixed-position elements (sticky navs, floating CTAs) that don't reflow at 320px viewport width. Users who zoom to 400% lose content behind these overlays. The fix is usually making the element static or scrollable at small widths.
/* Before — fixed at all sizes */
.nav { position: fixed; width: 100%; }
/* After — scrolls naturally on small viewports */
@media (max-width: 320px) {
.nav { position: static; }
} The pattern
The sites that scored highest didn't necessarily have fewer total findings. They had fewer types of issues. Turso had 13 findings, but they were almost all the same category (alt text). Linear had 198 findings across every category we check.
A site with one recurring issue is easy to fix: update one component or one CSS variable and the whole site improves. A site with many distinct issue types has systemic problems. No single fix moves the needle.
The scoring formula reflects this. Issue diversity is penalized more heavily than issue count, because diversity signals that accessibility was never part of the development workflow.
Fix everything in 10 minutes
Most of the issues above take minutes to fix once you know where they are. The hard part is finding them. AppVet's accessibility scan runs the same 12-check WCAG profile we used for this study, and generates a prioritized fix list with code suggestions for every finding.
Paste your URL, hit scan, and get a report you can hand to any developer. No signup required for your first scan.
Check your own site
Paste a URL, get a security, performance, accessibility, and SEO report — 84 checks, one click, under a minute. Free, no signup.
Run Audit →