Remove the unused Redis service and all references. Redis was confirmed dead weight at runtime:
No ioredis/redis client import anywhere in apps/
No REDIS_* environment variables read in code
ioredis is not a dependency in any package.json
It existed only as a compose service plus documentation/e2e-config references that implied it was part of the stack or "reserved for future pub/sub".
Changes
Compose: removed the redis service from docker-compose.yml and the redis ports override from docker-compose.dev.yml. The api depends_on only referenced mariadb, so it was untouched.
Docs/config: removed every Redis reference from CLAUDE.md (constraints line, ioredis stack-table row, "Redis present in stack" sentence, compose-tree comment), README.md, docs/ARCHITECTURE.md, docs/CONFIGURATION.md, docs/deployment.md, docs/DEVELOPMENT.md, docs/GETTING-STARTED.md, docs/TESTING.md, apps/pwa/e2e/README.md, and apps/pwa/playwright.config.ts.
Deliberately kept
The in-memory-vs-Redis design-rationale comments (decisions D-12/D-18) in listEmitter.ts, reminderScheduler.ts, linkNonceStore.ts, and localAuth.ts — these document why in-memory is used instead of Redis and remain valuable.
Verification
grep -rniE redis across compose + docs + e2e returns only the 4 kept rationale comments
## Summary
Remove the **unused Redis service and all references**. Redis was confirmed dead weight at runtime:
- No `ioredis`/redis client import anywhere in `apps/`
- No `REDIS_*` environment variables read in code
- `ioredis` is not a dependency in any `package.json`
It existed only as a compose service plus documentation/e2e-config references that implied it was part of the stack or "reserved for future pub/sub".
## Changes
- **Compose:** removed the `redis` service from `docker-compose.yml` and the `redis` ports override from `docker-compose.dev.yml`. The api `depends_on` only referenced `mariadb`, so it was untouched.
- **Docs/config:** removed every Redis reference from `CLAUDE.md` (constraints line, `ioredis` stack-table row, "Redis present in stack" sentence, compose-tree comment), `README.md`, `docs/ARCHITECTURE.md`, `docs/CONFIGURATION.md`, `docs/deployment.md`, `docs/DEVELOPMENT.md`, `docs/GETTING-STARTED.md`, `docs/TESTING.md`, `apps/pwa/e2e/README.md`, and `apps/pwa/playwright.config.ts`.
## Deliberately kept
The in-memory-vs-Redis **design-rationale** comments (decisions D-12/D-18) in `listEmitter.ts`, `reminderScheduler.ts`, `linkNonceStore.ts`, and `localAuth.ts` — these document *why* in-memory is used instead of Redis and remain valuable.
## Verification
- [x] `grep -rniE redis` across compose + docs + e2e returns only the 4 kept rationale comments
- [x] `docker compose -f docker-compose.yml -f docker-compose.dev.yml config` parses clean (0 redis in rendered config)
- [x] `pnpm format:check` green
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Remove the unused Redis service and all references. Redis was confirmed dead weight at runtime:
ioredis/redis client import anywhere inapps/REDIS_*environment variables read in codeioredisis not a dependency in anypackage.jsonIt existed only as a compose service plus documentation/e2e-config references that implied it was part of the stack or "reserved for future pub/sub".
Changes
redisservice fromdocker-compose.ymland theredisports override fromdocker-compose.dev.yml. The apidepends_ononly referencedmariadb, so it was untouched.CLAUDE.md(constraints line,ioredisstack-table row, "Redis present in stack" sentence, compose-tree comment),README.md,docs/ARCHITECTURE.md,docs/CONFIGURATION.md,docs/deployment.md,docs/DEVELOPMENT.md,docs/GETTING-STARTED.md,docs/TESTING.md,apps/pwa/e2e/README.md, andapps/pwa/playwright.config.ts.Deliberately kept
The in-memory-vs-Redis design-rationale comments (decisions D-12/D-18) in
listEmitter.ts,reminderScheduler.ts,linkNonceStore.ts, andlocalAuth.ts— these document why in-memory is used instead of Redis and remain valuable.Verification
grep -rniE redisacross compose + docs + e2e returns only the 4 kept rationale commentsdocker compose -f docker-compose.yml -f docker-compose.dev.yml configparses clean (0 redis in rendered config)pnpm format:checkgreen🤖 Generated with Claude Code