refactor(debt): resolve all 10 technical debt items from audit
CognxSafeTrack +1: Claude Sonnet 4.6
- Redis: singleton pattern (lib/redis.ts) in api + worker, removes 16+ new Redis() calls
- Meta token: systemUserTokenIssuedAt field + weekly cron monitor (warn @50d, critical @55d)
- Rate limiting: @fastify/rate-limit global 200/min, login 10/min, forgot-password 3/min
- Dead code: delete WhatsAppConnectButton.tsx, archive one-off scripts
- Silent catches: logger.warn(err) on all backend catch blocks, console.warn on frontend
- Meta API types: 5 typed interfaces replace 6 as any casts in organization.ts
- Frontend logger: lib/logger.ts wraps Sentry (active when VITE_SENTRY_DSN is set)
- Migration: add systemUserTokenIssuedAt + metaBusinessId to Organization schema
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>