field-sizingCSSType a little. Paste a lot. Clear it.
A field that grows with you
Let the browser size your textarea. Keep editing and scrolling available in the fallback.
What goes: Two listeners, height measurement, and inline style mutation
A FRONTEND JUDGMENT SKILL FOR CODING AGENTS
Build, simplify, and audit web UI using what the browser and your codebase already provide. Keep the behavior, accessibility, compatibility, and feel. Cut the machinery that does not earn its place.
WHAT IS FEWER PARTS?
Fewer Parts is an installable skill for coding agents. It reads the interface you have, the experience you need, and the constraints of your project. Then it looks for places where the browser or your existing stack can do more of the work.
It is not a UI library, a framework, or a fixed catalogue of CSS tricks. It adds judgment: when to use the platform, when to adapt an existing pattern, and when the code in front of it should stay exactly as it is.
Start from the interaction and choose proportionate machinery.
Preserve the experience while removing duplicated work and state.
Find where complexity earns its place—and where it no longer does.
Modern CSS and platform guidance surface possibilities. Baseline and Can I Use provide evidence. Fewer Parts makes the decision in the context of your codebase.
THE PROMISE, MADE VISIBLE
These are project decisions, not blanket rules. Choose a case to see what stays, what disappears, and why the result is still honest.
Compatibility is decided per project. The skill checks the exact syntax or API member against your declared targets and keeps a usable base when a feature is new. The final example is deliberate: fewer parts sometimes means avoiding a rewrite.
field-sizingCSSType a little. Paste a lot. Clear it.
Let the browser size your textarea. Keep editing and scrolling available in the fallback.
What goes: Two listeners, height measurement, and inline style mutation
@containerCSSSlide to change the container width.
A component responds to its own space. The compact layout is the usable base.
What goes: Viewport coupling and parent-specific overrides
:has()CSSChoose an option. Try the arrow keys.
Style a card from its selected input. Native radios still own the interaction.
What goes: Mirrored classes and a change listener
dialog.showModal()HTML + APIOpen it. Tab through. Press Escape.
Native modality, focus, and dismissal. This embedded preview is modal within its own frame.
What goes: Focus trapping, Escape handling, scroll lock, and z-index work
URL.canParse()Web APITry a URL, then break it.
Check structure without a homemade regular expression. Includes an older-browser fallback.
What goes: A handwritten parser and its edge-case tests
Support reviewed 14 September 2026. Baseline is a starting point; the skill checks your browser targets and the exact features in use. Newly available recipes preserve a usable base. About Baseline ↗
THE OTHER MODE
Ask for an audit or a review and the skill reads the repository instead of writing to it. It establishes scope and your browser targets first, scores the dimensions it could actually assess, then ranks findings with file evidence, effort, and compatibility risk. Nothing changes unless you ask for the fixes separately.
Audit this project's UI with $fewer-parts. Read-only — no changes yet.
Carefully labelled and consistent, with layout and overlay code still doing work the platform can own. Four changes account for most of the available reduction; the form-validation code should stay.
| Dimension | Score | Evidence |
|---|---|---|
| Interaction quality | 2/5 | The custom modal works by keyboard, but its close animation cannot be interrupted and focus briefly reaches the page behind it. |
| Project and styling-system fit | 3/5 | Tailwind v4 is installed and mostly used; three components keep a parallel stylesheet with duplicated spacing. |
| Runtime and dependency economy | 2/5 | Overlay, selected-state, and textarea measurement code duplicate behavior the current targets provide natively. |
| Accessibility and semantics | 4/5 | Labelling, focus order, announcements, and reduced-motion handling are consistent; preserve them during simplification. |
| Compatibility and fallbacks | 3/5 | Browserslist targets are respected, but two enhancements leave no usable base behind them. |
| Consistency and maintainability | 3/5 | Conventions are clear. Token use drifts in the more recently added components. |
0–2 · gaps worth acting on3 · sound, mixed patterns4–5 · strong
R-01src/components/ResourceCard.css:42
Give the card slot a size container and move both breakpoints to @container, keeping the one-column layout as the base.
Expected reduction: Remove two viewport-specific card overrides.
S-02src/components/PlanPicker.tsx:61
Style the selected card with :has(input:checked) and drop the change listener. The radio group already holds the state.
Expected reduction: Remove one listener and a mirrored selected-state class.
N-03src/ui/Modal.tsx:18
Move to dialog.showModal() for the top layer, focus containment, and Escape. Keep the existing close animation and the confirm/cancel return values.
Expected reduction: Remove the focus trap, Escape handler, scroll lock, and overlay z-index contract.
M-04src/styles/legacy.css
Fold the remaining literal values into the Tailwind v4 theme so new components inherit them.
Expected reduction: Remove the parallel spacing scale after consumers migrate.
Form labelling, validation timing, focus order, and prefers-reduced-motion handling are consistent. The form script owns real application behavior and should not be removed merely because CSS can style validity.
Safari was not available in this environment, so the container-query and :has() recommendations were checked against documentation rather than run there. Two routes behind authentication were not inspected.
An illustrative excerpt: the project and the scores are invented, the structure is the one the skill follows. The number describes whether the intended experience uses proportionate, project-appropriate machinery — not code quality, accessibility conformance, or performance overall.
THE APPROACH
Start with the intended feel and behavior, then choose the smallest implementation that honestly delivers them.
Preserve keyboard access, application state, interruption, and the behavior people depend on.
Read current sources without repeating discovery. Test the result, and keep existing machinery when it still earns its keep.
FOR YOUR CODING AGENT
Build, simplify, or audit. It uses platform guidance as evidence, adapts the decision to your codebase and styling system, and needs no MCP server or API key.
Download the skill View repository ↗Run one of these from your project root. The installer finds your coding agents and lets you choose where to add the skill.
npx skills add GavinJaynes/skills --skill fewer-partspnpm dlx skills add GavinJaynes/skills --skill fewer-partsbunx skills add GavinJaynes/skills --skill fewer-partsPrefer a manual install? Download the ZIP, extract it, and copy the complete fewer-parts folder to .agents/skills/fewer-parts/.
Then ask your agent:
Use $fewer-parts to deliver the same or better interaction with less project-specific machinery. Preserve the design, behavior, accessibility, browser targets, and existing styling conventions.
For agents with a different skill location, use their supported installation directory. Keep the references and assets together.