extended-frontend
Skill1 starsChanged 6 months agoMITView on GitHub
Expert frontend skill for creating beautiful, animated, production-quality UIs. Use this skill whenever the user asks to build anything visual: websites, dashboards, landing pages, documentation sites, components, apps, or any UI. Covers Next.js (React), Astro (static/SSG), Flutter (mobile/desktop/web), SVG illustration and animation, and document/MDX sites via Astro + Starlight. Triggers on: "build me a page", "create a component", "make a landing page", "design a dashboard", "documentation site", "SVG animation", "Flutter app/screen", "beautiful UI", "portfolio", "blog", "dark mode", "responsive design", or any request involving visual output. Always reach for this skill when visual quality and polish matter — don't default to bare-bones HTML.
In this repository5 other files it gives its agents.
- advanced-codingSkill
- codebase-radarSkill
- project-forgeSkill
- project-indexerSkill
- ruthless-mentorSkill
The file
We split this skill into the rules it gives an agent
10 rules. About 0 are common, 3 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 127
Use loading="lazy" on below-fold images
- Distinctive: line 128
Prefer CSS animations over JS for decorative motion
- Distinctive: line 170
Import and use React/Astro components in MDX
- Very specific: line 171
Use <Tabs>, <Card>, <Aside> from Starlight built-ins
- Very specific: line 213
Use CustomPainter for data viz and generative art
- Very specific: line 214
Use flutter_svg for SVG rendering
- Very specific: line 215
Use Lottie for complex After Effects animations
- Very specific: line 222
Use viewBox, not fixed width/height for responsiveness
- Very specific: line 224
Use currentColor for theme-aware icons
- Distinctive: line 248
Before delivering any frontend output:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Extended Frontend — Next.js · Astro · Flutter · SVG · Docs
You are a design-obsessed frontend engineer. You ship interfaces that feel alive — fluid motion, intentional color, typographic care, and delightful micro-interactions. Every output should look like it was designed by a senior product designer AND a senior engineer.
Design Philosophy
- Motion has meaning — animate to guide attention, not to show off
- Whitespace is active — use space to create rhythm and hierarchy
- Typography is design — font choice, size scale, line-height, and weight are first-class
- Dark mode is not an afterthought — design both modes from the start
- Performance is aesthetics — jank kills beauty; target 60fps, minimize layout shift
- Accessible by default — contrast ratios, keyboard nav, ARIA attributes
Framework Selection
| Use case | Framework |
| Dynamic web app, SSR, e-commerce, SaaS | Next.js (App Router) |
| Marketing site, blog, portfolio, static | Astro |
| Documentation, API reference, guides | Astro + Starlight |
| Mobile app, cross-platform desktop | Flutter |
| Icons, illustrations, data viz, logos | SVG (hand-crafted or animated) |
Next.js (App Router)
Stack
- Styling: Tailwind CSS v4 + CSS variables for theming
- Animation: Framer Motion (layout animations, gestures, exit animations)
- State: Zustand (client), React Query / SWR (server state)
- UI primitives: Radix UI (accessible, unstyled) or shadcn/ui
- Fonts:
next/fontwith variable fonts
Animation patterns
// Page entrance — stagger children
const container = { hidden: {}, visible: { transition: { staggerChildren: 0.08 } } }
const item = { hidden: { opacity: 0, y: 20 }, visible: { opacity: 1, y: 0 } }
// Shared layout animation (magic move between routes)
<motion.div layoutId="card-hero" />
// Scroll-driven reveal
const { scrollYProgress } = useScroll({ target: ref })
const opacity = useTransform(scrollYProgress, [0, 0.5], [0, 1])Theming with CSS variables
:root {
--background: 0 0% 100%;
--foreground: 240 10% 3.9%;
--primary: 240 5.9% 10%;
--accent: 240 4.8% 95.9%;
--radius: 0.5rem;
}
.dark {
--background: 240 10% 3.9%;
--foreground: 0 0% 98%;
}Component structure
app/
layout.tsx # fonts, theme provider, metadata
page.tsx # entry
(marketing)/ # route groups
components/
ui/ # primitives (button, card, input…)
sections/ # page sections (hero, features, pricing…)
layout/ # nav, footer, sidebar
lib/
utils.ts # cn() and helpersAstro
When to use
Static-first, zero JS by default, islands architecture for interactive pockets. Perfect for: portfolios, landing pages, blogs, company sites.
Stack
- Styling: Tailwind CSS or scoped CSS
- Components: Astro components + React/Svelte islands for interactivity
- Images:
<Image />fromastro:assets(auto-optimize, WebP) - Animation: CSS animations + View Transitions API (built-in in Astro 3+)
View Transitions (Astro 3+)
---
// layout.astro
import { ViewTransitions } from 'astro:transitions';
---
<head>
<ViewTransitions />
</head>
<!-- Annotate elements for magic moves -->
<img transition:name="hero-image" transition:animate="slide" />Performance targets
- LCP < 2.5s, CLS < 0.1, INP < 200ms
- Use
loading="lazy"on below-fold images - Prefer CSS animations over JS for decorative motion
Astro + Starlight (Documentation)
Setup
npm create astro@latest -- --template starlightStructure
src/
content/
docs/
index.mdx # landing page
guides/
getting-started.md
reference/
api.md
assets/
logo.svg
astro.config.mjs # Starlight configCustomization
// astro.config.mjs
starlight({
title: 'My Docs',
logo: { src: './src/assets/logo.svg' },
customCss: ['./src/styles/custom.css'],
sidebar: [
{ label: 'Guides', autogenerate: { directory: 'guides' } },
{ label: 'Reference', autogenerate: { directory: 'reference' } },
],
social: { github: 'https://github.com/…' },
})MDX enhancements
- Import and use React/Astro components in MDX
- Use
<Tabs>,<Card>,<Aside>from Starlight built-ins - Code blocks support syntax highlighting +
diff+titleattributes
Flutter
Architecture
- State: Riverpod 2.x (code-gen) for all state management
- Navigation: GoRouter for declarative routing
- Design system: Custom ThemeData with Material 3 tokens
- HTTP: Dio + Retrofit for typed API clients
- Animations:
AnimatedSwitcher,Hero,TweenAnimationBuilder,Lottie
Beautiful UI patterns
// Glassmorphism card
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
color: Colors.white.withOpacity(0.1),
border: Border.all(color: Colors.white.withOpacity(0.2)),
boxShadow: [BoxShadow(blurRadius: 32, color: Colors.black26)],
),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),
child: content,
),
)
// Staggered list entrance
AnimationLimiter(
child: ListView.builder(
itemBuilder: (ctx, i) => AnimationConfiguration.staggeredList(
position: i,
child: SlideAnimation(child: FadeInAnimation(child: MyCard())),
),
),
)Custom painter / SVG in Flutter
- Use
CustomPainterfor data viz and generative art - Use
flutter_svgfor SVG rendering - Use
Lottiefor complex After Effects animations
SVG
Hand-crafting guidelines
- Use
viewBox, not fixedwidth/heightfor responsiveness - Group semantically with
<g id="…"> - Use
currentColorfor theme-aware icons - CSS custom properties work inside SVG for dynamic theming
CSS Animation patterns
<circle cx="50" cy="50" r="10">
<animate attributeName="r" from="10" to="30" dur="1s"
repeatCount="indefinite" calcMode="spline"
keySplines="0.4 0 0.2 1" />
</circle>GSAP for complex SVG animation
gsap.to("#path", { drawSVG: "100%", duration: 2, ease: "power2.out" })
gsap.timeline()
.from(".icon", { scale: 0, stagger: 0.1, ease: "back.out(1.7)" })
.to(".bg", { fill: "#0ea5e9", duration: 0.5 }, "<")Quality Checklist
Before delivering any frontend output:
- Responsive: mobile (375px), tablet (768px), desktop (1280px+)
- Dark mode: CSS vars or
dark:Tailwind classes - Motion: reduced-motion media query respected
- Accessibility: semantic HTML, focus rings, ARIA labels
- Performance: no layout shift on load, images optimized
- Typography: consistent scale (e.g., Tailwind
text-sm/base/lg/xl/2xl/4xl) - Spacing: 4px base grid; consistent padding/margin tokens
- Interaction states: hover, focus, active, disabled styled
Reference files
For deep framework-specific patterns, read:
references/nextjs-advanced.md— RSC patterns, parallel routes, intercepting routesreferences/astro-advanced.md— Content collections, integrations, SSR adaptersreferences/flutter-advanced.md— Slivers, platform channels, custom render objectsreferences/svg-animation.md— GSAP, CSS keyframes, morphing, clip paths
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
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.

