Skip to content
Agentmart
Submit a tool

frontend-qa

Drives a local web app in a headless browser to find and fix functional failures and visual defects, then proves each fix with a re-run.

Skill by 0xdewy

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/0xdewy-frontend-qa

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Drives a local web app in a headless browser to find and fix functional failures and visual defects, then proves each fix with a re-run. Only use when explicitly requested.

Use cases: frontend, testing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Node.js package

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/frontend-qa

What's inside

Skill name
frontend-qa
Description
Drives a local web app in a headless browser to find and fix functional failures and visual defects, then proves each fix with a re-run. Only use when explicitly requested.
License
MIT
Instructions
68 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts

Files (5)

  • SKILL.md
  • evals.json · evals/
  • attacks.md · references/
  • visual-checklist.md · references/
  • browse.mjs · scripts/

SKILL.md (first lines)

# Frontend QA

Exercise a running local web app in headless Chromium, find what breaks or
looks wrong, fix it in scope, and prove the fix by re-running. Evidence is a
screenshot path, a recorded event, or a computed value; nothing else counts.

Load `../common/patterns/execution-contract.md` for `WORKSPACE` and the
completion line. Everything runs through `scripts/browse.mjs` with Node. It
uses the project's Playwright when installed, else the global `playwright`
package. If neither exists, ask before running
`npm i -g playwright && playwright install chromium`. Never add Playwright to
the project's own dependencies.

## Scope

- Named routes or flows: test only those. Otherwise the routes linked from the
  start page and the flows visible on them.
- "test", "QA", "bugs", "broken": functional lens. "design", "layout",
  "looks", "polish": visual lens. Unqualified: both.
- State scope, lens, and app URL in one line before starting.

## Workflow

1. **App.** Use a server that is already running. Otherwise start the dev
   script from `package.json` with the lockfile's package manager, in the
   background, and record command, URL, and PID.
2. **Sweep.** `node scripts/browse.mjs audit <url> --out <WORKSPACE>/audit
   [--routes /a /b]`. Per route and viewport it saves a screenshot and records
   console and page errors, failed and 4xx+ requests, horizontal overflow,
   broken images, small touch targets (mobile), and design tokens (desktop).
   Read the printed summary, then `audit.json` for the routes with problems.
3. **Flows** (functional lens). One file per flow under `<WORKSPACE>/flows/`,
   run with `node scripts/browse.mjs run <flow>.mjs --base <url> --out
   <WORKSPACE>/flows [--viewport mobile]`. Use `getByRole` and `getByLabel`
   locators, assert the outcome a user would see, then `t.snap`. Pick attacks
   for each form and action from `references/attacks.md`.

   ```js
   export default async (page, t) => {
     await page.goto(t.base + '/checkout');
     await page.getByLabel('Email').fill('qa@example.com');
     await page.getByRole('button', { name: 'Continue' }).click();
     await page.waitForURL('**/payment');
     await t.snap('payment-step');
   };
   ```

   A thrown error or a page error fails the flow, saves a `-failed`
   screenshot, and exits 1. Console errors and failed requests are recorded
   in the flow's JSON for you to judge.
4. **Judge** (visual lens). Read the screenshots and tokens against
   `references/visual-checklist.md`. A finding names the element, the
   screenshot or value, and the rule it breaks.
5. **Fix.** Smallest change in the app's own conventions and design system.
   No redesign, new dependency, or unrelated cleanup unless asked. Re-run the
   failing flow or re-sweep the route; a fix without a green re-run is not a
   fix. When asked for a report only, edit no source.
6. **Report** `<WORKSPACE>/report.md`: still failing first, each with
   evidence; then fixed and re-verified; then tested and passing; then out of
   reach (external services, auth, missing data). Generated flows stay in
   `WORKSPACE` unless the user wants them in the project.
7. Stop any server you started.

```text
DONE: <WORKSPACE>/report.md — <passed>/<total> flows passing, <N> fixed, <M> open
```

From 0xdewy/skills, MIT.

More from 0xdewy/skills

Signals

Stars
0
Forks
0
Open issues
2
Last commit (this folder)
Oct 11, 2026 (17 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from 0xdewy

Cite this page

frontend-qa skill. Agent Mart. https://agentmart.dev/skills/0xdewy-frontend-qa (last updated 2026-10-24)