feat:Add empty states and skeleton loaders to dashboard and stream list - #394
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR: Improve UX, Validation, Contributor Onboarding & Mobile Responsiveness
Overview
This PR delivers a set of critical improvements across the frontend, backend, and developer experience. It focuses on:
Better dashboard UX with loading, empty, and error states
Strong input validation for Stellar addresses and stream amounts
Clear contribution guidelines for new developers
Mobile-first responsiveness for core layouts
Changes Included
Improved user experience when loading or when no data is available.
What was added:
Skeleton loaders (3 shimmer cards) for GET /v1/streams
Empty states:
No outgoing streams → CTA: "Create your first stream"
No incoming streams → "No streams are sending you funds yet"
No activity → "No stream activity yet"
Error state:
Message: "Failed to load streams"
Retry button for failed API calls
Files:
frontend/src/components/dashboard/dashboard-view.tsx
frontend/src/components/IncomingStreams.tsx
Added strict validation for Stellar addresses and stream amounts.
What was implemented:
Stellar address validation:
z.string().regex(/^G[A-Z2-7]{55}$/, 'Invalid Stellar address')
Applied to:
GET /v1/streams?sender=
GET /v1/streams?recipient=
GET /v1/users/{address}/summary
Amount validation:
Must be a positive decimal string parseable to bigint
Returns:
400 Bad Request with clear error messages on invalid input
Added test coverage for valid/invalid inputs
Files:
backend/src/routes/v1/stream.routes.ts
backend/src/routes/v1/user.routes.ts
Introduced clear contribution guidelines and community standards.
What was added:
CONTRIBUTING.md
Issue workflow & labels (good first issue, backend, frontend, etc.)
Branch naming: feature/issue-N-short-description
Commit convention: Conventional Commits (feat:, fix:, etc.)
Test instructions:
Backend → npm test
Contracts → cargo test
PR checklist (tests, lint, clear description)
Review request process
CODE_OF_CONDUCT.md
Based on Contributor Covenant v2.1
Linked both files in README.md
Optimized layout and navigation for mobile devices.
What was improved:
Sidebar hidden on screens < md
Added bottom navigation bar:
Dashboard
Create
Activity
Settings
Fixed layout issues:
No horizontal overflow at 375px
Responsive stream cards
Scrollable StreamCreationWizard steps
Files:
frontend/src/app/layout.tsx
frontend/src/components/Navbar.tsx
Closes #382
Closes #384
Closes #380
Closes #379