Web-Taste — Anti-Slop Frontend Skill (Kimi/Lovable-tier)
Mục tiêu: ship UI đạt Kimi-tier hoặc Lovable-tier — senior designer level, không phải "đẹp tạm được".
Triết lý: AI không freestyle. Lock brief → pick deterministic direction → execute với guardrails + ready-to-paste blueprints → ship 1 artifact.
Source: distilled từ open-design (24K stars), taste-skill, impeccable.style, getdesign.md, kimi.com, lovable.dev.
1. KHI NÀO ACTIVATE — AUTO-TRIGGER MỌI WEB TASK
AUTO-TRIGGER khi (BẤT KỲ điều kiện nào):
✓ Chạm file: .tsx, .jsx, .ts, .vue, .svelte, .astro, .html, .css, .scss
✓ Chạm thư mục: components/, pages/, app/, src/, public/
✓ User nói "build / sửa / render / design / tạo / refactor / fix / thêm" +
"page / landing / UI / component / storefront / admin / site /
web / trang / giao diện / style / theme / form / modal / card"
✓ User mention brand: "design như Kimi/Lovable/Linear/Stripe/Apple/
Monocle/Vercel/Notion/Cursor/v0/Anthropic"
✓ User attach Figma URL / screenshot / mockup
✓ Project có package.json với react/vue/svelte/next/astro
DEPTH OF APPLICATION (skill scale theo task size):
┌─ Big task (build từ scratch / new page / major refactor)
│ → FULL workflow: Discovery Form → Direction → TodoWrite → 9 steps → tier scoring
│
├─ Medium task (refactor section / theme rebuild / new feature UI)
│ → SKIP Discovery Form, apply: directions + anti-slop + 5-dim critique
│
└─ Small task (tweak / bug fix UI / 1 component edit)
→ APPLY: anti-slop checklist + tactile press + responsive check
→ KHÔNG mở Discovery Form (waste user time)
KHÔNG dùng khi:
✗ Mobile app (Flutter/RN/iOS/Android/SwiftUI/Compose) → mobile-design
✗ Backend (API/DB/service/migration) → backend skills
✗ Config/infra (CI/CD/env/docker/deploy) → no UI involved
✗ Pure logic/algorithm (no UI surface) → general coding skill
2. BA LUẬT CỨNG (KHÔNG ĐƯỢC PHÁ)
LUẬT 1 — Turn 1 PHẢI emit Discovery Form, KHÔNG code ngay
Khi user mở task mới hoặc brief mới, output đầu tiên là 1 dòng prose ngắn + Discovery Form. KHÔNG file read, KHÔNG Bash, KHÔNG TodoWrite, KHÔNG extended thinking.
Tại sao: form là time-to-first-byte. User nhanh ở radio, chậm ở redirect sai. 30 giây radio beats 30 phút redirect.
Form template:
{
"title": "Quick brief — 30 giây",
"description": "Lock những cái này trước khi build. Skip cái không cần — fill default.",
"questions": [
{ "id": "output", "label": "Build cái gì?", "type": "radio", "required": true,
"options": ["Landing/marketing page", "App prototype", "Dashboard / tool UI", "Editorial page", "Slide deck", "Khác"] },
{ "id": "platform", "label": "Surface chính", "type": "radio",
"options": ["Mobile (375px first)", "Desktop web", "Responsive all sizes", "Fixed canvas 1920x1080"] },
{ "id": "audience", "label": "Cho ai?", "type": "text",
"placeholder": "VD: nhà đầu tư seed, dev-tools buyer, exec review nội bộ" },
{ "id": "tone", "label": "Visual tone (≤2)", "type": "checkbox", "maxSelections": 2,
"options": ["Editorial/magazine", "Modern minimal", "Tech/utility", "Luxury/refined", "Brutalist/experimental", "Soft/warm", "Playful/illustrative"] },
{ "id": "brand", "label": "Brand context", "type": "radio", "required": true,
"options": ["Pick a direction for me", "I have brand spec — share file", "Match reference site/screenshot"] },
{ "id": "scale", "label": "Quy mô", "type": "text",
"placeholder": "VD: 1 hero + 4 sections, 8 slides, 4 mobile screens" },
{ "id": "constraints", "label": "Khác?", "type": "textarea",
"placeholder": "Real copy, font bắt buộc, thứ phải tránh, deadline…" }
]
}
Quy tắc form:
- JSON valid (no comments, no trailing commas)
- ≤7 questions, batch 2 nếu cần
- Adapt theo brief — drop default user đã trả lời
- Lead 1 dòng prose ngắn ("Got it — landing cho SaaS B2B. Tell me the rest:")
- Sau form → STOP. KHÔNG narrate.
CHỈ skip form khi:
- User reply bên trong active design với tweak ("headline to hơn", "đổi ảnh slide 3")
- User explicit nói "skip form", "just build", "no questions"
- Message bắt đầu bằng
[form answers — …]
LUẬT 2 — Turn 2 branch theo brand
Branch A: brand: "Pick a direction for me"
KHÔNG TodoWrite. Emit form thứ 2 với 5 visual directions (xem references/directions.md):
[direction-cards form]
├── editorial-monocle — print magazine, serif, off-white + warm rust
├── modern-minimal — Linear/Vercel, system fonts, near-greyscale + cobalt
├── warm-soft — Stripe pre-2020, cream bg + terracotta + serif display
├── tech-utility — Datadog/GitHub, dense data, mono numerics + signal green
└── brutalist-experimental — Are.na/Yale, loud serif + monospace body + hot red
User pick → bind palette + font VERBATIM vào :root. KHÔNG improvise OKLch values.
Nếu user fill accent_override → dùng accent đó, giữ rest direction defaults.
Branch B: brand: "I have brand spec" hoặc "Match reference"
Brand-spec extraction TRƯỚC TodoWrite (5 steps):
- Locate — list attached files / WebFetch
<brand>.com/brand|press|about
- Download — CSS, brand-guide PDF, screenshots
- Extract —
grep -E '#[0-9a-fA-F]{3,8}' lấy hex; eyeball screenshots typography. KHÔNG đoán từ memory.
- Codify — Write
DESIGN.md ở project root (xem references/design-md-format.md cho format)
- Vocalise — state system trong 1 câu để user redirect sớm
Sau đó chuyển LUẬT 3.
Branch C: anything else / no brand
Skip thẳng LUẬT 3 với tone-based default direction.
LUẬT 3 — TodoWrite plan, live updates, ship 1 artifact
Sau khi direction/brand-spec lock → first tool call là TodoWrite với 5-10 imperative items:
1. Read DESIGN.md (brand-spec hoặc chosen direction)
2. Bind palette/font vào :root
3. Plan section/screen/slide list với rhythm (state TRƯỚC khi viết)
4. Wireframe pass — grey blocks + labelled placeholders, ship visible early
5. Fill real copy từ brief (replace [REPLACE] placeholders)
6. Fill imagery / decorative (real screenshots, not stock)
7. Self-check: chạy 27-anti-pattern audit (references/anti-slop.md, P0 PHẢI all pass)
8. 5-dim critique: philosophy/hierarchy/execution/specificity/restraint, fix < 3/5
9. Emit single <artifact>
Live update rules:
- Mark step
in_progress TRƯỚC khi start
- Mark
completed ngay khi xong (KHÔNG batch ở cuối turn)
- Plan đổi → edit list, đừng silent abandon
Step 7-8 KHÔNG NEGOTIABLE. Failed P0 → fix trước khi emit.
3. MODE — BRAND vs PRODUCT (impeccable.style)
Trước khi viết CSS, chọn mode dựa vào output type:
BRAND MODE Marketing/editorial/landing/pitch deck
→ Emotion-driven, hero-led, 1 decisive flourish, real photography
→ Display font có character (serif hoặc display-sans), tracking-tight
→ Whitespace generous, long-form sections OK
→ Animation: orchestrated reveals, parallax, cinematic
→ AI Tells to avoid: filler copy, fake metrics, generic icons
PRODUCT MODE App UI / dashboard / tool / admin / form-heavy
→ Function-first, density rewarded, no marketing voice
→ Display = same family as body (Geist/Inter/system), no serif headlines
→ Tabular numerics for data, mono for IDs/codes
→ Animation: only state-change feedback (loading/empty/error/success)
→ AI Tells to avoid: hero images, oversized H1, decorative shadows
Câu hỏi check: "Người dùng đến đây để CẢM NHẬN, hay để LÀM CÁI GÌ?" Cảm nhận → Brand. Làm việc → Product.
4. BIAS CORRECTION RULES (proactive — viết default tốt thay vì fix sau)
Rule 1: Deterministic Typography
- Display/Headlines:
text-4xl md:text-6xl tracking-tighter leading-none (brand mode); text-2xl font-semibold (product mode)
- Body:
text-base text-neutral-600 leading-relaxed max-w-[65ch]
- ANTI-SLOP fonts cấm dùng làm DISPLAY:
Inter, Roboto, Arial, Open Sans (body OK)
- Brand mode display:
Geist, Outfit, Cabinet Grotesk, Satoshi, Newsreader, Tiempos, Iowan Old Style
- Product mode:
Geist + Geist Mono, hoặc Satoshi + JetBrains Mono. Serif BANNED cho dashboard.
Rule 2: Color Calibration
- Max 1 accent color, saturation < 80%
- Neutral base: Zinc/Slate/Stone (KHÔNG pure black
#000, KHÔNG pure gray)
- THE LILA BAN: No purple/violet glow, no neon gradient, no "AI Purple" aesthetic
- One palette per project. Không mix warm-gray + cool-gray cùng output
Rule 3: Layout Diversification
- Centered Hero CẤM khi
LAYOUT_VARIANCE > 4 — force Split Screen / Asymmetric
- 3-column equal cards CẤM — dùng Bento, Zig-Zag, asymmetric grid
- Mobile override: layouts ≥md PHẢI fallback strict 1-column ở
< 768px
- Container:
max-w-[1400px] mx-auto hoặc max-w-7xl
Rule 4: Materiality
- Card containers chỉ dùng KHI elevation = hierarchy. Else dùng
border-t, divide-y, negative space
- Shadow tinted theo background hue, KHÔNG default
shadow-md/lg/xl
- Rounded radius: 8-12px crisp (product), hoặc 16-32px gentle (brand soft mode)
- KHÔNG
rounded-full cho large containers
- KHÔNG glassmorphism trừ khi có lý do — nếu dùng PHẢI có 1px inner border + inset shadow
Rule 5: Interactive UI States (mandatory generation)
LLM mặc định gen "static success" — em PHẢI gen full cycle:
- Loading: Skeletal loader match layout (KHÔNG generic spinner)
- Empty: Composed empty state với hint cách populate
- Error: Inline error reporting (forms)
- Tactile feedback:
:active → -translate-y-[1px] hoặc scale-[0.98]
Rule 6: Form Patterns
- Label TRÊN input (KHÔNG floating label, KHÔNG label trong placeholder)
- Helper text tồn tại trong markup (kể cả không hiển thị)
- Error text DƯỚI input
- Spacing:
gap-2 cho input block
5. AI TELLS — FORBIDDEN PATTERNS (audit checklist trước ship)
Visual & CSS (cấm tuyệt đối trừ khi user explicit yêu cầu)
- ❌ Neon/outer glows (
box-shadow glow)
- ❌ Pure black
#000000 (dùng off-black #0a0a0a, Zinc-950)
- ❌ Oversaturated accents (saturation > 80%)
- ❌ Excessive gradient text (text-fill gradients cho large headers)
- ❌ Custom mouse cursors
- ❌ Purple/violet gradient backgrounds (LILA BAN)
- ❌ Aggressive emoji feature icons (✨ 🚀 🎯)
- ❌ Rounded card với left coloured border accent
- ❌ Hand-drawn SVG humans/faces/scenery
- ❌ Italic-serif display headers
- ❌ Gradient on every background
Typography
- ❌ Inter/Roboto/Arial làm DISPLAY face
- ❌ Oversized H1 ngoài kiểm soát (control hierarchy bằng weight + color, không chỉ scale)
- ❌ Serif trên Dashboard/Software UI
Layout & Spacing
- ❌ 3-column equal cards generic
- ❌ Floating elements với gap awkward
- ❌ Padding/margin không mathematically perfect
- ❌ Centered Hero text trên dark image (try asymmetric thay vào)
Content & Data — "Jane Doe Effect"
- ❌ Tên placeholder "John Doe", "Sarah Chan", "Acme Corp"
- ❌ Generic SVG egg avatars / Lucide user icons
- ❌ Fake metrics "10× faster", "99.9% uptime" không có source
- ❌ Predictable numbers (
50%, 99.99%, 1234567)
- ❌ Startup slop names "Acme", "Nexus", "SmartFlow"
- ❌ AI copywriting clichés: "Elevate", "Seamless", "Unleash", "Next-Gen", "Game-changer", "Delve"
- ❌ Lorem ipsum, "Feature One / Feature Two"
External Resources
- ❌ Unsplash links (broken thường) — dùng
https://picsum.photos/seed/{string}/800/600
- ❌ shadcn/ui generic default — PHẢI customize radii/colors/shadows
- ❌ Invented metrics → leave honest placeholder (
—, grey block, labelled stub)
Honest placeholder beats fake stat.
Full danh sách 27 anti-patterns: xem references/anti-slop.md.
6. PERFORMANCE GUARDRAILS
- DOM cost: Grain/noise filters CHỈ trên
fixed inset-0 pointer-events-none pseudo-elements, KHÔNG trên scrolling containers
- Hardware acceleration: Animate ONLY
transform và opacity. KHÔNG animate top/left/width/height
- Z-index: KHÔNG spam
z-50/z-10. Dùng systemic layer contexts (sticky nav, modal, overlay)
- Scroll listeners: KHÔNG dùng
window.addEventListener('scroll'). Dùng IntersectionObserver
- GSAP vs Framer Motion: KHÔNG mix trong cùng component tree. Default Framer Motion cho UI; GSAP/ThreeJS exclusively cho isolated full-page scrolltelling
7. DIAL CONFIG (3 knob để adjust output)
DESIGN_VARIANCE: 8 (1=symmetry, 10=chaos)
MOTION_INTENSITY: 6 (1=static, 10=cinematic)
VISUAL_DENSITY: 4 (1=art gallery, 10=cockpit)
User có thể override bằng prompt: "make it more variance", "less motion", "denser data". Adapt config dynamically.
DESIGN_VARIANCE
- 1-3: flexbox center, symmetrical 12-col grid, equal padding
- 4-7: offset (margin-top: -2rem overlap), varied aspect ratios, left-aligned headers
- 8-10: masonry, fractional grid units, massive empty zones
- MOBILE OVERRIDE: levels 4-10 PHẢI strict 1-col fallback ở
< 768px
MOTION_INTENSITY
- 1-3: No automatic animation. CSS
:hover/:active only
- 4-7:
transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1). animation-delay cascade. Transform/opacity only
- 8-10: Scroll-triggered reveals, parallax. Framer Motion hooks. NEVER
window.addEventListener('scroll')
VISUAL_DENSITY
- 1-3: Art gallery — huge whitespace, expensive feel
- 4-7: Daily app — normal spacing
- 8-10: Cockpit — tiny padding, 1px lines (no cards), monospace numerics
8. WORKFLOW EXECUTION (recap với Kimi/Lovable-tier target)
TURN 1
├─ 1-line prose ("Got it — landing cho SaaS B2B. Tell me the rest:")
├─ <question-form id="discovery"> (≤7 questions)
└─ STOP — KHÔNG narrate
TURN 2 (branch on `brand` answer)
├─ A. "Pick direction" → emit <question-form id="direction"> (5 cards) → STOP
├─ B. "Have brand spec / Match reference" → extract → write DESIGN.md → goto Turn 3
└─ C. else → tone-based default direction → goto Turn 3
TURN 3+ — TARGET KIMI/LOVABLE-TIER, NOT "decent"
├─ READ references/quality-tiers.md → know the bar
├─ TodoWrite plan (5-10 imperative items)
├─ Mark steps in_progress / completed live (no batch)
├─ HERO: pick from references/hero-patterns.md (7 ready-to-paste)
├─ SECTIONS: pick from references/section-blueprints.md (10 ready-to-paste)
├─ MOTION: add từ references/motion-recipes.md (ambient pulse + entrance reveal mandatory)
├─ Wireframe pass first (grey blocks, labelled stubs) — show visible early
├─ Fill real copy + imagery (specific numbers, real names, picsum.photos)
├─ Step 7: 27-anti-pattern audit (P0 must all pass) — references/anti-slop.md
├─ Step 8: 5-dim critique (fix < 3/5) — references/critique.md
├─ Step 9: Quality tier scoring (≥ 24/26 = Kimi/Lovable-tier achieved) — references/quality-tiers.md
└─ Emit single <artifact>
9. REFERENCE FILES — đọc on-demand
Foundation (luôn đọc khi bắt đầu task lớn)
| File |
Khi nào đọc |
references/quality-tiers.md |
BẮT BUỘC đọc ở Turn 3 — Kimi-tier vs Lovable-tier checklist + scoring rubric |
references/directions.md |
User chọn "Pick direction" → bind palette/font verbatim |
references/discovery-form.md |
Viết Discovery Form — full JSON schema, edge cases, examples |
Building (đọc khi viết section/hero)
| File |
Khi nào đọc |
references/hero-patterns.md |
READY-TO-PASTE 7 hero patterns (oversized display, bento, asymmetric split, cinematic, animated pulse, magazine drop cap, dual-tone) |
references/section-blueprints.md |
READY-TO-PASTE 10 sections (bento, zig-zag, pricing, testimonial wall, FAQ, stat strip, CTA, footer, logo strip, comparison) + section combo recipes |
references/motion-recipes.md |
10 animation recipes (ambient pulse, IntersectionObserver reveal, sticky stack, magnetic button, shimmer, tactile press, counter-up, choreography, parallax, cursor spotlight) |
QA (đọc ở Step 7-8)
| File |
Khi nào đọc |
references/anti-slop.md |
Step 7 — full 27 anti-patterns với fix recommendations |
references/critique.md |
Step 8 — 5-dim self-critique framework với scoring rubric |
Brand spec
| File |
Khi nào đọc |
references/design-md-format.md |
Branch B (extract brand-spec) hoặc tạo DESIGN.md mới — Google Stitch compatible |
Starter Design Systems (8 cái)
| File |
Direction |
Best for |
design-systems/kimi-style.md |
Editorial Premium AI |
AI tool landing, Kimi-tier target |
design-systems/lovable-style.md |
Modern Minimal Cinematic |
AI builder, dev tool, Lovable-tier target |
design-systems/linear.md |
Modern Minimal Dark |
Dev tool, productivity SaaS |
design-systems/stripe.md |
Warm Soft |
Fintech, wellness, indie SaaS |
design-systems/apple.md |
Modern Minimal Premium |
Premium product, brand site |
design-systems/monocle-editorial.md |
Editorial |
Long-form, content, journalism |
design-systems/brutalist-arena.md |
Brutalist |
Agency, manifesto, creative |
design-systems/datadog-utility.md |
Tech Utility |
Dashboard, admin, data-heavy |
10. FAQ
Q: Skill này thay thế shadcn/ui hay TailwindCSS?
A: Không. Skill chỉ guide cách dùng chúng — bias correction + anti-slop rules. Code output vẫn là Tailwind + React (hoặc whatever stack user dùng).
Q: Có DESIGN.md sẵn rồi, vẫn cần Discovery Form?
A: Có, nhưng tailor — drop questions DESIGN.md đã trả lời (palette, typography). Vẫn cần lock: output type, audience, tone, scale.
Q: User nói "just build, skip form" thì sao?
A: Skip form, dùng tone-based default direction (modern-minimal cho dev-tools, warm-soft cho consumer/wellness, editorial cho content/media, tech-utility cho data/admin, brutalist cho creative/agency).
Q: Output stack?
A: Default React + TailwindCSS (v3 hoặc v4 — check package.json). Adapt nếu user dùng stack khác (Vue, Svelte, Astro, vanilla HTML).
Triết lý cuối: Mỗi rule trên đây là 1 lựa chọn cố ý chống lại default biases của LLM. AI mặc định ship "trung bình đẹp" vì training data đầy mediocre web. Skill này force ship "có taste" bằng deterministic guardrails + ready-to-paste blueprints + quality tier scoring.
11. QUALITY TIER QUICK REFERENCE
TIER 1 — "AI default" — Bootstrap/shadcn vibe, instantly recognizable as AI gen
TIER 2 — "Decent" — Pass review, không xấu nhưng không memorable
TIER 3 — "Kimi/Lovable-tier" — Senior designer level (TARGET)
Kimi-tier signature checklist (editorial premium AI)
□ Page padding ≥ py-32, ambient gradient pulse, AI input prominent
□ Display clamp(48px, 7vw, 96px+), italic/serif emphasis, tracking-tighter
□ One accent ≤ 2 instances, real product UI screenshots
□ Mono numerics tabular, sticky frosted nav backdrop-blur-xl
□ NO Inter display, NO emoji icons, NO 3-col equal feature grid
Lovable-tier signature checklist (modern minimal cinematic)
□ Bento grid hero (6-9 tiles) HOẶC oversized type ≥ text-7xl
□ Dark mode native, animated gradient pulse 2+ layers
□ Big bold display weight 600+, gradient text emphasis ≤ 1 element
□ Cards rounded-3xl border-white/10, conversational hero copy
□ Specific stats organic (847k, 14ms, 99.97%), real product preview tiles
Score self ≥ 24/26 trên 13 aspects (xem references/quality-tiers.md cho full table) → Kimi/Lovable-tier achieved.
< 20/26 → AI default — major rework needed.
1---2name: web-taste3description: Anti-slop web frontend skill — AUTO-TRIGGER mọi web UI task. Force ship Kimi/Lovable-tier quality bằng 3 luật cứng: (1) Turn 1 emit Discovery Form lock brief TRƯỚC khi gen pixel (cho task lớn) hoặc apply quality bar (cho tweak nhỏ), (2) Turn 2 pick 1 trong 5 visual directions deterministic (OKLch palette + font + posture) hoặc extract brand-spec — KHÔNG freestyle, (3) Turn 3+ TodoWrite plan → live updates → 27 anti-pattern checklist + 5-dim critique + quality tier scoring → ship single artifact. AUTO-TRIGGER khi: chạm file .tsx/.jsx/.ts/.vue/.svelte/.astro/.html/.css/.scss/.tailwind, hoặc user nói "build/sửa/render/design/tạo/refactor" + "page/landing/UI/component/storefront/admin/site/web/trang/giao diện/style/theme", hoặc "design như Kimi/Lovable/Linear/Stripe/Apple/Monocle/Vercel/Notion". Bao gồm: 9 references (directions/discovery-form/anti-slop/critique/design-md-format/quality-tiers/hero-patterns/section-blueprints/motion-recipes), 8 starter design systems (Kimi, Lovable, Linear, Stripe, Apple, Monocle,4---56# Web-Taste — Anti-Slop Frontend Skill (Kimi/Lovable-tier)78> **Mục tiêu:** ship UI **đạt Kimi-tier hoặc Lovable-tier** — senior designer level, không phải "đẹp tạm được".9> **Triết lý:** AI không freestyle. Lock brief → pick deterministic direction → execute với guardrails + ready-to-paste blueprints → ship 1 artifact.10> Source: distilled từ open-design (24K stars), taste-skill, impeccable.style, getdesign.md, kimi.com, lovable.dev.1112---1314## 1. KHI NÀO ACTIVATE — AUTO-TRIGGER MỌI WEB TASK1516```17AUTO-TRIGGER khi (BẤT KỲ điều kiện nào):18 ✓ Chạm file: .tsx, .jsx, .ts, .vue, .svelte, .astro, .html, .css, .scss19 ✓ Chạm thư mục: components/, pages/, app/, src/, public/20 ✓ User nói "build / sửa / render / design / tạo / refactor / fix / thêm" +21 "page / landing / UI / component / storefront / admin / site /22 web / trang / giao diện / style / theme / form / modal / card"23 ✓ User mention brand: "design như Kimi/Lovable/Linear/Stripe/Apple/24 Monocle/Vercel/Notion/Cursor/v0/Anthropic"25 ✓ User attach Figma URL / screenshot / mockup26 ✓ Project có package.json với react/vue/svelte/next/astro2728DEPTH OF APPLICATION (skill scale theo task size):29 ┌─ Big task (build từ scratch / new page / major refactor)30 │ → FULL workflow: Discovery Form → Direction → TodoWrite → 9 steps → tier scoring31 │32 ├─ Medium task (refactor section / theme rebuild / new feature UI)33 │ → SKIP Discovery Form, apply: directions + anti-slop + 5-dim critique34 │35 └─ Small task (tweak / bug fix UI / 1 component edit)36 → APPLY: anti-slop checklist + tactile press + responsive check37 → KHÔNG mở Discovery Form (waste user time)3839KHÔNG dùng khi:40 ✗ Mobile app (Flutter/RN/iOS/Android/SwiftUI/Compose) → mobile-design41 ✗ Backend (API/DB/service/migration) → backend skills42 ✗ Config/infra (CI/CD/env/docker/deploy) → no UI involved43 ✗ Pure logic/algorithm (no UI surface) → general coding skill44```4546---4748## 2. BA LUẬT CỨNG (KHÔNG ĐƯỢC PHÁ)4950### LUẬT 1 — Turn 1 PHẢI emit Discovery Form, KHÔNG code ngay5152Khi user mở task mới hoặc brief mới, output đầu tiên là **1 dòng prose ngắn + Discovery Form**. KHÔNG file read, KHÔNG Bash, KHÔNG TodoWrite, KHÔNG extended thinking.5354Tại sao: form là time-to-first-byte. User nhanh ở radio, chậm ở redirect sai. **30 giây radio beats 30 phút redirect.**5556Form template:5758```json59{60 "title": "Quick brief — 30 giây",61 "description": "Lock những cái này trước khi build. Skip cái không cần — fill default.",62 "questions": [63 { "id": "output", "label": "Build cái gì?", "type": "radio", "required": true,64 "options": ["Landing/marketing page", "App prototype", "Dashboard / tool UI", "Editorial page", "Slide deck", "Khác"] },65 { "id": "platform", "label": "Surface chính", "type": "radio",66 "options": ["Mobile (375px first)", "Desktop web", "Responsive all sizes", "Fixed canvas 1920x1080"] },67 { "id": "audience", "label": "Cho ai?", "type": "text",68 "placeholder": "VD: nhà đầu tư seed, dev-tools buyer, exec review nội bộ" },69 { "id": "tone", "label": "Visual tone (≤2)", "type": "checkbox", "maxSelections": 2,70 "options": ["Editorial/magazine", "Modern minimal", "Tech/utility", "Luxury/refined", "Brutalist/experimental", "Soft/warm", "Playful/illustrative"] },71 { "id": "brand", "label": "Brand context", "type": "radio", "required": true,72 "options": ["Pick a direction for me", "I have brand spec — share file", "Match reference site/screenshot"] },73 { "id": "scale", "label": "Quy mô", "type": "text",74 "placeholder": "VD: 1 hero + 4 sections, 8 slides, 4 mobile screens" },75 { "id": "constraints", "label": "Khác?", "type": "textarea",76 "placeholder": "Real copy, font bắt buộc, thứ phải tránh, deadline…" }77 ]78}79```8081**Quy tắc form:**82- JSON valid (no comments, no trailing commas)83- ≤7 questions, batch 2 nếu cần84- Adapt theo brief — drop default user đã trả lời85- Lead 1 dòng prose ngắn ("Got it — landing cho SaaS B2B. Tell me the rest:")86- Sau form → **STOP**. KHÔNG narrate.8788**CHỈ skip form khi:**89- User reply *bên trong active design* với tweak ("headline to hơn", "đổi ảnh slide 3")90- User explicit nói "skip form", "just build", "no questions"91- Message bắt đầu bằng `[form answers — …]`9293---9495### LUẬT 2 — Turn 2 branch theo `brand`9697#### Branch A: `brand: "Pick a direction for me"`9899KHÔNG TodoWrite. Emit form thứ 2 với 5 visual directions (xem `references/directions.md`):100101```102[direction-cards form]103 ├── editorial-monocle — print magazine, serif, off-white + warm rust104 ├── modern-minimal — Linear/Vercel, system fonts, near-greyscale + cobalt105 ├── warm-soft — Stripe pre-2020, cream bg + terracotta + serif display106 ├── tech-utility — Datadog/GitHub, dense data, mono numerics + signal green107 └── brutalist-experimental — Are.na/Yale, loud serif + monospace body + hot red108```109110User pick → bind palette + font **VERBATIM** vào `:root`. KHÔNG improvise OKLch values.111112Nếu user fill `accent_override` → dùng accent đó, giữ rest direction defaults.113114#### Branch B: `brand: "I have brand spec"` hoặc `"Match reference"`115116Brand-spec extraction TRƯỚC TodoWrite (5 steps):1171. **Locate** — list attached files / WebFetch `<brand>.com/brand|press|about`1182. **Download** — CSS, brand-guide PDF, screenshots1193. **Extract** — `grep -E '#[0-9a-fA-F]{3,8}'` lấy hex; eyeball screenshots typography. KHÔNG đoán từ memory.1204. **Codify** — Write `DESIGN.md` ở project root (xem `references/design-md-format.md` cho format)1215. **Vocalise** — state system trong 1 câu để user redirect sớm122123Sau đó chuyển LUẬT 3.124125#### Branch C: anything else / no brand126127Skip thẳng LUẬT 3 với tone-based default direction.128129---130131### LUẬT 3 — TodoWrite plan, live updates, ship 1 artifact132133Sau khi direction/brand-spec lock → **first tool call** là TodoWrite với 5-10 imperative items:134135```1361. Read DESIGN.md (brand-spec hoặc chosen direction)1372. Bind palette/font vào :root1383. Plan section/screen/slide list với rhythm (state TRƯỚC khi viết)1394. Wireframe pass — grey blocks + labelled placeholders, ship visible early1405. Fill real copy từ brief (replace [REPLACE] placeholders)1416. Fill imagery / decorative (real screenshots, not stock)1427. Self-check: chạy 27-anti-pattern audit (references/anti-slop.md, P0 PHẢI all pass)1438. 5-dim critique: philosophy/hierarchy/execution/specificity/restraint, fix < 3/51449. Emit single <artifact>145```146147**Live update rules:**148- Mark step `in_progress` TRƯỚC khi start149- Mark `completed` ngay khi xong (KHÔNG batch ở cuối turn)150- Plan đổi → edit list, đừng silent abandon151152**Step 7-8 KHÔNG NEGOTIABLE.** Failed P0 → fix trước khi emit.153154---155156## 3. MODE — BRAND vs PRODUCT (impeccable.style)157158Trước khi viết CSS, chọn mode dựa vào output type:159160```161BRAND MODE Marketing/editorial/landing/pitch deck162 → Emotion-driven, hero-led, 1 decisive flourish, real photography163 → Display font có character (serif hoặc display-sans), tracking-tight164 → Whitespace generous, long-form sections OK165 → Animation: orchestrated reveals, parallax, cinematic166 → AI Tells to avoid: filler copy, fake metrics, generic icons167168PRODUCT MODE App UI / dashboard / tool / admin / form-heavy169 → Function-first, density rewarded, no marketing voice170 → Display = same family as body (Geist/Inter/system), no serif headlines171 → Tabular numerics for data, mono for IDs/codes172 → Animation: only state-change feedback (loading/empty/error/success)173 → AI Tells to avoid: hero images, oversized H1, decorative shadows174```175176Câu hỏi check: "Người dùng đến đây để CẢM NHẬN, hay để LÀM CÁI GÌ?" Cảm nhận → Brand. Làm việc → Product.177178---179180## 4. BIAS CORRECTION RULES (proactive — viết default tốt thay vì fix sau)181182### Rule 1: Deterministic Typography183- **Display/Headlines:** `text-4xl md:text-6xl tracking-tighter leading-none` (brand mode); `text-2xl font-semibold` (product mode)184- **Body:** `text-base text-neutral-600 leading-relaxed max-w-[65ch]`185- **ANTI-SLOP fonts cấm dùng làm DISPLAY:** `Inter`, `Roboto`, `Arial`, `Open Sans` (body OK)186- **Brand mode display:** `Geist`, `Outfit`, `Cabinet Grotesk`, `Satoshi`, `Newsreader`, `Tiempos`, `Iowan Old Style`187- **Product mode:** `Geist` + `Geist Mono`, hoặc `Satoshi` + `JetBrains Mono`. **Serif BANNED cho dashboard.**188189### Rule 2: Color Calibration190- Max 1 accent color, saturation < 80%191- Neutral base: Zinc/Slate/Stone (KHÔNG pure black `#000`, KHÔNG pure gray)192- **THE LILA BAN:** No purple/violet glow, no neon gradient, no "AI Purple" aesthetic193- One palette per project. Không mix warm-gray + cool-gray cùng output194195### Rule 3: Layout Diversification196- **Centered Hero CẤM** khi `LAYOUT_VARIANCE > 4` — force Split Screen / Asymmetric197- **3-column equal cards CẤM** — dùng Bento, Zig-Zag, asymmetric grid198- Mobile override: layouts ≥md PHẢI fallback strict 1-column ở `< 768px`199- Container: `max-w-[1400px] mx-auto` hoặc `max-w-7xl`200201### Rule 4: Materiality202- Card containers chỉ dùng KHI elevation = hierarchy. Else dùng `border-t`, `divide-y`, negative space203- Shadow tinted theo background hue, KHÔNG default `shadow-md/lg/xl`204- Rounded radius: 8-12px crisp (product), hoặc 16-32px gentle (brand soft mode)205- KHÔNG `rounded-full` cho large containers206- KHÔNG glassmorphism trừ khi có lý do — nếu dùng PHẢI có 1px inner border + inset shadow207208### Rule 5: Interactive UI States (mandatory generation)209LLM mặc định gen "static success" — em PHẢI gen full cycle:210- **Loading:** Skeletal loader match layout (KHÔNG generic spinner)211- **Empty:** Composed empty state với hint cách populate212- **Error:** Inline error reporting (forms)213- **Tactile feedback:** `:active` → `-translate-y-[1px]` hoặc `scale-[0.98]`214215### Rule 6: Form Patterns216- Label TRÊN input (KHÔNG floating label, KHÔNG label trong placeholder)217- Helper text tồn tại trong markup (kể cả không hiển thị)218- Error text DƯỚI input219- Spacing: `gap-2` cho input block220221---222223## 5. AI TELLS — FORBIDDEN PATTERNS (audit checklist trước ship)224225### Visual & CSS (cấm tuyệt đối trừ khi user explicit yêu cầu)226- ❌ Neon/outer glows (`box-shadow` glow)227- ❌ Pure black `#000000` (dùng off-black `#0a0a0a`, Zinc-950)228- ❌ Oversaturated accents (saturation > 80%)229- ❌ Excessive gradient text (text-fill gradients cho large headers)230- ❌ Custom mouse cursors231- ❌ Purple/violet gradient backgrounds (LILA BAN)232- ❌ Aggressive emoji feature icons (✨ 🚀 🎯)233- ❌ Rounded card với left coloured border accent234- ❌ Hand-drawn SVG humans/faces/scenery235- ❌ Italic-serif display headers236- ❌ Gradient on every background237238### Typography239- ❌ Inter/Roboto/Arial làm DISPLAY face240- ❌ Oversized H1 ngoài kiểm soát (control hierarchy bằng weight + color, không chỉ scale)241- ❌ Serif trên Dashboard/Software UI242243### Layout & Spacing244- ❌ 3-column equal cards generic245- ❌ Floating elements với gap awkward246- ❌ Padding/margin không mathematically perfect247- ❌ Centered Hero text trên dark image (try asymmetric thay vào)248249### Content & Data — "Jane Doe Effect"250- ❌ Tên placeholder "John Doe", "Sarah Chan", "Acme Corp"251- ❌ Generic SVG egg avatars / Lucide user icons252- ❌ Fake metrics "10× faster", "99.9% uptime" không có source253- ❌ Predictable numbers (`50%`, `99.99%`, `1234567`)254- ❌ Startup slop names "Acme", "Nexus", "SmartFlow"255- ❌ AI copywriting clichés: "Elevate", "Seamless", "Unleash", "Next-Gen", "Game-changer", "Delve"256- ❌ Lorem ipsum, "Feature One / Feature Two"257258### External Resources259- ❌ Unsplash links (broken thường) — dùng `https://picsum.photos/seed/{string}/800/600`260- ❌ shadcn/ui generic default — PHẢI customize radii/colors/shadows261- ❌ Invented metrics → leave honest placeholder (`—`, grey block, labelled stub)262263**Honest placeholder beats fake stat.**264265Full danh sách 27 anti-patterns: xem `references/anti-slop.md`.266267---268269## 6. PERFORMANCE GUARDRAILS270271- **DOM cost:** Grain/noise filters CHỈ trên `fixed inset-0 pointer-events-none` pseudo-elements, KHÔNG trên scrolling containers272- **Hardware acceleration:** Animate ONLY `transform` và `opacity`. KHÔNG animate `top`/`left`/`width`/`height`273- **Z-index:** KHÔNG spam `z-50`/`z-10`. Dùng systemic layer contexts (sticky nav, modal, overlay)274- **Scroll listeners:** KHÔNG dùng `window.addEventListener('scroll')`. Dùng `IntersectionObserver`275- **GSAP vs Framer Motion:** KHÔNG mix trong cùng component tree. Default Framer Motion cho UI; GSAP/ThreeJS exclusively cho isolated full-page scrolltelling276277---278279## 7. DIAL CONFIG (3 knob để adjust output)280281```282DESIGN_VARIANCE: 8 (1=symmetry, 10=chaos)283MOTION_INTENSITY: 6 (1=static, 10=cinematic)284VISUAL_DENSITY: 4 (1=art gallery, 10=cockpit)285```286287User có thể override bằng prompt: "make it more variance", "less motion", "denser data". Adapt config dynamically.288289### DESIGN_VARIANCE290- **1-3:** flexbox center, symmetrical 12-col grid, equal padding291- **4-7:** offset (margin-top: -2rem overlap), varied aspect ratios, left-aligned headers292- **8-10:** masonry, fractional grid units, massive empty zones293- **MOBILE OVERRIDE:** levels 4-10 PHẢI strict 1-col fallback ở `< 768px`294295### MOTION_INTENSITY296- **1-3:** No automatic animation. CSS `:hover`/`:active` only297- **4-7:** `transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1)`. `animation-delay` cascade. Transform/opacity only298- **8-10:** Scroll-triggered reveals, parallax. Framer Motion hooks. NEVER `window.addEventListener('scroll')`299300### VISUAL_DENSITY301- **1-3:** Art gallery — huge whitespace, expensive feel302- **4-7:** Daily app — normal spacing303- **8-10:** Cockpit — tiny padding, 1px lines (no cards), monospace numerics304305---306307## 8. WORKFLOW EXECUTION (recap với Kimi/Lovable-tier target)308309```310TURN 1311 ├─ 1-line prose ("Got it — landing cho SaaS B2B. Tell me the rest:")312 ├─ <question-form id="discovery"> (≤7 questions)313 └─ STOP — KHÔNG narrate314315TURN 2 (branch on `brand` answer)316 ├─ A. "Pick direction" → emit <question-form id="direction"> (5 cards) → STOP317 ├─ B. "Have brand spec / Match reference" → extract → write DESIGN.md → goto Turn 3318 └─ C. else → tone-based default direction → goto Turn 3319320TURN 3+ — TARGET KIMI/LOVABLE-TIER, NOT "decent"321 ├─ READ references/quality-tiers.md → know the bar322 ├─ TodoWrite plan (5-10 imperative items)323 ├─ Mark steps in_progress / completed live (no batch)324 ├─ HERO: pick from references/hero-patterns.md (7 ready-to-paste)325 ├─ SECTIONS: pick from references/section-blueprints.md (10 ready-to-paste)326 ├─ MOTION: add từ references/motion-recipes.md (ambient pulse + entrance reveal mandatory)327 ├─ Wireframe pass first (grey blocks, labelled stubs) — show visible early328 ├─ Fill real copy + imagery (specific numbers, real names, picsum.photos)329 ├─ Step 7: 27-anti-pattern audit (P0 must all pass) — references/anti-slop.md330 ├─ Step 8: 5-dim critique (fix < 3/5) — references/critique.md331 ├─ Step 9: Quality tier scoring (≥ 24/26 = Kimi/Lovable-tier achieved) — references/quality-tiers.md332 └─ Emit single <artifact>333```334335---336337## 9. REFERENCE FILES — đọc on-demand338339### Foundation (luôn đọc khi bắt đầu task lớn)340| File | Khi nào đọc |341|------|-------------|342| `references/quality-tiers.md` | **BẮT BUỘC** đọc ở Turn 3 — Kimi-tier vs Lovable-tier checklist + scoring rubric |343| `references/directions.md` | User chọn "Pick direction" → bind palette/font verbatim |344| `references/discovery-form.md` | Viết Discovery Form — full JSON schema, edge cases, examples |345346### Building (đọc khi viết section/hero)347| File | Khi nào đọc |348|------|-------------|349| `references/hero-patterns.md` | **READY-TO-PASTE** 7 hero patterns (oversized display, bento, asymmetric split, cinematic, animated pulse, magazine drop cap, dual-tone) |350| `references/section-blueprints.md` | **READY-TO-PASTE** 10 sections (bento, zig-zag, pricing, testimonial wall, FAQ, stat strip, CTA, footer, logo strip, comparison) + section combo recipes |351| `references/motion-recipes.md` | 10 animation recipes (ambient pulse, IntersectionObserver reveal, sticky stack, magnetic button, shimmer, tactile press, counter-up, choreography, parallax, cursor spotlight) |352353### QA (đọc ở Step 7-8)354| File | Khi nào đọc |355|------|-------------|356| `references/anti-slop.md` | Step 7 — full 27 anti-patterns với fix recommendations |357| `references/critique.md` | Step 8 — 5-dim self-critique framework với scoring rubric |358359### Brand spec360| File | Khi nào đọc |361|------|-------------|362| `references/design-md-format.md` | Branch B (extract brand-spec) hoặc tạo DESIGN.md mới — Google Stitch compatible |363364### Starter Design Systems (8 cái)365| File | Direction | Best for |366|------|-----------|----------|367| `design-systems/kimi-style.md` | Editorial Premium AI | AI tool landing, Kimi-tier target |368| `design-systems/lovable-style.md` | Modern Minimal Cinematic | AI builder, dev tool, Lovable-tier target |369| `design-systems/linear.md` | Modern Minimal Dark | Dev tool, productivity SaaS |370| `design-systems/stripe.md` | Warm Soft | Fintech, wellness, indie SaaS |371| `design-systems/apple.md` | Modern Minimal Premium | Premium product, brand site |372| `design-systems/monocle-editorial.md` | Editorial | Long-form, content, journalism |373| `design-systems/brutalist-arena.md` | Brutalist | Agency, manifesto, creative |374| `design-systems/datadog-utility.md` | Tech Utility | Dashboard, admin, data-heavy |375376---377378## 10. FAQ379380**Q: Skill này thay thế shadcn/ui hay TailwindCSS?**381A: Không. Skill chỉ guide *cách* dùng chúng — bias correction + anti-slop rules. Code output vẫn là Tailwind + React (hoặc whatever stack user dùng).382383**Q: Có DESIGN.md sẵn rồi, vẫn cần Discovery Form?**384A: Có, nhưng tailor — drop questions DESIGN.md đã trả lời (palette, typography). Vẫn cần lock: output type, audience, tone, scale.385386**Q: User nói "just build, skip form" thì sao?**387A: Skip form, dùng tone-based default direction (modern-minimal cho dev-tools, warm-soft cho consumer/wellness, editorial cho content/media, tech-utility cho data/admin, brutalist cho creative/agency).388389**Q: Output stack?**390A: Default React + TailwindCSS (v3 hoặc v4 — check `package.json`). Adapt nếu user dùng stack khác (Vue, Svelte, Astro, vanilla HTML).391392---393394**Triết lý cuối:** Mỗi rule trên đây là 1 lựa chọn cố ý chống lại default biases của LLM. AI mặc định ship "trung bình đẹp" vì training data đầy mediocre web. Skill này force ship "có taste" bằng deterministic guardrails + ready-to-paste blueprints + quality tier scoring.395396---397398## 11. QUALITY TIER QUICK REFERENCE399400```401TIER 1 — "AI default" — Bootstrap/shadcn vibe, instantly recognizable as AI gen402TIER 2 — "Decent" — Pass review, không xấu nhưng không memorable403TIER 3 — "Kimi/Lovable-tier" — Senior designer level (TARGET)404```405406### Kimi-tier signature checklist (editorial premium AI)407```408□ Page padding ≥ py-32, ambient gradient pulse, AI input prominent409□ Display clamp(48px, 7vw, 96px+), italic/serif emphasis, tracking-tighter410□ One accent ≤ 2 instances, real product UI screenshots411□ Mono numerics tabular, sticky frosted nav backdrop-blur-xl412□ NO Inter display, NO emoji icons, NO 3-col equal feature grid413```414415### Lovable-tier signature checklist (modern minimal cinematic)416```417□ Bento grid hero (6-9 tiles) HOẶC oversized type ≥ text-7xl418□ Dark mode native, animated gradient pulse 2+ layers419□ Big bold display weight 600+, gradient text emphasis ≤ 1 element420□ Cards rounded-3xl border-white/10, conversational hero copy421□ Specific stats organic (847k, 14ms, 99.97%), real product preview tiles422```423424**Score self ≥ 24/26 trên 13 aspects** (xem `references/quality-tiers.md` cho full table) → Kimi/Lovable-tier achieved.425426**< 20/26 → AI default — major rework needed.**