frontend-landing/SKILL.md
# 🎭 Immersive Storybook Landing Page — Frontend Skill > **Build a cinematic, full-screen storybook-style landing page** with scroll-hijacked scene transitions, animated mascot/guide, glassmorphism UI, and dark-theme premium aesthetics. The user tells you what the product/page is about — you craft the experience. --- ## 📋 Skill Metadata | Key | Value | |-----|-------| | **Difficulty** | Advanced | | **Stack** | Next.js (App Router) · React 19 · TypeScript · Tailwind CSS · Framer Motion | |
npx skillsauth add 7a336e6e/skills frontend-landingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Build a cinematic, full-screen storybook-style landing page with scroll-hijacked scene transitions, animated mascot/guide, glassmorphism UI, and dark-theme premium aesthetics. The user tells you what the product/page is about — you craft the experience.
| Key | Value | |-----|-------| | Difficulty | Advanced | | Stack | Next.js (App Router) · React 19 · TypeScript · Tailwind CSS · Framer Motion | | Category | Frontend · Landing Page · Animation · UX | | Time | 2–4 hours | | Prerequisites | Scaffolding Frontend |
A single-page storybook experience where:
This is NOT a template. The user describes their product, brand, and pages — you use these patterns to create something unique and impressive.
app/
page.tsx ← Mounts the Journey component
globals.css ← Theme variables, glass/glow utilities, keyframes
components/
journey/
journey.tsx ← THE monolith: config + all scenes + orchestrator
star-field.tsx ← Ambient particle/star background (optional)
landing/
faq-section.tsx ← Embeddable sections (scroll inside scene)
signup-form-section.tsx
footer-section.tsx
interactive-demo-section.tsx
shared/
navbar.tsx
logo.tsx
ui/
badge.tsx, button.tsx … ← shadcn/ui primitives
| Decision | Why |
|----------|-----|
| Single monolith file for the journey | All scenes share state (activePage, intro, transitions). Co-location avoids prop drilling and keeps the storybook cohesive. Break out only truly independent pieces (star-field, logo). |
| Data-driven scene config | A PAGES[] array defines every scene: id, label, color, mascot position, mascot quote, transition preset, background glow. Adding a page = adding an object. |
| CSS-only typewriter | Zero React re-renders. Uses clip-path: inset() with steps() animation. |
| Framer Motion for orchestration | AnimatePresence + variants for scene enter/exit. Spring physics for mascot. Motion values for counters and rings. |
| sessionStorage intro skip | Intro plays once per session. On revisit, content mounts instantly. |
| Body scroll lock | document.body.style.overflow = "hidden" on mount, restored on unmount. |
See scaffolding-frontend/SKILL.md for full details.
npx create-next-app@latest my-landing --typescript --tailwind --app --eslint
cd my-landing
npx shadcn@latest init # dark theme, zinc/slate base
npm install framer-motion lucide-react
See building-components/01-theme-and-css.md
Set up CSS custom properties, glassmorphism classes, gradient text, glow buttons, keyframe animations. This is the visual foundation everything else builds on.
See building-components/02-scene-config.md
Create the PAGES[] array and transition variants. Each page is a typed object:
interface StoryPage {
id: string
label: string
color: string // brand color for this scene
mascotPosition: "left" | "right" | "center" | "top-left" | "top-right" | "hidden"
mascotQuote: string // what the guide says on this page
transition: TransitionPreset // "hero" | "slideLeft" | "slideRight" | "split" | "scale" | "rise" | "fade"
bgGlow?: string // radial-gradient for ambient scene color
}
See managing-state/01-navigation-engine.md
The orchestrator handles:
See building-components/03-intro-sequence.md
A branded intro that:
introComplete = truesessionStorage — skips on revisitSee building-components/04-mascot-guide.md
A fixed-position animated character that:
requestAnimationFrame)See building-components/05-scene-templates.md
Scene archetypes (mix and match):
| Template | Layout | Best For | |----------|--------|----------| | Hero | Centered, stacked | Opening page, big headline + CTA | | Problem | 2-column: text + live ticker/data | Pain points, urgency | | Solution | 2-column: text + before/after panel | Value proposition | | Product | 2-column: features + mock terminal | Individual product pages | | Process | 4-column step cards with connectors | How it works | | Stats | 2×2 grid with ring charts + counters | Social proof, metrics | | Embed | Scrollable container for existing components | FAQ, signup, footer |
See building-components/06-page-indicator.md
A vertical timeline of dots:
See building-components/07-mobile-responsive.md
Critical mobile adaptations:
hidden md:block (too much screen real estate on mobile)overflow-y-auto md:overflow-visible with scroll detectionSee bundling-frontend/SKILL.md and testing-frontend/SKILL.md
"use client" only on the journey componentuseMemouseCallback for event handlers passed as propspassive: true on touch/scroll listenerswill-change: transform on animated elements (use sparingly)| Skill | Description | |-------|-------------| | Scaffolding Frontend | Project setup, dependencies, folder structure | | Building Components | All visual components: theme, scenes, mascot, indicator | | Managing State | Navigation engine, scroll hijack, intro persistence | | Integrating API | Connecting forms, analytics, dynamic data | | Bundling Frontend | Build optimization, code splitting, deployment | | Testing Frontend | Visual regression, interaction testing, accessibility |
.glass-card {
background: rgba(17, 24, 39, 0.8);
backdrop-filter: blur(16px);
border: 1px solid rgba(YOUR_COLOR, 0.1);
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.03);
}
@keyframes typewriter-clip {
from { clip-path: inset(0 100% 0 0); }
to { clip-path: inset(0 0 0 0); }
}
/* Usage: animation: typewriter-clip ${charCount * 28}ms steps(${charCount}, end) forwards; */
const slideLeft: Variants = {
initial: { opacity: 0, x: -100 },
animate: { opacity: 1, x: 0, transition: { duration: 0.6, ease: [0.22, 1, 0.36, 1] } },
exit: { opacity: 0, x: 100, transition: { duration: 0.35 } },
}
<motion.circle r={36} strokeDasharray={2*Math.PI*36}
initial={{ strokeDashoffset: 2*Math.PI*36 }}
animate={{ strokeDashoffset: circumference - (percent/100)*circumference }}
transition={{ duration: 1.5, ease: "easeOut" }}
/>
<motion.div
animate={{ left: pos.x, top: pos.y }}
transition={{ type: "spring", stiffness: 50, damping: 16, mass: 1.2 }}
/>
| Pitfall | Solution |
|---------|----------|
| Hydration mismatch on intro state | Initialize state to "loading", decide in useEffect |
| Double page transitions from fast scrolling | Use isTransitioning ref with 700ms cooldown |
| Content hidden behind mascot on mobile | Hide mascot on mobile, add padding on desktop |
| AnimatePresence doesn't animate | Ensure key changes and component conditionally unmounts |
| Scroll events fire on embedded content | Detect scroll position of embed container before allowing page change |
| CSS animations restart on re-render | Use key={text} to force restart, keep animation in CSS not React state |
| Performance jank on low-end devices | Prefer CSS transforms over layout properties, use will-change sparingly |
| Touch events conflict with native scroll | Check embed scroll position in touchend before page-changing |
Tell the AI agent:
"Build me a storybook landing page for [YOUR PRODUCT]. It's a [description]. The pages should cover: [list your sections]. Use [your brand colors]. The mascot/guide should be [describe or say 'skip the mascot']."
The agent will use these skills to create a complete, production-ready landing page.
development
Implement features using the Red-Green-Refactor cycle to ensure testability and correctness from the start.
data-ai
Manage the `tasks.md` ledger with strict locking and collision avoidance protocols to allow multiple agents to work in parallel safely.
development
The git-workflow skill defines branching conventions, commit message formats, and pull request standards that all agents must follow for consistent version control.
development
The environment-config skill standardizes how agents manage environment variables, secrets, and application configuration across local development and deployed environments.