youtube-summarizer/STORY_3.3_IMPLEMENTATION_PL...

7.8 KiB

Story 3.3: Summary History Management - Implementation Plan

🎯 Objective

Implement a comprehensive summary history management system that allows authenticated users to view, search, organize, and export their YouTube video summaries.

📅 Timeline

Estimated Duration: 36 hours (4-5 days) Start Date: Ready to begin

Prerequisites Verified

  • Authentication System: Complete (Stories 3.1 & 3.2)
  • Summary Model: Has user_id foreign key relationship
  • Export Service: Available from Epic 2
  • Frontend Auth: Context and protected routes ready

🚀 Quick Start Commands

# Backend setup
cd apps/youtube-summarizer/backend

# 1. Update Summary model with new fields
# Edit: backend/models/summary.py

# 2. Create and run migration
alembic revision --autogenerate -m "Add history management fields to summaries"
alembic upgrade head

# 3. Create API endpoints
# Create: backend/api/summaries.py

# Frontend setup
cd ../frontend

# 4. Install required dependencies
npm install @tanstack/react-table date-fns recharts

# 5. Create history components
# Create: src/pages/history/SummaryHistoryPage.tsx
# Create: src/components/summaries/...

# 6. Add routing
# Update: src/App.tsx to include history route

📋 Implementation Checklist

Phase 1: Database & Backend (Day 1-2)

Database Updates

  • Add new columns to Summary model
    • is_starred (Boolean, indexed)
    • notes (Text)
    • tags (JSON array)
    • shared_token (String, unique)
    • is_public (Boolean)
    • view_count (Integer)
  • Create composite indexes for performance
  • Generate and apply Alembic migration
  • Test migration rollback/forward

API Endpoints

  • Create /api/summaries router
  • Implement endpoints:
    • GET /api/summaries - List with pagination
    • GET /api/summaries/{id} - Get single summary
    • PUT /api/summaries/{id} - Update (star, notes, tags)
    • DELETE /api/summaries/{id} - Delete summary
    • POST /api/summaries/bulk-delete - Bulk delete
    • GET /api/summaries/search - Advanced search
    • GET /api/summaries/starred - Starred only
    • POST /api/summaries/{id}/share - Generate share link
    • GET /api/summaries/shared/{token} - Public access
    • GET /api/summaries/export - Export data
    • GET /api/summaries/stats - Usage statistics

Phase 2: Frontend Components (Day 2-3)

Page Structure

  • Create SummaryHistoryPage.tsx
  • Setup routing in App.tsx
  • Add navigation link to history

Core Components

  • SummaryList.tsx - Main list with virtualization
  • SummaryCard.tsx - Individual summary display
  • SummarySearch.tsx - Search and filter UI
  • SummaryDetails.tsx - Modal/drawer for full view
  • SummaryActions.tsx - Star, share, delete buttons
  • BulkActions.tsx - Multi-select toolbar
  • ExportDialog.tsx - Export configuration
  • UsageStats.tsx - Statistics dashboard

Hooks & Services

  • useSummaryHistory.ts - Data fetching with React Query
  • useSummarySearch.ts - Search state management
  • useSummaryActions.ts - CRUD operations
  • summaryAPI.ts - API client methods

Phase 3: Features Implementation (Day 3-4)

Search & Filter

  • Text search across title and content
  • Date range filter
  • Tag-based filtering
  • Model filter (OpenAI, Anthropic, etc.)
  • Sort options (date, title, duration)

Actions & Operations

  • Star/unstar with optimistic updates
  • Add/edit notes
  • Tag management
  • Single delete with confirmation
  • Bulk selection UI
  • Bulk delete with confirmation

Sharing System

  • Generate unique share tokens
  • Public/private toggle
  • Copy share link to clipboard
  • Share expiration (optional)
  • View counter for shared summaries

Export Functionality

  • JSON export
  • CSV export
  • ZIP archive with all formats
  • Filtered export based on current view
  • Progress indicator for large exports

Phase 4: Polish & Testing (Day 4-5)

UI/UX Polish

  • Loading states and skeletons
  • Empty states with helpful messages
  • Error handling with retry options
  • Mobile responsive design
  • Dark mode support
  • Keyboard shortcuts (?, /, j/k navigation)
  • Accessibility (ARIA labels, focus management)

Performance Optimization

  • Implement virtual scrolling for long lists
  • Add debouncing to search
  • Optimize database queries with proper indexes
  • Add caching for frequently accessed data
  • Lazy load summary details

Testing

  • Backend unit tests for all endpoints
  • Frontend component tests
  • Integration tests for critical flows
  • Manual testing checklist
  • Performance testing with 100+ summaries
  • Mobile device testing

🎨 UI Component Structure

// SummaryHistoryPage.tsx
<div className="container mx-auto p-6">
  <div className="flex justify-between items-center mb-6">
    <h1>Summary History</h1>
    <UsageStats />
  </div>
  
  <div className="flex gap-4 mb-6">
    <SummarySearch />
    <ExportButton />
  </div>
  
  <BulkActions />
  
  <SummaryList>
    {summaries.map(summary => (
      <SummaryCard 
        key={summary.id}
        summary={summary}
        actions={<SummaryActions />}
      />
    ))}
  </SummaryList>
  
  <Pagination />
</div>

🔍 Key Technical Decisions

Pagination Strategy

  • Cursor-based: Better for real-time data and performance
  • Page size: 20 items default, configurable
  • Infinite scroll: Option for mobile

Search Implementation

  • Client-side: For small datasets (<100 items)
  • Server-side: For larger datasets with full-text search
  • Hybrid: Cache recent searches client-side

State Management

  • React Query: For server state and caching
  • Local state: For UI state (selections, filters)
  • URL state: For shareable filtered views

Export Formats

  • JSON: Complete data with all fields
  • CSV: Flattened structure for spreadsheets
  • Markdown: Human-readable summaries
  • ZIP: Bundle of all formats

🐛 Common Pitfalls to Avoid

  1. N+1 Queries: Use eager loading for user relationships
  2. Large Payload: Paginate and limit fields in list view
  3. Stale Data: Implement proper cache invalidation
  4. Lost Filters: Persist filter state in URL
  5. Slow Search: Add database indexes for search fields
  6. Memory Leaks: Cleanup subscriptions and observers
  7. Race Conditions: Handle rapid star/unstar clicks

📚 Resources

🎯 Definition of Done

Story 3.3 is complete when:

  1. Users can view their complete summary history
  2. Users can search by title, content, and date
  3. Users can star summaries for quick access
  4. Users can share summaries with public links
  5. Users can export their data in multiple formats
  6. Users can bulk delete multiple summaries
  7. Performance is smooth with 100+ summaries
  8. Mobile experience is fully responsive
  9. All tests pass with >80% coverage
  10. Documentation is updated with new features

🚦 Ready to Start?

  1. Review this plan with the team
  2. Set up development branch: git checkout -b feature/story-3.3-summary-history
  3. Start with Phase 1: Database updates
  4. Commit frequently with descriptive messages
  5. Create PR when ready for review

Questions or blockers? Check existing implementation patterns in:

  • Authentication system (Story 3.1-3.2)
  • Export service (Story 2.5)
  • Pipeline API patterns (Epic 2)

Good luck! 🎉