## 1. Cache Service And Config - [x] 1.1 Add Redis service to `docker-compose.yml` and wire basic health/ports for local dev - [x] 1.2 Add cache env/config variables (Redis URL/host+port, DB index, default TTL seconds) and document in `site/.env.example` ## 2. Cache Client And Utilities - [x] 2.1 Add a small Redis cache client wrapper (get/set JSON with TTL, namespaced keys) for Node scripts - [x] 2.2 Add logging for cache hit/miss per key to support verification - [x] 2.3 Ensure caching is optional: if Redis is unreachable, ingestion proceeds without caching ## 3. Integrate With Ingestion - [x] 3.1 Cache YouTube fetches (API and/or RSS) by source+params and reuse within TTL - [x] 3.2 Cache podcast RSS fetch by URL and reuse within TTL - [x] 3.3 Cache WordPress `wp-json` fetches (posts/pages/categories) and reuse within TTL ## 4. Cache Invalidation - [x] 4.1 Add a command/script to manually clear the cache (scoped to configured Redis DB) - [x] 4.2 Document the cache clear command usage ## 5. Verification - [x] 5.1 Add a test that exercises the cache wrapper (set/get JSON + TTL expiration behavior) - [x] 5.2 Add a test or build verification that a second ingestion run within TTL produces cache hits