Ship a marketplace MVP with authentication

Listings, profiles, favourites, messaging and a database schema you will not have to throw away in month two.

Build a two-sided marketplace MVP. Ship one complete flow at a time and stop for my review after each step.

STEP 1 — SCHEMA
Design the database first and show it to me before writing UI:
- profiles (id, display name, avatar url, bio, role: buyer | seller)
- listings (id, seller id, title, description, price, category, city, status, created at)
- listing_images (id, listing id, url, position)
- favourites (profile id, listing id)
- threads and messages between a buyer and a seller about a listing

STEP 2 — AUTH
Email + password sign up, sign in, sign out, protected routes, and a profile page the user can edit.

STEP 3 — LISTINGS
Browse with search, category filter, price range and city filter. Listing detail page. Create and edit listing for sellers only.

STEP 4 — FAVOURITES + MESSAGING
Favourite toggle on cards and detail pages, a saved page, and a simple thread view per listing.

RULES
- Row-level security on every table: users may only edit their own rows.
- No mock data left in the final build — everything reads from the database.
- Seed 20 listings across 5 categories so the browse page looks real.

ACCEPTANCE CRITERIA
- Signed-out users can browse but not favourite or message.
- Every list has loading, empty and error states.