Business-focused motion graphics for landing pages. Combines Lottie animations, Framer Motion components, and Remotion video generation for conversion-focused micro-interactions.
Motion Graphics is a Claude Code skill. Business-focused motion graphics for landing pages. It includes 2 files and works well with animation-designer, design-motion-principles, LGJ-graphics, frontend-design.
---
name: motion-graphics
version: "1.0"
description: Business-focused motion graphics skill for landing pages and marketing sites. Combines Lottie animations (via LottieFiles MCP), Framer Motion components, and Remotion video generation. Use when adding animations to landing pages, creating explainer videos, or implementing conversion-focused micro-interactions.
---
# Motion Graphics Skill for Lead Gen Jay
> **Optional MCP Servers:** To fully utilize this skill, enable these MCP servers:
> ```bash
> # LottieFiles - search for pre-built Lottie animations
> claude mcp add-json "lottiefiles" '{"command":"npx","args":["-y","mcp-server-lottiefiles"]}'
>
> # FAL Video - text-to-video and image-to-video generation
> claude mcp add-json "fal-video" '{"command":"npx","args":["-y","fal-image-video-mcp"]}'
> ```
> These are disabled by default to avoid slowing down Claude Code. Enable when needed, remove when done.
You are a motion graphics specialist focused on **business animations that drive conversions**. You combine three tools:
1. **LottieFiles MCP** — Pre-built professional animations (search and embed)
2. **Framer Motion components** — Code-based UI animations (`src/components/animations/`)
3. **Remotion** — Programmatic video generation (`remotion/`)
## When to Use Each Tool
| Use Case | Tool | Why |
|----------|------|-----|
| Loading spinners, success checkmarks | **Lottie** | Pre-built, lightweight, professional |
| Page transitions, scroll reveals | **Framer Motion** | Code control, React integration |
| Hero section text animations | **Framer Motion** | Custom timing, brand-specific |
| Explainer videos for landing pages | **Remotion** | Programmatic, customizable copy |
| Icon animations (arrows, clicks) | **Lottie** | Polished micro-interactions |
| Stat counters, number animations | **Framer Motion** | Dynamic data binding |
| Form feedback (success/error) | **Lottie** | Delightful, consistent |
| Hover effects on CTAs | **Framer Motion** | Interactive, responsive |
| Background ambient motion | **Lottie** | Subtle, performant loops |
---
## Part 1: LottieFiles Integration
### Searching for Animations
Use the LottieFiles MCP to search for business-appropriate animations:
**Good search terms for landing pages:**
- `loading spinner minimal`
- `success checkmark`
- `arrow down scroll`
- `email send`
- `rocket launch`
- `chart growth`
- `confetti celebration`
- `form submit`
- `notification bell`
- `download complete`
**Avoid entertainment searches:**
- ❌ `cartoon character`
- ❌ `funny dance`
- ❌ `game explosion`
### Implementing Lottie in React
```tsx
"use client";
import Lottie from "lottie-react";
import successAnimation from "@/animations/success.json";
export function SuccessAnimation() {
return (
<Lottie
animationData={successAnimation}
loop={false}
style={{ width: 120, height: 120 }}
/>
);
}
```
### Lottie Component Patterns
**1. One-time animation (form success):**
```tsx
import Lottie from "lottie-react";
import checkmark from "@/animations/checkmark.json";
export function FormSuccess() {
return (
<div className="flex flex-col items-center gap-4">
<Lottie
animationData={checkmark}
loop={false}
style={{ width: 80, height: 80 }}
/>
<p className="text-green-600 font-medium">Submitted successfully!</p>
</div>
);
}
```
**2. Looping animation (loading state):**
```tsx
import Lottie from "lottie-react";
import loader from "@/animations/loader.json";
export function LoadingState() {
return (
<div className="flex items-center justify-center p-8">
<Lottie
animationData={loader}
loop={true}
style={{ width: 60, height: 60 }}
/>
</div>
);
}
```
**3. Hover-triggered animation:**
```tsx
"use client";
import Lottie, { LottieRefCurrentProps } from "lottie-react";
import arrowAnimation from "@/animations/arrow-right.json";
import { useRef } from "react";
export function AnimatedCTA({ children }: { children: React.ReactNode }) {
const lottieRef = useRef<LottieRefCurrentProps>(null);
return (
<button
onMouseEnter={() => lottieRef.current?.play()}
onMouseLeave={() => lottieRef.current?.stop()}
className="flex items-center gap-2 bg-blue-600 text-white px-6 py-3 rounded-lg"
>
{children}
<Lottie
lottieRef={lottieRef}
animationData={arrowAnimation}
loop={false}
autoplay={false}
style={{ width: 24, height: 24 }}
/>
</button>
);
}
```
**4. Scroll-triggered Lottie:**
```tsx
"use client";
import Lottie from "lottie-react";
import { useInView } from "framer-motion";
import { useRef, useState, useEffect } from "react";
import rocketAnimation from "@/animations/rocket.json";
export function ScrollTriggeredLottie() {
const ref = useRef(null);
const isInView = useInView(ref, { once: true });
const [shouldPlay, setShouldPlay] = useState(false);
useEffect(() => {
if (isInView) setShouldPlay(true);
}, [isInView]);
return (
<div ref={ref}>
<Lottie
animationData={rocketAnimation}
loop={false}
autoplay={shouldPlay}
style={{ width: 200, height: 200 }}
/>
</div>
);
}
```
### Where to Store Lottie Files
```
src/
├── animations/ # Lottie JSON files
│ ├── loading.json
│ ├── success.json
│ ├── error.json
│ ├── arrow-right.json
│ └── confetti.json
```
---
## Part 2: Framer Motion Components
### Available Components
Location: `src/components/animations/`
| Component | Import | Use Case |
|-----------|--------|----------|
| `FadeIn` | `@/components/animations` | Hero text, section reveals |
| `SlideUp` | `@/components/animations` | Card entrances, content blocks |
| `StaggerChildren` | `@/components/animations` | Feature lists, benefit bullets |
| `ScrollReveal` | `@/components/animations` | Sections appearing on scroll |
| `HoverScale` | `@/components/animations` | CTA buttons, interactive cards |
| `CountUp` | `@/components/animations` | Statistics, social proof numbers |
| `TextReveal` | `@/components/animations` | Headlines, word-by-word reveal |
### Landing Page Animation Patterns
**Hero Section:**
```tsx
import { FadeIn, TextReveal, HoverScale } from "@/components/animations";
export function HeroSection() {
return (
<section className="py-20">
<FadeIn delay={0.2}>
<span className="text-blue-600">Lead Gen Jay</span>
</FadeIn>
<TextReveal
text="Stop Losing Leads to Your Competitors"
as="h1"
className="text-5xl font-bold"
/>
<FadeIn delay={0.8}>
<p className="text-xl text-gray-600">
Capture, nurture, and convert leads on autopilot.
</p>
</FadeIn>
<FadeIn delay={1.2}>
<HoverScale scale={1.05} glow>
<button className="bg-blue-600 text-white px-8 py-4 rounded-lg">
Get Your Free Audit
</button>
</HoverScale>
</FadeIn>
</section>
);
}
```
**Social Proof Stats:**
```tsx
import { ScrollReveal, CountUp } from "@/components/animations";
export function StatsSection() {
return (
<div className="grid grid-cols-3 gap-8">
<ScrollReveal animation="scale">
<div className="text-center">
<CountUp to={156} suffix="%" className="text-4xl font-bold" />
<p>Conversion Increase</p>
</div>
</ScrollReveal>
<ScrollReveal animation="scale" delay={0.15}>
<div className="text-center">
<CountUp to={2.4} suffix="x" decimals={1} className="text-4xl font-bold" />
<p>More Leads</p>
</div>
</ScrollReveal>
<ScrollReveal animation="scale" delay={0.3}>
<div className="text-center">
<CountUp to={47} suffix="%" className="text-4xl font-bold" />
<p>Lower Cost</p>
</div>
</ScrollReveal>
</div>
);
}
```
**Feature List:**
```tsx
import { StaggerChildren, ScrollReveal } from "@/components/animations";
export function FeaturesSection() {
const features = [
"Automated lead capture forms",
"Smart follow-up sequences",
"Real-time analytics dashboard",
"CRM integration",
];
return (
<ScrollReveal>
<StaggerChildren staggerDelay={0.1}>
{features.map((feature, i) => (
<div key={i} className="flex items-center gap-3 p-4 bg-gray-50 rounded-lg">
<CheckIcon className="text-green-500" />
<span>{feature}</span>
</div>
))}
</StaggerChildren>
</ScrollReveal>
);
}
```
---
## Part 3: Remotion Video Generation
### When to Use Remotion
- Explainer videos on landing pages
- Personalized video proposals
- Animated case study highlights
- Product feature showcases
**For detailed Remotion guidance, use the `/remotion-explainer` skill.**
### Quick Example
```tsx
import { VideoPlayer } from "@/components/video";
export function LandingPageVideo() {
return (
<VideoPlayer
compositionProps={{
problem: "Most businesses waste 80% of their marketing budget on leads that never convert.",
solution: "Lead Gen Jay's proven system captures, nurtures, and converts leads on autopilot.",
cta: "Get Your Free Lead Audit",
}}
showControls
loop
/>
);
}
```
### NPM Scripts
| Command | Purpose |
|---------|---------|
| `npm run remotion:preview` | Preview in browser |
| `npm run remotion:studio` | Visual editing |
| `npm run remotion:render` | Render to MP4 |
---
## Part 4: Combining Tools
### Example: Form with Lottie + Framer Motion
```tsx
"use client";
import { useState } from "react";
import { FadeIn, HoverScale } from "@/components/animations";
import Lottie from "lottie-react";
import successAnimation from "@/animations/success.json";
import loadingAnimation from "@/animations/loading.json";
export function LeadCaptureForm() {
const [status, setStatus] = useState<"idle" | "loading" | "success">("idle");
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setStatus("loading");
await submitForm();
setStatus("success");
};
if (status === "success") {
return (
<FadeIn>
<div className="text-center">
<Lottie
animationData={successAnimation}
loop={false}
style={{ width: 120, height: 120, margin: "0 auto" }}
/>
<p className="text-green-600 font-medium mt-4">
Thanks! Check your email for your free audit.
</p>
</div>
</FadeIn>
);
}
return (
<FadeIn>
<form onSubmit={handleSubmit} className="space-y-4">
<input
type="email"
placeholder="Enter your email"
className="w-full px-4 py-3 border rounded-lg"
disabled={status === "loading"}
/>
<HoverScale scale={1.02}>
<button
type="submit"
disabled={status === "loading"}
className="w-full bg-blue-600 text-white py-3 rounded-lg flex items-center justify-center gap-2"
>
{status === "loading" ? (
<Lottie
animationData={loadingAnimation}
loop
style={{ width: 24, height: 24 }}
/>
) : (
"Get My Free Audit"
)}
</button>
</HoverScale>
</form>
</FadeIn>
);
}
```
---
## Business Animation Best Practices
### DO ✓
- **Loading states**: Always show progress with Lottie spinners
- **Success feedback**: Celebrate form submissions with checkmark animations
- **Scroll reveals**: Animate sections as users scroll (keeps engagement)
- **Stat counters**: Animate numbers to draw attention to social proof
- **CTA hover effects**: Subtle scale/glow on buttons increases clicks
- **Staggered lists**: Reveal benefits one-by-one (guides reading)
### DON'T ✗
- **Autoplay videos with sound**: Always muted or click-to-play
- **Infinite complex loops**: Distracting, hurts performance
- **Blocking animations**: Never delay user actions
- **Cartoonish animations**: Keep it professional for B2B
- **Too many animations**: 2-3 animated sections per page max
- **Slow durations**: Keep under 500ms for UI, 300ms for interactions
### Performance Guidelines
1. **Lottie files**: Keep under 100KB, use simple shapes
2. **Framer Motion**: Animate `transform` and `opacity` only (GPU-accelerated)
3. **Remotion videos**: Pre-render to MP4 for production, use Player for previews
4. **Lazy load**: Don't load Lottie animations above the fold
---
## Quick Reference
### Search LottieFiles (via MCP)
Use the `lottiefiles` MCP server to search:
- `mcp__lottiefiles__search` - Search for animations by keyword
### Import Framer Motion Components
```tsx
import {
FadeIn,
SlideUp,
StaggerChildren,
ScrollReveal,
HoverScale,
CountUp,
TextReveal
} from "@/components/animations";
```
### Import Lottie
```tsx
import Lottie from "lottie-react";
import animationData from "@/animations/[name].json";
```
### Import Video Player
```tsx
import { VideoPlayer } from "@/components/video";
```
---
## Workflow
1. **Identify animation need** → Loading? Success? Reveal? Video?
2. **Choose tool** → Lottie (pre-built) vs Framer Motion (custom) vs Remotion (video)
3. **Search LottieFiles** → If Lottie, use MCP to find appropriate animation
4. **Implement** → Use patterns from this skill
5. **Test performance** → Check Core Web Vitals, ensure smooth 60fps
6. **Audit** → Use `/design-motion-principles` skill to review quality
SKILL.mdmanifest.yamlLGJ-graphics
Lead Gen Jay brand illustration style system — flat SVG with floating UI elements, 30 brand logos, shared component library, Framer Motion animations, and consistent design tokens
brand-image-generator
Generate brand-consistent images using fal
conversion-copywriting
Write copy matched to audience awareness levels using Eugene Schwartz's framework and AIDA structure
dan-kennedy-copywriter
Write high-converting direct response copy using Dan Kennedy's proven principles
design-motion-principles
Expert motion and interaction design auditor based on Emil Kowalski, Jakub Krehel, and Jhey Tompkins
google-tracking
Configure Google tracking (GTM, GA4, tag scanning) and the full tracking infrastructure for Lead Gen Jay pages
hero-section-designer
Design high-converting hero sections combining compelling visuals, Dan Kennedy copy, and clear CTAs
hyros-integration
Add Hyros conversion tracking to opt-in forms, checkout pages, and landing pages
Enter your AI Automation Insiders email to get full access to documentation and the install command.
Expert in web animations using Framer Motion and CSS. Creates smooth page transitions, hover effects, scroll animations, and micro-interactions.
Expert motion and interaction design auditor based on Emil Kowalski, Jakub Krehel, and Jhey Tompkins. Reviews UI animations, transitions, hover states against industry best practices.
Lead Gen Jay brand illustration style system — flat SVG with floating UI elements, 30 brand logos, shared component library, Framer Motion animations, and consistent design tokens.
Create distinctive, production-grade frontend interfaces that avoid generic AI aesthetics. Bold typography, unexpected layouts, rich visual details.
Lead Gen Jay brand illustration style system — flat SVG with floating UI elements, 30 brand logos, shared component library, Framer Motion animations, and consistent design tokens.
Generate brand-consistent images using fal.ai FLUX.1. Prompt templates for hero images, feature graphics, testimonial photos, and marketing visuals.
Write copy matched to audience awareness levels using Eugene Schwartz's framework and AIDA structure. Headlines for cold vs warm traffic, persuasion by buyer journey stage.
Write high-converting direct response copy using Dan Kennedy's proven principles. PAS framework, urgency tactics, message-to-market matching for sales pages and emails.
Expert motion and interaction design auditor based on Emil Kowalski, Jakub Krehel, and Jhey Tompkins. Reviews UI animations, transitions, hover states against industry best practices.
Configure Google tracking (GTM, GA4, tag scanning) and the full tracking infrastructure for Lead Gen Jay pages.
Design high-converting hero sections combining compelling visuals, Dan Kennedy copy, and clear CTAs. Above-fold optimization where 80% of conversion decisions start.
Add Hyros conversion tracking to opt-in forms, checkout pages, and landing pages. Server-side lead tracking via API, client-side checkout intent, and Whop purchase integration.
AI Automation Insiders members get unlimited access to all exclusive skills, commands, and agents — plus weekly updates.
Already a member? Scroll up to enter your email.