“It works on my screen.”
Reviewed at exactly one viewport width. Breaks at 375px, and at 837px, and at 200% zoom.
A skill for Claude Code · Open source
frontend-doctor turns Claude Code into a senior frontend engineer with a strict quality bar: it builds and reviews components, design, accessibility, responsive layout and performance — and every diagnosis comes with the exact cure.
Patient intake
AI writes frontend fast. But fast and healthy are different things — these are the classic symptoms of happy-path UI.
“It works on my screen.”
Reviewed at exactly one viewport width. Breaks at 375px, and at 837px, and at 200% zoom.
“We'll add the error state later.”
The demo only ever saw the happy path. First failed request in production renders a blank region.
“The outline looked ugly, so I removed it.”
outline: none — and now keyboard users are navigating blindfolded.
“Lighthouse says 61, but it feels fine.”
A 4-second LCP on the connection your users actually have. Feelings are not measurements.
The clinic · Interactive
This is how the skill reports: every finding has a severity and the exact fix. Press the button to apply the treatment and watch the patient recover.
<label for> above the field.
✓ Treated — label restored
<div onClick>: no focus, no Enter, no Space. Fix: a real <button> with a visible focus ring.
✓ Treated — native button
aria-describedby + aria-invalid.
✓ Treated — error announced
Five departments
Claude detects which department your request belongs to and loads only that reference — progressive disclosure keeps your context lean.
All five data states and every interaction state, enumerated before a line of code. Semantic HTML before ARIA.
references/component-patterns.mdScreenshots at 375 / 768 / 1440px, judged against hierarchy, spacing, type and color. Blocker → High → Polish.
references/design-review.mdWCAG 2.2 AA audit that starts where sites actually fail: the keyboard path. Every finding cites its criterion.
references/accessibility.mdRoot causes, not symptom patches: fluid-first fixes with clamp(), container queries and auto-fit grids.
references/responsive.mdCore Web Vitals triage — LCP, INP, CLS — with one hard rule: measure before and after, always.
references/performance.mdVitals monitor
The performance department never claims an improvement without a before and an after. These are the thresholds it treats as healthy.
Largest Contentful Paint — good under 2.5s on real connections.
Interaction to Next Paint — good under 200ms, every tap and keypress.
Cumulative Layout Shift — good under 0.1. Nothing jumps, ever.
Standing prescription
alt text; every input has a real label.prefers-reduced-motion respected — like this very page.— the Frontend Doctor
Book an appointment
npx skills add MikelMartinC/frontend-doctor
Works out of the box — Claude Code activates it whenever you ask for frontend work,
or invoke it directly with /frontend-doctor. For the full experience, pair it with the
Playwright MCP server so Claude
can render your UI, screenshot it at three widths and verify its own treatment.