jedmund-svelte/PRD-media-library.md
2025-06-01 23:48:10 -07:00

576 lines
No EOL
21 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.

# Product Requirements Document: Media Library Modal System
## 🎉 **PROJECT STATUS: CORE IMPLEMENTATION COMPLETE!**
We have successfully implemented a comprehensive Media Library system with both direct upload workflows and library browsing capabilities. **All major components are functional and integrated throughout the admin interface.**
### 🏆 Major Achievements
- **✅ Complete MediaLibraryModal system** with single/multiple selection
- **✅ Enhanced upload components** (ImageUploader, GalleryUploader) with MediaLibraryModal integration
- **✅ Full form integration** across projects, posts, albums, and editor
- **✅ Alt text support** throughout upload and editing workflows
- **✅ Edra editor integration** with `/image` and `/gallery` slash commands
- **✅ Media Library management** with clickable editing and metadata support
## Overview
Implement a comprehensive Media Library modal system that provides a unified interface for browsing, selecting, and managing media across all admin forms. **The primary workflow is direct upload from computer within forms**, with the Media Library serving as a secondary browsing interface and management tool for previously uploaded content.
## 📋 Updated Approach Summary
**🎯 Primary Focus**: Direct upload components that allow users to drag-and-drop or browse files directly within project/post/album forms, with immediate preview and alt text capture.
**🎯 Secondary Feature**: Media Library modal for selecting previously uploaded content when needed.
**🎯 Key Addition**: Alt text storage and editing capabilities for accessibility compliance and SEO.
## Goals
### Primary Goals (Direct Upload Workflow)
- **Enable direct file upload within forms** where content will be used (projects, posts, albums)
- **Provide immediate upload and preview** without requiring navigation to separate media management
- **Store comprehensive metadata** including alt text for accessibility and SEO
- **Support drag-and-drop and click-to-browse** for intuitive file selection
### Secondary Goals (Media Library Browser)
- Create a reusable media browser for **selecting previously uploaded content**
- Provide **media management interface** showing where files are referenced
- Enable **bulk operations** and **metadata editing** (especially alt text)
- Support **file organization** and **usage tracking**
### Technical Goals
- Maintain consistent UX across all media interactions
- Support different file type filtering based on context
- Integrate seamlessly with existing admin components
## Current State Analysis
### ✅ What We Have
- Complete media API (`/api/media`, `/api/media/upload`, `/api/media/bulk-upload`)
- Media management page with grid/list views and search/filtering
- Modal base component (`Modal.svelte`)
- Complete admin UI component library (Button, Input, etc.)
- Media upload infrastructure with Cloudinary integration
- Pagination and search functionality
- **✅ Database schema with alt text support** (altText field in Media table)
- **✅ MediaLibraryModal component** with single/multiple selection modes
- **✅ ImageUploader and GalleryUploader components** with MediaLibraryModal integration
- **✅ Enhanced admin form components** with Browse Library functionality
- **✅ Media details editing** with alt text support in Media Library page
- **✅ Edra editor integration** with image and gallery support via slash commands
### 🎯 What We Need
#### High Priority (Remaining Tasks)
- **Enhanced upload features** with drag & drop zones in all upload components
- **Bulk alt text editing** in Media Library for existing content
- **Usage tracking display** showing where media is referenced
- **Performance optimizations** for large media libraries
#### Medium Priority (Polish & Advanced Features)
- **Image optimization options** during upload
- **Advanced search capabilities** (by alt text, usage, etc.)
- **Bulk operations** (delete multiple, bulk metadata editing)
#### Low Priority (Future Enhancements)
- **AI-powered alt text suggestions**
- **Duplicate detection** and management
- **Advanced analytics** and usage reporting
## Workflow Priorities
### 🥇 Primary Workflow: Direct Upload in Forms
This is the **main workflow** that users will use 90% of the time:
1. **User creates content** (project, post, album)
2. **User uploads files directly** in the form where they'll be used
3. **Files are immediately processed** and previewed
4. **Alt text and metadata** are captured during upload
5. **Content is saved** with proper media references
**Key Components**:
- `ImageUploader` - Direct drag-and-drop/click upload with preview
- `GalleryUploader` - Multiple file upload with immediate gallery preview
- `MediaMetadataForm` - Alt text and description capture during upload
### 🥈 Secondary Workflow: Browse Existing Media
This workflow is for **reusing previously uploaded content**:
1. **User needs to select existing media** (rare case)
2. **User clicks "Browse Library"** (secondary button)
3. **Media Library Modal opens** showing all uploaded files
4. **User selects from existing content**
5. **Media references are updated**
**Key Components**:
- `MediaLibraryModal` - Browse and select existing media
- `MediaSelector` - Grid interface for selection
- `MediaManager` - Edit alt text and view usage
## Technical Requirements
### 1. Enhanced Upload Components (Primary)
#### ImageUploader Component
**Purpose**: Direct image upload with immediate preview and metadata capture
```typescript
interface ImageUploaderProps {
label: string
value?: Media | null
onUpload: (media: Media) => void
aspectRatio?: string
required?: boolean
error?: string
allowAltText?: boolean // Enable alt text input
maxFileSize?: number // MB limit
}
```
**Features**:
- Drag-and-drop upload zone with visual feedback
- Click to browse files from computer
- Immediate image preview with proper aspect ratio
- Alt text input field (when enabled)
- Upload progress indicator
- File validation with helpful error messages
- Replace/remove functionality
#### GalleryUploader Component
**Purpose**: Multiple file upload with gallery preview and reordering
```typescript
interface GalleryUploaderProps {
label: string
value?: Media[]
onUpload: (media: Media[]) => void
onReorder?: (media: Media[]) => void
maxItems?: number
allowAltText?: boolean
required?: boolean
error?: string
}
```
**Features**:
- Multiple file drag-and-drop
- Immediate gallery preview grid
- Individual alt text inputs for each image
- Drag-and-drop reordering
- Individual remove buttons
- Bulk upload progress
### 2. MediaLibraryModal Component (Secondary)
**Purpose**: Main modal component that wraps the media browser functionality
**Props Interface**:
```typescript
interface MediaLibraryModalProps {
isOpen: boolean
mode: 'single' | 'multiple'
fileType?: 'image' | 'video' | 'all'
onSelect: (media: Media | Media[]) => void
onClose: () => void
selectedIds?: number[] // Pre-selected items
title?: string // Modal title
confirmText?: string // Confirm button text
}
```
**Features**:
- Modal overlay with proper focus management
- Header with title and close button
- Media browser grid with selection indicators
- Search and filter controls
- Upload area with drag-and-drop
- Footer with selection count and action buttons
- Responsive design (desktop and tablet)
### 2. MediaSelector Component
**Purpose**: The actual media browsing interface within the modal
**Features**:
- Grid layout with thumbnail previews
- Individual item selection with visual feedback
- Keyboard navigation support
- Loading states and error handling
- "Select All" / "Clear Selection" bulk actions (for multiple mode)
**Item Display**:
- Thumbnail image
- Filename (truncated)
- File size and dimensions
- Usage indicator (if used elsewhere)
- Selection checkbox/indicator
### 3. MediaUploader Component
**Purpose**: Handle file uploads within the modal
**Features**:
- Drag-and-drop upload zone
- Click to browse files
- Upload progress indicators
- Error handling and validation
- Multiple file upload support
- Automatic refresh of media grid after upload
**Validation**:
- File type restrictions based on context
- File size limits (10MB per file)
- Maximum number of files for bulk upload
### 4. Form Integration Components
#### MediaInput Component
**Purpose**: Generic input field that opens media library modal
```typescript
interface MediaInputProps {
label: string
value?: Media | Media[] | null
mode: 'single' | 'multiple'
fileType?: 'image' | 'video' | 'all'
onSelect: (media: Media | Media[] | null) => void
placeholder?: string
required?: boolean
error?: string
}
```
**Display**:
- Label and optional required indicator
- Preview of selected media (thumbnail + filename)
- "Browse" button to open modal
- "Clear" button to remove selection
- Error state display
#### ImagePicker Component
**Purpose**: Specialized single image selector with enhanced preview
```typescript
interface ImagePickerProps {
label: string
value?: Media | null
onSelect: (media: Media | null) => void
aspectRatio?: string // e.g., "16:9", "1:1"
placeholder?: string
required?: boolean
error?: string
}
```
**Display**:
- Large preview area with placeholder
- Image preview with proper aspect ratio
- Overlay with "Change" and "Remove" buttons on hover
- Upload progress indicator
#### GalleryManager Component
**Purpose**: Multiple image selection with drag-and-drop reordering
```typescript
interface GalleryManagerProps {
label: string
value?: Media[]
onSelect: (media: Media[]) => void
onReorder?: (media: Media[]) => void
maxItems?: number
required?: boolean
error?: string
}
```
**Display**:
- Grid of selected images with reorder handles
- "Add Images" button to open modal
- Individual remove buttons on each image
- Drag-and-drop reordering with visual feedback
## User Experience Flows
### 🥇 Primary Flow: Direct Upload in Forms
#### 1. Single Image Upload (Project Featured Image)
1. **User creates/edits project** and reaches featured image field
2. **User drags image file** directly onto ImageUploader component OR clicks to browse
3. **File is immediately uploaded** with progress indicator
4. **Image preview appears** with proper aspect ratio
5. **Alt text input field appears** below preview (if enabled)
6. **User enters alt text** for accessibility
7. **Form can be saved** with media reference and metadata
#### 2. Multiple Image Upload (Project Gallery)
1. **User reaches gallery section** of project form
2. **User drags multiple files** onto GalleryUploader OR clicks to browse multiple
3. **Upload progress shown** for each file individually
4. **Gallery grid appears** with all uploaded images
5. **Alt text inputs available** for each image
6. **User can reorder** images with drag-and-drop
7. **User can remove** individual images with X button
8. **Form saves** with complete gallery and metadata
#### 3. Media Management and Alt Text Editing
1. **User visits Media Library page** to manage uploaded content
2. **User clicks on any media item** to open details modal
3. **User can edit alt text** and other metadata
4. **User can see usage references** (which projects/posts use this media)
5. **Changes are saved** and reflected wherever media is used
### 🥈 Secondary Flow: Browse Existing Media
#### 1. Selecting Previously Uploaded Image
1. **User clicks "Browse Library"** button (secondary option in forms)
2. **MediaLibraryModal opens** showing all previously uploaded media
3. **User browses or searches** existing content
4. **User selects image** and confirms selection
5. **Modal closes** and form shows selected media with existing alt text
#### 2. Managing Media Library
1. **User visits dedicated Media Library page**
2. **User can view all uploaded media** in grid/list format
3. **User can edit metadata** including alt text for any media
4. **User can see usage tracking** - which content references each media
5. **User can perform bulk operations** like deleting unused media
## Design Specifications
### Modal Layout
- **Width**: 1200px max, responsive on smaller screens
- **Height**: 80vh max with scroll
- **Grid**: 4-6 columns depending on screen size
- **Item Size**: 180px × 140px thumbnails
### Visual States
- **Default**: Border with subtle background
- **Selected**: Blue border and checkmark overlay
- **Hover**: Slight scale and shadow effect
- **Loading**: Skeleton loader animation
- **Upload**: Progress overlay with percentage
### Colors (Using Existing Variables)
- **Selection**: `$blue-60` for selected state
- **Hover**: `$grey-10` background
- **Upload Progress**: `$green-60` for success, `$red-60` for error
## API Integration
### Endpoints Used
- `GET /api/media` - Browse media with search/filter/pagination
- `POST /api/media/upload` - Single file upload
- `POST /api/media/bulk-upload` - Multiple file upload
### Search and Filtering
- **Search**: By filename (case-insensitive)
- **Filter by Type**: image/*, video/*, all
- **Filter by Usage**: unused only, all
- **Sort**: Most recent first
### Pagination
- 24 items per page
- Infinite scroll or traditional pagination
- Loading states during page changes
## Implementation Plan
### ✅ Phase 1: Database Schema Updates (COMPLETED)
1. **✅ Alt Text Support**
- Database schema includes `altText` and `description` fields
- API endpoints support alt text in upload and update operations
2. **⏳ Usage Tracking (IN PROGRESS)**
- Basic usage references working in forms
- Need dedicated tracking table for comprehensive usage analytics
### ✅ Phase 2: Direct Upload Components (COMPLETED)
1. **✅ ImageUploader Component**
- Drag-and-drop upload zone with visual feedback
- Immediate upload and preview functionality
- Alt text input integration
- MediaLibraryModal integration as secondary option
2. **✅ GalleryUploader Component**
- Multiple file drag-and-drop support
- Individual alt text inputs per image
- Drag-and-drop reordering functionality
- Remove individual images functionality
- MediaLibraryModal integration for existing media selection
3. **✅ Upload API Enhancement**
- Alt text accepted in upload requests
- Complete media object returned with metadata
- Batch uploads with individual alt text support
### ✅ Phase 3: Form Integration (COMPLETED)
1. **✅ Project Forms Enhancement**
- Logo field enhanced with ImageUploader + Browse Library
- Featured image support with ImageUploader
- Gallery section implemented with GalleryUploader
- Secondary "Browse Library" buttons throughout
2. **✅ Post Forms Enhancement**
- Photo post creation with PhotoPostForm
- Album creation with AlbumForm and GalleryUploader
- Universe Composer with photo attachments
- Enhanced Edra editor with inline image/gallery support
### ✅ Phase 4: Media Library Management (MOSTLY COMPLETED)
1. **✅ Enhanced Media Library Page**
- Alt text editing for existing media via MediaDetailsModal
- Clickable media items with edit functionality
- Grid and list view toggles
2. **✅ MediaLibraryModal for Selection**
- Browse existing media interface
- Single and multiple selection modes
- Integration throughout all form components
- File type filtering (image/video/all)
### 🎯 Phase 5: Remaining Enhancements (CURRENT PRIORITIES)
#### 🔥 High Priority (Next Sprint)
1. **Enhanced Media Library Features**
- **Bulk alt text editing** - Select multiple media items and edit alt text in batch
- **Usage tracking display** - Show where each media item is referenced
- **Advanced drag & drop zones** - More intuitive upload areas in all components
2. **Performance Optimizations**
- **Lazy loading** for large media libraries
- **Search optimization** with better indexing
- **Thumbnail optimization** for faster loading
#### 🔥 Medium Priority (Future Sprints)
1. **Advanced Upload Features**
- **Image resizing/optimization** options during upload
- **Duplicate detection** to prevent redundant uploads
- **Bulk upload improvements** with better progress tracking
2. **Usage Analytics & Management**
- **Usage analytics dashboard** showing media usage statistics
- **Unused media cleanup** tools for storage optimization
- **Advanced search** by alt text, usage status, date ranges
#### 🔥 Low Priority (Nice-to-Have)
1. **AI Integration**
- **Automatic alt text suggestions** using image recognition
- **Smart tagging** for better organization
- **Content-aware optimization** suggestions
## Success Criteria
### Functional Requirements
#### Primary Workflow (Direct Upload)
- [x] **Drag-and-drop upload works** in all form components
- [x] **Click-to-browse file selection** works reliably
- [x] **Immediate upload and preview** happens without page navigation
- [x] **Alt text input appears** and saves with uploaded media
- [x] **Upload progress** is clearly indicated with percentage
- [x] **Error handling** provides helpful feedback for failed uploads
- [x] **Multiple file upload** works with individual progress tracking
- [x] **Gallery reordering** works with drag-and-drop after upload
#### Secondary Workflow (Media Library)
- [x] **Media Library Modal** opens and closes properly with smooth animations
- [x] **Single and multiple selection** modes work correctly
- [x] **Search and filtering** return accurate results
- [ ] **Usage tracking** shows where media is referenced (IN PROGRESS)
- [x] **Alt text editing** works in Media Library management
- [x] **All components are keyboard accessible**
#### Edra Editor Integration
- [x] **Slash commands** work for image and gallery insertion
- [x] **MediaLibraryModal integration** in editor placeholders
- [x] **Gallery management** within rich text editor
- [x] **Image replacement** functionality in editor
### Performance Requirements
- [x] Modal opens in under 200ms
- [x] Media grid loads in under 1 second
- [x] Search results appear in under 500ms
- [x] Upload progress updates in real-time
- [x] No memory leaks when opening/closing modal multiple times
### UX Requirements
- [x] Interface is intuitive without instruction
- [x] Visual feedback is clear for all interactions
- [x] Error messages are helpful and actionable
- [x] Mobile/tablet interface is fully functional
- [x] Loading states prevent user confusion
## Technical Considerations
### State Management
- Use Svelte runes for reactive state
- Maintain selection state during modal lifecycle
- Handle API loading and error states properly
### Accessibility
- Proper ARIA labels and roles
- Keyboard navigation support
- Focus management when modal opens/closes
- Screen reader announcements for state changes
### Performance
- Lazy load thumbnails as they come into view
- Debounce search input to prevent excessive API calls
- Efficient reordering without full re-renders
- Memory cleanup when modal is closed
### Error Handling
- Network failure recovery
- Upload failure feedback
- File validation error messages
- Graceful degradation for missing thumbnails
## Future Enhancements
### Nice-to-Have Features
- **Bulk Operations**: Delete multiple files, bulk tag editing
- **Advanced Search**: Search by tags, date range, file size
- **Preview Mode**: Full-size preview with navigation
- **Folder Organization**: Create folders/categories for organization
- **Smart Suggestions**: Recently used, similar images
- **Crop Tool**: Basic cropping interface within modal
- **Alt Text Editor**: Quick alt text editing for accessibility
### Integration Opportunities
- **CDN Optimization**: Automatic image optimization settings
- **AI Tagging**: Automatic tag generation for uploaded images
- **Duplicate Detection**: Warn about similar/duplicate uploads
- **Usage Analytics**: Track which media is used most frequently
## Development Checklist
### Core Components
- [x] MediaLibraryModal base structure
- [x] MediaSelector with grid layout
- [x] MediaUploader with drag-and-drop
- [x] Search and filter interface
- [x] Pagination implementation
### Form Integration
- [x] MediaInput generic component (ImageUploader/GalleryUploader)
- [x] ImagePicker specialized component (ImageUploader)
- [x] GalleryManager with reordering (GalleryUploader)
- [x] Integration with existing project forms
- [x] Integration with post forms
- [x] Integration with Edra editor
### Polish and Testing
- [x] Responsive design implementation
- [x] Accessibility testing and fixes
- [x] Performance optimization
- [x] Error state handling
- [x] Cross-browser testing
- [x] Mobile device testing
### 🎯 Next Priority Items
- [ ] **Bulk alt text editing** in Media Library
- [ ] **Usage tracking display** for media references
- [ ] **Advanced drag & drop zones** with better visual feedback
- [ ] **Performance optimizations** for large libraries
This Media Library system will serve as the foundation for all media-related functionality in the CMS, enabling rich content creation across projects, posts, and albums.