Skip to main content

MonzaRoom & MonzaRide — Room Rental & Ride-Hailing Platform

Full-stack marketplace combining short-stay room bookings (MonzaRoom) with integrated ride-hailing (MonzaRide). Next.js 15, React 19, Supabase, Stripe and Stripe Connect, Leaflet maps. Guests book rooms and rides; hosts list rooms; drivers go online, accept rides, and get paid. Admin dashboard for users, drivers, rides, and payouts.

Live site
  • Next.js 15
  • React 19
  • TypeScript
  • Tailwind
  • Supabase (PostgreSQL
  • Auth
  • Storage)
  • Stripe & Stripe Connect
  • Leaflet/Mapbox
  • Nodemailer
  • Playwright.

Overview

Two products in one app: guests browse and book rooms (MonzaRoom) and request rides with pickup/dropoff on a map (MonzaRide). Hosts manage listings and earnings; drivers apply, onboard, go online, accept rides, update status, and get paid. Admin manages users, drivers, rides, and payouts from one dashboard.

Architecture

Next.js handles UI and API routes (rides, driver, admin, webhooks). Supabase holds listings, bookings, ride intents, rides, driver_profiles, documents, reviews, and app_config; RLS enforces access by role. Stripe webhooks (bookings + rides) create/confirm payments and rides; ride payouts run via cron or manual admin action. Optional auto-assign mode assigns a driver on payment; otherwise riders pick from nearby drivers. Geolocation required for rider pickup/dropoff and driver “go online”; fare uses distance and duration (routing or haversine).

Challenges

Unifying room and ride flows in one auth and DB; driver onboarding with document review and rejection emails (reason + re-upload link); keeping voice/session and driver location reliable; merging Stripe and Stripe Connect in one webhook pipeline; and supporting both manual driver choice and auto-assign via env. E2E coverage for rider, driver, and admin flows with optional test users and seed route for success-page testing without live Stripe.