Skip to content

fix: typed error taxonomy, Redis degraded mode, analytics UX states & mobile responsiveness#754

Merged
Calebux merged 1 commit into
Calebux:mainfrom
Samuel1-ona:fix/issues-607-615-632-637
May 28, 2026
Merged

fix: typed error taxonomy, Redis degraded mode, analytics UX states & mobile responsiveness#754
Calebux merged 1 commit into
Calebux:mainfrom
Samuel1-ona:fix/issues-607-615-632-637

Conversation

@Samuel1-ona
Copy link
Copy Markdown
Contributor

Summary

  • [P1] Introduce a typed error taxonomy for backend services #632 — Introduces a typed error taxonomy: adds ExternalDependencyError (HTTP 502) for Redis/email/payment failures, and a full test suite (error-taxonomy.test.ts) asserting every domain error class maps to the correct HTTP response shape via the global error handler.
  • [P1] Harden Redis outage behavior for rate limiting and queues #637 — Hardens Redis outage behavior: adds isDegraded() to RateLimitRedisStore, a degraded flag in getHealthStatus() and RateLimiterFactory.getStoreStatus(), and comprehensive outage scenario tests (connect/disconnect transitions, memory-fallback, cold-start).
  • [P1] Audit dashboard loading, empty, and error states #607 — Audits analytics route state handling: adds loading.tsx (skeleton) and error.tsx (error boundary with retry) for client/app/dashboard/analytics/; adds an empty state when no subscriptions exist; error state now has a functional retry button.
  • [P1] Improve responsive behavior on analytics-heavy pages #615 — Improves mobile responsiveness on analytics pages: stats grid stacks on mobile, charts wrapped in overflow-x-auto with min-width guard, category legend switches to single column on small screens, top subscriptions table gets horizontal scroll + name truncation, budget row flex-wraps.

Test plan

  • backend/tests/error-taxonomy.test.ts — 16 new tests, all passing
  • backend/tests/redis-store.test.ts — 22 tests (7 new outage scenarios), all passing
  • Verify analytics page on mobile (< 375 px viewport) — charts scroll, no overflow
  • Verify empty state when no subscriptions exist
  • Verify error state retry button re-fetches data

Closes #607
Closes #615
Closes #632
Closes #637

🤖 Generated with Claude Code

…ebux#607 Calebux#615 Calebux#632 Calebux#637)

Issue Calebux#632 – typed error taxonomy:
- Add ExternalDependencyError (HTTP 502) to backend/src/errors/index.ts
- Add backend/tests/error-taxonomy.test.ts asserting HTTP response shapes for every domain error class

Issue Calebux#637 – harden Redis outage behavior:
- Add isDegraded() to RateLimitRedisStore; exposed in getHealthStatus()
- Extend RateLimiterFactory.getStoreStatus() with a degraded flag so health endpoints can surface memory-fallback mode
- Add outage scenario tests in redis-store.test.ts (connect/disconnect transitions, fallback via createRedisStore)

Issue Calebux#607 – dashboard loading/empty/error states:
- Add client/app/dashboard/analytics/loading.tsx (skeleton layout matching page structure)
- Add client/app/dashboard/analytics/error.tsx (Next.js error boundary with retry button)
- Add empty state to analytics route when active_subscriptions === 0
- Error state in analytics route now has a retry button (calls fetchAnalytics again)

Issue Calebux#615 – responsive analytics pages:
- Stats grid: 1 col on mobile, 3 col on sm+
- Charts: wrapped in overflow-x-auto with min-width guard; reduced height on mobile
- Category legend: 1 col mobile, 2 col sm+; labels truncated to prevent overflow
- Top subscriptions: horizontal-scroll wrapper, name truncation, flex-shrink on price column
- Budget row: flex-wrap so label and amount stack on narrow screens

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@drips-wave
Copy link
Copy Markdown

drips-wave Bot commented May 28, 2026

@Samuel1-ona Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@Calebux Calebux merged commit 49be551 into Calebux:main May 28, 2026
7 of 17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants