Commit cb1d388
Feat/payments devtools skeletons errorboundary (#374)
* feat: add /payments page with chronological transaction log
- New /payments route showing all payments made by connected wallet
- Sortable table (date desc by default, toggle amount) with pagination (20/page)
- Total paid summary: "You have paid X XLM across Y invoices"
- Download CSV exports full payment history
- Empty state with Browse Invoices CTA
- Responsive: table on desktop, card list on mobile
- SkeletonPaymentRow placeholder during loading
- Redirects to home if wallet is not connected
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: add Zustand stores with Redux DevTools integration
- wallet, invoice, and UI Zustand stores in src/lib/stores/
- devtools middleware applied to all stores with explicit names:
WalletStore, InvoiceStore, UIStore
- immer middleware alongside devtools for ergonomic nested updates
- DevTools enabled only in development (enabled: process.env.NODE_ENV === 'development')
- Named set calls for every action (e.g. "wallet/setConnected")
- 13 new store unit tests covering all state transitions
- CONTRIBUTING.md: "Debugging state with Redux DevTools" section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: expand skeleton screens for perceived-performance polish
- SkeletonPaymentRow: matches payment history table row / mobile card
- SkeletonLeaderboardRow: matches leaderboard row layout
- SkeletonCreatorProfile: avatar + name + 3-stat grid
- SkeletonDashboardStats: 4-card dashboard stats grid
- InvoiceListSkeleton now accepts count prop (default 6)
- DeferredSkeleton wrapper: suppresses skeleton if data loads < 200ms
- useDeferredShow hook: 200ms delay before showing skeleton
- All new skeletons have aria-busy="true" and aria-label="Loading..."
- shimmer uses animate-pulse (light + dark mode compatible)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: integrate Sentry error reporting into error boundaries
- @sentry/nextjs installed and configured via sentry.{client,server,edge}.config.ts
- Sentry.init only called when NEXT_PUBLIC_SENTRY_DSN is set (disabled in dev)
- withSentryConfig wraps next.config.js for source map upload on build
- ErrorBoundary dynamically imports Sentry, calls captureException, displays event ID
- "Something went wrong" fallback now shows Reload Page + Go to Dashboard buttons
- Route-level error.tsx boundaries in /invoice/[id] and /dashboard
- /payments/error.tsx added with route-level Sentry capture
- Pre-existing bugs fixed: duplicate useRouter in DashboardClient, unclosed Link tag,
missing JSX sibling wrapper, undefined canvas reference in timelineImageExport,
missing "reminder" and "expired" notification types, mismatched ref type
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Emmanuel Chukwunyere <emmanuelanalaba@gmail.com>1 parent fd28321 commit cb1d388
17 files changed
Lines changed: 3428 additions & 125 deletions
File tree
- src
- __tests__
- app
- dashboard
- invoice/[id]
- payments
- components
- lib/stores
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
70 | 99 | | |
71 | 100 | | |
72 | 101 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
40 | 41 | | |
41 | 42 | | |
42 | 43 | | |
43 | | - | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
0 commit comments