Uber (today’s MVP) — Founder Kit

Rides marketplace: driver onboarding, rider request flow, pricing, payouts.

Overview

Goal: Validate a two-sided rides marketplace in one city with strict scope control and clear unit economics.

MVP Scope (must-have)

Key Screens (rider)

  1. Map + Search: set pickup & dropoff, see ETA & price estimate
  2. Request: confirm quote, payment method, place request
  3. Live Trip: driver location, arrival ETA, contact driver (masked)
  4. Receipt & Rating: price breakdown, rate driver

Key Screens (driver)

  1. Availability toggle + queue: go online/offline
  2. Incoming request: pickup ETA, fare, accept/decline
  3. In-trip: navigate pickup, start trip, end trip
  4. Earnings: weekly payout summary

Data Model (starter)

User { id, role[rider|driver|admin], name, email, phone, rating, createdAt }
DriverProfile { userId(FK), vehicleMake, vehicleModel, plate, licenseDocUrl, kycStatus }
PaymentMethod { id, userId(FK), provider[stripe], token, last4 }
Trip {
  id, riderId(FK), driverId(FK|null), status[req|acc|pick|inprog|done|cancel],
  pickupLat, pickupLng, dropLat, dropLng,
  estimateFare, finalFare, distanceKm, durationMin,
  requestedAt, acceptedAt, startedAt, completedAt
}
Payout { id, driverId(FK), amount, periodStart, periodEnd, status[pending|paid], providerRef }
Flag { id, userId(FK), tripId(FK|null), reason, note, createdAt }

API (v1 outline)

POST   /auth/otp/request         → { phone/email }
POST   /auth/otp/verify          → session

GET    /drivers/me               → driver profile
POST   /drivers/me               → update profile, docs, availability

POST   /rider/quote              → { pickup, dropoff } → { estimateFare, etaMin }
POST   /rider/request            → create Trip(req)
WS     /rider/live               → trip status stream

GET    /driver/queue             → next request (poll/WS)
POST   /driver/accept            → Trip(acc)
POST   /trip/start               → Trip(inprog)
POST   /trip/complete            → Trip(done) → charge rider → enqueue payout

GET    /admin/overview           → basic stats (read-only)

Notes: WebSocket (or SSE) channels for live status are ideal, but polling works for MVP. Payments integrate Stripe Checkout/Payment Intents for rider and Connect for driver payouts.

Pricing & Unit Economics (starter)

GTM (first 30–60 days)

Risks & Mitigations