mirror of
https://github.com/yusufipk/distromatch.git
synced 2026-09-11 10:46:07 +00:00
165 lines
5.4 KiB
Markdown
165 lines
5.4 KiB
Markdown
# 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 |