Web Release Gate
The specialist skills in this pack are each good at one thing and none of them know about each other. This is the contract that orders them and says when work is finished.
Two failure modes it exists to prevent:
- Skipping straight to code. An interface written before the direction is chosen inherits whatever the model's defaults are. That is the origin of AI slop — not bad taste, but no decision.
- Self-certifying. Declaring a page "polished," "production-ready," or scoring it out of 10 with no audit output and no screenshot. A claim is not evidence.
The five phases
Run them in order. Skip a phase only by saying which one and why.
1. Capture — what exists now
Before touching anything visual, capture the current state at desktop and
mobile width. Use visual-proof. If capture is impossible (no dev server, no
browser, remote-only), say so and stop — you cannot show a delta from nothing,
and every later claim becomes unfalsifiable.
Also read, if the repo has them: design.md, taste.md, tailwind.config.js,
lib/design-system.*, and the repo CLAUDE.md/AGENTS.md. These outrank
every skill in this pack. The pack supplies craft; the repo supplies the brand.
On conflict, the repo wins.
2. Decide — commit to a direction before code
Pick the direction explicitly and name it. ui-ux-pro-max is the reference
database for this — query it for style, palette, font pairing, and the product
type's known UX rules rather than inventing them. emil-design-eng and
apple-design carry the judgment the database does not: restraint, hierarchy,
what earns its place on the screen.
For a high-value page or a redesign, compare exactly three directions and say why the winner won. One option is not a decision.
Do not reach for a whole-aesthetic skill that imposes a look the repo has
already settled. If design.md exists, the aesthetic is decided; you are
choosing within it.
3. Build
Write the code. During this phase:
- Motion —
emil-design-engfor the craft bar,apple-designfor gesture/spring/physical interactions,animation-vocabularywhen you need the exact name for an effect.find-animation-opportunitieswhen the question is "should anything move here at all" — it is equally willing to answer no. - From a screenshot or a visual reference —
image-to-code. Its one non-negotiable rule: generate a readable reference per section, never one compressed board for the whole page. - From another site's tokens —
extract-design-system, for competitive and reference work only. Never re-import your own site's scraped tokens over the tokens of record. - New sub-brand or product identity —
brandkit. Not for a property whose identity is already locked; that is a fight with the existing brand system, and the brand system wins.
4. Audit — the part that is not optional
Run web-design-guidelines against the files you changed. It fetches the live
Web Interface Guidelines and reports in file:line form. Fix what it finds or
state explicitly why a finding does not apply.
If the change involved motion, also run review-animations on the diff. Its
default is to flag; approval is earned.
Then core-web-vitals if the change touches images, fonts, above-the-fold
markup, client components, or any list that can grow.
Minimum bar, regardless of what the audits say:
- keyboard reaches every interactive element, and focus is visible
prefers-reduced-motionhas a real reduced variant, not just "no animation"- the layout holds at 375px, 768px, and 1440px with no horizontal scroll
- both themes render — if the site has dark mode, it was checked in dark mode
- no
transition: all, nooutline-nonewithout a:focus-visiblereplacement - images carry explicit dimensions
5. Prove
visual-proof again — after shots at the same widths and themes as the capture.
The receipt is: audit output + before/after screenshots + what you changed and why.
Done means
Direction: <the one chosen, and what it beat>
Changed: <files>
Audit: web-design-guidelines — N findings, N fixed, N waived (with reason)
Motion: review-animations — verdict, or "no motion in this change"
Vitals: core-web-vitals — measured / not applicable because <reason>
Visual: before + after, 375 / 768 / 1440, light + dark
Open: <anything knowingly left>
Any line you cannot fill honestly is stated as unfilled. Never invent a score, a Lighthouse number, or a "production-ready" verdict. "I could not capture screenshots in this environment" is a valid and useful answer. A fabricated score is not.
Refusals
These hold even when asked directly, unless the person overrides them knowing the cost:
- Do not rename a working URL, delete a page with traffic, or "consolidate" by deleting. Fix navigation instead. URL changes need explicit approval.
- Do not restyle beyond the task. Adjacent components you did not need to touch stay untouched. Mention what you noticed; do not fix it in this change.
- Do not add a dependency to solve a styling problem the existing token system already solves.
- Do not ship motion that cannot be interrupted or that runs identically
under
prefers-reduced-motion: reduce.
When this does not apply
Backend logic, API routes, database work, config, CI, scripts, docs — unless the
change alters what something looks like, feels like, moves like, or how it is
interacted with. A page.tsx that only changes a fetch call is not web-design
work. Say so and move on rather than running the whole gate on a one-line fix.