Files
distromatch/design_guidelines.md
T
2025-12-17 13:31:08 +00:00

165 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DistroMatch Design Guidelines
## Design Philosophy
Create a premium, desktop-first "Tinder for Linux Distros" experience that feels cinematic and playful. Reject traditional survey-based tools in favor of visceral, swipe-based discovery using landscape desktop screenshots.
## Layout System
**Core Structure:**
- Single-page application with centered card stack as focal point
- Cards positioned in absolute center of viewport
- Use Tailwind spacing: p-4, p-6, p-8 for consistent padding
- Container max-width: 1200px for card stack area
**Card Dimensions:**
- Landscape orientation (16:9 aspect ratio) - NEVER vertical/portrait
- Recommended size: 900px width × 506px height (or proportional)
- Card stack: 3-5 cards visible with z-index layering
- Cards behind should be slightly offset and scaled down (scale-95)
## Component Architecture
**1. Card Stack System:**
- Top card: Full size, draggable, z-index highest
- Second card: scale-95, slight vertical offset (8px down)
- Third+ cards: scale-90, progressive offsets
- Empty state when deck is finished
**2. Card Component Structure:**
```
Card Container (rounded-2xl, shadow-2xl)
├── Screenshot Area (16:9, covers top 75% of card)
│ └── High-quality Linux desktop screenshot
└── Info Bar (bottom 25%, elegant dark overlay)
├── Witty Title (text-xl, font-bold)
├── Distro Name (text-sm, muted)
└── Optional: Quick stats or tags
```
**3. Info Bar Design:**
- Semi-transparent dark background (bg-black/80 backdrop-blur-md)
- Padding: px-8 py-6
- Text must never overlap screenshot
- Rounded bottom corners matching card (rounded-b-2xl)
## Typography
**Fonts via Google Fonts:**
- Primary: Inter (headings, UI elements) - weights 400, 600, 700
- Secondary: Space Grotesk (witty card titles) - weights 500, 700
**Hierarchy:**
- Card titles: text-2xl font-bold (witty personality descriptions)
- Distro names: text-lg font-semibold
- UI labels: text-sm font-medium
- Metadata: text-xs text-gray-400
## Interaction Design
**Swipe Mechanics:**
- Drag threshold: 150px horizontal movement to trigger decision
- Swipe right (>150px) = LIKE
- Swipe left (<-150px) = DISLIKE
- Visual feedback: Rotate card based on drag distance (max ±15deg)
- On release: Physics-based throw animation if threshold met
**Animation Requirements (Framer Motion):**
- Front card drag: Follow cursor with spring physics
- Background card: Scale from 95 to 100 as front card moves
- Throw animation: Smooth exit with rotation matching swipe direction
- New card entrance: Fade in and scale up from 90 to 100
- Background gradient: Smooth color transition (300ms ease)
**Button Controls:**
- Bottom center: Two action buttons (Dislike/Like)
- Style: Large rounded buttons (w-16 h-16 rounded-full)
- Icons: X (dislike), Heart (like) from Lucide-React
- Hover states: Subtle scale-110 and shadow increase
## Background Treatment
**Dynamic Gradient:**
- Full viewport background
- Blur effect: backdrop-blur-3xl
- Color extraction: Sample dominant colors from current card screenshot
- Create radial gradient with extracted colors at 30% opacity
- Transition smoothly between cards (animate gradient-shift)
- Fallback: Subtle purple-to-blue gradient
## Data Structure
**Card Data Model:**
```
interface DistroCard {
id: string
distroName: string
screenshot: string (URL or path)
wittyTitle: string (e.g., "Terminal is life", "Mac envy approved")
desktopEnvironment: string
tags: string[]
colorPalette?: string[] (for background gradient)
}
```
**Sample Witty Titles:**
- "Terminalden çıkmam" (Never leaves terminal)
- "Mac gibi olsun" (Make it Mac-like)
- "Sadece çalışsın yeter" (Just make it work)
- "Özelleştirme canavarı" (Customization beast)
## Images
**Screenshot Requirements:**
- High-resolution desktop screenshots (1920×1080 minimum)
- Various Linux distributions and desktop environments
- Clean, representative workspace examples
- Showcase different aesthetics (minimal, maximal, professional, gaming)
- 15-20 diverse examples covering: GNOME, KDE, i3, XFCE, Cinnamon, etc.
**Placement:**
- Each card features one full-bleed screenshot covering 75% of card height
- Aspect ratio strictly maintained at 16:9
- No hero section - app focuses entirely on card interaction
## Responsive Considerations
**Desktop-First (Primary):**
- Optimized for 1440px+ displays
- Cards remain landscape and centered
- Maximum engagement with large viewport
**Tablet (1024px):**
- Slightly smaller cards (700px width)
- Maintain landscape orientation
- Buttons remain accessible
**Mobile (768px and below):**
- Cards scale down but NEVER become vertical
- May need horizontal scrolling or reduced card size
- Swipe gestures remain primary interaction
## Special States
**Loading State:**
- Skeleton cards with shimmer effect
- Maintain card stack layout
**End of Deck:**
- "Recommendations ready!" message
- Reset or view results buttons
- Celebratory micro-animation
**Swipe Indicators:**
- Subtle overlay on card during drag showing LIKE (green) or NOPE (red)
- Opacity increases with drag distance
- Icon appears in drag direction
## Modular Architecture
**File Structure:**
- `/components/CardStack.tsx` - Main card container
- `/components/SwipeCard.tsx` - Individual draggable card
- `/components/ActionButtons.tsx` - Like/Dislike controls
- `/data/distros.ts` - Card data array
- `/utils/colorExtractor.ts` - Background gradient logic
- `/hooks/useSwipe.ts` - Swipe gesture management