Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use when designing or building any screen, section or component that a user sees — visual hierarchy, typography, colour, spacing, states, forms and how to avoid the generic AI look.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Visual design is not decoration bolted on at the end — hierarchy, spacing, and states are load-bearing parts of the UI. The two most common failures are structural sameness (every screen reads as the same generic SaaS template) and a happy-path-only build (no loading/empty/error states).
Core principle: Decide the mode first — Marketing or App — then build to the quality floor: one primary action, systematic spacing, semantic tokens, and every state designed, never just the happy path.
| Marketing / landing | App / product UI | |
|---|---|---|
| Visitor wants to | decide and act | complete a task |
| Optimise for | one strong idea per section, a visual direction grounded in the product's actual subject matter, generous whitespace, real imagery | density appropriate to the task, predictability, consistency over novelty |
| Call to action | a single primary CTA, repeated | no persuasion chrome — tables/forms/filters done right |
Ground the direction in the real subject (industry, materials, audience) — a toy brand's landing page and a financial dashboard should never default to the same look.
gap-1 gap-2 gap-3 gap-4 gap-6 gap-8 gap-12 gap-16 gap-24 (4px steps).text-xs … text-6xl; body is text-base (16px); line-height 1.5–1.7 for body, 1.1–1.25 for display.max-w-prose); max two font families; weights 400/500/600/700 only.text-balance on headings, text-pretty on body paragraphs; tabular-nums on prices and stats.bg-primary, text-muted-foreground, border-border) — never raw palette classes or hex.dark: override. On a coloured surface, tint secondary text from that hue — never grey-on-colour.--radius, rounded-md/rounded-lg/rounded-full); a nested radius is ≤ its parent's.shadow-sm/shadow-md/shadow-lg); borders use border-border.focus-visible, active, disabled, and pending.AlertDialog or an undo window — never a silent delete.<label> for every field — a placeholder is not a label. Helper text under the field, not hidden in a tooltip, unless the field is self-explanatory.aria-invalid + aria-describedby pointing at it.type/inputmode/autocomplete; on submit, focus the first invalid field.Spinner, don't swap the text to "Loading…").Intl.NumberFormat, dates through Intl.DateTimeFormat, both locale-aware.lucide-react); consistent size and stroke width.aria-hidden on decorative icons; never emoji standing in for an icon.transform/opacity; ≤200ms for interaction feedback; never transition-all.motion-reduce: respected. Prefer no animation over a gratuitous one; at most one purposeful moment per marketing page, not a fade-up on every section.rgba(0,0,0,.1) shadow under everything, as the whole page's structure.border-left/border-right on cards or alerts; no nested cards; no decorative glassmorphism/blur.#F4F1EA) + terracotta accent, or near-black + a single acid-green/vermilion accent, are defaults, not a direction you chose.// ❌ generic hero: centred everything, eyebrow label, gradient text,
// no real hierarchy beyond font-size, no states considered
<section className="text-center py-24">
<p className="text-sm uppercase tracking-widest text-muted-foreground">Welcome</p>
<h1 className="text-5xl font-bold bg-gradient-to-r from-purple-500 to-pink-500 bg-clip-text text-transparent">
The best way to manage tasks
</h1>
<p className="mt-4 text-muted-foreground">Get started today.</p>
<Button className="mt-6">Submit</Button>
</section>
// ✅ one idea, real copy, clear hierarchy, semantic tokens, named action
<Container className="py-16 sm:py-24">
<div className="flex max-w-prose flex-col items-start gap-4">
<h1 className="text-balance text-4xl font-semibold text-foreground sm:text-5xl">
Plan the sprint in the time it takes to make coffee
</h1>
<p className="text-pretty text-lg text-muted-foreground">
Turn a backlog into a week your team can actually run.
</p>
<div className="flex flex-wrap gap-3 pt-4">
<Button size="lg">Start planning</Button>
<Button size="lg" variant="ghost">See how it works</Button>
</div>
</div>
</Container>
The rewrite drops the eyebrow and gradient, picks one hierarchy path (size → weight → colour), names each action, keeps one primary CTA with a quieter secondary, and spaces everything with gap from the token scale — the atoms carry no margins of their own.
bg-blue-500, text-gray-600) or hex instead of semantic tokens.<label>.bg-gradient-to-r on text, or a palette colour class, anywhere in a component.아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use when the diff adds or changes an endpoint, resolver, RPC, job or query that takes an object id, a role check, a request binding or a tenant filter - BOLA/IDOR, function-level authorization, mass assignment and tenant scoping
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use when a task changes any screen, form, dialog, menu or control - Lighthouse/axe scan of the changed screens, a keyboard walk, and the thresholds that fail a task
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
How to work a task returned with review, QA or UAT findings. Use when a task is in need_revision or PR review comments are in your context.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use when the repository keeps its alerting in code, or a person asks for alerts outside TaskTrooper - PrometheusRule YAML, a Cloud Monitoring alert policy in Terraform, a Datadog monitor, each routed to TaskTrooper's alert ingest URL so it opens an incident here
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.