← Back to work
🔒 Private · NDAFull-Stack Engineer (sole developer) · Nextbit · 2025

Laundry Near Me

"Uber-for-laundry" marketplace connecting customers, drivers, and partner laundries — real-time tracking, in-app payments, and automated supplier settlements across four apps and an admin console.

The problem

The goal was an 'Uber for laundry' — a two-sided marketplace where independent laundries list services, customers book a wash-dry-fold pickup, and drivers move the laundry between them. The hard part isn't the screens; it's the money and the trust: charging the right amount for a load whose price isn't known until it's weighed, splitting each order between platform and supplier, and paying everyone correctly and on time — across four user types at once.

What I built

A single TypeScript backend serving four apps and an admin console in one pnpm monorepo: customer, driver, and laundry-owner Expo apps, a React/Vite admin console, and a Fastify API as the single source of truth for pricing, state, and settlement. Shared logic lives in dedicated packages — a pure pricing engine, Zod schemas + types, tunable business config, and a shared UI kit.

Engineering highlights

1

Authorize-at-booking, capture-at-weigh-in payments

A load's real cost isn't known until it's weighed. Stripe manual capture authorizes a hold at booking and captures the exact weighed amount later — capped at the hold, never overcharging. Clients never compute money.

2

Automated revenue segmentation & supplier settlement

Every order splits into delivery fee, commission, and a weekly listing subscription, all overridable per supplier. A scheduled, idempotent settlement sweep pays suppliers 48h after delivery via Stripe Connect, nets clawbacks, and is never negative.

3

Catalog-driven marketplace (no fixed menu)

Each shop owns its own catalog — products, units (per-kg or per-item), and prices. Customers order against a specific shop's catalog, which is what makes it a true marketplace rather than a single-vendor app.

4

"Choose for me" auto-assignment — without a Maps bill

Resolves the best nearby laundry from postcode/suburb (nearest by local haversine when GPS is known → most spare capacity → best SLA), so the core flow runs without a paid Google Maps key.

5

Real-time everything + provider-agnostic integrations

Order status is pushed live over Socket.IO across all surfaces. Payments, SMS, email, push, storage, and CRM are all selected by environment config — swapping a provider is a config change, not a code change.

Results

  • A working end-to-end platform across five surfaces (4 apps + admin) on a shared backend.
  • A fully automated money pipeline: booking hold → weighed capture → revenue split → 48h auto-payout → refund clawback.
  • Heavily type-safe (Zod + TypeScript throughout, no any) with targeted tests on the pricing engine and API.

Full tech stack

TypeScript (end-to-end)FastifyPrismaPostgreSQLRedisSocket.IOStripe (Payments + Connect)ZodReact Native / Expo (customer, driver, laundry apps)ReactViteTailwind (admin)pnpm monorepo with shared pricing/types/config/UI packages

Built at Nextbit — the source lives in a private repository, so it isn't publicly available. A live screen-share demo and code walkthrough are available on request for hiring managers.