A 45-second cinematic experience that transforms a user's year of Pinterest activity into a personalized visual narrative, culminating in a shareable "creative identity card."
Pinterest Wrapped is inspired by Spotify Wrapped, but reimagined for the visual world of Pinterest. It analyzes everything you've saved during the year and transforms it into a cohesive narrative with beautiful animations and personalized insights.
- Cinematic 45-second experience with 5 phases
- Dynamic animations using Framer Motion
- Personalized identity card with rarity tiers (Common, Rare, Epic, Legendary)
- Color palette analysis showing dominant aesthetic colors
- Category breakdown of visual interests
- Keyword cloud revealing visual language
- Downloadable card as PNG image
- Social sharing to Twitter, Facebook, and more
- Fully responsive design
pinterest_complete_brief/
├── src/
│ ├── components/
│ │ └── phases/
│ │ ├── Phase0Loading.jsx # Loading screen
│ │ ├── Phase1Intro.jsx # Intro sequence (5s)
│ │ ├── Phase2Montage.jsx # Image montage (15s)
│ │ ├── Phase3Analysis.jsx # Aesthetic analysis (10s)
│ │ ├── Phase4Identity.jsx # Identity card reveal (10s)
│ │ └── Phase5Share.jsx # Share panel
│ ├── data/
│ │ └── mockData.js # Mock data generator
│ ├── pages/
│ │ ├── ConceptPage.jsx # Explanation page
│ │ └── PrototypePage.jsx # Main experience
│ ├── App.jsx # Main app with routing
│ ├── main.jsx # Entry point
│ └── index.css # Global styles
├── imgs/ # Image assets
│ ├── art-design/
│ ├── characters-animated/
│ ├── fantasy-play/
│ ├── fashion-style/
│ ├── food-lifestyle/
│ └── interior-design/
├── index.html
├── package.json
└── vite.config.js
- Shows loading animation while data is being processed
- Displays error state if loading fails
- Smooth fade transition to Phase 1
- Dramatic opening with Pinterest logo animation
- Reveals "Your Year in Pinterest" and year number
- Decorative sparkles for visual interest
- Red-to-purple gradient background
Three sub-phases:
- Grid View (5s): Masonry grid of saved pins with color bars
- Carousel View (5s): Horizontal scrolling cards with category labels
- Category Clusters (5s): Grouped images by theme with weight badges
Three sub-phases:
- Color Palette (3s): Dynamic circles showing dominant colors
- Keyword Cloud (3s): Weighted pills revealing visual language
- Category Breakdown (4s): Top categories with progress bars and thumbnails
- Personalized identity card with rarity tier
- User avatar, title, and description
- Top categories and color palette
- Floating sparkles and gradient orbs
- CTA hint for sharing
- Condensed card preview
- Download as PNG functionality
- Copy link to clipboard
- Social media sharing (Twitter, Facebook)
- Watch Again button to restart
- Pinterest Red:
#E60023 - Purple:
#C13584 - Dark Background:
#111111 - Rarity Colors:
- Common:
#9CA3AF - Rare:
#3B82F6 - Epic:
#A855F7 - Legendary:
#F59E0B
- Common:
- Font: System font stack
- Weights: 400, 600, 700, 800, 900
- Fluid sizing with
clamp()for responsive text
- Framer Motion for all animations
- Spring physics for playful interactions
- Staggered entrances for visual interest
- GPU-accelerated transforms
- Node.js 16 or higher
- npm or yarn
- Install dependencies:
npm install- Start development server:
npm run dev- Open your browser to the URL shown (typically
http://localhost:5173)
npm run buildThe built files will be in the dist directory.
npm run preview/wrapped/concept- Explanation page that introduces Pinterest Wrapped/wrapped/prototype- The full 45-second experience
- React 18 - UI framework
- Vite - Build tool and dev server
- React Router - Client-side routing
- Framer Motion - Animation library
- Lucide React - Icon library
- html2canvas - Card download functionality
The application uses mock data generated from the images in the imgs/ directory. The data includes:
- 6 categories with 24 images each
- Color palettes extracted for each category
- Keywords and weights
- User identity card with personalized attributes
To customize the experience:
- Images: Replace images in the
imgs/directories - Categories: Edit
src/data/mockData.jsto add/modify categories - Identity Card: Customize titles, descriptions, and rarity logic
- Timing: Adjust phase durations in
src/pages/PrototypePage.jsx - Colors: Modify the design system colors in CSS files
- Chrome/Edge (latest)
- Firefox (latest)
- Safari (latest)
- Mobile browsers (iOS Safari, Chrome Mobile)
- All animations use GPU-accelerated properties
- Images are lazy-loaded where possible
- Optimized for 60fps throughout the experience
- Responsive design works on mobile and desktop
For detailed deployment instructions to Render, see RENDER_DEPLOYMENT.md.
Quick start:
- Push your code to GitHub
- Create a new Web Service on Render
- Connect your GitHub repository
- Use build command:
npm install && npm run build - Use start command:
npx serve -s dist -l 10000
The public/_redirects file is included to ensure proper SPA routing on Render.
This is a standard Vite + React app and can be deployed to:
- Vercel: Zero-config deployment
- Netlify: Automatic builds from GitHub
- GitHub Pages: Static hosting with Actions
- AWS S3 + CloudFront: Enterprise hosting
Inspired by Spotify Wrapped and designed following the Pinterest Wrapped specification and Pinterest Rewind creative brief.
This is a prototype/demonstration project.