
Frontend Enhancer
Drop ready-made CSS keyframe animations and transitions into a global stylesheet to polish UI motion without designing every animation from scratch.
Overview
frontend-enhancer is an agent skill for the Build phase that supplies copy-paste CSS keyframe animations and transitions for frontend polish.
Install
npx skills add https://github.com/ailabs-393/ai-labs-claude-skills --skill frontend-enhancerWhat is this skill?
- Fade animations: fadeIn, fadeOut, fadeInUp, fadeInDown
- Slide animations: slideInLeft, slideInRight
- Scale animations: scaleIn, scaleOut
- Utility motion: bounce, pulse, shimmer/skeleton loading keyframes
- Instructions to copy blocks into global CSS
- Multiple named animation families: fade, slide, scale, bounce, pulse, shimmer
Adoption & trust: 794 installs on skills.sh; 399 GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
Your UI works but lacks motion, loading states, or entrance effects and you do not want to hand-write every @keyframes block.
Who is it for?
Solo builders iterating on web frontends who want fast, reusable CSS motion snippets.
Skip if: Projects that need React Spring, Framer Motion orchestration, or design-system-level motion tokens without raw CSS.
When should I use this skill?
User wants CSS animation snippets, skeleton shimmer loaders, or frontend motion enhancements during UI build.
What do I get? / Deliverables
Global CSS gains a consistent set of named animations the agent can reference in components and loading UIs.
- Global CSS blocks with @keyframes definitions
- Named animation utilities for components
Recommended Skills
Journey fit
Motion and micro-interactions are applied while implementing the product UI in the build phase. The skill body is copy-paste CSS animations—fade, slide, scale, bounce, pulse, and shimmer—for frontend surfaces.
How it compares
CSS snippet template skill, not a component library or automated Lighthouse perf fixer.
Common Questions / FAQ
Who is frontend-enhancer for?
Indie developers and agent users shipping web UIs who want prewritten animation keyframes added to global CSS quickly.
When should I use frontend-enhancer?
During build frontend work when adding page transitions, skeleton loaders, or subtle entrance effects to SaaS or marketing pages.
Is frontend-enhancer safe to install?
It is primarily static CSS text; still review the Security Audits panel on this page and avoid executing unrelated files from the same repo bundle.
SKILL.md
READMESKILL.md - Frontend Enhancer
/* Modern CSS Animations and Transitions Copy these animations to your global CSS file */ /* Fade Animations */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } } @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeInDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } /* Slide Animations */ @keyframes slideInLeft { from { transform: translateX(-100%); } to { transform: translateX(0); } } @keyframes slideInRight { from { transform: translateX(100%); } to { transform: translateX(0); } } /* Scale Animations */ @keyframes scaleIn { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } } @keyframes scaleOut { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.9); } } /* Bounce Animation */ @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } /* Pulse Animation */ @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } /* Shimmer/Skeleton Loading */ @keyframes shimmer { 0% { background-position: -1000px 0; } 100% { background-position: 1000px 0; } } /* Spin Animation (for loaders) */ @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /* Utility Classes */ .animate-fade-in { animation: fadeIn 0.3s ease-in; } .animate-fade-out { animation: fadeOut 0.3s ease-out; } .animate-fade-in-up { animation: fadeInUp 0.4s ease-out; } .animate-fade-in-down { animation: fadeInDown 0.4s ease-out; } .animate-slide-in-left { animation: slideInLeft 0.3s ease-out; } .animate-slide-in-right { animation: slideInRight 0.3s ease-out; } .animate-scale-in { animation: scaleIn 0.2s ease-out; } .animate-scale-out { animation: scaleOut 0.2s ease-in; } .animate-bounce { animation: bounce 1s infinite; } .animate-pulse { animation: pulse 2s infinite; } .animate-spin { animation: spin 1s linear infinite; } /* Skeleton Loader */ .skeleton { background: linear-gradient( 90deg, #f0f0f0 0px, #e0e0e0 40px, #f0f0f0 80px ); background-size: 1000px; animation: shimmer 2s infinite; } /* Hover Effects */ .hover-lift { transition: transform 0.2s ease, box-shadow 0.2s ease; } .hover-lift:hover { transform: translateY(-4px); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15); } .hover-glow { transition: box-shadow 0.3s ease; } .hover-glow:hover { box-shadow: 0 0 20px rgba(59, 130, 246, 0.5); } .hover-scale { transition: transform 0.2s ease; } .hover-scale:hover { transform: scale(1.05); } /* Smooth Transitions */ .transition-smooth { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .transition-fast { transition: all 0.15s ease; } .transition-slow { transition: all 0.5s ease; } /* Stagger Animation Delays (for lists) */ .stagger-item-1 { animation-delay: 0.1s; } .stagger-item-2 { animation-delay: 0.2s; } .stagger-item-3 { animation-delay: 0.3s; } .stagger-item-4 { animation-delay: 0.4s; } .stagger-item-5 { animation-delay: 0.5s; } /* Accessibility: Respect prefers-reduced-motion */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } // Modern Button Component with Multiple Variants // Copy and customize this component for your Next.js project import React from 'react'; import { cn } from '@/lib/utils'; // or use your utility function interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> { variant?: 'primary' |