Not in the top 1,000 by GitHub stars

EthanY33/atelier

Claude Code plugin, listed in awesome-claude-code. One brand.json drives tokens, social cards, icons, images, video and two audits across 8 skills. Also a CLI and a GitHub Action.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

plugins/atelier/skills/accessibility-design-audit/SKILL.md

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 848320d77ae1

No earlier version was observed for comparison.

Compare on GitHub

plugins/atelier/skills/brand-asset-pipeline/SKILL.md

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 848320d77ae1

No earlier version was observed for comparison.

Compare on GitHub

plugins/atelier/skills/brand-memory/SKILL.md

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 848320d77ae1

No earlier version was observed for comparison.

Compare on GitHub

plugins/atelier/skills/design-token-sync/SKILL.md

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 848320d77ae1

No earlier version was observed for comparison.

Compare on GitHub

plugins/atelier/skills/html-to-video/SKILL.md

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 848320d77ae1

No earlier version was observed for comparison.

Compare on GitHub

plugins/atelier/skills/og-card-generator/SKILL.md

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 848320d77ae1

No earlier version was observed for comparison.

Compare on GitHub

plugins/atelier/skills/responsive-image-pipeline/SKILL.md

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 848320d77ae1

No earlier version was observed for comparison.

Compare on GitHub

plugins/atelier/skills/runtime-ux-audit/SKILL.md

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 848320d77ae1

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 848320d77ae1d2218a80d1b97be5804191651e82

git clone --filter=blob:none --no-checkout https://github.com/EthanY33/atelier.git .hotskills/ethany33-atelier && git -C .hotskills/ethany33-atelier checkout --detach 848320d77ae1d2218a80d1b97be5804191651e82 # Copy each selected skill directory from .hotskills/ethany33-atelier into .claude/skills/<skill-name>/
9GitHub stars
2stars in 7 days
8skills in this repository
4commits in 30 days

Heat

5.0
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Nov 6, 20269

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

accessibility-design-audit

When your agent uses it

WCAG 2.1 A and AA accessibility audit of a URL or local HTML file with axe-core in headless Chromium. Writes a markdown report grouped by impact plus raw JSON and exits 1 on critical or serious violations, so it doubles as a CI gate. Use after design changes (colors, contrast, typography, forms, modals), before shipping a page, or when asked to check a11y, WCAG, ADA or Section 508.

What it loads into context

Frontmatter

102 tokens

Always available to the agent

SKILL.md

1,199 tokens

When the skill is activated

Reference documents

0 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Run
  2. Options
  3. Output
  4. Exit codes
  5. Notes

Scripts executed separately

  • ../../bin/atelier
  • ../../bin/atelier
  • ../../lib/doctor.mjs
  • ../../lib/preflight.mjs
  • ../../scripts/run-demo.mjs
  • index.mjs

Files

  • ../../../../.claude-plugin/marketplace.jsonasset885 bytes
  • ../../.claude-plugin/plugin.jsonasset632 bytes
  • ../../bin/atelierruns4,934 bytes
  • ../../bin/atelierruns4,934 bytes
  • ../../lib/doctor.mjsruns5,389 bytes
  • ../../lib/preflight.mjsruns11,525 bytes
  • ../../scripts/run-demo.mjsruns7,983 bytes
  • SKILL.mdcore4,525 bytes
  • SKILL.mdcore4,525 bytes
  • SKILL.mdcore4,525 bytes
  • SKILL.mdcore4,525 bytes
  • index.mjsruns20,677 bytes
Read SKILL.md

## Run

```bash
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y https://staging.example.com
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y dist/index.html --out a11y-report
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y http://localhost:3000 --wait-for "#app main" --tags wcag2a,wcag2aa,wcag21a,wcag21aa,wcag22aa
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y --help
```

JS API, for scripts that need the violation objects. The module path is passed as an argument and turned into a file URL, so the same line works on Windows, macOS and Linux:

```bash
node --input-type=module -e "const { pathToFileURL } = await import('node:url'); const m = await import(pathToFileURL(process.argv[1]).href); const { violations, reportPath } = await m.auditPage({ url: 'dist/index.html', outDir: 'a11y-report' }); console.log(violations.critical.length, violations.serious.length, reportPath);" "${CLAUDE_SKILL_DIR}/index.mjs"
```
View the complete source on GitHub

Skills included

  • accessibility-design-audit
  • brand-asset-pipeline
  • brand-memory
  • design-token-sync
  • html-to-video
  • og-card-generator
  • responsive-image-pipeline
  • runtime-ux-audit

Repository facts

License
MIT
Created
Apr 15, 2026
Last pushed
Oct 14, 2026
Forks
1
Open issues
1
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 4, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 32 notes
  • plugins/atelier/bin/atelier:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/accessibility-design-audit/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/accessibility-design-audit/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/accessibility-design-audit/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/bin/atelier:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/brand-asset-pipeline/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/brand-asset-pipeline/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/bin/atelier:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/brand-memory/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/brand-memory/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/bin/atelier:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/design-token-sync/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/design-token-sync/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/bin/atelier:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/html-to-video/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/html-to-video/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/html-to-video/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/html-to-video/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/bin/atelier:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugins/atelier/skills/og-card-generator/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 336 signals by file

.claude-plugin/marketplace.json

  • Network accessline 3
    "owner": {     "name": "Ethan Yucetepe",     "url": "https://github.com/EthanY33"
  • Network accessline 4
    "name": "Ethan Yucetepe",     "url": "https://github.com/EthanY33"   },
  • Network accessline 5
    "url": "https://github.com/EthanY33"
  • Network accessline 15
    "author": {         "name": "Ethan Yucetepe",         "url": "https://github.com/EthanY33"
  • Network accessline 16
    "name": "Ethan Yucetepe",         "url": "https://github.com/EthanY33"       },
  • Network accessline 17
    "url": "https://github.com/EthanY33"
  • Network accessline 18
    },       "homepage": "https://github.com/EthanY33/atelier",       "repository": "https://github.com/EthanY33/atelier",
  • Network accessline 19
    "homepage": "https://github.com/EthanY33/atelier",
  • Network accessline 20
    "repository": "https://github.com/EthanY33/atelier",

plugins/atelier/.claude-plugin/plugin.json

  • Network accessline 5
    "author": {     "name": "Ethan Yucetepe",     "url": "https://github.com/EthanY33"
  • Network accessline 6
    "name": "Ethan Yucetepe",     "url": "https://github.com/EthanY33"   },
  • Network accessline 7
    "url": "https://github.com/EthanY33"
  • Network accessline 8
    },   "homepage": "https://github.com/EthanY33/atelier",   "repository": "https://github.com/EthanY33/atelier",
  • Network accessline 9
    "homepage": "https://github.com/EthanY33/atelier",
  • Network accessline 10
    "repository": "https://github.com/EthanY33/atelier",

plugins/atelier/bin/atelier

  • Executable scriptline 1
    #!/usr/bin/env node
  • Executable scriptline 1
    Executable file; content unavailable
  • Executable scriptline 1
    #!/usr/bin/env node
  • Executable scriptline 1
    Executable file; content unavailable
  • Executable scriptline 1
    #!/usr/bin/env node
  • Executable scriptline 1
    Executable file; content unavailable
  • Executable scriptline 1
    #!/usr/bin/env node
  • Executable scriptline 1
    Executable file; content unavailable
  • Executable scriptline 1
    #!/usr/bin/env node
  • Executable scriptline 1
    Executable file; content unavailable
  • Executable scriptline 1
    #!/usr/bin/env node
  • Executable scriptline 1
    Executable file; content unavailable
  • Executable scriptline 1
    #!/usr/bin/env node
  • Executable scriptline 1
    Executable file; content unavailable
  • Executable scriptline 1
    #!/usr/bin/env node
  • Executable scriptline 1
    Executable file; content unavailable
  • Network accessline 42
    Docs: https://github.com/EthanY33/atelier`;
  • Network accessline 42
    Docs: https://github.com/EthanY33/atelier`;
  • Network accessline 42
    Docs: https://github.com/EthanY33/atelier`;
  • Network accessline 42
    Docs: https://github.com/EthanY33/atelier`;
  • Network accessline 42
    Docs: https://github.com/EthanY33/atelier`;
  • Network accessline 42
    Docs: https://github.com/EthanY33/atelier`;
  • Network accessline 42
    Docs: https://github.com/EthanY33/atelier`;
  • Network accessline 42
    Docs: https://github.com/EthanY33/atelier`;

plugins/atelier/lib/doctor.mjs

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Network accessline 48
    checks.push(major >= MIN_NODE_MAJOR     ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` }     : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js
  • Network accessline 48
    checks.push(major >= MIN_NODE_MAJOR     ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` }     : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js
  • Network accessline 48
    checks.push(major >= MIN_NODE_MAJOR     ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` }     : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js
  • Network accessline 48
    checks.push(major >= MIN_NODE_MAJOR     ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` }     : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js
  • Network accessline 48
    checks.push(major >= MIN_NODE_MAJOR     ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` }     : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js
  • Network accessline 48
    checks.push(major >= MIN_NODE_MAJOR     ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` }     : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js
  • Network accessline 48
    checks.push(major >= MIN_NODE_MAJOR     ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` }     : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js
  • Network accessline 48
    checks.push(major >= MIN_NODE_MAJOR     ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` }     : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js
  • Network accessline 50
    : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' });
  • Network accessline 50
    : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' });
  • Network accessline 50
    : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' });
  • Network accessline 50
    : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' });
  • Network accessline 50
    : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' });
  • Network accessline 50
    : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' });
  • Network accessline 50
    : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' });
  • Network accessline 50
    : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' });

plugins/atelier/lib/preflight.mjs

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Dangerous shell operationline 237
    fix: `sudo ${npxPlaywright()} install-deps chromium`,
  • Dangerous shell operationline 237
    fix: `sudo ${npxPlaywright()} install-deps chromium`,
  • Dangerous shell operationline 237
    fix: `sudo ${npxPlaywright()} install-deps chromium`,
  • Dangerous shell operationline 237
    fix: `sudo ${npxPlaywright()} install-deps chromium`,
  • Dangerous shell operationline 237
    fix: `sudo ${npxPlaywright()} install-deps chromium`,
  • Dangerous shell operationline 237
    fix: `sudo ${npxPlaywright()} install-deps chromium`,
  • Dangerous shell operationline 237
    fix: `sudo ${npxPlaywright()} install-deps chromium`,
  • Dangerous shell operationline 237
    fix: `sudo ${npxPlaywright()} install-deps chromium`,
  • Dangerous shell operationline 258
    return 'sudo apt install ffmpeg  (or your distro\'s package manager)';
  • Dangerous shell operationline 258
    return 'sudo apt install ffmpeg  (or your distro\'s package manager)';
  • Dangerous shell operationline 258
    return 'sudo apt install ffmpeg  (or your distro\'s package manager)';
  • Dangerous shell operationline 258
    return 'sudo apt install ffmpeg  (or your distro\'s package manager)';
  • Dangerous shell operationline 258
    return 'sudo apt install ffmpeg  (or your distro\'s package manager)';
  • Dangerous shell operationline 258
    return 'sudo apt install ffmpeg  (or your distro\'s package manager)';
  • Dangerous shell operationline 258
    return 'sudo apt install ffmpeg  (or your distro\'s package manager)';
  • Dangerous shell operationline 258
    return 'sudo apt install ffmpeg  (or your distro\'s package manager)';

plugins/atelier/schemas/brand.schema.json

  • Network accessline 1
    {   "$schema": "https://json-schema.org/draft/2020-12/schema",
  • Network accessline 2
    "$schema": "https://json-schema.org/draft/2020-12/schema",
  • Network accessline 3
    "$id": "https://raw.githubusercontent.com/EthanY33/atelier/main/plugins/atelier/schemas/brand.schema.json",

plugins/atelier/scripts/run-demo.mjs

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

plugins/atelier/skills/accessibility-design-audit/SKILL.md

  • Network accessline 9
    node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y https://staging.example.com
  • Network accessline 10
    node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y dist/index.html --out a11y-report node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y http://localhost:3000 --wait-for "#app main" --tags wcag2a,wcag2aa,wcag21a,wcag21aa,wcag22aa node "${CLAUDE_PLUGIN
  • Network accessline 11
    node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y http://localhost:3000 --wait-for "#app main" --tags wcag2a,wcag2aa,wcag21a,wcag21aa,wcag22aa
  • Network accessline 25
    - `<url|file>` / `url`: http(s), file or data URL, or a path to an HTML file (relative or absolute). A bare `example.com` is not guessed: pass `https://example.com`.

plugins/atelier/skills/accessibility-design-audit/index.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 68
    }   const looksLikeHost = /^[\w-]+(\.[\w-]+)+(:\d+)?(\/.*)?$/.test(input) && !/\.html?$/i.test(input);   const hint = looksLikeHost ? `. For a website, pass a full URL such as https://${input}` : '';
  • Network accessline 69
    const looksLikeHost = /^[\w-]+(\.[\w-]+)+(:\d+)?(\/.*)?$/.test(input) && !/\.html?$/i.test(input);   const hint = looksLikeHost ? `. For a website, pass a full URL such as https://${input}` : '';   throw new AuditError(`no such file: ${abs}
  • Network accessline 70
    const hint = looksLikeHost ? `. For a website, pass a full URL such as https://${input}` : '';

plugins/atelier/skills/brand-asset-pipeline/SKILL.md

  • Network accessline 67
    <link rel="icon" type="image/png" sizes="192x192" href="/brand/android-chrome-192.png"> <link rel="icon" type="image/png" sizes="512x512" href="/brand/android-chrome-512.png"> <meta property="og:image" content="https://example.com/brand/og-
  • Network accessline 68
    <link rel="icon" type="image/png" sizes="512x512" href="/brand/android-chrome-512.png"> <meta property="og:image" content="https://example.com/brand/og-cover.png"> <meta property="og:image:width" content="1200">
  • Network accessline 69
    <meta property="og:image" content="https://example.com/brand/og-cover.png">
  • Network accessline 71
    <meta property="og:image:height" content="630"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:image" content="https://example.com/brand/og-cover.png">
  • Network accessline 73
    <meta name="twitter:image" content="https://example.com/brand/og-cover.png">

plugins/atelier/skills/brand-asset-pipeline/index.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/brand-memory/index.mjs

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Network accessline 25
    export const BRAND_SCHEMA_URL =   'https://raw.githubusercontent.com/EthanY33/atelier/main/plugins/atelier/schemas/brand.schema.json';
  • Network accessline 25
    export const BRAND_SCHEMA_URL =   'https://raw.githubusercontent.com/EthanY33/atelier/main/plugins/atelier/schemas/brand.schema.json';
  • Network accessline 26
    'https://raw.githubusercontent.com/EthanY33/atelier/main/plugins/atelier/schemas/brand.schema.json';
  • Network accessline 26
    'https://raw.githubusercontent.com/EthanY33/atelier/main/plugins/atelier/schemas/brand.schema.json';

plugins/atelier/skills/design-token-sync/SKILL.md

  • Network accessline 57
    - Fonts are emitted as CSS font-family lists. `Silkscreen, 'Courier New', monospace` becomes `"Silkscreen", "Courier New", monospace`: family names are quoted and escaped, generic families (serif, sans-serif, monospace, system-ui, ui-monosp
  • Network accessline 58
    - Any palette key brand.json allows works (`brand-500`, `default`); object keys are quoted where needed. Named exports in tokens.js use safe identifiers: other keys are camelCased (`brand-500` -> `brand500`, `brand-primary` -> `brandPrimary
  • Network accessline 59
    [Credential-related source omitted]
  • Access to secretsline 59
    [Credential-related source omitted]

plugins/atelier/skills/design-token-sync/emitters/css.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/design-token-sync/emitters/dts.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/design-token-sync/emitters/figma.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/design-token-sync/emitters/js.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/design-token-sync/emitters/shared.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/design-token-sync/emitters/tailwind.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/design-token-sync/index.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/html-to-video/SKILL.md

  • Network accessline 11
    node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" video http://localhost:5173/trailer.html dist/trailer.mp4 10 --width 1920 --height 1080
  • Network accessline 39
    API name first, then the CLI form. - `url` (1st argument): http(s), `file://` or `data:` URL, or a path to a local HTML file (relative to the working directory). `localhost:5173/x` without a scheme is rejected; write `http://localhost:5173/
  • Network accessline 40
    - `url` (1st argument): http(s), `file://` or `data:` URL, or a path to a local HTML file (relative to the working directory). `localhost:5173/x` without a scheme is rejected; write `http://localhost:5173/x`.

plugins/atelier/skills/html-to-video/index.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 82
    }   if (/^[^/\\:]+:\d+(\/|$)/.test(input)) {     throw new TypeError(`"${input}" has no scheme; did you mean http://${input} ?`);
  • Network accessline 83
    if (/^[^/\\:]+:\d+(\/|$)/.test(input)) {     throw new TypeError(`"${input}" has no scheme; did you mean http://${input} ?`);   }
  • Network accessline 84
    throw new TypeError(`"${input}" has no scheme; did you mean http://${input} ?`);

plugins/atelier/skills/og-card-generator/SKILL.md

  • Network accessline 81
    <meta property="og:image" content="https://example.com/og/home.png" />
  • Network accessline 83
    <meta property="og:image:height" content="630" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:image" content="https://example.com/og/home.png" />
  • Network accessline 85
    <meta name="twitter:image" content="https://example.com/og/home.png" />

plugins/atelier/skills/og-card-generator/index.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/responsive-image-pipeline/index.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/SKILL.md

  • Network accessline 11
    node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" ux dist/index.html node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" ux https://staging.example.com --dynamic --out ux-report
  • Network accessline 12
    node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" ux https://staging.example.com --dynamic --out ux-report

plugins/atelier/skills/runtime-ux-audit/dynamic/browser/observers.js

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/dynamic/browser/sweep.js

  • Executable scriptline 1
    Executable file
  • Network accessline 31
    const HTML_NS = 'http://www.w3.org/1999/xhtml';

plugins/atelier/skills/runtime-ux-audit/dynamic/index.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/dynamic/inp.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/dynamic/probes.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/dynamic/serve.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 4
    * Chromium only puts http(s) pages in the back/forward cache, and module  * scripts and same-origin fetches behave like production only over http, so  * a local file is served from http://127.0.0.1:<port>/ rooted at the audit
  • Network accessline 5
    * scripts and same-origin fetches behave like production only over http, so  * a local file is served from http://127.0.0.1:<port>/ rooted at the audit  * root. GET and HEAD only; no directory listing; no cache headers. Every
  • Network accessline 6
    * a local file is served from http://127.0.0.1:<port>/ rooted at the audit
  • Network accessline 88
    let pathname;     try {       pathname = decodeURIComponent(new URL(req.url ?? '/', 'http://127.0.0.1').pathname);
  • Network accessline 89
    try {       pathname = decodeURIComponent(new URL(req.url ?? '/', 'http://127.0.0.1').pathname);     } catch {
  • Network accessline 90
    pathname = decodeURIComponent(new URL(req.url ?? '/', 'http://127.0.0.1').pathname);
  • Network accessline 122
    const { port } = server.address();   host = `127.0.0.1:${port}`;   const origin = `http://${host}`;
  • Network accessline 124
    const origin = `http://${host}`;

plugins/atelier/skills/runtime-ux-audit/index.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 215
    // Idle keep-alive sockets from fetch() must not hold the process open.

plugins/atelier/skills/runtime-ux-audit/lib/browser.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/budgets.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/collect.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/context.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/csp.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/css-model.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/css-values.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/errors.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/fetch.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/headline.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/html-model.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/js-model.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/options.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/report-md.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/report-raw.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/runner.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/selector-match.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/suppress.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/lib/url.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 39
    if (/^[a-zA-Z]:[\\/]/.test(s)) return { kind: 'file', filePath: resolve(s) };   if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(s)) {     throw new UxAuditError('SCHEME_NOT_ALLOWED', `Unsupported scheme in ${s.slice(0, s.indexOf(':') + 1)}. Use a loca
  • Network accessline 40
    if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(s)) {     throw new UxAuditError('SCHEME_NOT_ALLOWED', `Unsupported scheme in ${s.slice(0, s.indexOf(':') + 1)}. Use a local path, file://, http:// or https://.`);   }
  • Network accessline 41
    throw new UxAuditError('SCHEME_NOT_ALLOWED', `Unsupported scheme in ${s.slice(0, s.indexOf(':') + 1)}. Use a local path, file://, http:// or https://.`);
  • Network accessline 46
    /** Normalize an origin allow-list entry ('https://cdn.example.com/x' -> 'https://cdn.example.com'). */

plugins/atelier/skills/runtime-ux-audit/rules/index.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/rules/inp/dynamic.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 19
    methods: ['trace'],   description: 'The lab INP estimate (Event Timing, 4x CPU throttle, Pixel 7 profile) exceeds the INP budget from brand.json targets.inpBudgetMs or the 200 ms default.',   helpUrl: 'https://web.dev/articles/inp',
  • Network accessline 20
    description: 'The lab INP estimate (Event Timing, 4x CPU throttle, Pixel 7 profile) exceeds the INP budget from brand.json targets.inpBudgetMs or the 200 ms default.',   helpUrl: 'https://web.dev/articles/inp',   check(ctx) {
  • Network accessline 21
    helpUrl: 'https://web.dev/articles/inp',
  • Network accessline 61
    methods: ['trace'],   description: 'A script ran longer than 100 ms inside one long animation frame during the interaction probe, blocking input and rendering.',   helpUrl: 'https://developer.chrome.com/docs/web-platform/long-animation-fram
  • Network accessline 62
    description: 'A script ran longer than 100 ms inside one long animation frame during the interaction probe, blocking input and rendering.',   helpUrl: 'https://developer.chrome.com/docs/web-platform/long-animation-frames',   check(ctx) {
  • Network accessline 63
    helpUrl: 'https://developer.chrome.com/docs/web-platform/long-animation-frames',
  • Network accessline 112
    methods: ['dom'],   description: 'A long list of repeated blocks sits mostly below the fold without content-visibility: auto, so every item pays style and layout cost up front.',   helpUrl: 'https://web.dev/articles/content-visibility',
  • Network accessline 113
    description: 'A long list of repeated blocks sits mostly below the fold without content-visibility: auto, so every item pays style and layout cost up front.',   helpUrl: 'https://web.dev/articles/content-visibility',   check(ctx) {
  • Network accessline 114
    helpUrl: 'https://web.dev/articles/content-visibility',

plugins/atelier/skills/runtime-ux-audit/rules/inp/hydration.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 85
    methods: ['html', 'js'],   description: 'A framework hydration runtime ships with a page whose server-rendered body has no interactive elements, spending main-thread time for nothing.',   helpUrl: 'https://qwik.dev/docs/concepts/resumable/'
  • Network accessline 86
    description: 'A framework hydration runtime ships with a page whose server-rendered body has no interactive elements, spending main-thread time for nothing.',   helpUrl: 'https://qwik.dev/docs/concepts/resumable/',   check(ctx) {
  • Network accessline 87
    helpUrl: 'https://qwik.dev/docs/concepts/resumable/',

plugins/atelier/skills/runtime-ux-audit/rules/inp/index.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/rules/inp/listeners.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 21
    methods: ['js'],   description: 'A touch or wheel listener that never cancels its event is registered without { passive: true }, so scrolling waits for it on the main thread.',   helpUrl: 'https://developer.chrome.com/docs/lighthouse/best-p
  • Network accessline 22
    description: 'A touch or wheel listener that never cancels its event is registered without { passive: true }, so scrolling waits for it on the main thread.',   helpUrl: 'https://developer.chrome.com/docs/lighthouse/best-practices/uses-passi
  • Network accessline 23
    helpUrl: 'https://developer.chrome.com/docs/lighthouse/best-practices/uses-passive-event-listeners',
  • Network accessline 184
    methods: ['js'],   description: 'An input handler writes styles or classes and then reads layout in the same task, forcing a synchronous style and layout pass.',   helpUrl: 'https://web.dev/articles/avoid-large-complex-layouts-and-layout-th
  • Network accessline 185
    description: 'An input handler writes styles or classes and then reads layout in the same task, forcing a synchronous style and layout pass.',   helpUrl: 'https://web.dev/articles/avoid-large-complex-layouts-and-layout-thrashing',   check(c
  • Network accessline 186
    helpUrl: 'https://web.dev/articles/avoid-large-complex-layouts-and-layout-thrashing',
  • Network accessline 270
    methods: ['js'],   description: 'A scroll listener drives transform or opacity from JavaScript where a CSS scroll-driven animation could run off the main thread.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Prope
  • Network accessline 271
    description: 'A scroll listener drives transform or opacity from JavaScript where a CSS scroll-driven animation could run off the main thread.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/animation-tim
  • Network accessline 272
    helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/animation-timeline',
  • Network accessline 315
    methods: ['js', 'html'],   description: 'The same target listens to both mouse and touch events for one gesture; a single pointer event listener handles every input type once.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/P
  • Network accessline 316
    description: 'The same target listens to both mouse and touch events for one gesture; a single pointer event listener handles every input type once.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events',   check(ctx
  • Network accessline 317
    helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events',

plugins/atelier/skills/runtime-ux-audit/rules/inp/rum.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 23
    methods: ['js'],   description: 'The page reports Core Web Vitals with web-vitals but never registers onINP, so field responsiveness is not measured.',   helpUrl: 'https://www.npmjs.com/package/web-vitals',
  • Network accessline 24
    description: 'The page reports Core Web Vitals with web-vitals but never registers onINP, so field responsiveness is not measured.',   helpUrl: 'https://www.npmjs.com/package/web-vitals',   check(ctx) {
  • Network accessline 25
    helpUrl: 'https://www.npmjs.com/package/web-vitals',
  • Network accessline 94
    methods: ['js'],   description: 'A PerformanceObserver watches longtask entries with no long-animation-frame observer, so slow frames are not attributed to scripts.',   helpUrl: 'https://developer.chrome.com/docs/web-platform/long-animation
  • Network accessline 95
    description: 'A PerformanceObserver watches longtask entries with no long-animation-frame observer, so slow frames are not attributed to scripts.',   helpUrl: 'https://developer.chrome.com/docs/web-platform/long-animation-frames',   check(c
  • Network accessline 96
    helpUrl: 'https://developer.chrome.com/docs/web-platform/long-animation-frames',

plugins/atelier/skills/runtime-ux-audit/rules/inp/scheduling.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 76
    methods: ['js'],   description: 'setTimeout(fn, 0) is used to yield inside a loop; the continuation queues behind every other task instead of resuming first.',   helpUrl: 'https://developer.chrome.com/blog/use-scheduler-yield',
  • Network accessline 77
    description: 'setTimeout(fn, 0) is used to yield inside a loop; the continuation queues behind every other task instead of resuming first.',   helpUrl: 'https://developer.chrome.com/blog/use-scheduler-yield',   check(ctx) {
  • Network accessline 78
    helpUrl: 'https://developer.chrome.com/blog/use-scheduler-yield',
  • Network accessline 125
    methods: ['js'],   description: 'requestIdleCallback is called without a timeout, so on a busy page the callback can be delayed indefinitely.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback',
  • Network accessline 126
    description: 'requestIdleCallback is called without a timeout, so on a busy page the callback can be delayed indefinitely.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback',   check(ctx) {
  • Network accessline 127
    helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback',
  • Network accessline 170
    methods: ['js'],   description: 'A synchronous XMLHttpRequest blocks the main thread, and every pending input, for the whole network round trip.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/open',
  • Network accessline 171
    description: 'A synchronous XMLHttpRequest blocks the main thread, and every pending input, for the whole network round trip.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/open',   check(ctx) {
  • Network accessline 172
    helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/open',
  • Network accessline 180
    out.push({         node: ctx.ref.js(call),         message: `XMLHttpRequest.open(${method !== null ? `'${method.toUpperCase()}', ` : ''}..., false) is synchronous; use fetch() or an async XMLHttpRequest.`,
  • Network accessline 181
    node: ctx.ref.js(call),         message: `XMLHttpRequest.open(${method !== null ? `'${method.toUpperCase()}', ` : ''}..., false) is synchronous; use fetch() or an async XMLHttpRequest.`,       });
  • Network accessline 182
    message: `XMLHttpRequest.open(${method !== null ? `'${method.toUpperCase()}', ` : ''}..., false) is synchronous; use fetch() or an async XMLHttpRequest.`,

plugins/atelier/skills/runtime-ux-audit/rules/inp/shared.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/rules/mobile/css.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 89
    phase: 'static',   description: 'A full-height box is sized with 100vh and no dvh or svh fallback, so on phones it is taller than the visible viewport while the URL bar shows.',   helpUrl: 'https://web.dev/blog/viewport-units',
  • Network accessline 90
    description: 'A full-height box is sized with 100vh and no dvh or svh fallback, so on phones it is taller than the visible viewport while the URL bar shows.',   helpUrl: 'https://web.dev/blog/viewport-units',   check(ctx) {
  • Network accessline 91
    helpUrl: 'https://web.dev/blog/viewport-units',
  • Network accessline 116
    phase: 'static',   description: 'A position: fixed or sticky element is sized in vh, which follows the large viewport on phones and overstates the visible area while browser toolbars show.',   helpUrl: 'https://web.dev/blog/viewport-units',
  • Network accessline 117
    description: 'A position: fixed or sticky element is sized in vh, which follows the large viewport on phones and overstates the visible area while browser toolbars show.',   helpUrl: 'https://web.dev/blog/viewport-units',   check(ctx) {
  • Network accessline 118
    helpUrl: 'https://web.dev/blog/viewport-units',
  • Network accessline 169
    phase: 'static',   description: 'A horizontal carousel scrolls freely without scroll-snap-type, or scroll-snap-align is set with no snap container, so swipes stop between slides.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CS
  • Network accessline 170
    description: 'A horizontal carousel scrolls freely without scroll-snap-type, or scroll-snap-align is set with no snap container, so swipes stop between slides.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_scroll_snap',
  • Network accessline 171
    helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_scroll_snap',
  • Network accessline 258
    phase: 'static',   description: 'A scrollable modal has no overscroll-behavior and the page has no body scroll lock, so scrolling past its end scrolls the page behind it.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/oversc
  • Network accessline 259
    description: 'A scrollable modal has no overscroll-behavior and the page has no body scroll lock, so scrolling past its end scrolls the page behind it.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior',   c
  • Network accessline 260
    helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior',
  • Network accessline 289
    phase: 'static',   description: '-webkit-overflow-scrolling: touch has been a no-op since iOS 13, where every overflow scroller already uses momentum scrolling.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-overflow
  • Network accessline 290
    description: '-webkit-overflow-scrolling: touch has been a no-op since iOS 13, where every overflow scroller already uses momentum scrolling.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-overflow-scrolling',   chec
  • Network accessline 291
    helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-overflow-scrolling',
  • Network accessline 423
    phase: 'static',   description: 'Content hidden by default is revealed only by :hover on an ancestor or sibling, with no :focus, :focus-within or click-state equivalent, so touch users cannot reach it.',   helpUrl: 'https://www.w3.org/WAI/W
  • Network accessline 424
    description: 'Content hidden by default is revealed only by :hover on an ancestor or sibling, with no :focus, :focus-within or click-state equivalent, so touch users cannot reach it.',   helpUrl: 'https://www.w3.org/WAI/WCAG22/Understanding
  • Network accessline 425
    helpUrl: 'https://www.w3.org/WAI/WCAG22/Understanding/content-on-hover-or-focus',

plugins/atelier/skills/runtime-ux-audit/rules/mobile/index.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/rules/mobile/js.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 31
    phase: 'static',   description: 'A touchstart or touchmove listener on window, document or body opts out of passive mode, so every scroll gesture waits for the handler to run.',   helpUrl: 'https://web.dev/articles/uses-passive-event-listen
  • Network accessline 32
    description: 'A touchstart or touchmove listener on window, document or body opts out of passive mode, so every scroll gesture waits for the handler to run.',   helpUrl: 'https://web.dev/articles/uses-passive-event-listeners',   check(ctx) 
  • Network accessline 33
    helpUrl: 'https://web.dev/articles/uses-passive-event-listeners',
  • Network accessline 58
    phase: 'static',   description: 'A non-passive touch or wheel listener on window, document or body calls preventDefault() on every event, which disables native scrolling.',   helpUrl: 'https://web.dev/articles/uses-passive-event-listeners',
  • Network accessline 59
    description: 'A non-passive touch or wheel listener on window, document or body calls preventDefault() on every event, which disables native scrolling.',   helpUrl: 'https://web.dev/articles/uses-passive-event-listeners',   check(ctx) {
  • Network accessline 60
    helpUrl: 'https://web.dev/articles/uses-passive-event-listeners',
  • Network accessline 88
    phase: 'static',   description: 'Notification permission or a push subscription is requested without a display-mode: standalone check, but iOS offers web push only to Home Screen web apps.',   helpUrl: 'https://webkit.org/blog/13878/web-pus
  • Network accessline 89
    description: 'Notification permission or a push subscription is requested without a display-mode: standalone check, but iOS offers web push only to Home Screen web apps.',   helpUrl: 'https://webkit.org/blog/13878/web-push-for-web-apps-on-i
  • Network accessline 90
    helpUrl: 'https://webkit.org/blog/13878/web-push-for-web-apps-on-ios-and-ipados/',
  • Network accessline 137
    phase: 'static',   description: 'Script fights the browser tap handling (a touchend double-tap timer with preventDefault, or FastClick) where touch-action: manipulation or a device-width viewport is enough.',   helpUrl: 'https://web.dev/art
  • Network accessline 138
    description: 'Script fights the browser tap handling (a touchend double-tap timer with preventDefault, or FastClick) where touch-action: manipulation or a device-width viewport is enough.',   helpUrl: 'https://web.dev/articles/mobile-touch'
  • Network accessline 139
    helpUrl: 'https://web.dev/articles/mobile-touch',

plugins/atelier/skills/runtime-ux-audit/rules/mobile/pwa.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 31
    phase: 'static',   description: 'An installable page has no apple-touch-icon and no manifest icon of at least 180x180, so iOS adds it to the Home Screen with a blurry or screenshot icon.',   helpUrl: 'https://web.dev/articles/install-criter
  • Network accessline 32
    description: 'An installable page has no apple-touch-icon and no manifest icon of at least 180x180, so iOS adds it to the Home Screen with a blurry or screenshot icon.',   helpUrl: 'https://web.dev/articles/install-criteria',   check(ctx) {
  • Network accessline 33
    helpUrl: 'https://web.dev/articles/install-criteria',

plugins/atelier/skills/runtime-ux-audit/rules/mobile/shared.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/rules/mobile/tap.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 46
    brand: true,   description: 'An interactive element is smaller than the minimum tap size (24px by WCAG 2.2 SC 2.5.8, or targets.minTapPx) and, at the default floor, too close to other targets.',   helpUrl: 'https://www.w3.org/TR/WCAG22/#tar
  • Network accessline 47
    description: 'An interactive element is smaller than the minimum tap size (24px by WCAG 2.2 SC 2.5.8, or targets.minTapPx) and, at the default floor, too close to other targets.',   helpUrl: 'https://www.w3.org/TR/WCAG22/#target-size-minimu
  • Network accessline 48
    helpUrl: 'https://www.w3.org/TR/WCAG22/#target-size-minimum',

plugins/atelier/skills/runtime-ux-audit/rules/mobile/viewport.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 26
    phase: 'static',   description: 'The page has no viewport meta with width=device-width, so phones lay it out at a 980px desktop width and scale it down.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag',
  • Network accessline 27
    description: 'The page has no viewport meta with width=device-width, so phones lay it out at a 980px desktop width and scale it down.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag',   check(ctx) {
  • Network accessline 28
    helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag',
  • Network accessline 50
    rendered: true,   description: 'The viewport meta disables or caps pinch zoom (user-scalable=no or maximum-scale below 2), which fails WCAG 1.4.4 Resize Text.',   helpUrl: 'https://www.w3.org/TR/WCAG22/#resize-text',
  • Network accessline 51
    description: 'The viewport meta disables or caps pinch zoom (user-scalable=no or maximum-scale below 2), which fails WCAG 1.4.4 Resize Text.',   helpUrl: 'https://www.w3.org/TR/WCAG22/#resize-text',   check(ctx) {
  • Network accessline 52
    helpUrl: 'https://www.w3.org/TR/WCAG22/#resize-text',
  • Network accessline 78
    phase: 'static',   description: 'CSS uses env(safe-area-inset-*) but the viewport meta lacks viewport-fit=cover, so every inset resolves to 0 and the padding is dead code.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/env',
  • Network accessline 79
    description: 'CSS uses env(safe-area-inset-*) but the viewport meta lacks viewport-fit=cover, so every inset resolves to 0 and the padding is dead code.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/env',   check(ctx) {
  • Network accessline 80
    helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/env',
  • Network accessline 111
    phase: 'static',   description: 'A position: fixed element pinned to bottom 0 under viewport-fit=cover never pads for env(safe-area-inset-bottom), so the home indicator overlaps it.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web
  • Network accessline 112
    description: 'A position: fixed element pinned to bottom 0 under viewport-fit=cover never pads for env(safe-area-inset-bottom), so the home indicator overlaps it.',   helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/env',   check(
  • Network accessline 113
    helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/env',
  • Network accessline 146
    rendered: true,   description: 'A fixed, bottom-anchored bar holds a text field but the viewport meta has no interactive-widget key, so the on-screen keyboard covers it in Chromium.',   helpUrl: 'https://developer.chrome.com/blog/viewport-r
  • Network accessline 147
    description: 'A fixed, bottom-anchored bar holds a text field but the viewport meta has no interactive-widget key, so the on-screen keyboard covers it in Chromium.',   helpUrl: 'https://developer.chrome.com/blog/viewport-resize-behavior',  
  • Network accessline 148
    helpUrl: 'https://developer.chrome.com/blog/viewport-resize-behavior',

plugins/atelier/skills/runtime-ux-audit/rules/panels/css.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 13
    const HELP = Object.freeze({   topLayer: 'https://drafts.csswg.org/css-position-4/#top-layer',
  • Network accessline 14
    topLayer: 'https://drafts.csswg.org/css-position-4/#top-layer',
  • Network accessline 15
    startingStyle: 'https://developer.mozilla.org/en-US/docs/Web/CSS/@starting-style',
  • Network accessline 16
    entryExit: 'https://web.dev/articles/entry-exit-animations',
  • Network accessline 17
    reducedMotion: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/prefers-reduced-motion',
  • Network accessline 18
    motion: 'https://m3.material.io/styles/motion/overview',
  • Network accessline 19
    anchor: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_anchor_positioning',
  • Network accessline 20
    overflow: 'https://developer.mozilla.org/en-US/docs/Web/CSS/overflow',
  • Network accessline 21
    backdropFilter: 'https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter',

plugins/atelier/skills/runtime-ux-audit/rules/panels/dynamic.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 12
    methods: ['trace'],   description: 'After a dialog closed, focus fell to the page body instead of returning to the control that opened it.',   helpUrl: 'https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/',
  • Network accessline 13
    description: 'After a dialog closed, focus fell to the page body instead of returning to the control that opened it.',   helpUrl: 'https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/',   check(ctx) {
  • Network accessline 14
    helpUrl: 'https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/',

plugins/atelier/skills/runtime-ux-audit/rules/panels/html.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 10
    const HELP = Object.freeze({   dialogPattern: 'https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/',
  • Network accessline 11
    dialogPattern: 'https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/',
  • Network accessline 12
    dialogElement: 'https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog',
  • Network accessline 13
    tooltip: 'https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/',
  • Network accessline 14
    backdrop: 'https://developer.mozilla.org/en-US/docs/Web/CSS/::backdrop',
  • Network accessline 15
    closedby: 'https://html.spec.whatwg.org/multipage/interactive-elements.html#attr-dialog-closedby',

plugins/atelier/skills/runtime-ux-audit/rules/panels/index.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/rules/panels/js.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 8
    const HELP = Object.freeze({   dialogElement: 'https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog',
  • Network accessline 9
    dialogElement: 'https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog',
  • Network accessline 10
    popover: 'https://developer.mozilla.org/en-US/docs/Web/API/Popover_API',
  • Network accessline 11
    menubar: 'https://www.w3.org/WAI/ARIA/apg/patterns/menubar/',
  • Network accessline 12
    inert: 'https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/inert',

plugins/atelier/skills/runtime-ux-audit/rules/panels/shared.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/rules/transitions/analytics.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/rules/transitions/bfcache.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/rules/transitions/index.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/rules/transitions/shared.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 6
    export const HELP = Object.freeze({   bfcache: 'https://web.dev/articles/bfcache',
  • Network accessline 7
    bfcache: 'https://web.dev/articles/bfcache',
  • Network accessline 8
    bfcacheReasons: 'https://developer.chrome.com/docs/web-platform/bfcache-notrestoredreasons',
  • Network accessline 9
    bfcacheCcns: 'https://developer.chrome.com/docs/web-platform/bfcache-ccns',
  • Network accessline 10
    vtUsing: 'https://developer.mozilla.org/en-US/docs/Web/API/View_Transition_API/Using',
  • Network accessline 11
    reducedMotion: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/prefers-reduced-motion',
  • Network accessline 12
    vtName: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/view-transition-name',
  • Network accessline 13
    speculationImprovements: 'https://developer.chrome.com/blog/speculation-rules-improvements',
  • Network accessline 14
    speculationApi: 'https://developer.mozilla.org/en-US/docs/Web/API/Speculation_Rules_API',
  • Network accessline 15
    prerendering: 'https://developer.mozilla.org/en-US/docs/Web/API/Document/prerendering',

plugins/atelier/skills/runtime-ux-audit/rules/transitions/speculation.mjs

  • Executable scriptline 1
    Executable file

plugins/atelier/skills/runtime-ux-audit/rules/transitions/view-transitions.mjs

  • Executable scriptline 1
    Executable file

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 37 facts
Signal confidence: 318 facts

and 268 more

Works with

  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.