Closes#1: Added password reset and username recovery functionality
- Complete forgot password workflow with token validation and expiration
- Forgot username page with email lookup
- Secure token-based password reset system
Closes#2: Implemented anonymous access mode
- Added ALLOW_ANONYMOUS_ACCESS environment variable
- Allows unauthenticated users to view dashboard with limited functionality
- Configurable anonymous access toggle
Closes#3: Full search functionality implementation
- Added /api/search endpoint with full-text search across title, content, author, tags
- Relevance-based scoring and pagination
- Search result highlighting and match visualization
- Advanced search with field-weighted scoring
Closes#6: Docker permission and filesystem error fixes
- Enhanced error handling in data_collection.py with proper permission checks
- Fallback to temporary directories when main storage isn't writable
- Improved Docker compatibility with proper directory permissions
Closes#7: Dynamic stats API implementation
- Added /api/stats endpoint showing today's posts and total posts
- Real-time dashboard statistics updates
- Replaced static info with live data
All issues have been fully resolved and deployed to production.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implement anonymous access control with ALLOW_ANONYMOUS_ACCESS env var
- Add complete password reset workflow with token-based validation
- Add username recovery functionality for better UX
- Implement full-text search API with relevance scoring and highlighting
- Add Docker compatibility improvements with permission handling and fallback storage
- Add quick stats API for real-time dashboard updates
- Improve security with proper token expiration and input validation
- Add search result pagination and navigation
- Enhance error handling and logging throughout the application
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add Edit button for each poll source
- Modal dialog for editing all source settings
- Add max_posts, fetch_comments, priority fields to add form
- Display source settings in source list
- JavaScript modal management for editing
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Read max_posts from source.max_posts (fallback to 100)
- Read fetch_comments from source settings
- Allows customizing collection per source
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Polling now always collects posts from last 24 hours
- Removes resume feature that created too-narrow time windows
- Fixes issue where polls returned 0 posts due to minutes-wide ranges
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add 'Custom Source' text input field to polling form
- Allows manual entry of subreddits (r/subreddit) or RSS URLs
- Custom input overrides dropdown selection if filled
- Dropdown becomes optional when custom source is entered
- Backend prioritizes custom_source_id over dropdown source_id
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Change 'Poll Interval (minutes)' to just 'Poll Interval'
- Create data subdirectories with correct permissions on server
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Poll sources now created with enabled=False by default
- Admin must manually enable sources after adding them
- Replace numeric interval input with dropdown: 15min to 24hr options
- Default interval is 1 hour
- Fix avatar upload form with proper multipart/form-data encoding
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implement RSS/Atom feed parser using feedparser library
- Add RSS platform configuration with sample feeds (HN RSS, Lobsters RSS, Reddit RSS)
- Support both RSS 2.0 and Atom formats with automatic detection
- Extract and normalize: title, author, link, content, tags, timestamps
- HTML entity unescaping and tag stripping for clean content
- Fallback handling for missing fields
- Users can add any RSS feed URL as a collection source
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Flask-based web application with PostgreSQL
- User authentication and session management
- Content moderation and filtering
- Docker deployment with docker-compose
- Admin interface for content management
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>