Selected Approach: Design System (Utility-Focused) Primary Reference: Google Photos / Apple Photos aesthetic Justification: This photo management application prioritizes efficiency, clarity, and usability. Users need to quickly upload, organize, and find their photos. The design should stay out of the way while providing powerful organizational tools.
Core Design Principles:
- Content-first: Photos are the hero, UI is supportive
- Scannable hierarchy: Clear categorization and filtering
- Efficient interactions: Minimal clicks to accomplish tasks
- Generous whitespace: Let photos breathe in the layout
Font Family: Inter (via Google Fonts CDN)
- Primary: Inter for all UI elements
- Fallback: system-ui, -apple-system, sans-serif
Type Scale:
- Page Titles: 2xl (24px), font-semibold
- Section Headers: xl (20px), font-semibold
- Card Titles/Categories: base (16px), font-medium
- Body Text: sm (14px), font-normal
- Captions/Metadata: xs (12px), font-normal
- Button Text: sm (14px), font-medium
Spacing Primitives: Tailwind units of 2, 4, 6, 8, 12, and 16
- Component padding: p-4 or p-6
- Section gaps: gap-6 or gap-8
- Card spacing: p-4
- Icon-to-text spacing: gap-2
- Form element spacing: space-y-4
Container Strategy:
- Max width: max-w-7xl for main content area
- Sidebar width: Fixed 240px (w-60) for categories
- Content padding: px-6 py-4 on desktop, px-4 py-3 on mobile
Main Layout:
- Two-column layout: Fixed sidebar (240px) + fluid main content area
- Sidebar: Category navigation, filter controls, upload button
- Main area: Breadcrumb navigation, photo grid, and controls
- Top bar: App logo/name, search input, user profile/settings icon
Sidebar Components:
- Upload button: Prominent, full-width, at top
- Category list: Vertical list with icon + label + photo count
- Filter section: Collapsible groups for file type, date range
- Footer: Storage usage indicator with visual progress bar
Main Content Area:
- View controls bar: Grid/list toggle, sort dropdown, select mode toggle
- Photo grid: Responsive masonry or uniform grid layout
- Empty states: Large icon + helpful message when no photos
Drag-and-Drop Zone:
- Large dashed border area (min-h-64) when empty
- Cloud upload icon (size-16) centered
- "Drag photos here or click to browse" text
- File type and size guidance text
- Progress indicators during upload with percentage and file name
- Success confirmation with thumbnail preview
Grid Configuration:
- Desktop: 4-5 columns (grid-cols-4 lg:grid-cols-5)
- Tablet: 3 columns (md:grid-cols-3)
- Mobile: 2 columns (grid-cols-2)
- Gap between items: gap-4
- Aspect ratio: Square (aspect-square) for uniform layout
Photo Card:
- Image: Rounded corners (rounded-lg), object-cover
- Hover state: Overlay with opacity showing filename and actions
- Selection indicator: Checkbox in top-left corner (absolute positioning)
- Quick actions: Download, move to category, delete icons on hover
Category Badge/Pill:
- Rounded-full styling
- Small text (text-xs)
- Icon + label pairing
- Padding: px-3 py-1
- Used in both sidebar and photo metadata
Category Icons (from Heroicons):
- Personal: UserIcon
- Work: BriefcaseIcon
- Travel: MapPinIcon
- Events: CalendarIcon
- Other/Uncategorized: FolderIcon
Filter Dropdown:
- Checkbox lists for file types (JPEG, PNG, HEIC, RAW)
- Date range picker with preset options (Today, This Week, This Month, This Year)
- Applied filters shown as dismissible pills above photo grid
- "Clear all filters" text button when filters active
Implementation:
- Full-width in top bar (max-w-md)
- Magnifying glass icon prefix
- Placeholder: "Search photos..."
- Rounded-lg borders
- Focus state with subtle ring
Photo Detail Modal:
- Full-screen overlay with semi-transparent backdrop
- Large photo display (max-h-90vh, max-w-90vw)
- Metadata sidebar: Filename, size, upload date, category, file type
- Action buttons: Download, move, delete, close
- Navigation arrows for next/previous photo
Confirmation Dialogs:
- Centered modal (max-w-md)
- Icon at top indicating action type
- Clear heading and description
- Primary and secondary action buttons
- Escape key to dismiss
Breadcrumb Navigation:
- Show current view context: "All Photos / Travel / Japan 2024"
- Clickable segments to navigate back
- Chevron separators
- Text-sm sizing
Responsive Behavior:
- Mobile: Sidebar becomes slide-out drawer triggered by hamburger menu
- Tablet: Sidebar remains visible but narrower (w-48)
- Desktop: Full sidebar always visible
Button States:
- Primary buttons: Solid style, rounded-lg
- Secondary buttons: Outline style, rounded-lg
- Icon buttons: p-2, rounded-full or rounded-lg
- Disabled: Reduced opacity (opacity-50), cursor-not-allowed
Selection Mode:
- Toggle between normal and multi-select mode
- Selected items: Blue checkmark indicator, subtle background tint
- Batch actions bar: Appears at bottom when items selected (fixed positioning)
- Actions: Move to category, download selected, delete selected
Loading States:
- Skeleton screens for photo grid while loading
- Shimmer animation effect on placeholder cards
- Spinner with text for upload progress
Empty States:
- Large centered icon (size-20)
- Encouraging headline (text-xl)
- Descriptive subtext (text-sm)
- Primary action button (e.g., "Upload Your First Photos")
Error States:
- Toast notifications for failed uploads (top-right corner)
- Inline error messages for form validation
- Retry mechanisms for failed operations
Hero/Welcome Screen (First-Time Users):
- Full-screen welcome illustration showing photo organization concept
- Abstract representation of photos being organized into categories
- Centered welcome message with "Get Started" button
- Only shown on first visit, replaced by photo grid after upload
Empty State Illustrations:
- Custom illustration for empty category views
- Small decorative graphic for "no search results"
- Keep illustrations simple, 2-3 color palette maximum
Photo Thumbnails:
- Generated automatically from uploads
- Maintain aspect ratio with object-cover
- Lazy loading for performance (only load visible thumbnails)
This design creates a clean, efficient photo management experience that prioritizes usability while maintaining visual polish.