- Migrate from deprecated sources API to modern payment_methods API in SubscriptionsController
- Update subscription plan modifications to use Subscription.modify instead of direct assignment
- Fix payment method creation/deletion to use PaymentMethod.create/detach instead of sources
- Update view templates to use new payment_methods data structure
- Migrate price.id usage from deprecated plan.id in data integrity tasks
- Add comprehensive test suite with proper Stripe API stubs
- Add missing test gems: rspec-rails, webmock, factory_bot_rails, shoulda-matchers
This resolves Error 500 when users try to upgrade to Premium subscriptions.
The original error was: NoMethodError - undefined method 'total_count' for nil:NilClass
caused by stripe_customer.sources.total_count when sources API returned nil.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major redesign of Collections system including:
## Collections Index Page Redesign
- Replace massive hero with streamlined editorial header
- Implement fully functional tab navigation (Featured, My Collections, Following, Open for Submissions)
- Add professional collection cards with rich metadata display
- Create responsive mobile navigation with horizontal scroll
- Add editorial newspaper aesthetic with amber color scheme
- Include SEO optimization and accessibility features
## Content-Type Specific Collection Pages
- Filter editor's picks by content type on /collections/:id/:content_type pages
- Add content-type specific theming with dynamic colors and icons
- Update masthead with content-type focused titles and breadcrumbs
- Highlight active content type in navigation pills
- Change section titles to be content-type specific ("Featured Characters", "Published Character Pages")
## Collection Card Component
- Create comprehensive collection card partial with error handling
- Display collection stats, content types, submission status
- Add hover effects and professional styling
- Handle nil values gracefully for production safety
## Technical Improvements
- Fix JavaScript class handling issues that prevented tab switching
- Add smooth transitions and loading states
- Implement mobile-optimized navigation with touch scrolling
- Include proper focus states for accessibility
- Add comprehensive error handling for nil collection data
- Update billing redirect flow for upgrade buttons
The Collections feature now provides a professional, newspaper-style editorial experience where getting published feels prestigious and exclusive.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major UX improvements that significantly enhance the collection creation experience:
## Multi-Step Wizard Features:
- 4-step progressive workflow: Basics → Visual → Content → Settings
- Interactive step navigation with progress indicator
- Visual step completion states (active, completed, disabled)
- Form validation before allowing step progression
- Keyboard navigation support (Ctrl+Arrow keys)
- Auto-save functionality with visual feedback
## Live Preview Panel:
- Real-time preview updates as users type and make selections
- Split-screen layout with form on left, preview on right
- Desktop/mobile preview toggle functionality
- Dynamic content type visualization
- Privacy and submission status preview
- Theme preview with color scheme changes
## Enhanced Form Experience:
- Progressive disclosure of form sections
- Smart content type selection (All/None/Common shortcuts)
- Theme selection with visual previews
- Character counter with color-coded warnings
- Better error handling and validation feedback
- "Save Draft" functionality for work-in-progress
## Technical Implementation:
- Comprehensive JavaScript controller for wizard logic
- Stimulus-compatible data attributes for future enhancement
- Responsive design that works on mobile and desktop
- Accessibility improvements with proper ARIA labels
- Performance optimizations with debounced auto-save
## User Experience Benefits:
- Reduces cognitive load by breaking complex form into steps
- Provides immediate visual feedback on choices
- Prevents data loss with auto-save
- Makes collection creation feel guided and intuitive
- Significantly improves completion rates through better UX flow
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace problematic joins on polymorphic content_page association
- Filter content page shares in Ruby instead of SQL to avoid polymorphic join issues
- Update activity streak calculation to work with filtered array instead of ActiveRecord relation
- Maintain privacy filtering by checking content_page.privacy in Ruby
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Filter all content to show only public items on profile pages
- Remove "made an edit" activities from activity feeds and timeline
- Update activity streak calculation to use only content shares
- Clean up UI references to edit activities in overview and activity tabs
- Fix polymorphic association loading issue in content page shares
- Ensure tag filtering only shows public content across all content types
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Merged duplicate attributes editors into single route
- Removed /plan/:content_type/attributes-tailwind route and controller method
- Moved modern Tailwind attributes editor to main /attributes route
- Fixed dashboard ArgumentError: Nil location provided. Can't build URI
- Enhanced HasImageUploads concern with better Active Storage handling
- Added nil-safety guards to header_asset_for method
- Improved caching logic to prevent nil value storage
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add real-time autocomplete endpoint with fast name-only queries
- Replace static search form with interactive Alpine.js component
- Include 300ms debounced search with keyboard navigation support
- Add instructional help dropdown when search input is focused but empty
- Implement proper content type icons with hex colors instead of CSS classes
- Add database indexes for optimized name searches across all content types
- Support arrow key navigation, Enter to select/search, Escape to close
- Maintain full search functionality as fallback for comprehensive results
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace PostgreSQL ILIKE with cross-database LOWER/LIKE queries
- Add multi-word search support with AND logic (e.g., "red dragon" finds "dragon with red scales")
- Search both Attribute values and entity name columns for comprehensive results
- Add database-aware search indexes (GIN for PostgreSQL, standard for SQLite)
- Implement result pagination and improved relevance sorting
- Fix SQLite compatibility for development environments
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created a landing page for logged-out users showcasing document analysis features
- Built a functional dashboard hub for logged-in users with analysis tools and insights
- Added new routes and controller actions to handle both views
- Updated sidebar link to point to the new analysis hub
- Added analysis count badge to sidebar navigation
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit adds test coverage for the FoldersController, including tests for:
- Authentication requirements
- Creating folders and subfolders
- Updating folders
- Viewing folders
- Filtering by favorites and tags
- Deleting folders
- Security (preventing access to other users' folders)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created new /browse/tag/ArtFight2025 endpoint
- Added browse controller for site-wide content display
- Fixed tag slug case-sensitivity for reliable content retrieval
- Implemented a design that highlights the ArtFight2025 tag
- Show all content tags on each card for context
- Prioritize character display at the top of search results
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>