All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Security Audit Report: Comprehensive security audit documentation
SECURITY_AUDIT.mdwith detailed security analysis- Review of all security measures and remaining recommendations
- OWASP Top 10 coverage assessment
- Documentation: Updated changelog to reflect all version changes
- Version Management: Updated version tracking across all files
- Security Documentation: Complete security audit report for transparency
- Version Consistency: All version references updated to match git tags
- Background Job System: Database-backed job queue for asynchronous processing
JobQueueclass for managing job lifecycle (pending, processing, completed, failed)Workerclass for processing jobs (feed fetching, cleanup operations)- Worker CLI script (
worker.php) supporting daemon mode and batch processing - Job statistics API endpoint (
GET /api/jobs/stats) - Cleanup job queueing endpoint (
POST /api/jobs/cleanup) - Automatic retry logic with configurable max attempts
- Job cleanup functionality to remove old completed/failed jobs
- Feed Cleanup Service: Automated cleanup of old feed items
- Configurable retention policies (days and item count)
- Per-feed or global cleanup operations
- Automatic cache invalidation after cleanup
- Static Analysis: PHPStan integration for code quality
- Level 5 static analysis configuration
- Automated bug detection and type checking
- Composer script:
composer analyse
- Code Style Enforcement: PHP-CS-Fixer integration
- PSR-12 code style standard
- Automated code formatting
- Composer scripts:
composer cs-check,composer cs-fix - All 27 source files formatted to PSR-12 standards
- API Documentation: Complete API reference
- OpenAPI 3.0 specification (
openapi.yaml) - Comprehensive API documentation (
API_DOCUMENTATION.md) - All endpoints documented with request/response schemas
- Code examples (JavaScript, cURL)
- Integration instructions for Swagger UI, ReDoc, Postman
- OpenAPI 3.0 specification (
- Environment Configuration Documentation: Complete reference guide
ENV_CONFIGURATION.mdwith all environment variables- Configuration for jobs, feed retention, caching, and more
- Background Jobs Documentation: Setup and usage guide
BACKGROUND_JOBS.mdwith cron setup, daemon mode, monitoring
- Code Quality Documentation: Tool usage guide
CODE_QUALITY.mdwith PHPStan and PHP-CS-Fixer instructions
- Response Migration: Completed 100% migration to standardized
Responseclass- Fixed
Csrf.phpto useResponse::error()instead ofecho json_encode() - All API responses now use consistent format
- Fixed
- Feed Fetching: Now supports asynchronous processing via job queue
FeedController::fetch()checksjobs.enabledconfig- Falls back to synchronous fetching if jobs disabled
- Returns job ID when using background processing
- Code Quality: All source files formatted to PSR-12 standards
- Consistent spacing, indentation, and formatting
- Ordered imports, trailing commas, proper docblocks
- Docker Configuration: Added volume mounts for code quality tools
phpstan.neon,.php-cs-fixer.phpmounted in containercomposer.json,composer.lockmounted for dependency managementworker.phpscript mounted for background job processing
- Code Maintainability: Static analysis catches bugs before runtime
- Code Consistency: Automated formatting ensures uniform style
- Developer Experience: Complete API documentation for integration
- Performance: Background jobs prevent blocking on feed fetching
- Database Management: Automated cleanup prevents database bloat
- Error Handling: PHPStan identifies potential issues early
- Job queue supports both SQLite and PostgreSQL
- Worker can run as daemon or process single jobs
- Cron integration documented for scheduled job processing
- Cache invalidation integrated with job system
- PHPStan configured at level 5 with 0 errors
- PHP-CS-Fixer enforces PSR-12 with additional rules
- All changes maintain backward compatibility
- Background job system respects user ownership (feeds belong to users)
- Job payloads validated before processing
- Worker script includes proper error handling and logging
- All job-related endpoints require authentication and CSRF tokens
- Custom Error Pages: User-friendly error pages for 404 (Not Found), 500 (Server Error), and 403 (Forbidden) with consistent styling and navigation
- Comprehensive Test Coverage: Expanded unit test suite with 35 new tests covering core functionality
- CsrfTest: 10 tests for CSRF token generation, validation, expiration, and field generation
- AuthTest: 13 tests for authentication, login/logout, registration, and user preferences
- FeedParserTest: 12 tests for feed type detection (RSS/Atom/JSON) and parsing functionality
- Router Error Handling: Router now displays custom error pages instead of plain text messages
- Test Infrastructure: Test suite expanded from 24 to 59 tests (146% increase) with 113 total assertions
- User Experience: Professional error pages with helpful messages and navigation options
- Code Quality: Significantly improved test coverage for authentication, CSRF protection, and feed parsing
- Error Handling: Better error presentation for users encountering 404, 500, or 403 errors
- Error pages follow the same design system as the rest of the application
- Router's
showErrorPage()method handles error page rendering - All new tests follow existing test patterns and use proper database setup/teardown
- Test coverage now includes: Config, Logger, FeedService, RateLimiter, Response, Csrf, Auth, and FeedParser
- Centralized Configuration Management: New
Configclass for environment-based configuration with defaults - Structured Logging: PSR-3 compliant logging system using Monolog with rotating file handlers
- Service Layer:
FeedServiceclass to centralize business logic and reduce code duplication - Standardized API Responses:
Responsehelper class for consistent JSON API responses - Rate Limiting Middleware: Database-backed rate limiting with configurable limits for login and API endpoints
- PHPUnit Test Infrastructure: Comprehensive unit test suite with 24 tests covering core functionality
- Environment Configuration:
.env.exampletemplate for easy configuration management
- API Response Format: All API endpoints now use standardized
Responsehelper methods - Logging System: Migrated from
error_log()to structured logging with context and log levels - Error Handling: Improved exception logging with full context and stack traces
- Code Organization: Reduced code duplication by centralizing feed operations in
FeedService - Configuration: Application settings now managed through centralized
Configclass
- Code Quality: Eliminated all direct
echo json_encode()calls in favor ofResponsemethods - Maintainability: Consistent patterns for API responses and error handling throughout codebase
- Debugging: Enhanced logging with structured context for better troubleshooting
- Test Coverage: Added comprehensive unit tests for Config, Logger, FeedService, RateLimiter, and Response classes
- Documentation: Updated implementation status tracking
- All controllers now use
Response::success(),Response::error(), orResponse::json()for API responses - All logging now uses
Logger::debug(),Logger::info(),Logger::warning(),Logger::error(), orLogger::exception() - Rate limiting integrated into
AuthControllerfor login attempts - Feed ownership verification centralized in
FeedService - Removed redundant
header('Content-Type: application/json')calls (handled by Response class)
- Initial release of VibeReader
- User authentication system with secure password hashing
- RSS, Atom, and JSON Feed format support
- Feed discovery from website URLs
- Three-pane interface (feeds, items, content)
- Feed management (add, delete, refresh)
- Folder organization for feeds
- OPML import/export functionality
- Read/unread status tracking
- Search functionality across all feeds
- User preferences (theme, timezone, font, sorting)
- CSRF protection
- SSRF protection for feed fetching
- Secure session management
- Security headers
- Comprehensive input validation
- CSRF token protection on all state-changing operations
- SSRF protection preventing access to internal/private IPs
- Secure session configuration (HttpOnly, Secure, SameSite)
- Password policy (minimum 8 characters)
- Input validation and sanitization
- File upload security (size limits, MIME type validation)
- Error handling that prevents information disclosure