frontend-design — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited frontend-design (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill has two modes. Use explicit invocation to select a mode, or let it auto-detect.
Invocation:
/frontend-design saas — B2B SaaS mode (explicit)/frontend-design marketing — Public/Marketing mode (explicit)/frontend-design — auto-detects from context, defaults to B2B SaaSAuto-detection: Default to B2B SaaS unless the user mentions landing pages, homepages, brochure sites, marketing sites, or public-facing websites.
Build application interfaces using shadcn/ui primitives exclusively. Do not write custom components when a shadcn primitive exists. The goal is composable, consistent, production-grade UI with zero unnecessary custom code.
These decisions are already made. Do not re-evaluate, substitute, or propose alternatives:
| Concern | Library | Notes |
|---|---|---|
| UI primitives | shadcn/ui | Always. Every component. No exceptions. |
| Styling | Tailwind CSS | Utility classes only. No custom CSS files. Use shadcn CSS variables for theming. |
| Icons | Lucide | shadcn default. Already throughout the codebase. |
| Charts | Recharts via shadcn | Use shadcn's chart components, which wrap Recharts. |
| Data tables | TanStack Table | Via shadcn Data Table. All tabular data goes through this. |
| Data fetching | TanStack Query | Caching, invalidation, optimistic updates. Pairs naturally with TanStack Table. Use for all server state. |
| Forms | react-hook-form + zod | Via shadcn Form. All forms are validated with zod schemas. |
| Dates | date-fns | Tree-shakeable. Use for all date formatting, parsing, relative times. |
| Drag & drop | dnd-kit | For sortable lists, custom dashboard layouts, reorderable items. |
| Auth | Clerk | Owns all auth UI. Login/signup patterns come from Clerk components. Do not build custom auth screens. |
| State management | Context API + Reducers | Current standard. Do not introduce zustand/jotai/redux. |
Every B2B SaaS app uses this foundation:
--primary, --secondary, --muted, etc.) for theming.Always reach for these before writing custom code:
Layout & Navigation:
Data Display:
Forms & Input:
Overlays & Feedback:
Actions:
Interactive:
formatDistanceToNow for relative times, format for absolute dates. Be consistent within a view.useQuery for reads, useMutation for writes with optimistic updates where appropriate.Activated when building public-facing websites, landing pages, marketing sites, brochure sites, or homepages. Invoke explicitly with /frontend-design marketing.
This mode prioritizes distinctive, memorable design. Implement real working code with exceptional craft using modern CSS and animation techniques.
Before coding, commit to a BOLD aesthetic direction:
Execute the chosen direction with precision. Bold maximalism and refined minimalism both work — the key is intentionality, not intensity.
| Concern | Library | Notes |
|---|---|---|
| Smooth scroll | Lenis (3KB) | Industry standard. Preserves sticky & IntersectionObserver. |
| Animation (React) | Motion (8KB) | Spring physics, layout animations, gestures. |
| Complex timelines | GSAP | ScrollTrigger, SplitText (free since 2025), MorphSVG, Flip, Physics2D. |
| Text splitting | GSAP SplitText | Lines/words/chars with masking. Use for hero text reveals. |
| 3D (React) | React Three Fiber + Drei | WebGPU support. Use for hero scenes, product showcases. |
| Cursor effects | Cuberto Mouse Follower | Custom cursor with magnetic/morphing effects. Requires GSAP. |
| CSS animation | TailwindCSS Motion | Zero-JS animation utilities for Tailwind projects. |
Scroll-Driven Animations (no JS needed for 85% of scroll effects):
.element {
animation: reveal linear;
animation-timeline: view();
animation-range: entry 0% cover 40%;
}View Transitions API (page transitions without JS):
@view-transition { navigation: auto; }
.card { view-transition-name: card-element; }`:has()` selector for parent-aware styling:
.card:has(img) { grid-template-columns: 200px 1fr; }
body:has(.modal[open]) { overflow: hidden; }`@starting-style` for entry animations without JS:
.toast { opacity: 1; transform: translateY(0); transition: all 200ms ease; }
@starting-style { .toast { opacity: 0; transform: translateY(12px); } }Container queries for truly responsive components:
.card-container { container-type: inline-size; }
@container (min-width: 400px) { .card { grid-template-columns: 200px 1fr; } }OKLCH color space for perceptually uniform colors:
:root {
--brand: oklch(0.62 0.16 35);
--brand-soft: color-mix(in oklch, var(--brand), white 65%);
}
/* Richer gradients via oklch interpolation */
background: linear-gradient(to right in oklch, var(--brand), var(--accent));CSS-only staggered animations with sibling-index():
.item { transition-delay: calc((sibling-index() - 1) * 40ms); }Font pairings (never reuse the same pairing twice across generations):
Display fonts: Clash Display, Cabinet Grotesk, Fraunces (variable, expressive), Space Grotesk (techy) Body fonts: Satoshi, General Sans, Geist Sans, DM Sans, Outfit, Manrope Serif: Playfair Display (editorial), Fraunces (wonky axes)
AVOID: Inter, Roboto, Arial, system fonts — these are for SaaS mode, not marketing.
Fluid typography (always use clamp(), never fixed sizes):
--text-hero: clamp(2.5rem, 1.5rem + 5vw, 6rem);
--text-xl: clamp(1.75rem, 1.2rem + 2.5vw, 3rem);
--text-base: clamp(1rem, 0.9rem + 0.5vw, 1.125rem);Text effects: gradient text with OKLCH, image-masked text, variable font axis animation on hover.
Hero text reveal (GSAP SplitText + ScrollTrigger):
SplitText.create(heading, { type: "lines, words, chars", mask: "lines" });
gsap.fromTo(heading.querySelectorAll('.line'),
{ yPercent: 110 },
{ yPercent: 0, duration: 0.8, stagger: 0.08, ease: "power3.out" }
);Magnetic buttons (spring physics on hover — GSAP or Motion):
// Element follows cursor within its bounds, snaps back with spring easing
const xTo = gsap.quickTo(el, "x", { duration: 1, ease: "elastic.out(1, 0.3)" });
const yTo = gsap.quickTo(el, "y", { duration: 1, ease: "elastic.out(1, 0.3)" });Multi-layer parallax (pure CSS scroll-driven):
.bg-layer { animation: parallax linear; animation-timeline: scroll(); }
@keyframes parallax { to { transform: translateY(-10%); } }Timing standards: micro-interactions 200-500ms, page transitions 300-600ms, stagger delays 30-80ms between elements.
Bento grid — asymmetric card grids with hero (2x2), wide (2x1), and tall (1x2) variants. Collapse to single column on mobile.
Sticky scroll sections — stacked position: sticky; height: 100vh sections where each "replaces" the previous on scroll. Perfect for feature showcases.
Horizontal scroll sections — scroll-snap-type: x mandatory with flex: 0 0 80vw children.
Overlapping elements — use CSS Grid with overlapping grid-column/grid-row ranges and z-index. Subgrid for inherited tracks.
Glassmorphism (dark mode focused in 2026):
.glass {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(20px) saturate(180%);
border: 1px solid rgba(255, 255, 255, 0.08);
}Grain/noise overlay — SVG feTurbulence filter at 3-4% opacity with mix-blend-mode: overlay. Apply as a fixed full-screen layer.
Aurora/mesh gradients — multiple radial-gradient layers in OKLCH with slow position animation (15s+ cycle).
3D card transforms — perspective(800px) with CSS custom properties (--rx, --ry) set by mousemove JS for tilt effect.
AI Slop Tells — these immediately signal "AI-generated, not designed":
Design Anti-Patterns:
The standard: if a designer at a top agency would look at the output and say "that's clearly AI," it's wrong. The work should be indistinguishable from a senior designer's Figma-to-code handoff.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.