Frontend Studio
Build complete, production-ready frontend pages by orchestrating 5 specialized capabilities: design engineering, motion systems, AI-generated assets, persuasive copy, and generative art.
Invocation
/frontend-dev <request>
The user provides their request as natural language (e.g. "build a landing page for a music streaming app").
Skill Structure
frontend-dev/
├── SKILL.md # Core skill (this file)
├── scripts/ # Asset generation scripts
│ ├── minimax_tts.py # Text-to-speech
│ ├── minimax_music.py # Music generation
│ ├── minimax_video.py # Video generation (async)
│ └── minimax_image.py # Image generation
├── references/ # Detailed guides (read as needed)
│ ├── minimax-cli-reference.md # CLI flags quick reference
│ ├── asset-prompt-guide.md # Asset prompt engineering rules
│ ├── minimax-tts-guide.md # TTS usage & voices
│ ├── minimax-music-guide.md # Music prompts & lyrics format
│ ├── minimax-video-guide.md # Camera commands & models
│ ├── minimax-image-guide.md # Ratios & batch generation
│ ├── minimax-voice-catalog.md # All voice IDs
│ ├── motion-recipes.md # Animation code snippets
│ ├── env-setup.md # Environment setup
│ └── troubleshooting.md # Common issues
├── templates/ # Visual art templates
│ ├── viewer.html # p5.js interactive art base
│ └── generator_template.js # p5.js code reference
└── canvas-fonts/ # Static art fonts (TTF + licenses)
Project Structure
Assets (Universal)
All frameworks use the same asset organization:
assets/
├── images/
│ ├── hero-landing-1710xxx.webp
│ ├── icon-feature-01.webp
│ └── bg-pattern.svg
├── videos/
│ ├── hero-bg-1710xxx.mp4
│ └── demo-preview.mp4
└── audio/
├── bgm-ambient-1710xxx.mp3
└── tts-intro-1710xxx.mp3
Asset naming: {type}-{descriptor}-{timestamp}.{ext}
By Framework
| Framework |
Asset Location |
Component Location |
| Pure HTML |
./assets/ |
N/A (inline or ./js/) |
| React/Next.js |
public/assets/ |
src/components/ |
| Vue/Nuxt |
public/assets/ |
src/components/ |
| Svelte/SvelteKit |
static/assets/ |
src/lib/components/ |
| Astro |
public/assets/ |
src/components/ |
Pure HTML
project/
├── index.html
├── assets/
│ ├── images/
│ ├── videos/
│ └── audio/
├── css/
│ └── styles.css
└── js/
└── main.js # Animations (GSAP/vanilla)
React / Next.js
project/
├── public/assets/ # Static assets
├── src/
│ ├── components/
│ │ ├── ui/ # Button, Card, Input
│ │ ├── sections/ # Hero, Features, CTA
│ │ └── motion/ # RevealSection, StaggerGrid
│ ├── lib/
│ ├── styles/
│ └── app/ # Pages
└── package.json
Vue / Nuxt
project/
├── public/assets/
├── src/ # or root for Nuxt
│ ├── components/
│ │ ├── ui/
│ │ ├── sections/
│ │ └── motion/
│ ├── composables/ # Shared logic
│ ├── pages/
│ └── assets/ # Processed assets (optional)
└── package.json
Astro
project/
├── public/assets/
├── src/
│ ├── components/ # .astro, .tsx, .vue, .svelte
│ ├── layouts/
│ ├── pages/
│ └── styles/
└── package.json
Component naming: PascalCase (HeroSection.tsx, HeroSection.vue, HeroSection.astro)
Compliance
All rules in this skill are mandatory. Violating any rule is a blocking error — fix before proceeding or delivering.
Workflow
Phase 1: Design Architecture
- Analyze the request — determine page type and context
- Set design dials based on page type
- Plan layout sections and identify asset needs
Phase 2: Motion Architecture
- Select animation tools per section (see Tool Selection Matrix)
- Plan motion sequences following performance guardrails
Phase 3: Asset Generation
Generate all image/video/audio assets using scripts/. NEVER use placeholder URLs (unsplash, picsum, placeholder.com, via.placeholder, placehold.co, etc.) or external URLs.
- Parse asset requirements (type, style, spec, usage)
- Craft optimized prompts, show to user, confirm before generating
- Execute via scripts, save to project — do NOT proceed to Phase 5 until all assets are saved locally
Phase 4: Copywriting & Content
Follow copywriting frameworks (AIDA, PAS, FAB) to craft all text content. Do NOT use "Lorem ipsum" — write real copy.
Phase 5: Build UI
Scaffold the project and build each section following Design and Motion rules. Integrate generated assets and copy. All <img>, <video>, <source>, and CSS background-image MUST reference local assets from Phase 3.
Phase 6: Quality Gates
Run final checklist (see Quality Gates section).
1. Design Engineering
1.1 Baseline Configuration
| Dial |
Default |
Range |
| DESIGN_VARIANCE |
8 |
1=Symmetry, 10=Asymmetric |
| MOTION_INTENSITY |
6 |
1=Static, 10=Cinematic |
| VISUAL_DENSITY |
4 |
1=Airy, 10=Packed |
Adapt dynamically based on user requests.
1.2 Architecture Conventions
- DEPENDENCY VERIFICATION: Check
package.json before importing any library. Output install command if missing.
- Framework: React/Next.js. Default to Server Components. Interactive components must be isolated
"use client" leaf components.
- Styling: Tailwind CSS. Check version in
package.json — NEVER mix v3/v4 syntax.
- ANTI-EMOJI POLICY: NEVER use emojis anywhere. Use Phosphor or Radix icons only.
- Viewport: Use
min-h-[100dvh] not h-screen. Use CSS Grid not flex percentage math.
- Layout:
max-w-[1400px] mx-auto or max-w-7xl.
1.3 Design Rules
| Rule |
Directive |
| Typography |
Headlines: text-4xl md:text-6xl tracking-tighter. Body: text-base leading-relaxed max-w-[65ch]. NEVER use Inter — use Geist/Outfit/Satoshi. NEVER use Serif on dashboards. |
| Color |
Max 1 accent, saturation < 80%. NEVER use AI purple/blue. Stick to one palette. |
| Layout |
NEVER use centered heroes when VARIANCE > 4. Force split-screen or asymmetric layouts. |
| Cards |
NEVER use generic cards when DENSITY > 7. Use border-t, divide-y, or spacing. |
| States |
ALWAYS implement: Loading (skeleton), Empty, Error, Tactile feedback (scale-[0.98]). |
| Forms |
Label above input. Error below. gap-2 for input blocks. |
1.4 Anti-Slop Techniques
- Liquid Glass:
backdrop-blur + border-white/10 + shadow-[inset_0_1px_0_rgba(255,255,255,0.1)]
- Magnetic Buttons: Use
useMotionValue/useTransform — never useState for continuous animations
- Perpetual Motion: When INTENSITY > 5, add infinite micro-animations (Pulse, Float, Shimmer)
- Layout Transitions: Use Framer
layout and layoutId props
- Stagger: Use
staggerChildren or CSS animation-delay: calc(var(--index) * 100ms)
1.5 Forbidden Patterns
| Category |
Banned |
| Visual |
Neon glows, pure black (#000), oversaturated accents, gradient text on headers, custom cursors |
| Typography |
Inter font, oversized H1s, Serif on dashboards |
| Layout |
3-column equal card rows, floating elements with awkward gaps |
| Components |
Default shadcn/ui without customization |
1.6 Creative Arsenal
| Category |
Patterns |
| Navigation |
Dock magnification, Magnetic button, Gooey menu, Dynamic island, Radial menu, Speed dial, Mega menu |
| Layout |
Bento grid, Masonry, Chroma grid, Split-screen scroll, Curtain reveal |
| Cards |
Parallax tilt, Spotlight border, Glassmorphism, Holographic foil, Swipe stack, Morphing modal |
| Scroll |
Sticky stack, Horizontal hijack, Locomotive sequence, Zoom parallax, Progress path, Liquid swipe |
| Gallery |
Dome gallery, Coverflow, Drag-to-pan, Accordion slider, Hover trail, Glitch effect |
| Text |
Kinetic marquee, Text mask reveal, Scramble effect, Circular path, Gradient stroke, Kinetic grid |
| Micro |
Particle explosion, Pull-to-refresh, Skeleton shimmer, Directional hover, Ripple click, SVG draw, Mesh gradient, Lens blur |
1.7 Bento Paradigm
- Palette: Background
#f9fafb, cards pure white with border-slate-200/50
- Surfaces:
rounded-[2.5rem], diffusion shadow
- Typography: Geist/Satoshi,
tracking-tight headers
- Labels: Outside and below cards
- Animation: Spring physics (
stiffness: 100, damping: 20), infinite loops, React.memo isolation
5-Card Archetypes:
- Intelligent List — auto-sorting with
layoutId
- Command Input — typewriter + blinking cursor
- Live Status — breathing indicators
- Wide Data Stream — infinite horizontal carousel
- Contextual UI — staggered highlight + float-in toolbar
1.8 Brand Override
When brand styling is active:
- Dark:
#141413, Light: #faf9f5, Mid: #b0aea5, Subtle: #e8e6dc
- Accents: Orange
#d97757, Blue #6a9bcc, Green #788c5d
- Fonts: Poppins (headings), Lora (body)
2. Motion Engine
2.1 Tool Selection Matrix
| Need |
Tool |
| UI enter/exit/layout |
Framer Motion — AnimatePresence, layoutId, springs |
| Scroll storytelling (pin, scrub) |
GSAP + ScrollTrigger — frame-accurate control |
| Looping icons |
Lottie — lazy-load (~50KB) |
| 3D/WebGL |
Three.js / R3F — isolated <Canvas>, own "use client" boundary |
| Hover/focus states |
CSS only — zero JS cost |
| Native scroll-driven |
CSS — animation-timeline: scroll() |
Conflict Rules [MANDATORY]:
- NEVER mix GSAP + Framer Motion in same component
- R3F MUST live in isolated Canvas wrapper
- ALWAYS lazy-load Lottie, GSAP, Three.js
2.2 Intensity Scale
| Level |
Techniques |
| 1-2 Subtle |
CSS transitions only, 150-300ms |
| 3-4 Smooth |
CSS keyframes + Framer animate, stagger ≤3 items |
| 5-6 Fluid |
whileInView, magnetic hover, parallax tilt |
| 7-8 Cinematic |
GSAP ScrollTrigger, pinned sections, horizontal hijack |
| 9-10 Immersive |
Full scroll sequences, Three.js particles, WebGL shaders |
2.3 Animation Recipes
See references/motion-recipes.md for full code. Summary:
| Recipe |
Tool |
Use For |
| Scroll Reveal |
Framer |
Fade+slide on viewport entry |
| Stagger Grid |
Framer |
Sequential list animations |
| Pinned Timeline |
GSAP |
Horizontal scroll with pinning |
| Tilt Card |
Framer |
Mouse-tracking 3D perspective |
| Magnetic Button |
Framer |
Cursor-attracted buttons |
| Text Scramble |
Vanilla |
Matrix-style decode effect |
| SVG Path Draw |
CSS |
Scroll-linked path animation |
| Horizontal Scroll |
GSAP |
Vertical-to-horizontal hijack |
| Particle Background |
R3F |
Decorative WebGL particles |
| Layout Morph |
Framer |
Card-to-modal expansion |
2.4 Performance Rules
GPU-only properties (ONLY animate these): transform, opacity, filter, clip-path
NEVER animate: width, height, top, left, margin, padding, font-size — if you need these effects, use transform: scale() or clip-path instead.
Isolation:
- Perpetual animations MUST be in
React.memo leaf components
will-change: transform ONLY during animation
contain: layout style paint on heavy containers
Mobile:
- ALWAYS respect
prefers-reduced-motion
- ALWAYS disable parallax/3D on
pointer: coarse
- Cap particles: desktop 800, tablet 300, mobile 100
- Disable GSAP pin on mobile < 768px
Cleanup: Every useEffect with GSAP/observers MUST return () => ctx.revert()
2.5 Springs & Easings
| Feel |
Framer Config |
| Snappy |
stiffness: 300, damping: 30 |
| Smooth |
stiffness: 150, damping: 20 |
| Bouncy |
stiffness: 100, damping: 10 |
| Heavy |
stiffness: 60, damping: 20 |
| CSS Easing |
Value |
| Smooth decel |
cubic-bezier(0.16, 1, 0.3, 1) |
| Smooth accel |
cubic-bezier(0.7, 0, 0.84, 0) |
| Elastic |
cubic-bezier(0.34, 1.56, 0.64, 1) |
2.6 Accessibility
- ALWAYS wrap motion in
prefers-reduced-motion check
- NEVER flash content > 3 times/second (seizure risk)
- ALWAYS provide visible focus rings (use
outline not box-shadow)
- ALWAYS add
aria-live="polite" for dynamically revealed content
- ALWAYS include pause button for auto-playing animations
2.7 Dependencies
npm install framer-motion # UI (keep at top level)
npm install gsap # Scroll (lazy-load)
npm install lottie-react # Icons (lazy-load)
npm install three @react-three/fiber @react-three/drei # 3D (lazy-load)
3. Asset Generation
3.1 Scripts
| Type |
Script |
Pattern |
| TTS |
scripts/minimax_tts.py |
Sync |
| Music |
scripts/minimax_music.py |
Sync |
| Video |
scripts/minimax_video.py |
Async (create → poll → download) |
| Image |
scripts/minimax_image.py |
Sync |
Env: MINIMAX_API_KEY (required).
3.2 Workflow
- Parse: type, quantity, style, spec, usage
- Craft prompt: Be specific (composition, lighting, style). NEVER include text in image prompts.
- Execute: Show prompt to user, MUST confirm before generating, then run script
- Save:
<project>/public/assets/{images,videos,audio}/ as {type}-{descriptor}-{timestamp}.{ext} — MUST save locally
- Post-process: Images → WebP, Videos → ffmpeg compress, Audio → normalize
- Deliver: File path + code snippet + CSS suggestion
3.3 Preset Shortcuts
| Shortcut |
Spec |
hero |
16:9, cinematic, text-safe |
thumb |
1:1, centered subject |
icon |
1:1, flat, clean background |
avatar |
1:1, portrait, circular crop ready |
banner |
21:9, OG/social |
bg-video |
768P, 6s, [Static shot] |
video-hd |
1080P, 6s |
bgm |
30s, no vocals, loopable |
tts |
MiniMax HD, MP3 |
3.4 Reference
references/minimax-cli-reference.md — CLI flags
references/asset-prompt-guide.md — Prompt rules
references/minimax-voice-catalog.md — Voice IDs
references/minimax-tts-guide.md — TTS usage
references/minimax-music-guide.md — Music generation (prompts, lyrics, structure tags)
references/minimax-video-guide.md — Camera commands
references/minimax-image-guide.md — Ratios, batch
4. Copywriting
4.1 Core Job
- Grab attention → 2. Create desire → 3. Remove friction → 4. Prompt action
4.2 Frameworks
AIDA (landing pages, emails):
ATTENTION: Bold headline (promise or pain)
INTEREST: Elaborate problem ("yes, that's me")
DESIRE: Show transformation
ACTION: Clear CTA
PAS (pain-driven products):
PROBLEM: State clearly
AGITATE: Make urgent
SOLUTION: Your product
FAB (product differentiation):
FEATURE: What it does
ADVANTAGE: Why it matters
BENEFIT: What customer gains
4.3 Headlines
| Formula |
Example |
| Promise |
"Double open rates in 30 days" |
| Question |
"Still wasting 10 hours/week?" |
| How-To |
"How to automate your pipeline" |
| Number |
"7 mistakes killing conversions" |
| Negative |
"Stop losing leads" |
| Curiosity |
"The one change that tripled bookings" |
| Transformation |
"From 50 to 500 leads" |
Be specific. Lead with outcome, not method.
4.4 CTAs
Bad: Submit, Click here, Learn more
Good: "Start my free trial", "Get the template now", "Book my strategy call"
Formula: [Action Verb] + [What They Get] + [Urgency/Ease]
Place: above fold, after value, multiple on long pages.
4.5 Emotional Triggers
| Trigger |
Example |
| FOMO |
"Only 3 spots left" |
| Fear of loss |
"Every day without this, you're losing $X" |
| Status |
"Join 10,000+ top agencies" |
| Ease |
"Set it up once. Forget forever." |
| Frustration |
"Tired of tools that deliver nothing?" |
| Hope |
"Yes, you CAN hit $10K MRR" |
4.6 Objection Handling
| Objection |
Response |
| Too expensive |
Show ROI: "Pays for itself in 2 weeks" |
| Won't work for me |
Social proof from similar customer |
| No time |
"Setup takes 10 minutes" |
| What if it fails |
"30-day money-back guarantee" |
| Need to think |
Urgency/scarcity |
Place in FAQ, testimonials, near CTA.
4.7 Proof Types
Testimonials (with name/title), Case studies, Data/metrics, Social proof, Certifications
5. Visual Art
Philosophy-first workflow. Two output modes.
5.1 Output Modes
| Mode |
Output |
When |
| Static |
PDF/PNG |
Posters, print, design assets |
| Interactive |
HTML (p5.js) |
Generative art, explorable variations |
5.2 Workflow
Step 1: Philosophy Creation
Name the movement (1-2 words). Articulate philosophy (4-6 paragraphs) covering:
- Static: space, form, color, scale, rhythm, hierarchy
- Interactive: computation, emergence, noise, parametric variation
Step 2: Conceptual Seed
Identify subtle, niche reference — sophisticated, not literal. Jazz musician quoting another song.
Step 3: Creation
Static Mode:
- Single page, highly visual, design-forward
- Repeating patterns, perfect shapes
- Sparse typography from
canvas-fonts/
- Nothing overlaps, proper margins
- Output:
.pdf or .png + philosophy .md
Interactive Mode:
- Read
templates/viewer.html first
- Keep FIXED sections (header, sidebar, seed controls)
- Replace VARIABLE sections (algorithm, parameters)
- Seeded randomness:
randomSeed(seed); noiseSeed(seed);
- Output: single self-contained HTML
Step 4: Refinement
Refine, don't add. Make it crisp. Polish into masterpiece.
Quality Gates
Design:
Motion:
General:
React and Next.js are trademarks of Meta Platforms, Inc. and Vercel, Inc., respectively. Vue.js is a trademark of Evan You. Tailwind CSS is a trademark of Tailwind Labs Inc. Svelte and SvelteKit are trademarks of their respective owners. GSAP/GreenSock is a trademark of GreenSock Inc. Three.js, Framer Motion, Lottie, Astro, and all other product names are trademarks of their respective owners.
Source: MiniMax-AI/skills → skills/frontend-dev/SKILL.md
1---2name: frontend-dev3description: | Full-stack frontend development combining premium UI design, cinematic animations, AI-generated media assets, persuasive copywriting, and visual art. Builds complete, visually striking web pages with real media, advanced motion, and compelling copy. Use when: building landing pages, marketing sites, product pages, dashboards, generating media assets (image/video/audio/music), writing conversion copy, creating generative art, or implementing cinematic scroll animations.4---5
6
7# Frontend Studio
8
9Build complete, production-ready frontend pages by orchestrating 5 specialized capabilities: design engineering, motion systems, AI-generated assets, persuasive copy, and generative art.
10
11## Invocation
12
13```
14/frontend-dev <request>
15```
16
17The user provides their request as natural language (e.g. "build a landing page for a music streaming app").
18
19## Skill Structure
20
21```
22frontend-dev/
23├── SKILL.md # Core skill (this file)
24├── scripts/ # Asset generation scripts
25│ ├── minimax_tts.py # Text-to-speech
26│ ├── minimax_music.py # Music generation
27│ ├── minimax_video.py # Video generation (async)
28│ └── minimax_image.py # Image generation
29├── references/ # Detailed guides (read as needed)
30│ ├── minimax-cli-reference.md # CLI flags quick reference
31│ ├── asset-prompt-guide.md # Asset prompt engineering rules
32│ ├── minimax-tts-guide.md # TTS usage & voices
33│ ├── minimax-music-guide.md # Music prompts & lyrics format
34│ ├── minimax-video-guide.md # Camera commands & models
35│ ├── minimax-image-guide.md # Ratios & batch generation
36│ ├── minimax-voice-catalog.md # All voice IDs
37│ ├── motion-recipes.md # Animation code snippets
38│ ├── env-setup.md # Environment setup
39│ └── troubleshooting.md # Common issues
40├── templates/ # Visual art templates
41│ ├── viewer.html # p5.js interactive art base
42│ └── generator_template.js # p5.js code reference
43└── canvas-fonts/ # Static art fonts (TTF + licenses)
44```
45
46## Project Structure
47
48### Assets (Universal)
49
50All frameworks use the same asset organization:
51
52```
53assets/
54├── images/
55│ ├── hero-landing-1710xxx.webp
56│ ├── icon-feature-01.webp
57│ └── bg-pattern.svg
58├── videos/
59│ ├── hero-bg-1710xxx.mp4
60│ └── demo-preview.mp4
61└── audio/
62 ├── bgm-ambient-1710xxx.mp3
63 └── tts-intro-1710xxx.mp3
64```
65
66**Asset naming:** `{type}-{descriptor}-{timestamp}.{ext}`
67
68### By Framework
69
70| Framework | Asset Location | Component Location |
71|-----------|---------------|-------------------|
72| **Pure HTML** | `./assets/` | N/A (inline or `./js/`) |
73| **React/Next.js** | `public/assets/` | `src/components/` |
74| **Vue/Nuxt** | `public/assets/` | `src/components/` |
75| **Svelte/SvelteKit** | `static/assets/` | `src/lib/components/` |
76| **Astro** | `public/assets/` | `src/components/` |
77
78### Pure HTML
79
80```
81project/
82├── index.html
83├── assets/
84│ ├── images/
85│ ├── videos/
86│ └── audio/
87├── css/
88│ └── styles.css
89└── js/
90 └── main.js # Animations (GSAP/vanilla)
91```
92
93### React / Next.js
94
95```
96project/
97├── public/assets/ # Static assets
98├── src/
99│ ├── components/
100│ │ ├── ui/ # Button, Card, Input
101│ │ ├── sections/ # Hero, Features, CTA
102│ │ └── motion/ # RevealSection, StaggerGrid
103│ ├── lib/
104│ ├── styles/
105│ └── app/ # Pages
106└── package.json
107```
108
109### Vue / Nuxt
110
111```
112project/
113├── public/assets/
114├── src/ # or root for Nuxt
115│ ├── components/
116│ │ ├── ui/
117│ │ ├── sections/
118│ │ └── motion/
119│ ├── composables/ # Shared logic
120│ ├── pages/
121│ └── assets/ # Processed assets (optional)
122└── package.json
123```
124
125### Astro
126
127```
128project/
129├── public/assets/
130├── src/
131│ ├── components/ # .astro, .tsx, .vue, .svelte
132│ ├── layouts/
133│ ├── pages/
134│ └── styles/
135└── package.json
136```
137
138**Component naming:** PascalCase (`HeroSection.tsx`, `HeroSection.vue`, `HeroSection.astro`)
139
140---
141
142## Compliance
143
144**All rules in this skill are mandatory. Violating any rule is a blocking error — fix before proceeding or delivering.**
145
146---
147
148## Workflow
149### Phase 1: Design Architecture
1501. Analyze the request — determine page type and context
1512. Set design dials based on page type
1523. Plan layout sections and identify asset needs
153
154### Phase 2: Motion Architecture
1551. Select animation tools per section (see Tool Selection Matrix)
1562. Plan motion sequences following performance guardrails
157
158### Phase 3: Asset Generation
159Generate all image/video/audio assets using `scripts/`. NEVER use placeholder URLs (unsplash, picsum, placeholder.com, via.placeholder, placehold.co, etc.) or external URLs.
160
1611. Parse asset requirements (type, style, spec, usage)
1622. Craft optimized prompts, show to user, confirm before generating
1633. Execute via scripts, save to project — do NOT proceed to Phase 5 until all assets are saved locally
164
165### Phase 4: Copywriting & Content
166Follow copywriting frameworks (AIDA, PAS, FAB) to craft all text content. Do NOT use "Lorem ipsum" — write real copy.
167
168### Phase 5: Build UI
169Scaffold the project and build each section following Design and Motion rules. Integrate generated assets and copy. All `<img>`, `<video>`, `<source>`, and CSS `background-image` MUST reference local assets from Phase 3.
170
171### Phase 6: Quality Gates
172Run final checklist (see Quality Gates section).
173
174---
175
176# 1. Design Engineering
177
178## 1.1 Baseline Configuration
179
180| Dial | Default | Range |
181|------|---------|-------|
182| DESIGN_VARIANCE | 8 | 1=Symmetry, 10=Asymmetric |
183| MOTION_INTENSITY | 6 | 1=Static, 10=Cinematic |
184| VISUAL_DENSITY | 4 | 1=Airy, 10=Packed |
185
186Adapt dynamically based on user requests.
187
188## 1.2 Architecture Conventions
189- **DEPENDENCY VERIFICATION:** Check `package.json` before importing any library. Output install command if missing.
190- **Framework:** React/Next.js. Default to Server Components. Interactive components must be isolated `"use client"` leaf components.
191- **Styling:** Tailwind CSS. Check version in `package.json` — NEVER mix v3/v4 syntax.
192- **ANTI-EMOJI POLICY:** NEVER use emojis anywhere. Use Phosphor or Radix icons only.
193- **Viewport:** Use `min-h-[100dvh]` not `h-screen`. Use CSS Grid not flex percentage math.
194- **Layout:** `max-w-[1400px] mx-auto` or `max-w-7xl`.
195
196## 1.3 Design Rules
197| Rule | Directive |
198|------|-----------|
199| Typography | Headlines: `text-4xl md:text-6xl tracking-tighter`. Body: `text-base leading-relaxed max-w-[65ch]`. **NEVER** use Inter — use Geist/Outfit/Satoshi. **NEVER** use Serif on dashboards. |
200| Color | Max 1 accent, saturation < 80%. **NEVER** use AI purple/blue. Stick to one palette. |
201| Layout | **NEVER** use centered heroes when VARIANCE > 4. Force split-screen or asymmetric layouts. |
202| Cards | **NEVER** use generic cards when DENSITY > 7. Use `border-t`, `divide-y`, or spacing. |
203| States | **ALWAYS** implement: Loading (skeleton), Empty, Error, Tactile feedback (`scale-[0.98]`). |
204| Forms | Label above input. Error below. `gap-2` for input blocks. |
205
206## 1.4 Anti-Slop Techniques
207
208- **Liquid Glass:** `backdrop-blur` + `border-white/10` + `shadow-[inset_0_1px_0_rgba(255,255,255,0.1)]`
209- **Magnetic Buttons:** Use `useMotionValue`/`useTransform` — never `useState` for continuous animations
210- **Perpetual Motion:** When INTENSITY > 5, add infinite micro-animations (Pulse, Float, Shimmer)
211- **Layout Transitions:** Use Framer `layout` and `layoutId` props
212- **Stagger:** Use `staggerChildren` or CSS `animation-delay: calc(var(--index) * 100ms)`
213
214## 1.5 Forbidden Patterns
215| Category | Banned |
216|----------|--------|
217| Visual | Neon glows, pure black (#000), oversaturated accents, gradient text on headers, custom cursors |
218| Typography | Inter font, oversized H1s, Serif on dashboards |
219| Layout | 3-column equal card rows, floating elements with awkward gaps |
220| Components | Default shadcn/ui without customization |
221
222## 1.6 Creative Arsenal
223
224| Category | Patterns |
225|----------|----------|
226| Navigation | Dock magnification, Magnetic button, Gooey menu, Dynamic island, Radial menu, Speed dial, Mega menu |
227| Layout | Bento grid, Masonry, Chroma grid, Split-screen scroll, Curtain reveal |
228| Cards | Parallax tilt, Spotlight border, Glassmorphism, Holographic foil, Swipe stack, Morphing modal |
229| Scroll | Sticky stack, Horizontal hijack, Locomotive sequence, Zoom parallax, Progress path, Liquid swipe |
230| Gallery | Dome gallery, Coverflow, Drag-to-pan, Accordion slider, Hover trail, Glitch effect |
231| Text | Kinetic marquee, Text mask reveal, Scramble effect, Circular path, Gradient stroke, Kinetic grid |
232| Micro | Particle explosion, Pull-to-refresh, Skeleton shimmer, Directional hover, Ripple click, SVG draw, Mesh gradient, Lens blur |
233
234## 1.7 Bento Paradigm
235
236- **Palette:** Background `#f9fafb`, cards pure white with `border-slate-200/50`
237- **Surfaces:** `rounded-[2.5rem]`, diffusion shadow
238- **Typography:** Geist/Satoshi, `tracking-tight` headers
239- **Labels:** Outside and below cards
240- **Animation:** Spring physics (`stiffness: 100, damping: 20`), infinite loops, `React.memo` isolation
241
242**5-Card Archetypes:**
2431. Intelligent List — auto-sorting with `layoutId`
2442. Command Input — typewriter + blinking cursor
2453. Live Status — breathing indicators
2464. Wide Data Stream — infinite horizontal carousel
2475. Contextual UI — staggered highlight + float-in toolbar
248
249## 1.8 Brand Override
250
251When brand styling is active:
252- Dark: `#141413`, Light: `#faf9f5`, Mid: `#b0aea5`, Subtle: `#e8e6dc`
253- Accents: Orange `#d97757`, Blue `#6a9bcc`, Green `#788c5d`
254- Fonts: Poppins (headings), Lora (body)
255
256---
257
258# 2. Motion Engine
259
260## 2.1 Tool Selection Matrix
261
262| Need | Tool |
263|------|------|
264| UI enter/exit/layout | **Framer Motion** — `AnimatePresence`, `layoutId`, springs |
265| Scroll storytelling (pin, scrub) | **GSAP + ScrollTrigger** — frame-accurate control |
266| Looping icons | **Lottie** — lazy-load (~50KB) |
267| 3D/WebGL | **Three.js / R3F** — isolated `<Canvas>`, own `"use client"` boundary |
268| Hover/focus states | **CSS only** — zero JS cost |
269| Native scroll-driven | **CSS** — `animation-timeline: scroll()` |
270
271**Conflict Rules [MANDATORY]:**
272- NEVER mix GSAP + Framer Motion in same component
273- R3F MUST live in isolated Canvas wrapper
274- ALWAYS lazy-load Lottie, GSAP, Three.js
275
276## 2.2 Intensity Scale
277
278| Level | Techniques |
279|-------|------------|
280| 1-2 Subtle | CSS transitions only, 150-300ms |
281| 3-4 Smooth | CSS keyframes + Framer animate, stagger ≤3 items |
282| 5-6 Fluid | `whileInView`, magnetic hover, parallax tilt |
283| 7-8 Cinematic | GSAP ScrollTrigger, pinned sections, horizontal hijack |
284| 9-10 Immersive | Full scroll sequences, Three.js particles, WebGL shaders |
285
286## 2.3 Animation Recipes
287
288See `references/motion-recipes.md` for full code. Summary:
289
290| Recipe | Tool | Use For |
291|--------|------|---------|
292| Scroll Reveal | Framer | Fade+slide on viewport entry |
293| Stagger Grid | Framer | Sequential list animations |
294| Pinned Timeline | GSAP | Horizontal scroll with pinning |
295| Tilt Card | Framer | Mouse-tracking 3D perspective |
296| Magnetic Button | Framer | Cursor-attracted buttons |
297| Text Scramble | Vanilla | Matrix-style decode effect |
298| SVG Path Draw | CSS | Scroll-linked path animation |
299| Horizontal Scroll | GSAP | Vertical-to-horizontal hijack |
300| Particle Background | R3F | Decorative WebGL particles |
301| Layout Morph | Framer | Card-to-modal expansion |
302
303## 2.4 Performance Rules
304**GPU-only properties (ONLY animate these):** `transform`, `opacity`, `filter`, `clip-path`
305
306**NEVER animate:** `width`, `height`, `top`, `left`, `margin`, `padding`, `font-size` — if you need these effects, use `transform: scale()` or `clip-path` instead.
307
308**Isolation:**
309- Perpetual animations MUST be in `React.memo` leaf components
310- `will-change: transform` ONLY during animation
311- `contain: layout style paint` on heavy containers
312
313**Mobile:**
314- ALWAYS respect `prefers-reduced-motion`
315- ALWAYS disable parallax/3D on `pointer: coarse`
316- Cap particles: desktop 800, tablet 300, mobile 100
317- Disable GSAP pin on mobile < 768px
318
319**Cleanup:** Every `useEffect` with GSAP/observers MUST `return () => ctx.revert()`
320
321## 2.5 Springs & Easings
322
323| Feel | Framer Config |
324|------|---------------|
325| Snappy | `stiffness: 300, damping: 30` |
326| Smooth | `stiffness: 150, damping: 20` |
327| Bouncy | `stiffness: 100, damping: 10` |
328| Heavy | `stiffness: 60, damping: 20` |
329
330| CSS Easing | Value |
331|------------|-------|
332| Smooth decel | `cubic-bezier(0.16, 1, 0.3, 1)` |
333| Smooth accel | `cubic-bezier(0.7, 0, 0.84, 0)` |
334| Elastic | `cubic-bezier(0.34, 1.56, 0.64, 1)` |
335
336## 2.6 Accessibility
337- ALWAYS wrap motion in `prefers-reduced-motion` check
338- NEVER flash content > 3 times/second (seizure risk)
339- ALWAYS provide visible focus rings (use `outline` not `box-shadow`)
340- ALWAYS add `aria-live="polite"` for dynamically revealed content
341- ALWAYS include pause button for auto-playing animations
342
343## 2.7 Dependencies
344
345```bash
346npm install framer-motion # UI (keep at top level)
347npm install gsap # Scroll (lazy-load)
348npm install lottie-react # Icons (lazy-load)
349npm install three @react-three/fiber @react-three/drei # 3D (lazy-load)
350```
351
352---
353
354# 3. Asset Generation
355
356## 3.1 Scripts
357
358| Type | Script | Pattern |
359|------|--------|---------|
360| TTS | `scripts/minimax_tts.py` | Sync |
361| Music | `scripts/minimax_music.py` | Sync |
362| Video | `scripts/minimax_video.py` | Async (create → poll → download) |
363| Image | `scripts/minimax_image.py` | Sync |
364
365Env: `MINIMAX_API_KEY` (required).
366
367## 3.2 Workflow
3681. **Parse:** type, quantity, style, spec, usage
3692. **Craft prompt:** Be specific (composition, lighting, style). **NEVER** include text in image prompts.
3703. **Execute:** Show prompt to user, **MUST confirm before generating**, then run script
3714. **Save:** `<project>/public/assets/{images,videos,audio}/` as `{type}-{descriptor}-{timestamp}.{ext}` — **MUST save locally**
3725. **Post-process:** Images → WebP, Videos → ffmpeg compress, Audio → normalize
3736. **Deliver:** File path + code snippet + CSS suggestion
374
375## 3.3 Preset Shortcuts
376
377| Shortcut | Spec |
378|----------|------|
379| `hero` | 16:9, cinematic, text-safe |
380| `thumb` | 1:1, centered subject |
381| `icon` | 1:1, flat, clean background |
382| `avatar` | 1:1, portrait, circular crop ready |
383| `banner` | 21:9, OG/social |
384| `bg-video` | 768P, 6s, `[Static shot]` |
385| `video-hd` | 1080P, 6s |
386| `bgm` | 30s, no vocals, loopable |
387| `tts` | MiniMax HD, MP3 |
388
389## 3.4 Reference
390
391- `references/minimax-cli-reference.md` — CLI flags
392- `references/asset-prompt-guide.md` — Prompt rules
393- `references/minimax-voice-catalog.md` — Voice IDs
394- `references/minimax-tts-guide.md` — TTS usage
395- `references/minimax-music-guide.md` — Music generation (prompts, lyrics, structure tags)
396- `references/minimax-video-guide.md` — Camera commands
397- `references/minimax-image-guide.md` — Ratios, batch
398
399---
400
401# 4. Copywriting
402
403## 4.1 Core Job
404
4051. Grab attention → 2. Create desire → 3. Remove friction → 4. Prompt action
406
407## 4.2 Frameworks
408
409**AIDA** (landing pages, emails):
410```
411ATTENTION: Bold headline (promise or pain)
412INTEREST: Elaborate problem ("yes, that's me")
413DESIRE: Show transformation
414ACTION: Clear CTA
415```
416
417**PAS** (pain-driven products):
418```
419PROBLEM: State clearly
420AGITATE: Make urgent
421SOLUTION: Your product
422```
423
424**FAB** (product differentiation):
425```
426FEATURE: What it does
427ADVANTAGE: Why it matters
428BENEFIT: What customer gains
429```
430
431## 4.3 Headlines
432
433| Formula | Example |
434|---------|---------|
435| Promise | "Double open rates in 30 days" |
436| Question | "Still wasting 10 hours/week?" |
437| How-To | "How to automate your pipeline" |
438| Number | "7 mistakes killing conversions" |
439| Negative | "Stop losing leads" |
440| Curiosity | "The one change that tripled bookings" |
441| Transformation | "From 50 to 500 leads" |
442
443Be specific. Lead with outcome, not method.
444
445## 4.4 CTAs
446
447**Bad:** Submit, Click here, Learn more
448
449**Good:** "Start my free trial", "Get the template now", "Book my strategy call"
450
451**Formula:** [Action Verb] + [What They Get] + [Urgency/Ease]
452
453Place: above fold, after value, multiple on long pages.
454
455## 4.5 Emotional Triggers
456
457| Trigger | Example |
458|---------|---------|
459| FOMO | "Only 3 spots left" |
460| Fear of loss | "Every day without this, you're losing $X" |
461| Status | "Join 10,000+ top agencies" |
462| Ease | "Set it up once. Forget forever." |
463| Frustration | "Tired of tools that deliver nothing?" |
464| Hope | "Yes, you CAN hit $10K MRR" |
465
466## 4.6 Objection Handling
467
468| Objection | Response |
469|-----------|----------|
470| Too expensive | Show ROI: "Pays for itself in 2 weeks" |
471| Won't work for me | Social proof from similar customer |
472| No time | "Setup takes 10 minutes" |
473| What if it fails | "30-day money-back guarantee" |
474| Need to think | Urgency/scarcity |
475
476Place in FAQ, testimonials, near CTA.
477
478## 4.7 Proof Types
479
480Testimonials (with name/title), Case studies, Data/metrics, Social proof, Certifications
481
482---
483
484# 5. Visual Art
485
486Philosophy-first workflow. Two output modes.
487
488## 5.1 Output Modes
489
490| Mode | Output | When |
491|------|--------|------|
492| Static | PDF/PNG | Posters, print, design assets |
493| Interactive | HTML (p5.js) | Generative art, explorable variations |
494
495## 5.2 Workflow
496
497### Step 1: Philosophy Creation
498Name the movement (1-2 words). Articulate philosophy (4-6 paragraphs) covering:
499- Static: space, form, color, scale, rhythm, hierarchy
500- Interactive: computation, emergence, noise, parametric variation
501
502### Step 2: Conceptual Seed
503Identify subtle, niche reference — sophisticated, not literal. Jazz musician quoting another song.
504
505### Step 3: Creation
506
507**Static Mode:**
508- Single page, highly visual, design-forward
509- Repeating patterns, perfect shapes
510- Sparse typography from `canvas-fonts/`
511- Nothing overlaps, proper margins
512- Output: `.pdf` or `.png` + philosophy `.md`
513
514**Interactive Mode:**
5151. Read `templates/viewer.html` first
5162. Keep FIXED sections (header, sidebar, seed controls)
5173. Replace VARIABLE sections (algorithm, parameters)
5184. Seeded randomness: `randomSeed(seed); noiseSeed(seed);`
5195. Output: single self-contained HTML
520
521### Step 4: Refinement
522Refine, don't add. Make it crisp. Polish into masterpiece.
523
524---
525
526# Quality Gates
527**Design:**
528- [ ] Mobile layout collapse (`w-full`, `px-4`) for high-variance designs
529- [ ] `min-h-[100dvh]` not `h-screen`
530- [ ] Empty, loading, error states provided
531- [ ] Cards omitted where spacing suffices
532
533**Motion:**
534- [ ] Correct tool per selection matrix
535- [ ] No GSAP + Framer mixed in same component
536- [ ] All `useEffect` have cleanup returns
537- [ ] `prefers-reduced-motion` respected
538- [ ] Perpetual animations in `React.memo` leaf components
539- [ ] Only GPU properties animated
540- [ ] Heavy libraries lazy-loaded
541
542**General:**
543- [ ] Dependencies verified in `package.json`
544- [ ] **No placeholder URLs** — grep the output for `unsplash`, `picsum`, `placeholder`, `placehold`, `via.placeholder`, `lorem.space`, `dummyimage`. If ANY found, STOP and replace with generated assets before delivering.
545- [ ] **All media assets exist as local files** in the project's assets directory
546- [ ] Asset prompts confirmed with user before generation
547
548---
549
550*React and Next.js are trademarks of Meta Platforms, Inc. and Vercel, Inc., respectively. Vue.js is a trademark of Evan You. Tailwind CSS is a trademark of Tailwind Labs Inc. Svelte and SvelteKit are trademarks of their respective owners. GSAP/GreenSock is a trademark of GreenSock Inc. Three.js, Framer Motion, Lottie, Astro, and all other product names are trademarks of their respective owners.*
551
552---
553
554**Source:** [`MiniMax-AI/skills`](https://github.com/MiniMax-AI/skills) → `skills/frontend-dev/SKILL.md`