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.