Best for
- User asks to "make the layout perfect", "fix performance", "reach
- User wants an OG image or social share meta for a homepage.
- User reports contrast problems, missing SEO tags, broken anchors under a
bestdeejay-design/agent-skills/skills/frontend-perfection/SKILL.md
Audit and polish frontend (static HTML/CSS/JS or built SPA) to measurable perfection: real-Chrome Lighthouse >=13 runs (mobile+desktop, no Playwright internals), SEO meta layer, WCAG contrast by computed luminance, heading order, a11y checks (axe-core subset: img-alt/button-name/link-name/label/aria-valid/landmark-unique), back-to-top navigation check, design tokens (zero raw hex outside tokens), adaptive checks, and OG-image generation with a crop-safe layout. Front-End Checklist-inspired check
Decision brief
Audit and polish a frontend — static HTML/CSS/JS or a built SPA — towards verifiable perfection. The skill exists because production web perf tooling commonly breaks when it pokes at private APIs (Playwright internals, old Lighthouse signatures, unisolated global deps). This ski…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/bestdeejay-design/agent-skills --skill "skills/frontend-perfection"Inspect the Agent Skill "frontend-perfection" from https://github.com/bestdeejay-design/agent-skills/blob/cb4108bbfc3fedca92f9d1b9693a008660210cfa/skills/frontend-perfection/SKILL.md at commit cb4108bbfc3fedca92f9d1b9693a008660210cfa. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Locate the project — static files (index.html + css/) or built SPA. 2. Serve it locally if needed: python3 -m http.server 8377 (or the project's dev server). Static files are fine over http://localhost. 3. Run audit.js (Lighthouse, real Chrome):
User asks to "make the layout perfect", "fix performance", "reach
For Core Web Vitals / schema.org / SEO deep-dives — load seo-toolkit (this skill
Real Chrome via chrome-launcher (default channel = installed Chrome;
Review the “metaaudit.py — static audit (Python stdlib, offline)” section in the pinned source before continuing.
Permission review
The documentation includes network, browsing, or remote request actions.
node scripts/audit.js --url http://localhost:8377/ --mobile --out lh-mobile.jsonThe documentation asks the agent to run terminal commands or scripts.
node scripts/audit.js --url http://localhost:8377/ --mobile --out lh-mobile.jsonThe documentation includes network, browsing, or remote request actions.
node scripts/audit.js --url http://localhost:8377/ --desktop --out lh-desktop.jsonThe documentation asks the agent to run terminal commands or scripts.
node scripts/audit.js --url http://localhost:8377/ --desktop --out lh-desktop.jsonEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 91/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 5 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Audit and polish a frontend — static HTML/CSS/JS or a built SPA — towards verifiable perfection. The skill exists because production web perf tooling commonly breaks when it pokes at private APIs (Playwright internals, old Lighthouse signatures, unisolated global deps). This skill runs on STABLE apis only, computes exactly (luminance, not eyeballs), and demands a before/after report bound to audit ids.
seo-toolkit (this skill
measures layout, contrast, tokens and a11y; the SEO-layer breadth lives there).frontend-design-taste
(palette/type/signature), then run this skill to verify the result.python3 -m http.server 8377 (or the
project's dev server). Static files are fine over http://localhost.node scripts/audit.js --url http://localhost:8377/ --mobile --out lh-mobile.json
node scripts/audit.js --url http://localhost:8377/ --desktop --out lh-desktop.json
Default threshold is 100; exit 0 only when every measured category is
at or above it. Add --only <category> to iterate on one category.python3 scripts/meta_audit.py --html index.html --css main.css css/demo.css --out meta.json
Exit 0 = no violations; exit 1 = violations found.audit.js color-contrast, meta_audit.py meta:description).--no-headless to watch). No Playwright dependency, no private fields,
no _ws_url transport hacks. CDP port comes from chrome.port (public).require("lighthouse").default automatically.node_modules → NODE_PATH
→ npm root -g. The script explains how to install instead of dying with
Cannot find module:
npm i lighthouse chrome-launcher # in the script's dir
# or globally:
npm i -g lighthouse chrome-launcher && export NODE_PATH=$(npm root -g)
--out) with per-category scores and only the
failed weighted audits (id, title, score, weight) — no 4000-line dump.0 all categories ≥ threshold, 1 below threshold, 2 runner error.Checks and their ids:
| id | what it verifies |
|---|---|
meta:title / meta:title-length | title present, ≤ 60 chars |
meta:description / meta:description-length | description present, ≤ 160 chars |
meta:canonical | canonical link |
meta:og:*, meta:og:size | OG tags; image must declare 1200×630 (crop-safe) |
meta:twitter:card | twitter card tag |
meta:json-ld | any application/ld+json script |
meta:robots | not blocked with noindex/nofollow |
meta:sitemap-link | sitemap referenced |
headings:single-h1 | exactly one h1 |
headings:order | h1→h6 sequence, no level skips (h1→h3 is a violation) |
tokens:raw-hex | zero raw hex outside the token block (:root/tokens) |
contrast:wcag-aa | computed WCAG relative luminance, fg/bg pairs ≥ 4.5:1 |
adaptive:scroll-padding | fixed header ⇒ scroll-padding-top present |
adaptive:media-queries | responsive breakpoints exist for tablet widths |
a11y:img-alt | every <img> has an alt attribute (decorative may be empty) — WCAG 1.1.1 / axe image-alt |
a11y:button-name / a11y:link-name | buttons and links have an accessible name (text or aria-label) — WCAG 4.1.2 / axe button-name, link-name |
a11y:form-label | inputs/selects/textareas have a label (<label for>, wrapper, aria-label) — WCAG 4.1.2 / axe label |
a11y:aria-valid | every aria-* attribute name is in the WAI-ARIA 1.2 set — axe aria-valid-attr |
a11y:landmark-unique | at most one <main>; multiple <nav> need distinct labels — WCAG 1.3.1 / axe landmark-unique |
html:doctype | HTML5 doctype on the first line |
html:charset | charset declared as utf-8 |
html:viewport | responsive viewport meta present |
html:lang | <html lang> with a BCP 47 code (a11y + SEO) |
html:dir-rtl | RTL languages (ar/he/fa/ur/yi) require dir="rtl" |
html:unique-id | no duplicate id attributes |
html:semantic | semantic elements used: header, main, footer |
html:favicons | favicon link present |
html:web-app-manifest | manifest.json referenced (PWA) |
html:sri | CDN-hosted scripts carry integrity (SRI); local scripts exempt |
html:defer-async | external scripts load with defer/async/type=module (no render-blocking) |
html:input-types | inputs declare a type (not defaulting to text) |
images:dimensions | img has width/height (CLS prevention) |
images:lazy-loading | 3+ images lazy-load offscreen content |
images:srcset | responsive srcset used for fixed-size images |
images:modern-format | raster jpg/png converted to webp/avif |
js:no-inline | no inline handlers (onclick=…) or inline <script> blocks |
js:no-console | no console.log/debug/warn in HTML |
css:focus-visible | visible :focus-visible indicator for keyboard users |
css:print | @media print stylesheet exists |
css:dark-mode | prefers-color-scheme dark mode supported |
css:font-display | webfonts use font-display: swap (no FOIT) |
perf:resource-hints | preload/preconnect/dns-prefetch hints for critical origins (LCP) |
security:https | no http:// URLs in src/href |
security:noopener | target="_blank" links carry rel="noopener" |
privacy:consent | cookie/consent mention present (GDPR / 152-ФЗ) |
nav:back-to-top | long pages have a way back to top — logo links to top and/or a floating scroll-to-top button (bottom-right, aria-label, appears after scroll) — WCAG 2.4.1 / UX pattern |
For static projects WITHOUT a build system (plain HTML/CSS/JS), a minimal design system still applies:
:root { --color-*: ...; } layer or a dedicated tokens.css).var(--color-*).meta_audit.py flags any raw hex outside the token block; this is the
enforceable version of "no hardcoded colors".Social networks crop images differently (WhatsApp square-ish, Facebook center-crop). The skill's rules, learned the hard way:
og-2026-08-09.png).screenshot() may capture the stale layout. Read
void element.offsetHeight (or getBoundingClientRect()) to force
layout sync, then shoot.og:image:width/og:image:height =
1200/630 so scrapers don't guess and mis-trim.If position: fixed header exists, anchor jumps hide content underneath.
Fix: html { scroll-padding-top: <header-height> } (+ scroll-margin-top on
the anchors if needed). meta_audit.py reports adaptive:scroll-padding
when this is missing.
lighthouse
headless-shell in the default call.!important spray or target 100 by hiding audits: raise
the underlying metrics (real fix at the root).--out
files you name.localhost vs production differ (no CDN, no real
TLS); state this in the report when it matters.Full loop on a static site:
cd ~/projects/lovii_demo
python3 -m http.server 8377 &
node .../audit.js --url http://localhost:8377/ --mobile --out lh-mobile.json
node .../audit.js --url http://localhost:8377/ --desktop --out lh-desktop.json
python3 .../meta_audit.py --html index.html --css main.css css/demo.css --out meta.json
Iterate on one category until green:
node .../audit.js --url http://localhost:8377/ --mobile --only accessibility
See references/canonical-patterns.md for the canonical sources this skill
is aligned with, and the showcase in docs/showcase/showcase-frontend-perfection-lovii.md.
Frequently asked questions
Audit and polish a frontend — static HTML/CSS/JS or a built SPA — towards verifiable perfection. The skill exists because production web perf tooling commonly breaks when it pokes at private APIs (Playwright internals, old Lighthouse signatures, unisolated global deps). This ski…
The source record exposes this install command: npx skills add https://github.com/bestdeejay-design/agent-skills --skill "skills/frontend-perfection". Inspect the command and pinned source before running it.
Static rules flagged network, exec-script in the source; the page lists the matching lines and excerpts.
Alternatives
rampstackco/claude-skills
Run QA testing on a page, feature, or full site at one of three depth tiers (smoke, standard, full). Use this skill whenever the user asks to QA a page or site, run a smoke test after a deploy, verify a page before launch, or run a regression sweep. Triggers on QA, QA sweep, smoke test, regression test, post-deploy check, pre-launch check, verify the deploy, test this page, does the page render, broken link, 404, image not loading. Also triggers proactively after a deploy or a new page launch wh
PramodDutta/qaskills
Comprehensive website auditing skill using Lighthouse, PageSpeed Insights, and web performance APIs to audit performance, accessibility, SEO, best practices, and security.
JasonColapietro/suede-creator-skills
Suede Labs AI umbrella router for the public Suede pack: selects the right specialist across copy, design, code review and grading, SEO and visibility, launch packaging, MCP QA, iOS and Android shipping, growth, and creator rights work. Use when a request crosses two or more Suede lanes, when the user wants the full public skill pack loaded from one installable path, when they ask which Suede skill fits a task, or when only this umbrella skill is installed. NOT FOR: a request that names one lane
novoads/agent-skills
Generate high-CTR YouTube thumbnails using Nano Banana Pro via the Novoads API. Handles reference image upload, character likeness alignment, proven CTR-tested prompt formulas, and bounded batch generation. Use when the user asks to create a YouTube thumbnail, video thumbnail, A/B test thumbnail variations, or refers to thumbnail design with their face, brand assets, or product photos.