Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
The English summary is being prepared. Showing the original description.
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.
The English summary is being prepared. Showing the original description.
See how to installReview the instructions the agent will receive before you install.
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.No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
The English summary is being prepared. Showing the original description.
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
The English summary is being prepared. Showing the original description.
Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal
The English summary is being prepared. Showing the original description.
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
The English summary is being prepared. Showing the original description.
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.
The English summary is being prepared. Showing the original description.
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
The English summary is being prepared. Showing the original description.