The Marketplace Stack

For a services or products marketplace:
- Frontend: WeWeb (web) + FlutterFlow (mobile, if needed)
- Database: Supabase (PostgreSQL with RLS)
- API: Xano (booking logic, availability, search, notifications)
- Payments: Stripe Connect (marketplace payouts)
- Search: Supabase full-text search or Algolia
- Automation: Make (confirmation emails, notifications, dispute workflows)

For a products marketplace, replace Xano with direct Supabase + Stripe APIs if the logic is simple.

The Database Schema

The core tables for a services marketplace:
CREATE TABLE listings (
  id bigserial PRIMARY KEY,
  seller_id uuid REFERENCES auth.users(id),
  title text, description text, category text,
  price_cents integer, currency text DEFAULT 'eur',
  images jsonb, location text,
  is_active boolean DEFAULT true,
  created_at timestamptz DEFAULT now()
);
CREATE TABLE bookings (
  id bigserial PRIMARY KEY,
  listing_id bigint REFERENCES listings(id),
  buyer_id uuid, seller_id uuid,
  status text DEFAULT 'pending',
  amount_cents integer, stripe_payment_intent_id text,
  created_at timestamptz DEFAULT now()
);
CREATE TABLE reviews (
  id bigserial PRIMARY KEY,
  booking_id bigint REFERENCES bookings(id),
  reviewer_id uuid, rating integer,
  body text, created_at timestamptz DEFAULT now()
);

Search and Discovery

For most marketplaces, Supabase full-text search is sufficient at launch. In Xano:

GET /api/listings/search
Parameters: query (text), category, min_price, max_price, location
Logic: Use Supabase's to_tsvector() full-text search on title + description, combine with category and price filters.

For larger catalogs (10K+ listings) or geo-based search (find providers near me), add Algolia. The WeWeb Algolia plugin makes this connection straightforward.

Stripe Connect for Marketplace Payments

Marketplace payments use Stripe Connect — sellers have Stripe accounts, buyers pay through your platform, and Stripe handles the split.

Flow:
1. Seller onboards: redirect to Stripe Connect Express onboarding. Store their stripe_account_id in your database.
2. Buyer pays: create a Stripe PaymentIntent with application_fee_amount (your cut). The payment goes to the seller's Stripe account minus your fee.
3. Payout: Stripe automatically pays out to the seller's bank account on a rolling basis.

Implement this in Xano: POST /api/bookings/payment-intent returns the client_secret for the WeWeb payment form.

Seller Onboarding and Dashboard

Seller experience:
1. Sign up → complete Stripe Connect onboarding
2. Create listings (title, description, images, price, availability)
3. Manage bookings (accept/decline requests, view booking calendar)
4. Track earnings (total paid out, pending payouts, booking history)
5. Manage reviews

All of this is built in WeWeb connected to Xano API endpoints. The seller dashboard typically adds 2–3 weeks to an MVP scope.

Launch Checklist

Before launching a marketplace:
☑ RLS policies on all tables (buyers can't see other buyers' private data, sellers can't see each other's stripe_account_id)
☑ Stripe webhook handler for payment events (confirmation, disputes, refunds)
☑ Email notifications for all booking state changes (Make automation)
☑ Admin dashboard for dispute resolution
☑ Terms of service and marketplace policies
☑ Load test with 100 concurrent users before launch

A common mistake: launching without the admin dashboard. Within the first week of a live marketplace, you will need to manually resolve a booking dispute. Build the admin tools before you go live.