dirname(__DIR__) . '/data/feeds.sqlite', // Seconds before a feed is considered stale and re-fetched on demand. 'cache_ttl' => 1800, // Shorter retry interval for feeds whose last fetch failed (e.g. rate limited). // Backoff grows from here (doubling per consecutive failure) and is capped // by error_retry_cap; a server Retry-After hint always wins. 'error_retry_ttl' => 300, // Maximum retry backoff for a failing feed (2 hours). 'error_retry_cap' => 7200, // Random extra seconds added to the healthy TTL so feeds do not all expire // (and get fetched) at the same moment. 'ttl_jitter' => 300, // Minimum milliseconds between requests to the same host within one refresh. 'host_interval_ms' => 1000, // Hosts with aggressive rate limits: minimum seconds between requests to // that host (enforced across processes via the cache DB), and at most // throttled_host_max_per_refresh feeds of it per refresh. 'throttled_hosts' => [ 'www.reddit.com' => 60, 'www.youtube.com' => 15, ], 'throttled_host_max_per_refresh' => 1, // Number of items per page. 'page_size' => 20, // Time-range filters (key => window length in seconds), shown newest-first. 'ranges' => [ '1h' => 3600, '2h' => 7200, '6h' => 21600, '24h' => 86400, '7d' => 604800, ], // HTTP client settings. 'request_timeout' => 15, 'connect_timeout' => 10, // Identify the client to feed providers (important for Reddit). Reddit asks // for a descriptive, unique agent — set a real contact before deploying. 'user_agent' => 'RSSFeed/1.0 (self-hosted dashboard; contact: admin@example.com)', // Password for manage.php (manual subreddit/channel configuration). // Accepts a plain password or a password_hash() value; empty disables the // manage page entirely. Change this before exposing the app publicly. 'manage_password' => 'rssfeed-admin', ];