Replace placeholder image paths with actual downloaded images
for all 6 rental categories (15 images total).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move /account-status route before /:id to prevent Express
from matching "account-status" as a payout ID parameter.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Camera button now triggers file input -> uploads to POST /users/avatar -> updates auth context and preview.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use select clause instead of spreading full user object to prevent
resetToken, resetTokenExpiry, and other internal fields from being
returned in the login response.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- SellItemPage: real file upload + API listing creation + activate
- CreateProfilePage: save profile via PUT /users/profile
- ProductDetailPage: wire edit/delete/message buttons, show edit for owner
- ListingCard: persist favorites via API, show real images
- Footer: connect newsletter subscribe to API
- Router: add /dashboard/listings and /dashboard/saved routes
- Backend: add GET /listings/favorites endpoint
- New pages: MyListingsPage, SavedItemsPage
- Fix unused imports causing build failures
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add POST /listings/:id/activate endpoint to bypass Stripe in dev
- Fix chat conversation creation crash when listingId is null/undefined
- Properly handle Prisma unique constraint for conversations
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>