refactor: Cleaner landing page - focused hero & reduced animations

**User Feedback:**
- Hero Section: Too much going on, redundant generator
- Animations: Too excessive throughout
- Phone Mockup: Works great, keep it!

**Hero Section - Major Cleanup:**
- REMOVED: Interactive QR Generator (redundant with generator below)
- NEW: QRTypesShowcase - 3x3 grid showing 9 QR code types
- NEW: Auto-rotating phone mockup demonstrating each type
- Shows variety instead of single interactive element
- Much cleaner, more focused first impression

**Animation Cleanup:**
- FeatureCustomizationDemo: Cycles ONCE then stops
- FeatureBulkDemo: Animates ONCE then stays static
- Features.tsx: Removed all infinite animations (rotate, scale, etc.)
- StatsCounter: Subtiler - smaller text, slower animation
- No more animation overload!

**Philosophy:**
- CLEANER > overloaded
- FOCUSED > excessive interaction
- SUBTLE > flashy animations
- Show variety > show everything

**PhoneMockup Enhanced:**
- Auto-rotates through 9 QR types every 5s
- Shows scan animation for each type
- Displays type name in notification
- Clean demo of all capabilities

**Components:**
- NEW: QRTypesShowcase.tsx - Grid with 9 QR types
- UPDATED: PhoneMockup.tsx - Auto-rotation logic
- UPDATED: Hero.tsx - Uses showcase instead of generator
- UPDATED: Features.tsx - Static icons, no infinite loops
- UPDATED: StatsCounter.tsx - Subtiler appearance

Result: Professional, clean, focused landing page without animation chaos!

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Timo
2026-01-19 09:14:52 +01:00
parent a7180e3b9b
commit 3c6d75b6bb
7 changed files with 311 additions and 149 deletions

View File

@@ -7,14 +7,18 @@ import { FileSpreadsheet, ArrowRight } from 'lucide-react';
export const FeatureBulkDemo: React.FC = () => {
const [showQRs, setShowQRs] = useState(false);
const [hasAnimated, setHasAnimated] = useState(false);
useEffect(() => {
const interval = setInterval(() => {
setShowQRs((prev) => !prev);
}, 4000);
if (hasAnimated) return;
return () => clearInterval(interval);
}, []);
const timer = setTimeout(() => {
setShowQRs(true);
setHasAnimated(true);
}, 500);
return () => clearTimeout(timer);
}, [hasAnimated]);
const qrCodes = [
{ id: 1, url: 'product-1', delay: 0 },