# Performance and accessibility checklist

Free checklist from Plain Talk Developers · plaintalk.dev/skills/

The checks that actually move a score on a marketing site, and the ones an
automated audit will never catch.

---

# Performance

## Know what actually scores

Most of a Lighthouse report is **unscored diagnostics**. "Reduce unused
JavaScript", "avoid enormous network payloads", "legacy JavaScript": none of
those are in the score. Fixing them is time you do not get back.

What scores on mobile is largely **LCP**, plus CLS and TBT.

- [ ] Read the **LCP breakdown** before touching anything. It tells you
      whether the delay is TTFB, load delay, load time, or render delay.
      Never optimize LCP generically. Find the phase first.

## The biggest levers, in order

- [ ] **Nothing in the first screen imports an animation library.** This is
      the single largest lever on a marketing site. Defer it past load, or do
      not use one.
- [ ] **Preload the LCP image.** If the hero image is the LCP element, the
      browser should not discover it late.
- [ ] **Background video is probably your largest asset.** Check it early. On
      one build the hero video was 76% of total page weight, larger than
      every script combined.
- [ ] **Every video has a poster.** It is the frame most people will see,
      because most will never press play. Choose it deliberately.
- [ ] Responsive images with real `sizes`. `100vw` is usually a lie on
      desktop.
- [ ] Modern formats. A 265KB PNG is usually a 60KB WebP.
- [ ] Explicit `width` and `height` on images, so nothing shifts as they
      load. Add `height: auto` in CSS or they will not scale.

## Measurement discipline

- [ ] Measure on **mobile, throttled**, not on your laptop on fiber.
- [ ] Measure the **deployed** site, not the dev server.
- [ ] Record the number with the date. A score with no date is a rumor.
- [ ] Re-measure after every change, one change at a time.

## Do not bother with

- [ ] Chasing unscored diagnostics while LCP is still slow.
- [ ] Micro-optimizing JavaScript on a page whose hero is a 2MB video.
- [ ] A perfect desktop score. Nobody visits a local business site on
      desktop first.

---

# Accessibility

These are the failures that actually appear on marketing sites, not the whole
WCAG surface.

## The four that come up every time

- [ ] **Hidden things that are still focusable.** A closed mobile menu whose
      links are still in the tab order. Hiding with opacity or transform does
      not remove them. Use `display:none`, the `hidden` attribute, or
      `inert`.
- [ ] **`aria-label` on the wrong element.** It belongs on the interactive
      element, the button or link, not on a wrapping `div`.
- [ ] **Icon-only buttons that only look labelled.** A visual icon is not a
      name. Every icon-only control needs an accessible name.
- [ ] **Contrast on muted text.** Muted gray at a small size is the most
      common real failure. White at 45% opacity on pure black computes to
      about 4.43:1, which is under the 4.5:1 threshold, and it will fail.

## Also check

- [ ] Touch targets at least 44 by 44 CSS pixels, including in the footer and
      nav.
- [ ] Visible focus state on every interactive element. Removing the outline
      without replacing it fails.
- [ ] One `h1`, and headings that descend in order without skipping.
- [ ] Every meaningful image has alt text; decorative images have `alt=""`.
- [ ] Form inputs have real labels, not just placeholders.
- [ ] Run the audit at **both** viewports. Mobile and desktop fail
      differently, because different elements are in the DOM.

## What the automated score cannot tell you

A perfect score is the floor, not the finish line. No tool will catch:

- [ ] Alt text that describes the file rather than the content.
- [ ] A tab order that jumps around the page.
- [ ] A carousel or accordion a keyboard user cannot operate.
- [ ] Motion that triggers regardless of `prefers-reduced-motion`.
- [ ] Color used as the only way to convey meaning.

Tab through the whole page yourself, once, before launch. It takes two
minutes and catches what the audit cannot.

---

**Want the reasoning?** The Performance skill covers reading the LCP
breakdown and the critical path in depth, and the Accessibility skill covers
each failure with the fix and the arithmetic.

plaintalk.dev/skills/
