Modern frontend design
Skill deveshpunjabi/modern-frontend-skill/skills/modern-frontend-design
A skill for coding agents that transforms vague UI requests into polished, production-quality frontends.
npx -y skills add deveshpunjabi/modern-frontend-skill --skill modern-frontend-designAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
How to design and build modern, premium-quality frontend interfaces that look like high-end SaaS products, modern AI tools, and award-winning design websites — not generic templates. Use this skill whenever the user asks to build a frontend, create a landing page, design a dashboard, scaffold a web app UI, build a SaaS interface, create a portfolio site, or produce any user-facing web interface. Also use when the user says "make it look modern", "build me a beautiful UI", "create a homepage", "design a pricing page", "add animations", "make it cinematic", "add liquid glass", "add scroll animations", "use 2026 design trends", or mentions frontend design, UI/UX, component architecture, motion design, hero sections, responsive layouts, or CSS animation.
SKILL.md
21.7 KB, as published. Nobody here has run it
Modern Frontend Design — 2026 Edition
You are a senior frontend engineer, UI/UX designer, and visual design strategist. Transform any product prompt into a visually stunning, premium-quality web interface. The standard: it looks like a well-funded startup's design team built it — not an AI template.
The 2026 paradigm shift: OKLCH colors over HSL. Native CSS scroll-driven animations over JS libraries. Liquid Glass as standard surface treatment. View Transitions for page navigation. AI Minimalism as the new SaaS aesthetic. Tokens always first.
Follow this 12-step Atom of Thought Design Process. Skipping steps is how generic UIs happen.
Step 0 — Design Token System First (Always, No Exceptions)
Define the full visual language before writing a single component. In 2026, use OKLCH for colors — it has better perceptual uniformity, enables relative color manipulation, and is now Baseline 2026.
:root {
/* ── COLORS (OKLCH format: L C H) ───────────────── */
--bg: oklch(8% 0.02 265); /* page canvas */
--surface: oklch(12% 0.02 265); /* cards, panels */
--surface-up: oklch(16% 0.02 265); /* hover elevated */
--fg: oklch(96% 0.01 95); /* primary text */
--fg-muted: oklch(65% 0.01 265); /* secondary text */
--fg-dim: oklch(45% 0.01 265); /* disabled/placeholder */
--primary: oklch(62% 0.21 285); /* brand CTA — vivid indigo */
--primary-up: oklch(68% 0.21 285); /* hover */
--primary-glow: oklch(62% 0.21 285); /* for box-shadow */
--ok: oklch(62% 0.18 155); /* success green */
--warn: oklch(75% 0.19 65); /* warning amber */
--err: oklch(62% 0.22 25); /* error red */
--border: oklch(22% 0.02 265);
--border-faint: oklch(15% 0.01 265);
/* ── TYPOGRAPHY ──────────────────────────────────── */
--font: 'Inter', system-ui, sans-serif;
--font-display: 'Cabinet Grotesk', 'Clash Display', sans-serif;
--font-mono: 'Geist Mono', 'JetBrains Mono', monospace;
/* ── RADIUS ──────────────────────────────────────── */
--r-xs: 0.25rem;
--r-sm: 0.375rem;
--r: 0.75rem;
--r-lg: 1rem;
--r-xl: 1.5rem;
--r-full: 9999px;
/* ── MOTION ──────────────────────────────────────── */
--ease-out: cubic-bezier(0.22, 1, 0.36, 1);
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
--ease-expo: cubic-bezier(0.16, 1, 0.3, 1);
--dur-fast: 150ms;
--dur-base: 250ms;
--dur-slow: 500ms;
}
Hard rules: OKLCH format. Zero hardcoded hex/rgba in components. All radii via --r-*. All easing
via --ease-*. For light-mode, fintech, wellness palettes → references/design-systems.md.
Step 1 — Understand the Product
Before a single line of code: extract product type, target audience, core value prop, conversion goal.
2026 Niche Design Table
| Niche | Direction |
|---|---|
| AI / ML tools | AI Minimalism (OpenAI/Perplexity style) — aggressive whitespace, single-font, subtle |
| Developer tools | Technical Mono — dark, green/white, monospace, terminal blocks, code brutalism |
| Fintech | Professional light, OKLCH blues, data-dense, trust-first, two-column |
| Cybersecurity | Dark, terminal, status indicators, surveillance aesthetic |
| Creative agencies | Neo-Brutalism OR warm dark editorial — niche determines which |
| SaaS dashboards | Bento grids, sidebar nav, metric cards, neutral tokens |
| E-commerce | Dopamine colors (lifestyle) or clean trust (enterprise), product grids |
| Social platforms | Vibrant, rounded, avatar-centric, card feeds |
| Health / Wellness | Organic / nature-inspired — soft curves, earthy OKLCH, phone mockup |
| Education | Structured, friendly, progress indicators, accessible |
| Startups / Landing | Cinematic hero, bento features, liquid glass pricing, social proof |
| Consulting / B2B | Dark premium, authority, numbered value props, organic shapes |
Step 2 — 2026 Visual Research & Hero Patterns
Reference: Awwwards, Dribbble, Linear, Vercel, Raycast, Stripe, Arc, Perplexity, OpenAI.
Hero Patterns (2026 Standard)
A — Cinematic Video + Kinetic Typography
<video autoPlay muted loop playsInline>
+ gradient overlay (from-bg/85 via-transparent to-bg)
Oversized kinetic headline → responds to scroll via animation-timeline: view()
Subhead → Liquid glass CTA row
Logo marquee (pure CSS @keyframes, liquid-glass pills)
B — AI Minimalism (Barely-There UI)
Near-white or very dark bg — extreme whitespace
Single variable font system, precise weight control
Minimal chrome: 1 primary CTA, no decorations
Subtle grain texture (opacity 0.02), no glow effects
Inspired by: Perplexity, Claude, OpenAI interfaces
C — Scroll-Driven Storytelling
Native CSS scroll-driven animation: animation-timeline: scroll()
Elements reveal, transform, and parallax as user scrolls
No JS scroll listeners — GPU-accelerated, main-thread-free
@keyframes tied to view() or scroll() timeline
D — Bento Grid Feature Hero
Compact centered headline (gradient text, oversized)
Asymmetric bento grid: span-2 demo card + medium feature cards + small stat tiles
Varied visual weights — not identical cards
Cards use liquid glass, each with subtle hover state
E — Organic / Anti-Grid
Soft curved section dividers (SVG clip-path or border-radius on section)
Earthy OKLCH palette — clay, sage, warm beige
Flowing asymmetric layout — deliberately non-rectangular
Works for: wellness, agencies, portfolios
2026 Mandatory Trends
| Trend | Apply When |
|---|---|
| Liquid Glass | All floating surfaces (navbar, cards, modals, badges) |
| OKLCH colors | Every project — better than HSL for design tokens |
| Native scroll-driven animations | Scroll reveals, progress bars, parallax |
| View Transitions API | Page navigation, section morphs |
| CSS anchor positioning | Tooltips, dropdowns — replace Floating UI / Popper.js |
| Bento grids | Feature sections, dashboard layouts |
| Kinetic typography | Hero headlines — scroll or cursor responsive |
| AI Minimalism | AI/SaaS products, tools aligning with OpenAI/Perplexity |
| Neo-Brutalism | Agencies, creative, subculture brands, portfolios |
| Variable fonts | All projects — single font with multiple axes |
| Grain texture | Warmth layer — opacity 0.025–0.045 on ::after |
@starting-style | All enter animations — eliminates flash-of-final-state |
CSS if() function | Conditional transitions, prefers-reduced-motion inline |
| Dopamine color | Lifestyle, beauty, youth, social — vivid OKLCH saturation |
| Organic shapes | Wellness, agencies — soft curves over rigid grids |
Step 3 — Visual System Planning
Typography (2026 Pairings)
| Pairing | Vibe | Use For |
|---|---|---|
| Inter variable | AI Minimalism | AI tools, clean SaaS |
| Geist Sans + Geist Mono | Developer-grade | Dev tools, code products |
| Cabinet Grotesk + Satoshi | Bold startup | Landing pages, agencies |
| Clash Display + General Sans | Kinetic editorial | Portfolios, creative agencies |
| Space Grotesk + DM Sans | Geometric tech | API products, fintech |
| Playfair Display + Satoshi | Luxury editorial | Agencies, luxury brands |
Use variable fonts where available — control font-weight and font-variation-settings precisely.
All display sizes: clamp(). Negative letter-spacing on every heading.
Color (Always OKLCH)
OKLCH advantages over HSL: perceptually uniform (same lightness feels equal across hues),
relative color syntax oklch(from var(--primary) l c h), works with color-mix().
/* Relative OKLCH — lighten primary by 20% */
--primary-light: oklch(from var(--primary) calc(l + 0.20) c h);
/* Mix two colors */
--blend: color-mix(in oklch, var(--primary) 30%, var(--bg));
Spacing scale (4px base): 4 8 12 16 24 32 40 48 64 80 96 128 — no arbitrary values.
Step 4 — Layout Architecture
Landing Page (2026 Standard)
Navbar (fixed, liquid-glass, View Transition enabled)
Hero (cinematic — Pattern A/B/C/D/E based on niche)
Social Proof (marquee / stats — CSS @keyframes marquee)
Features (bento grid OR organic flow — never wall of cards)
How It Works (numbered, with scroll-reveal)
Demo / Screenshots / Interactive preview
Testimonials / Case Studies
Pricing (liquid-glass cards, one highlighted)
Final CTA (with @starting-style entrance)
Footer
Dashboard (2026 Standard)
Top Nav (search + notifications + avatar)
Sidebar (icon + label, groups, collapsible — Container scroll-state for sticky shadows)
Main: Bento metric grid → Charts (scroll-driven progress) → Data tables → Side panels
Step 5 — Component System
components/
├── layout/ → Navbar, Footer, Sidebar, Container
├── ui/ → Button, LiquidCard, Badge, Input, Modal, Toggle, Tooltip (anchor-based)
├── sections/ → Hero, Features, Pricing, Testimonials, CTA
├── motion/ → ScrollReveal, ViewTransition, KineticText, StaggerGroup
└── data/ → MetricCard, BentoGrid, Chart, DataTable
Liquid Glass — 2026 Standard Surface
Use on: navbar, pricing cards, feature cards, modals, eyebrow badges, logo pills.
.liquid-glass {
background: linear-gradient(
135deg,
oklch(100% 0 0 / 0.08) 0%,
oklch(100% 0 0 / 0.02) 100%
);
backdrop-filter: blur(20px) saturate(180%);
-webkit-backdrop-filter: blur(20px) saturate(180%);
border: 1px solid oklch(100% 0 0 / 0.12);
box-shadow:
inset 0 1px 0 oklch(100% 0 0 / 0.15),
0 8px 32px oklch(0% 0 0 / 0.30);
border-radius: var(--r);
}
.liquid-glass:hover {
border-color: oklch(100% 0 0 / 0.18);
box-shadow:
inset 0 1px 0 oklch(100% 0 0 / 0.20),
0 12px 40px oklch(0% 0 0 / 0.35);
transition: all var(--dur-base) var(--ease-out);
}
CSS Anchor Positioning (2026 — Replace Floating UI)
/* No JS tooltip positioning */
.tooltip-trigger { anchor-name: --trigger; }
.tooltip {
position: fixed;
position-anchor: --trigger;
inset-area: top;
margin-bottom: 0.5rem;
position-try-fallbacks: --bottom, --left, --right;
}
Step 6 — 2026 Motion System
2026 rule: prefer native CSS animations over JS libraries where possible.
Native Scroll-Driven Animations (Interop 2026 — No JS)
/* Reveal on scroll — replaces Intersection Observer */
.reveal {
animation: fade-up linear both;
animation-timeline: view();
animation-range: entry 0% cover 25%;
}
@keyframes fade-up {
from { opacity: 0; transform: translateY(24px); }
to { opacity: 1; transform: translateY(0); }
}
/* Reading progress bar */
.progress-bar {
animation: grow-width linear forwards;
animation-timeline: scroll();
}
@keyframes grow-width {
from { width: 0%; }
to { width: 100%; }
}
/* Scroll-driven parallax */
.parallax-layer {
animation: parallax linear;
animation-timeline: scroll(root block);
animation-range: 0% 100%;
}
@keyframes parallax {
from { transform: translateY(0px); }
to { transform: translateY(-60px); }
}
@starting-style — Flash-Free Enter Animations (2026)
/* Enter animation that doesn't flash final state first */
.modal {
opacity: 1;
transform: scale(1);
transition: opacity var(--dur-base) var(--ease-out),
transform var(--dur-base) var(--ease-spring);
}
@starting-style {
.modal { opacity: 0; transform: scale(0.95); }
}
View Transitions API (Page Navigation)
/* Cross-document transition — 2 lines of CSS */
@view-transition { navigation: auto; }
::view-transition-old(root) { animation-duration: var(--dur-slow); }
::view-transition-new(root) { animation-duration: var(--dur-slow); }
/* Named element transition (card → detail) */
.card { view-transition-name: card-item; }
CSS if() — Adaptive Motion (2026)
.animated {
transition-duration: if(
media(prefers-reduced-motion: reduce): 0ms;
else: var(--dur-base)
);
}
Per-Element Animation Spec Format
Navbar: fade-in, var(--dur-slow), --ease-out, delay 0ms
Eyebrow: fade-in+y8→0, var(--dur-slow), --ease-expo, delay 80ms
Headline: fade-in+y16→0, var(--dur-slow), --ease-expo, delay 180ms
Subhead: fade-in, var(--dur-base), --ease-out, delay 320ms
CTA row: fade-in+y8→0, var(--dur-base), --ease-expo, delay 420ms
Logo Marquee (Pure CSS)
@keyframes marquee { from { transform: translateX(0) } to { transform: translateX(-50%) } }
.animate-marquee { animation: marquee 24s linear infinite; }
.marquee-container { mask-image: linear-gradient(to right, transparent 0%, black 10%, black 90%, transparent 100%); }
Staggered Animations with sibling-index() (2026 CSS — Chrome)
/* No JS needed for stagger delays */
.grid-item {
animation-delay: calc(sibling-index() * 80ms);
animation: fade-up var(--dur-slow) var(--ease-expo) both;
animation-timeline: view();
animation-range: entry 0% cover 30%;
}
Motion Rules (Non-Negotiable)
- GPU only:
transform+opacity— never animate layout properties - Reduced motion: use
CSS if()or@media (prefers-reduced-motion: reduce)on every animation - Duration budget: interactions 100–200ms | reveals 300–500ms | page transitions 400–600ms
- Max 3 concurrent animations visible in viewport at any time
Step 7 — 2026 Technology Stack
| Layer | 2026 Recommendation |
|---|---|
| Framework | Next.js 15 (RSC, App Router, PPR) or Astro 5 (for content sites) |
| Styling | Tailwind v4 + CSS OKLCH custom properties |
| Components | shadcn/ui + Radix UI |
| Animation | Native CSS scroll-driven first; Framer Motion for complex React |
| Language | TypeScript (now the baseline — mandatory) |
| Icons | Lucide React |
| Fonts | Variable fonts (Inter, Geist, Cabinet Grotesk) |
| Tooltips | CSS Anchor Positioning (replace Floating UI for new builds) |
/app (App Router) → layouts, pages, RSC
/components → layout/ ui/ sections/ motion/ data/
/styles → globals.css (:root tokens, .liquid-glass, @keyframes)
/utils → helpers, types
/public → assets, fonts, videos
Step 8 — Backend Awareness & Performance
- Loading: skeleton loaders — never spinners
- Error: message + retry — never blank screen
- Empty: copy + CTA ("No projects yet")
- React Server Components: use RSC for static content, client components only for interactivity
- Core Web Vitals: LCP < 2.5s, CLS < 0.1, INP < 200ms
- Sustainable design: minimize unused animations, optimize images, lazy-load off-screen content
- Realistic data: real-sounding names, plausible numbers — no lorem ipsum
Step 9 — Responsive + Accessible System
Breakpoints: sm 640 | md 768 | lg 1024 | xl 1280 | 2xl 1536
- Grids: 4 → 2 → 1 col. Nav: full → hamburger at < 768px.
- Display type:
clamp(2rem, 1rem + 4vw, 5rem) - Section padding: 128 → 80 → 48px. Touch targets: ≥ 44×44px.
- WCAG 2.1 AA mandatory: 4.5:1 body text, 3:1 large text, keyboard nav, screen reader labels
- Both light and dark modes must independently pass contrast minimums
Step 10 — 2026 Visual Quality Validation
Token Compliance
- All colors:
oklch(...)values — zero hardcoded hex/rgba in components - All radii via
--r-*. All easing via--ease-*. All durations via--dur-*
Typography
- Variable font loaded. Display > h1 > h2 > body hierarchy clear.
- Negative letter-spacing on all headings. Body ≤ 65ch wide.
Color & Polish
- OKLCH palette with perceptual uniformity — no hue shifts in gradients
- Liquid glass on all floating surfaces
- Both light/dark mode (if applicable) pass 4.5:1 contrast
2026 Motion
- Scroll-driven animations use native CSS (
animation-timeline) not JS scroll listeners - All enter animations use
@starting-style - Page navigation uses View Transitions
-
CSS if()or@media (prefers-reduced-motion)on every animation - Max 3 animations visible concurrently
Overall
- Screenshot test: next to Linear / Vercel / Perplexity — does it belong?
- 3-second test: product clear, CTA obvious
- Token audit: zero hex in DevTools computed styles
Step 11 — Hero Prompt Engineering (MotionSites Style)
Pixel-precise spec format — eliminates ambiguity, awards-quality output on first pass.
Stack: Next.js 15 + Tailwind v4
DESIGN TOKENS (:root in globals.css):
--bg: oklch([L%] [C] [H]) --fg: oklch([L%] [C] [H])
--primary: oklch([L%] [C] [H]) --font: '[Name]', sans-serif --r: [X]rem
LIQUID GLASS (globals.css):
.liquid-glass { background: linear-gradient(135deg,oklch(100% 0 0/0.08),oklch(100% 0 0/0.02));
backdrop-filter: blur(20px) saturate(180%); border: 1px solid oklch(100% 0 0/0.12);
box-shadow: inset 0 1px 0 oklch(100% 0 0/0.15), 0 8px 32px oklch(0% 0 0/0.3); }
SCROLL ANIMATIONS (globals.css):
.reveal { animation: fade-up linear both; animation-timeline: view();
animation-range: entry 0% cover 25%; }
@keyframes fade-up { from { opacity:0; transform:translateY(24px) }
to { opacity:1; transform:translateY(0) } }
@starting-style { .modal { opacity:0; transform:scale(0.95) } }
NAVBAR: fixed z-50 liquid-glass | Logo + nav links + CTA pill
HERO ELEMENTS:
1. Eyebrow — liquid-glass pill, animated dot, "[tagline]" text-fg/70
2. Headline — [Xpx] font-bold tracking-[-0.04em] leading-[0.93] oklch gradient
3. Sub — max-w-lg text-center text-fg/65 text-lg leading-8
4. CTAs — Primary (oklch glow) + Ghost (border)
5. Social proof — avatar stack + "X+ teams"
MARQUEE: liquid-glass pills, 24s, fade-edge mask
ANIMATION SPEC: Eyebrow 400ms+80ms · Headline 500ms+180ms · Sub 400ms+320ms · CTAs 400ms+420ms
ANTI-SLOP: Zero hex. OKLCH everywhere. Liquid glass on every floating surface.
Fictional brands: Vortex, Nimbus, Kynder, Halcyn, Aethon.
Six complete templates (AI SaaS, Dev Tool, Fintech, Agency, Wellness, Pricing) → references/hero-prompts.md.
Step 12 — Final Testing (Mandatory — You Own the Errors)
npm install && npx tsc --noEmit && npm run build
npx next lint
npm run dev & sleep 5 && curl -s -o /dev/null -w "%{http_code}" http://localhost:3000 && kill %1
Component scan:
| Check | Fix |
|---|---|
| Hardcoded hex or hsl() values | Replace with oklch(var(--token)) or oklch(...) |
| JS scroll listener for animation | Replace with animation-timeline: view() |
Missing @starting-style on modals | Add enter animation |
<img> in Next.js | Replace with <Image> |
Missing alt text | Add descriptive alt |
No prefers-reduced-motion handling | Add CSS if() or @media |
Done when: build 0 · lint pass · dev boots · tsc clean · no console errors · no mobile overflow · zero hex in DevTools.
Anti-Patterns — 2026 Edition
| Pattern | Fix |
|---|---|
| HSL/hex colors in 2026 | Upgrade to OKLCH — better gamut, perceptual uniformity |
| JS scroll listeners for animation | animation-timeline: view() — native, main-thread-free |
| Floating UI / Popper.js for tooltips | CSS Anchor Positioning (Baseline 2025+) |
| Flash of final state on enter | @starting-style on every modal/toast/drawer |
| Identical grid cards | Bento layout — varied sizes, visual weights |
| Generic "AI aesthetic" (purple glow on everything) | Choose: AI Minimalism OR cinematic — not both |
| Wall of text animations | Max 3 concurrent, purposeful only |
| Lorem ipsum | Realistic product copy always |
| Pure black backgrounds | oklch(8% 0.02 265) — subtle tint adds depth |
| Ignoring RSC | Static content → RSC; interactivity → Client components |
| WCAG as afterthought | Baked-in: contrast tokens, semantic HTML, keyboard nav |
Final Output
Deliver: OKLCH token system · Liquid glass utility · Native scroll animations ·
@starting-style enters · View Transitions · Premium UI · Responsive · Typed components · Realistic copy. Summary: token rationale, font choice, layout pattern, motion decisions.
| Agent | Install |
|---|---|
| Claude Code | npx skills add deveshpunjabi/modern-frontend-skill |
| Cursor | .cursor/skills/ |
| Windsurf | .windsurf/skills/ |
| Any | Copy SKILL.md to agent skill directory |