feat: frontend polish, QA fixes and backend improvements#92
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
AI PR Summary |
Contractor-x
approved these changes
Mar 28, 2026
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.
Summary
This PR covers all QA fixes, UI polish, and backend improvements assigned during the Quest Hackathon 2026 sprint. Changes span the full stack — frontend layout, goal workflows, notification system, error handling, profile persistence, and passport alignment.
Backend Changes
Added global error middleware to catch Prisma and unhandled errors — raw database URLs and technical details are no longer exposed to the frontend
Added profile update endpoint so users can persist name changes to the database
Added placeholder avatar upload endpoint (returns 501, not implemented yet)
Goal contributions are now blocked on the backend if they would exceed the target amount
Passport tiers now correctly return Starter, Builder, Stable, Trusted
Transactions
Removed delete button from transaction UI — transactions are permanent records
Restructured mobile layout — title and add button on row 1, filter tabs on row 2
Goals
Replaced fixed 10% add button with a contribution modal — user inputs exact amount
Contributions cannot exceed 100% of target — blocked on both frontend and backend
Cannot reduce goal target below already contributed amount
Goals at 100% are marked as Done — edit button hidden, no further contributions accepted
Goal status colors: gray for ongoing, green for done, red for overdue
Overdue progress bar and deadline text turn red
Goals sorted by newest first
Responsive grid layout — 1 column mobile, 2 columns md, 3 columns lg+
Removed duplicate Add Goal button
Page refetches data after edit before closing modal
Notifications
Notification bell now navigates to a dedicated /notifications page
Notifications persist to localStorage across page reloads
Unread badge on bell disappears when /notifications page is visited
Push notification toggle in settings now controls whether notifications are added at all
Clear button moved to bottom of notifications page
Notifications page is fully mobile responsive
Profile & Settings
Profile name update now persists to database end to end
Removed appearance tab from settings
App defaults to dark mode only
Notification settings toggles persist to localStorage
Balance
Show/hide balance toggle state persists to localStorage across navigation
Header
Removed spinning animation around avatar
Inputs
Autocomplete disabled on all input fields
Amount inputs accept any value greater than 0 including decimals
Numbers formatted with commas as user types
No rounding behavior
Error Handling
Connection errors show "Connection error. Please check your internet connection." across the app
No raw backend URLs or Prisma errors exposed to users
Testing
Backend build passing ✅
Frontend lint has pre-existing failures in SpendingChart.tsx, antigravity.tsx, and chatStore.ts — unrelated to this PR