A romantic, immersive, and emotionally captivating Valentine's Day website built with React, TypeScript, Tailwind CSS, GSAP, and Framer Motion.
- Dark Romantic Palette: Deep reds, pink glows, violet accents on a dark background
- Glassmorphism Effects: Modern frosted glass cards and overlays
- Premium Typography: Cormorant Garamond for headings, Lato for body text
- Responsive Design: Mobile-first approach with perfect scaling to all devices
- GSAP ScrollTrigger: Smooth scroll-based animations and parallax effects
- Framer Motion: React-native animations with gestures
- Floating Hearts: Ambient heart particles throughout the site
- Heartbeat Effects: Pulsing animations on key elements
- 3D Tilt Effects: Interactive card tilting on desktop
- Typewriter Effect: Line-by-line letter reveal
- Confetti & Fireworks: Celebration effects on the surprise page
- Touch-Friendly: Large buttons, swipe gestures, haptic feedback
- Hamburger Menu: Animated mobile navigation with heart icon
- Safe Area Support: iOS notch and gesture area compatibility
- Reduced Motion: Respects user accessibility preferences
- Hero: Fullscreen landing with animated headline and 3D heart
- Our Story: Scroll-based timeline of your love journey
- Love Letter: Typewriter-style romantic letter
- Memory Gallery: Masonry grid with modal image viewer
- Final Surprise: Beating heart with confetti celebration
- Node.js 18+
- npm or yarn
# Clone or download the project
cd app
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run buildThe site is ready to deploy on Vercel, Netlify, or any static hosting:
# Build the project
npm run build
# Deploy the dist/ folderEdit these files to customize the content:
// Change the main headline
<h1>
Happy Valentine's Day
<span>My Love</span> {/* Change to your partner's name */}
</h1>
// Update the subtitle
<p>
Every moment with you is a treasure...
</p>const storyEvents = [
{
date: 'June 15, 2023', // Your actual dates
title: 'The First Meeting',
description: 'Your personal story here...',
},
// Add more events
];const letterContent = [
"My Dearest [Partner's Name],",
"",
"Your personal message here...",
// Add more lines
];const galleryImages = [
{
id: 1,
src: '/your-photo-1.jpg', // Add your photos to public/ folder
title: 'Your Title',
description: 'Your description',
date: 'Your Date',
},
// Add more images
];Edit tailwind.config.js:
colors: {
romantic: {
red: '#d41c58', // Your primary color
pink: '#fd4ecd', // Your secondary color
purple: '#b52cff', // Your accent color
},
}Edit src/index.css:
@import url('https://fonts.googleapis.com/css2?family=Your+Font&display=swap');
body {
font-family: 'Your Font', sans-serif;
}app/
βββ src/
β βββ components/
β β βββ custom/
β β β βββ FloatingHearts.tsx # Floating heart particles
β β β βββ Navigation.tsx # Mobile-first navbar
β β βββ ui/ # shadcn/ui components
β βββ sections/
β β βββ Hero.tsx # Landing section
β β βββ OurStory.tsx # Timeline section
β β βββ LoveLetter.tsx # Typewriter letter
β β βββ MemoryGallery.tsx # Photo gallery
β β βββ FinalSurprise.tsx # Proposal section
β β βββ Footer.tsx # Footer
β βββ hooks/
β β βββ useGSAP.ts # GSAP animation hooks
β βββ types/
β β βββ confetti.d.ts # Type declarations
β βββ App.tsx # Main app component
β βββ App.css # App styles
β βββ index.css # Global styles
β βββ main.tsx # Entry point
βββ public/ # Static assets
βββ dist/ # Build output
βββ tailwind.config.js # Tailwind configuration
βββ vite.config.ts # Vite configuration
βββ package.json # Dependencies
- β Lazy Loading: Images load as they enter viewport
- β GPU Acceleration: All animations use transform3d
- β Code Splitting: Components loaded on demand
- β
Reduced Motion: Respects
prefers-reduced-motion - β Optimized Assets: Compressed images and fonts
- β 60fps Animations: Smooth 60fps on all devices
- Keyboard navigation support
- ARIA labels on interactive elements
- Focus indicators
- Reduced motion support
- High contrast mode support
- Screen reader friendly
- Framework: React 18 + TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS 3.4
- Animations: GSAP + ScrollTrigger + Framer Motion
- Icons: Lucide React
- UI Components: shadcn/ui
- Chrome 90+
- Firefox 88+
- Safari 14+
- Edge 90+
- iOS Safari 14+
- Chrome Android 90+
- Add Personal Photos: Replace the placeholder images with your actual couple photos
- Write From the Heart: Customize the love letter with your own words
- Include Inside Jokes: Add personal touches that only you two understand
- Set the Mood: Play romantic music while she views the site
- Present it Right: Send the link with a sweet message or reveal it in person
This project is created with love for your special someone. Feel free to customize and make it your own!
Made with β€οΈ for the one who holds my heart.