Extract Design
Manavarya09/design-extract
Extract the full design language from any website URL. An agent skill from Manavarya09/design-extract.
A skill your agent uses when writing or refactoring React + Tailwind v4 code in this repo.
$ npx skills add mailtrap/mailtrap-local --skill frontend-code-style -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mailtrap/mailtrap-local frontend-code-style --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mailtrap/mailtrap-local.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/frontend-code-style .claude/skills/frontend-code-style && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "frontend-code-style" agent skill from https://github.com/mailtrap/mailtrap-local/tree/main/.claude/skills/frontend-code-style into .claude/skills/frontend-code-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frontend-code-style", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mailtrap/mailtrap-local/tree/main/.claude/skills/frontend-code-styleType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mailtrap/mailtrap-local --skill frontend-code-style -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mailtrap/mailtrap-local frontend-code-style --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mailtrap/mailtrap-local.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/frontend-code-style .agents/skills/frontend-code-style && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "frontend-code-style" agent skill from https://github.com/mailtrap/mailtrap-local/tree/main/.claude/skills/frontend-code-style into .agents/skills/frontend-code-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frontend-code-style", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mailtrap/mailtrap-local --skill frontend-code-style -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mailtrap/mailtrap-local frontend-code-style --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mailtrap/mailtrap-local.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/frontend-code-style .cursor/skills/frontend-code-style && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "frontend-code-style" agent skill from https://github.com/mailtrap/mailtrap-local/tree/main/.claude/skills/frontend-code-style into .cursor/skills/frontend-code-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frontend-code-style", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mailtrap/mailtrap-local.git --path .claude/skills/frontend-code-style--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mailtrap/mailtrap-local --skill frontend-code-style -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mailtrap/mailtrap-local frontend-code-style --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mailtrap/mailtrap-local.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/frontend-code-style .gemini/skills/frontend-code-style && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "frontend-code-style" agent skill from https://github.com/mailtrap/mailtrap-local/tree/main/.claude/skills/frontend-code-style into .gemini/skills/frontend-code-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frontend-code-style", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mailtrap/mailtrap-local frontend-code-styleInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mailtrap/mailtrap-local --skill frontend-code-style -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mailtrap/mailtrap-local.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/frontend-code-style .github/skills/frontend-code-style && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "frontend-code-style" agent skill from https://github.com/mailtrap/mailtrap-local/tree/main/.claude/skills/frontend-code-style into .github/skills/frontend-code-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frontend-code-style", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mailtrap/mailtrap-local --skill frontend-code-style -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mailtrap/mailtrap-local frontend-code-style --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mailtrap/mailtrap-local.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/frontend-code-style .opencode/skills/frontend-code-style && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "frontend-code-style" agent skill from https://github.com/mailtrap/mailtrap-local/tree/main/.claude/skills/frontend-code-style into .opencode/skills/frontend-code-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frontend-code-style", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
frontend-code-styleA skill your agent uses when writing or refactoring React + Tailwind v4 code in this repo.
Frontend Code Style is an agent skill from mailtrap/mailtrap-local. Use when writing or refactoring React + Tailwind v4 code in this repo. Covers component sizing, CSS deduplication via primitives + shared constants, design tokens via @theme, the "adjust state during render" pattern over setState-in-effect, directory layout (ui/message/sidebar/connections), and what NOT to extract.
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Frontend & Design, covering Design tokens, Data cleaning and CSS and styling. It works with Tailwind CSS and React. The repository describes itself as: Local email sandbox + catcher for individual developers — single binary, SMTP + Web UI + JSON API, MIT. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 92798cb. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Frontend Code Style loads about 2.7k tokens when it runs. Until then it costs about 84 tokens; SKILL.md has 1,152 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from mailtrap/mailtrap-local at commit 92798cb, republished under its MIT licence (© mailtrap). 1,152 words, ~2,741 tokens.
.claude/skills/frontend-code-style/SKILL.md (or your agent's skills folder).The frontend is React 19 + Tailwind v4 + Radix + Vite. Visual styling flows from @theme tokens in index.css; structure flows from a feature-folder layout under components/. This skill codifies the conventions so new code lands consistent without inventing parallel systems.
Core principle: Extract when the same shape appears 2+ times OR when one file mixes 3+ unrelated concerns. Otherwise keep classNames inline next to the JSX they style.
src/
├── api/ backend API clients
├── hooks/ cross-cutting React hooks (incl. ConnectionProviders)
├── lib/ pure helpers (formatters, styles constants, openInNewTab)
├── pages/ top-level routes — MessageView, Sandbox
└── components/
├── ui/ cross-cutting primitives (Button, IconButton,
│ Panel, Strip, EmptyCard, CategoryBadge, Toggle, icons)
├── message/ right-pane (MessageHeader, MessagePreview,
│ MessageTabs, HtmlSource, TechInfo, CodePane,
│ HtmlCheck/)
├── sidebar/ left-pane (Sidebar, SidebarToolbar, MessageList,
│ DeleteAllPrompt, ConnectionErrorBanner)
├── connections/ cloud/relay/webhook dialogs + dialogAtoms,
│ dialogStyles, lockedFields, SettingsMenu
└── CodeSamples/ Sandbox empty-state code samplesRules:
ui/.ui/ is for primitives reused by 2+ features.index.tsx (see HtmlCheck/).Sidebar.test.tsx next to Sidebar.tsx).Colors, fonts, accent levels live in @theme in index.css. Use them as Tailwind utilities (bg-surface-base, text-fg-muted, text-warning, font-mono). Never hard-code hex in components — add a --color-<name> token instead.
Single-use className: write inline.
Multi-line className constant: extract a local const xCss = [...].join(' ') next to where it's used. Use this when a className gets wide enough to wrap, or has stateful data-[…]: variants worth naming.
Cross-component reuse: extract a primitive component (preferred) or a shared constant in lib/styles.ts (when callers need to extend with their own utilities).
// ❌ Don't: invent a one-off CSS constant for a single use
const wrapperCss = 'm-0'
return <section className={wrapperCss}>…</section>
// ✅ Do: inline when used once
return <section className="m-0">…</section>
// ✅ Do: name when wide + stateful
const row = [
'group grid grid-cols-[1fr_auto] gap-x-3 px-4 py-3',
'data-[read=true]:bg-surface-base',
'data-[active=true]:!bg-accent data-[active=true]:hover:!bg-accent',
].join(' ')data-* attributesProject convention is data-[variant=primary]:bg-accent style, not clsx/cva. See Button.tsx, IconButton.tsx, dialogStyles.btn. Match this pattern when adding new variant-driven components.
lib/styles.ts)Use a constant (not a component) when the same CSS fragment appears across different elements (<input>, <select>, <textarea>, <pre>) and callers extend with their own utilities:
inputBase — border + bg + focus ring + placeholder color for form inputs.codeBlockBase — min-height + mono + rounded border for code panes.Callers compose: className={`${inputBase} px-3 py-2 text-[13px]`}.
Use a component when the wrapper element itself is the abstraction:
| Primitive | Purpose |
|---|---|
<Panel> | Bordered card with raised bg (TechInfo sections, HtmlCheck issue cards, EmptyCard) |
<Strip variant shape> | Dismissable success/error banner (card for MessageView, banner for Sidebar) |
<EmptyCard> | Centered muted text inside a Panel (HtmlCheck empty states) |
<CategoryBadge size> | Rounded category pill (header lg, list-row sm with active-state override) |
<Button variant size> | Pill button outside dialogs; dialogs still use dialogStyles.btn for now |
<IconButton variant> | 28×28 / 32×32 icon buttons (toolbar, header, device) |
<CodePane> | <pre> with mono code styling + optional pop-out |
<TabRoot> <TabList> <Tab> <TabPanel> | Radix Tabs wrapper that absorbs trigger/content styling |
When state needs to reset on a prop/data change, do it during render with a "last-seen" tracker, not in useEffect. This is the React docs' recommended pattern; it avoids the cascading-render warning the linter flags.
// ❌ Don't
useEffect(() => {
if (id) setMsg(null)
}, [id])
// ✅ Do
const [lastId, setLastId] = useState(id)
if (id !== lastId) {
setLastId(id)
setMsg(null)
}Use useEffect only for true side effects: data fetching with cleanup, event listeners, subscriptions. setState inside an .then() / .finally() async callback is fine — the lint rule only flags the synchronous effect body.
keyWhen a child owns state that needs to reset on parent prop change, use <Child key={id} /> instead of plumbing a reset callback. See <MessageHeader key={msg.id} /> in MessageView.
Per-issue showAll belongs inside IssueCard, not at the parent as Record<number, boolean>. Per-message device belongs inside MessagePreview, not at the page. If only one component reads the state, it should live there.
pages/): orchestration + data fetching + composition. Aim for < 350 lines.ui/: tiny, single concern, < 100 lines.Split a component when any of these fire:
<div> with no logic and no shared styling — inline the <div>.TabRoot that does nothing beyond <Tabs.Root />) — only worth it if siblings (Tab/TabPanel) need styling.The three connection dialogs (Cloud/Relay/Webhook) share infrastructure in components/connections/:
dialogStyles.ts — class constants (overlay, content, field, fieldInput, btn).dialogAtoms.tsx — composite components (ConnectionDialogShell, DialogField, DialogActions, DialogButton, DialogStatusRow, DialogConfigBanner).lockedFields.ts — lockedFields(state?.locked, defaults) returns { isLocked, allLocked, anyLocked, inputClass, selectClass }. Use it instead of re-implementing the Record<K, boolean> boilerplate per dialog.LockedFieldHint.tsx — the "pinned by config" caption under a locked input.extractApiError(e) from api/client for ALL caught errors (save, disconnect, test). Never e instanceof Error ? e.message : String(e).find src -name '*.tsx' | xargs wc -l | sort -rn | head -10. Tackle the biggest first.vi.mock() and vi.importActual() paths when test files move — sed for from '...' won't catch them.npm test and npm run build after each major extraction, not at the end.const xCss = '…' for a className used once.// rounded card with border). The class names already say that.#f5a524, #4d5a6a) — add a --color-<name> token.font-['SF_Mono',Menlo,Consolas,monospace] inline — use font-mono (the --font-mono token is defined).<section> when there's no heading inside. Use <div> or <Panel>.isLocked / allLocked / anyLocked per dialog. Use lockedFields().e instanceof Error ? e.message : String(e) for caught API errors. Use extractApiError(e).| Symptom | Likely cause | Fix |
|---|---|---|
| "Cannot find name 'X'" after a move | Test file's vi.mock('../api/X') still uses old path | Bump ../ to ../../ to match the SUT's import depth |
| Tab won't switch when clicked from outside the TabList | TabRoot not wired controlled (value + onValueChange both needed) | Ensure both props are passed |
| className wins/loses by source order | Tailwind v4 sorts variants alphabetically, not source-order | Use ! to force precedence on the data-attr that should win (see MessageRow's active vs read) |
setState in effect warning | Effect is being used for state sync, not side effect | Move to "adjust state during render" pattern with a lastX tracker |
| Imports break after moving file into a deeper folder | Relative paths to api//lib//hooks/ need one extra ../ | Bump each ../{api,hooks,lib,assets,test}/ → ../../$1/ |
This skill captures patterns from a recent refactoring pass and has not been pressure-tested with subagents per the writing-skills TDD methodology. Future work: write baseline scenarios (e.g. "add a new connection dialog", "extract a new tab from MessageView") and verify agents apply these conventions without prompting.
© mailtrap, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/frontend-code-style of mailtrap/mailtrap-local.
Open the folder on GitHubat commit 92798cb
Frontend Code Style next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Frontend Code Style this skillmailtrap/mailtrap-local | 106 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Extract DesignManavarya09/design-extract | 4.2k | — | ~786 | Automated safety check: Notes | MIT | |
| Frontend UI FunctionalvictorGPT/vibeusage | 131 | — | ~939 | Automated safety check: Pass | MIT | |
| Tailwind V4 Shadcnever-works/ever-works | 158 | 2 repos | ~3.8k | Automated safety check: Pass | MIT | |
| Frontend UI Foundryjiushiwon/wg-skills | 110 | — | ~1.4k | Automated safety check: Pass | Apache-2.0 | |
| Shadcn Tailwind UILiarMTTT/TavernWeave | 148 | — | ~1.7k | Automated safety check: Pass | Custom licence |
Manavarya09/design-extract
Extract the full design language from any website URL. An agent skill from Manavarya09/design-extract.
victorGPT/vibeusage
A skill your agent uses when building or refactoring functional React/Vite/Tailwind UI pages, templates, or component libraries that need consistent structure, tokenized styling, accessibility…
ever-works/ever-works
Production-tested setup for Tailwind CSS v4 with shadcn/ui, Vite, and React.
jiushiwon/wg-skills
A skill your agent uses when generating UI for a specific scenario (mobile/PC/官网/管理端/营销页/文档/金融/原生/3D), when refactoring an existing HTML/Vue/React project to a unified design system, when extracting…
LiarMTTT/TavernWeave
Build, restyle, or review accessible React interfaces that use shadcn/ui, Radix UI primitives, and Tailwind CSS.
shift-editor/shift
Guides design, implementation and review of Shift interface work: shared Base UI wrappers, Tailwind v4 theme tokens, Figma matching and accessible interaction states.
Works with
Categories
A skill your agent uses when writing or refactoring React + Tailwind v4 code in this repo. Frontend Code Style is an agent skill from mailtrap/mailtrap-local. Use when writing or refactoring React + Tailwind v4 code in this repo.
Frontend Code Style fits situations like: refactoring React + Tailwind v4 code in this repo; tasks that involve Design tokens; tasks that involve Data cleaning.
Run `npx skills add mailtrap/mailtrap-local --skill frontend-code-style -a claude-code`. Or copy the skill folder (.claude/skills/frontend-code-style in mailtrap/mailtrap-local) into .claude/skills/frontend-code-style in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mailtrap/mailtrap-local --skill frontend-code-style -a codex`. Or copy the skill folder (.claude/skills/frontend-code-style in mailtrap/mailtrap-local) into .agents/skills/frontend-code-style in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mailtrap/mailtrap-local --skill frontend-code-style -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/frontend-code-style, .gemini/skills/frontend-code-style, .github/skills/frontend-code-style and .opencode/skills/frontend-code-style in your project.
Going by SKILL.md and its folder, Frontend Code Style needs the command-line tools its instructions call (npm).
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Frontend Code Style is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Frontend Code Style: Extract Design (Manavarya09/design-extract, 4.2k stars), Frontend UI Functional (victorGPT/vibeusage, 131 stars), Tailwind V4 Shadcn (ever-works/ever-works, 158 stars) and Frontend UI Foundry (jiushiwon/wg-skills, 110 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mailtrap (a GitHub organization) maintains it in mailtrap/mailtrap-local, which has 106 GitHub stars. The repository was last updated on September 7, 2026.
Source: mailtrap/mailtrap-local on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.