agentleFS
sonhaicodersonhaicoder/haiclaudeskill/skills/frontend-design/SKILL.md

frontend-design

Skill0 starsChanged 6 months agoMITView on GitHub

Design formula bắt buộc cho MỌI web UI task (landing, storefront, admin page, component, page mới, refactor UI, theme, style). Chắt lọc từ 3 reference Kimi. Auto-trigger mỗi khi chạm file .tsx/.jsx/.vue/.svelte/.html/.css hoặc khi user nói build/thêm/sửa giao diện web, page, trang, component, landing, storefront, shop, UI. KHÔNG áp dụng cho Flutter/iOS/Android/React Native mobile — dùng mobile-design skill riêng.

187 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use instantly-campaign, albert-dm and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • yawningwhaleAISkill

    instantly-campaign

    Create a new Instantly cold-email campaign in the proven 5-email structure of the user's top-performing campaign (~16% reply rate). Use when the user wants to launch a new outbound campaign, write a cold email sequence, create an Instantly campaign, draft outreach for a new service or niche, or set up a sales sequence.

    Also in 6 projects that use this

  • yawningwhaleAISkill

    albert-dm

    Reply to DMs and messages the way Albert would. Use when the user asks "how would Albert reply to this", pastes a conversation and wants an Albert-style response, or asks you to draft/write a DM in Albert's voice. Albert sells AI voice agents / automations to local service businesses (Go High Level, lead follow-up, bookings).

    Also in 5 projects that use this

  • naman10parikhSkill

    ecosystem-reference

    Quick-access directory of Claude Code ecosystem repos, skills, plugins, MCPs, and patterns. Use when improving the harness.

    Also in 5 projects that use this

  • naman10parikhSkill

    fractal-delegation

    Also in 5 projects that use this

  • julianoczkowskiSkill

    brief-to-tasks

    Break a design brief into an ordered checklist of independently buildable tasks using vertical slices. Saves as a markdown checklist. Use when user wants to break down work, create tasks from a brief, plan implementation order, or mentions "tasks" or "breakdown".

    Also in 7 projects that use this

  • SeifBenayedSkill

    file-reading

    Use this skill when a file has been uploaded but its content is NOT in your context — only its path at /mnt/user-data/uploads/ is listed in an uploaded_files block. This skill is a router: it tells you which tool to use for each file type (pdf, docx, xlsx, csv, json, images, archives, ebooks) so you read the right amount the right way instead of blindly running cat on a binary. Triggers: any mention of /mnt/user-data/uploads/, an uploaded_files section, a file_path tag, or a user asking about an uploaded file you have not yet read. Do NOT use this skill if the file content is already visible in your context inside a documents block — you already have it.

    Also in 6 projects that use this

  • +6 more from naman10parikh

The file

Files
SKILL.md

Frontend Design Formula (WEB ONLY)

AUTO-TRIGGER

Skill này phải được invoke lần đầu tiên mỗi session khi:

  • User nói: "build page/trang/landing/storefront/shop/UI/component/form/modal/card/theme/style"
  • User nói: "thêm/sửa/làm/refactor giao diện/UI/page"
  • Agent sắp edit/write file .tsx .jsx .vue .svelte .astro .html .css .scss
  • Agent sắp chạm thư mục chứa components/ pages/ app/ của 1 web project

Sau lần đầu tiên trong session, agent đã nắm formula → không cần re-invoke trừ khi session mới.

KHÔNG dùng khi

  • Flutter / Dart / iOS / Android / React Native / SwiftUI / Jetpack Compose → dùng skill mobile-design
  • Backend-only task (API, DB, service) — không có UI
  • Config/infra task (CI/CD, env, docker) — không có UI

7 CÔNG THỨC BÍ MẬT (cái design.md KHÔNG bao giờ nói)

Đây là những chi tiết tạo ra khác biệt giữa UI "đúng spec nhưng vô hồn" và UI "đẹp mê li" như Kimi làm.

1. Typography layering — 3 scale + letter-spacing đi ngược chiều

/* EYEBROW / OVERLINE — tiny uppercase, spacing DƯƠNG */
.text-overline {
  font-size: 11px;
  font-weight: 400;
  letter-spacing: 0.12em;  /* rộng */
  text-transform: uppercase;
  line-height: 1.4;
}

/* BODY SMALL — subtle description */
.text-body-small {
  font-size: 13px;
  font-weight: 300;        /* light */
  letter-spacing: 0.01em;
  line-height: 1.5;
}

/* DISPLAY — hero heading, spacing ÂM */
.text-display {
  font-size: clamp(44px, 8vw, 72px);
  font-weight: 400;        /* KHÔNG bold */
  letter-spacing: -0.02em; /* hẹp */
  line-height: 1.05;       /* tight */
}

Quy tắc vàng: heading to → letter-spacing ÂM, tracking tight. Text nhỏ → letter-spacing DƯƠNG, tracking wide. Đây là signature của editorial design (Kinfolk, The Gentlewoman).

SAI: text-6xl font-bold thuần Tailwind — không có tracking, không có weight variation → generic.

2. Color — warm off-white + champagne accent, KHÔNG pure white/gold

/* DARK LUXURY palette */
--bg: #080808;              /* không #000 — đen ấm hơn */
--text: #F5F0EB;            /* warm off-white, KHÔNG #FFFFFF lạnh */
--text-muted: rgba(245,240,235,0.55);  /* opacity, KHÔNG text-gray-400 */
--accent: rgba(200,169,126,0.06);      /* champagne mờ, KHÔNG gold rực */

/* WARM NEUTRAL palette */
--bg: #FEFCF8;              /* warm white, KHÔNG #FFFFFF */
--bg-secondary: #F5F1E8;    /* oat */
--bg-tertiary: #E8E5E0;     /* fog gray */
--text: #2C2C2C;            /* charcoal, KHÔNG #000 */
--accent: #A8B5A0;          /* sage, muted green */

/* EDITORIAL B&W palette */
--bg: #FFFFFF;
--bg-secondary: #F8F8F8;
--text: #1A1A1A;            /* charcoal, KHÔNG #000 */
--accent: #D4AF37;          /* gold SỬ DỤNG RẤT ÍT, accent thôi */

Quy tắc:

  • KHÔNG dùng #000000 hoặc #FFFFFF thuần — luôn pha chút warm/cool
  • Text muted dùng rgba() với opacity, không phải gray scale
  • Accent color chỉ dùng 2-3% diện tích (buttons, highlights) — không phải bg lớn

3. Liquid Glass — công thức CHÍNH XÁC

Glassmorphism 90% web làm sai. Đây là công thức thật:

.liquid-glass {
  background: rgba(255, 255, 255, 0.06);
  backdrop-filter: blur(24px) saturate(140%);
  -webkit-backdrop-filter: blur(24px) saturate(140%);
  border: none;                /* ← KHÔNG border! */
  border-radius: 20px;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.2),    /* top highlight */
    inset 0 -1px 0 rgba(0,0,0,0.1),         /* bottom shadow */
    0 24px 48px -12px rgba(0,0,0,0.3);      /* depth */
  position: relative;
  overflow: hidden;
}

/* Edge specular highlight */
.liquid-glass::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1.4px;
  background: linear-gradient(180deg,
    rgba(255,255,255,0.5) 0%,
    rgba(255,255,255,0.15) 20%,
    rgba(255,255,255,0) 40%,
    rgba(255,255,255,0) 60%,
    rgba(255,255,255,0.15) 80%,
    rgba(255,255,255,0.5) 100%);
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  pointer-events: none;
  mix-blend-mode: screen;
  opacity: 0.25;
}

/* Top light reflection */
.liquid-glass::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background:
    radial-gradient(ellipse 90% 40% at 50% 0%, rgba(255,255,255,0.18) 0%, transparent 55%),
    radial-gradient(ellipse 60% 35% at 65% 10%, rgba(255,255,255,0.08) 0%, transparent 50%);
  mix-blend-mode: overlay;
  pointer-events: none;
}

Key insights:

  • KHÔNG có border — dùng ::before với mask-composite để tạo edge thật
  • backdrop-filter: saturate(140%) — tăng màu bên dưới thấm qua, không chỉ blur
  • 2 pseudo element = edge highlight + top reflection → "glass thật"
  • Inset box-shadow tạo depth 3D, không phải flat

KHÔNG làm: bg-white/10 backdrop-blur-md border border-white/20 — đây là "fake glass" generic.

4. Noise overlay — chi tiết invisible-but-felt

.noise-overlay {
  position: fixed;
  inset: 0;
  z-index: 9999;
  pointer-events: none;
  mix-blend-mode: overlay;
  opacity: 0.025;              /* 2.5% — gần như không thấy */
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
  background-repeat: repeat;
  background-size: 256px 256px;
  animation: noise-drift 20s ease-in-out infinite alternate;
}

@keyframes noise-drift {
  0%   { background-position: 0% 0%; }
  100% { background-position: 3% 5%; }
}

Tại sao: Mắt không nhận ra layer noise ở 2.5% opacity nhưng cảm nhận được "texture" — phá cảm giác "flat/sterile" của web thường. Đây là chi tiết phân biệt premium vs average.

5. Motion system — GSAP + Lenis, KHÔNG chỉ CSS transition

// Entrance sequence — staggered, LONG duration (editorial pace)
gsap.from(heading, { opacity: 0, y: 30, duration: 3.0, ease: 'power3.out', delay: 0.2 });
gsap.from(subtitle, { opacity: 0, y: 20, duration: 2.5, ease: 'power3.out', delay: 0.7 });
gsap.from(arrow, { opacity: 0, duration: 2.0, ease: 'power2.out', delay: 1.2 });

// Scroll-driven — element theo scroll position
ScrollTrigger.create({
  trigger: section,
  start: 'top top',
  end: 'bottom top',
  scrub: true,  // animation bám scroll position
  onUpdate: (self) => { /* map self.progress to animation value */ }
});

// Lenis smooth scroll (inertia tự nhiên)
const lenis = new Lenis({ lerp: 0.08, duration: 1.2 });

Timing chuẩn:

  • Hero entrance: 3s duration (KHÔNG phải 300-500ms — editorial pace chậm)
  • Stagger delay: 0.5s giữa các element
  • Scroll reveal: 0.6s với cubic-bezier(0.4, 0, 0.2, 1)
  • Hover transition: 300ms

Quy tắc: Landing page = slow motion (premium feel). App UI = fast motion (responsive feel).

6. Spacing — 8rem giữa section, KHÔNG phải gap-16

section { padding: 8rem 0; }        /* 128px vertical */
.section-title { margin-bottom: 4rem; }  /* 64px title → content */
.products-grid { gap: 3rem; }       /* 48px product cards */
.hero-content { padding: 0 8vw; }   /* 8% viewport horizontal */

Scale chuẩn cho landing/marketing:

ContextValueTailwind
Section vertical padding128px (8rem)py-32
Title → content64px (4rem)mb-16
Grid gap48px (3rem)gap-12
Card internal padding32px (2rem)p-8
Hero horizontal padding8vwpx-[8vw]

Chú ý: scale này KHÁC scale admin app (gap-4/6/8). Landing cần THỞ, admin cần COMPACT.

7. Layout hero — KHÔNG phải "text trái + image phải"

Kimi Atelier Veil layout:

<section className="relative min-h-[100dvh]">
  <video className="absolute inset-0 w-full h-full object-cover" />  {/* video bg full */}
  <div className="absolute inset-0 bg-gradient-to-b from-black/50 to-black/85" />  {/* overlay */}

  {/* TEXT ĐƯỚI ĐÁY, không giữa */}
  <div className="relative z-10 flex flex-col justify-end min-h-[100dvh] px-[8vw] pb-[15vh]">
    <div className="max-w-[700px]">
      <h1>...</h1>
      <p>...</p>
    </div>
  </div>
</section>

Layout patterns khác:

  • Full video/image bg + text bottom-left (Atelier Veil) — cinematic
  • Centered text + gradient bg + CTA (Wool Sneakers) — classic
  • Asymmetric split: text trái 40% + carousel phải 60% (Westie) — editorial

SAI: grid-cols-2 gap-8 50-50 split — generic SaaS template.


4 THEMES CÓ SẴN (chọn 1 theo surface, đừng mix)

Theme A: Dark Luxury (Atelier Veil-inspired)

Dùng cho: landing marketing premium, perfume, fashion cao cấp, jewelry

bg: #080808
text: #F5F0EB (warm off-white)
accent: rgba(200,169,126,0.06) champagne
fonts: Cormorant Garamond (display) + Inter (body)
motion: GSAP slow (3s), scroll-driven video, liquid glass
full 7 công thức: YES (typography layering, liquid glass, noise, GSAP, spacing generous)

Theme B: Warm Minimalist (Wool Sneakers-inspired)

Dùng cho: storefront customer-facing, sustainable brands, lifestyle, F&B, wellness

bg: #FEFCF8 (warm white)
secondary: #F5F1E8 (oat), #E8E5E0 (fog)
text: #2C2C2C (charcoal)
accent: #A8B5A0 (sage)
fonts: Canela (display) + Suisse Int'l (body) — hoặc Playfair + Inter nếu không có Canela
motion: anime.js medium (600ms), organic curves, scroll reveal 16-24px translate
full 7 công thức: PARTIAL (typography + noise + motion, KHÔNG dùng liquid glass)

Theme C: Editorial B&W (Westie-inspired)

Dùng cho: premium niche, pet/kid brands, charity, magazine-style storefront

bg: #FFFFFF
secondary: #F8F8F8
text: #1A1A1A
accent: #D4AF37 (gold — 2% usage only)
fonts: Playfair Display (display) + Inter (body)
motion: subtle fade + scale, 600ms cubic-bezier(0.4, 0, 0.2, 1)
full 7 công thức: PARTIAL (typography + motion subtle, KHÔNG liquid glass, noise optional)

Theme D: Admin Utility (Apple light — đang dùng ở web-admin)

Dùng cho: admin dashboard, internal tool, form-heavy app

bg: #f5f5f7 (page) / #ffffff (card)
text: gray-900 / muted gray-600 / placeholder gray-400
accent: blue-500 (primary), red-500 (danger), green-500 (success), amber-500 (warn)
border: gray-200
fonts: Inter (body only, không display serif)
motion: CSS transition 300ms, KHÔNG GSAP heavy
spacing: compact (gap-4/6/8, p-4/6/8 — xem UI rules trong ~/.claude/CLAUDE.md)
radius: rounded-xl (button/input) / rounded-2xl (card/modal)
full 7 công thức: MINIMAL (chỉ typography discipline + color palette nhất quán, KHÔNG luxury aesthetics)

Quy tắc chọn theme:

  • Landing / marketing / bán sản phẩm cao cấp → A
  • Storefront khách mua hàng → B hoặc C (tùy ngành seller)
  • Admin/internal tool → D (giữ utility, không over-design)
  • Mobile app → KHÔNG dùng skill này, xem mobile-design

TECH STACK CHUẨN CHO LANDING/STOREFRONT

Next.js 15 App Router (SSR for SEO)
Tailwind v4 với @theme CSS-first config (KHÔNG tailwind.config.js)
GSAP + ScrollTrigger (motion)
Lenis (smooth scroll)
Google Fonts: Playfair Display / Cormorant Garamond + Inter
react-fast-marquee (horizontal ticker)
imagesloaded (layout measurements)

KHÔNG shadcn cho landing (bespoke UI)
CÓ shadcn cho app pages (forms/cart/checkout)

SELF-CHECK TRƯỚC KHI SHIP UI ĐẸP

□ Typography có 3 scale rõ rệt (overline + body + display)?
□ Letter-spacing có variation (display âm, overline dương)?
□ Color dùng warm off-white/charcoal (KHÔNG pure white/black)?
□ Text muted dùng rgba() opacity (KHÔNG gray scale)?
□ Section padding ≥ 96px vertical?
□ Nếu có glass → dùng công thức liquid-glass đầy đủ (2 pseudo)?
□ Có noise overlay 2.5% opacity?
□ Motion dùng GSAP với duration ≥ 1.5s cho hero?
□ Smooth scroll có Lenis?
□ Hero layout KHÔNG phải "text trái + image phải" generic?
□ Accent color < 3% diện tích?
□ Images dùng product photography chất lượng (không icon SVG thuần)?
□ Chọn 1 theme (A/B/C) và giữ nguyên, KHÔNG mix?

1 checkbox FAIL → UI sẽ bị cảm giác "generic SaaS template".


REFERENCE FILES

Source code 3 reference Kimi đã phân tích nằm tại:

/Volumes/hai/haicode/kimi-refs/
├── atelier-veil/       # Dark luxury — React + GSAP + Lenis + Canvas
├── wool-sneakers/      # Warm minimalist — HTML + anime.js + p5.js
└── ao-kimi/            # Editorial B&W — HTML + Playfair + Inter

Key files để đọc khi cần chi tiết:

  • atelier-veil/app/src/index.css — liquid-glass công thức + noise overlay
  • atelier-veil/app/src/sections/HeroSection.tsx — GSAP timeline + scroll-driven video
  • atelier-veil/tech-spec.md — toàn bộ animation timing breakdown
  • wool-sneakers/index.html — inline CSS chi tiết, spacing rhythm
  • ao-kimi/index.html — editorial layout với Playfair + Inter

Resources images (dùng làm mock đẹp ngay):

  • atelier-veil/ (không có assets — cần tự sourced)
  • wool-sneakers/resources/ — product-1.jpg → product-12.jpg, hero-urban.jpg, hero-nature.jpg
  • ao-kimi/resources/ — westie-january.png → westie-december.png, hoodie-1/2/3.png, poster-1/2/3.png

ANTI-PATTERNS (không làm)

SaiĐúngLý do
bg-black text-whitebg-[#080808] text-[#F5F0EB]Warm > pure
text-gray-400 cho mutedtext-[rgba(245,240,235,0.55)]Opacity giữ hue
text-6xl font-boldtext-[72px] font-normal tracking-[-0.02em] leading-[1.05]Editorial weight
bg-white/10 backdrop-blur-mdFull liquid-glass formula với 2 pseudoFake vs real glass
py-16 giữa sectionpy-32 (128px)Landing cần thở
transition-all duration-300GSAP 1.5-3s với power3.outPremium pace
50-50 text+image splitFull bg + text bottom-left, hoặc asymmetric 40-60Generic SaaS
Mix 2-3 themes trong 1 siteChọn 1 theme, giữ nguyênCoherence
Icon SVG cho hero visualProduct photography thậtPremium = real imagery
Gold/Accent ≥ 10% diện tíchAccent < 3%Luxury = restraint

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.