con un clic
dev-frontend
// Production-grade frontend with distinctive aesthetics. Detects stack and applies specialized rules. Modular: SKILL.md orchestrator + references/ for deep guidance. Injected when role=frontend.
// Production-grade frontend with distinctive aesthetics. Detects stack and applies specialized rules. Modular: SKILL.md orchestrator + references/ for deep guidance. Injected when role=frontend.
| name | dev-frontend |
| description | Production-grade frontend with distinctive aesthetics. Detects stack and applies specialized rules. Modular: SKILL.md orchestrator + references/ for deep guidance. Injected when role=frontend. |
| keywords | ["kanban-ui","reminder-ui","priority-matrix","dashboard-ui","notes-ui"] |
| license | Complete terms in LICENSE.txt |
Build distinctive, production-grade interfaces that fit the product domain, locale, interaction model, and real visual evidence. This skill has modular references for specialized guidance — read the relevant ones before coding.
| File | When to Read | What It Covers |
|---|---|---|
references/core/anti-slop.md | Always | 2026 AI slop patterns, Korean slop, oversized text, fake assets, default UI smells |
references/core/aesthetics.md | Always | Domain-correct visual direction, typography, color, composition |
references/core/product-density.md | Apps, tools, dashboards | Density profiles for landing, consumer app, SaaS, ops, finance, devtools |
references/core/asset-requirements.md | Any public/product/visual surface | Required screenshots, images, diagrams, charts, generated bitmaps, or 3D assets |
references/core/visual-verification.md | Always before delivery | Screenshot, viewport, text fit, state, asset, and motion verification |
references/core/korea-2026.md | Korean-first or Korea-facing UI | Korean service patterns, CJK typography, formats, mobile flows |
references/core/ux-writing-ko.md | Korean UI copy | Natural Korean labels, error messages, tone, spacing, punctuation |
references/core/soft-3d-asset-gates.md | 3D/miniature/character-like visuals | Toss-style soft 3D vs generic cute asset slop, domain gates |
references/core/motion.md | Motion/animation needed | CSS animations, Framer Motion, scroll-driven, View Transitions, domain gates |
references/core/iterative-design.md | Multi-round design | LLM convergence problem, Diverge→Kill→Mutate process, upgrade techniques |
references/stacks/react.md | React projects | Server Components, hooks, state, TanStack Query, shadcn/ui, performance |
references/stacks/nextjs.md | Next.js projects | App Router, RSC, image optimization, data fetching, middleware |
references/stacks/vanilla.md | HTML+CSS+JS (no framework) | Zero-dependency, viewport fitting, responsive CSS, progressive enhancement |
references/stacks/svelte.md | Svelte/SvelteKit projects | Svelte conventions, reactivity, stores, SvelteKit routing |
Start with anti-slop.md, aesthetics.md, and visual-verification.md. Add domain/locale/stack references only when relevant.
Before designing or coding, classify the work:
| Decision | Options | Why It Matters |
|---|---|---|
| Product surface | landing, app, dashboard, AI tool, public service, education, game, creative | Sets density, typography scale, asset requirements |
| Locale | Korean-first, global/i18n, English-only | Sets CJK typography, copy, date/number formats |
| Density | campaign, consumer app, productivity, SaaS, ops, finance, developer console | Prevents landing-page composition inside repeated-work tools |
| Asset need | none, screenshot, product photo, diagram, chart, illustration, soft 3D, game asset | Prevents asset-free gradient/card UI |
| Soft 3D/character gate | not allowed, subtle, primary | Prevents generic cute 3D/mascot slop |
| Motion intensity | static, feedback-only, expressive, cinematic | Prevents cinematic motion in utility workflows |
Default rules:
korea-2026.md and ux-writing-ko.md.soft-3d-asset-gates.md.When the user describes UI in vague terms (e.g. "접히는 거", "팝업 같은 거"):
<Name> — <what it does, why it fits>If the user already names a specific component, skip this step. Reference: component.gallery/components
For new React/Vue/Svelte/Next UI source files, prefer .tsx or typed component files when the repo supports TypeScript. Inherit dev TypeScript strict-compatibility rules.
If frontend structure is unclear, read existing source-of-truth docs/logs first, then document pages, components, routes, state stores, and build commands in the repo's existing SOT before broad implementation.
Before coding, commit to a domain-correct direction:
Intentionality over intensity. Bold maximalism, refined minimalism, dense utility, and friendly consumer UI can all work when they match the domain.
Adjust these dials based on what's being built. Present to user if unclear.
| Dial | Default | Range | Meaning |
|---|---|---|---|
| DESIGN_VARIANCE | 5 | 1-10 | 1=symmetric utility, 10=asymmetric art |
| MOTION_INTENSITY | 4 | 1-10 | 1=static, 10=cinematic choreography |
| VISUAL_DENSITY | 5 | 1-10 | 1=art gallery airy, 10=cockpit dense |
Adapt dynamically based on user requests. Dashboard → density up. Portfolio → variance up. Data tool → motion down. Korean app/tool surfaces usually need higher density and clearer hierarchy, not oversized hero text.
Read references/core/aesthetics.md for full guidelines. Summary:
references/core/motion.md. One well-choreographed page load > 10 scattered effects.Read references/core/anti-slop.md for full rules. Key standards:
#0a0a0a, #111) — pure #000000 lacks depthtransform and opacity only — layout properties (top, left, width, height) cause jankwill-change sparingly — remove after animation completes<button>, <nav>, <main>)focus-visible:ring-2)prefers-reduced-motion supportaria-label, visible text, or labelled-by)Create a custom hook only when it owns reusable behavior, not just because code is a few lines long.
Good hook candidates: subscription lifecycle, reusable async state machine, form-field behavior shared across components, media/query/observer integration, keyboard/focus behavior, external store wrapper.
Avoid hooks that are merely thin aliases for useState, useToggle, useDebounce, or one-off component logic unless the repo already standardizes them.
Hook rules:
useEffectEvent for non-reactive callbacks inside EffectsDefault performance strategy: keep components pure, keep state local, classify state ownership correctly, use server rendering/caching boundaries, split expensive client islands, measure before memoizing.
| Tool | Use when |
|---|---|
memo | child render is expensive and props are stable |
useMemo | calculation is expensive or identity is required |
useCallback | callback identity is required by memoized child or external API |
useTransition | interaction should stay responsive while non-urgent work completes |
useOptimistic | mutation UX benefits from reversible optimistic state |
Activity | hidden UI should preserve state without active Effects |
Suspense | dynamic/async boundary needs isolated loading behavior |
If React Compiler is enabled, remove defensive memoization unless measurement or semantics justify it. Split at route boundaries and heavy components (charts, editors, 3D).
For simple forms, use controlled components with schema validation (Zod). For complex forms (multi-step, dynamic fields), use react-hook-form + Zod resolver. Always show field-level errors with role="alert".
Beyond the baseline (§7):
aria-expanded, aria-haspopup, aria-activedescendant on composite widgetsUse this section when modernizing or creating React/Next/Vite frontends. Prefer project conventions first.
<Activity> for state-preserving hidden UI (tabs, drawers, route shells). Do not use for security hiding or active subscriptions.Date.now(), Math.random(), or request-specific data in the pre-rendered shell.memo/useMemo/useCallback. Measure first unless referential stability is semantically required.cacheComponents: true): dynamic rendering is default; cache only what you explicitly mark with use cache + cacheLife + cacheTag.Prefer native CSS before JS layout observers or animation libraries:
:has() for parent/sibling state selection — keep selectors narrowprefers-reduced-motiondvh/svh/lvh over 100vh, logical properties over left/rightBefore adding state, classify it:
| State type | Owner | Default tool |
|---|---|---|
| render-local UI | nearest component | useState / useReducer |
| derived | render calculation | expression / useMemo if expensive |
| form draft | form boundary | native form, React Hook Form, TanStack Form |
| server/cache | server/cache layer | RSC, Next cache, TanStack Query, SWR |
| URL/navigation | router | path params, search params |
| global client UI | external store | Zustand, Jotai, context |
| optimistic mutation | mutation boundary | useOptimistic, mutation library |
| AI stream | conversation boundary | append-only message model + stream status |
Rules: Do not store derived state just to sync with Effect. Do not put server state in Zustand. Do not put URL-shareable state only in component state. Keep optimistic state reversible.
components.json, aliases, tokens, and registry conventionsFor AI-native interfaces (chat, agent, copilot), design explicit states: empty → prompt ready → submitted → streaming → tool call → result → complete → feedback. Never fake streaming, citations, or tool calls.
Before delivering:
min-h-[100dvh] not h-screenreferences/stacks/)Frontend does not operate in isolation. When consuming backend APIs or implementing security-sensitive UI:
| Responsibility | Owner |
|---|---|
Response envelope shape (success, data, error, meta) | dev-backend defines, dev-testing verifies |
| Consumer-side fixture alignment | Frontend — keep mocks in sync with fixtures/contracts/ |
| Contract test triggers | Frontend payload changes → update contract tests BEFORE merging (see dev-testing §3) |
| Error display mapping | Frontend maps error.code to user-facing messages; never parse error.message for logic |
When a frontend change touches API consumption:
dev-testing §3.5)| Control | Policy Owner | Implementation Owner |
|---|---|---|
| CSP directives | dev-security §5 | Frontend (no inline scripts, no eval, no surprise 3rd-party scripts) |
| CORS | dev-security §5 | Backend middleware (dev-backend §4) |
| XSS prevention | dev-security §5 | Frontend (avoid dangerouslySetInnerHTML; if needed, sanitize with DOMPurify + CSP defense) |
| Token storage | dev-security §2 | Frontend (httpOnly cookies preferred over localStorage) |
| Auth state display | dev-security §2 | Frontend (loading → check → redirect or render; never flash protected content) |
dev-backend §5Unified desktop + browser automation. Routes DOM targets to CDP (cli-jaw browser), desktop apps to Computer Use, hybrid combos to both. Codex desktop/CLI + macOS required for Computer Use.
Backend engineering guide for orchestrated sub-agents. Framework-agnostic API design, clean architecture, database optimization, security hardening, systematic debugging. Modular: SKILL.md orchestrator + references/ for deep guidance. Injected when role=backend.
Code review guide for all orchestrated sub-agents. Review process, quality thresholds, antipattern detection, giving/receiving feedback. Available to any agent regardless of role — read this SKILL.md when performing or receiving code reviews.
Data engineering and analysis guide for orchestrated sub-agents. Data pipelines, ETL/ELT design, data quality validation, SQL optimization, and analysis patterns. Injected when role=data.
Systematic debugging methodology for all orchestrated sub-agents. 4-phase root cause analysis: investigate → analyze → hypothesize → implement. Injected when encountering errors or during debugging phase.
PABCD orchestration workflow. Structured 5-phase development with user checkpoints. Injected during orchestration mode.