Skip to content
Back to projects

ASH

A home-services marketplace that holds the money until the job is actually done.

I build and maintain ASH, a marketplace for booking plumbers, electricians and repair technicians. I built the mobile app that serves both customers and providers, the backend that moves the money through Stripe, and the panel the marketplace is run from. It ships continuously.

grupoashmexico.com.mx
My role
Architecture, mobile app, backend and payment flow
Sector
Marketplace de servicios a domicilio
Scope
App móvil + Panel administrador + Sitio web
7
States in the booking pipeline
2
Apps in a single binary
3
Documents verified at signup
2 hrs
Scheduling block size

Stack

  • React (Vite)
  • TypeScript
  • Astro
  • Tailwind CSS
  • Node.js
  • Express
  • MongoDB
  • Firebase Firestore
  • React Native (Expo)
  • Stripe

Screens

Screenshots from the live system.

App móvil

App del cliente

El cliente ve los servicios disponibles en su zona, filtrados por categoría y ordenados por calificación. Entra al detalle, revisa qué incluye y reserva: elige dirección — el código postal completa estado y municipio solo —, describe la falla y paga con tarjeta. De ahí en adelante sigue su reservación, se comunica por chat con el técnico y recibe avisos de cada cambio de estado.

App móvil

App del proveedor

La misma app, otro rol. El técnico ve sus ganancias y sus trabajos del día, recibe las solicitudes nuevas para aceptar o rechazar, publica servicios con precio y cobertura, y arma su horario por bloques de dos horas. Los que operan como empresa dan de alta colaboradores con su propio acceso y reparten la agenda entre ellos. El alta pide INE, CURP y RFC antes de poder cobrar.

App web

Panel de administración

Desde aquí se opera el marketplace: aprobar proveedores revisando sus documentos, mover reservaciones por sus siete estados, administrar el catálogo de categorías, subcategorías y servicios, y leer cualquier conversación cuando hay una aclaración. La parte financiera concentra lo que se le debe a cada proveedor por periodo, la comisión de la plataforma y las suscripciones.

Sitio web

Sitio público

La cara pública de ASH: qué es, cómo funciona para quien contrata y para quien ofrece servicios, y las descargas de la app. Incluye el centro de ayuda con preguntas frecuentes y tutoriales, y las páginas que las tiendas de aplicaciones exigen — términos, privacidad, reembolsos, reporte de contenido y eliminación de cuenta.

The problem

ASH puts two strangers on either side of a transaction: someone with a leak or a broken AC unit, and a technician willing to show up and fix it. Neither side can guarantee what the deal actually needs — a price known before booking, a time slot the technician can really keep, money that stays locked until the work is finished, and some filter on who gets let through the front door. The brief was never a directory of technicians. It was the infrastructure that makes trusting one reasonable.

What I built

I built a single React Native (Expo) app where customer and provider are two modes of the same product: flipping the switch reconfigures the tabs, the home screen and the profile, and one account can be both. Money runs through Stripe — charged at booking, released when the job closes. If extra charges come up on site, the technician files them and the customer approves them from their phone before anything is billed; the platform takes its commission and the panel tracks what each provider is owed per period. Provider signup goes through a document review — official ID, CURP and tax ID — that an admin has to approve before that account can charge anyone. Chat runs live on Firestore and syncs back to the backend so support can pull a full thread when a dispute lands, and around that I shipped the operations panel — the seven booking states, the category and service catalog, payments, commissions and role-based access — plus the public site with its help center and the legal pages the app stores require.

Technical decisions

  1. 01

    One binary, two products

    Customer and provider live in the same app, and a single account can be both. I made the mode switch reconfigure tabs, home and profile at runtime instead of maintaining two separate products with half the code duplicated.

  2. 02

    The money unlocks when the job closes

    Stripe charges the card at booking, but the payment is held until the service is complete. Extra charges found on site are filed by the technician and approved by the customer from their phone before they are billed, and the panel tracks the platform commission and what each provider is owed per period.

  3. 03

    Two-hour blocks, split across a crew

    Providers pick the municipalities they cover and the hours they work, then build availability in two-hour blocks. Providers operating as companies add staff with their own logins, and the calendar splits the blocks across them based on the day's capacity.

  4. 04

    No payout without a document check

    No provider gets paid without uploading official ID, CURP and tax ID and clearing admin review. That gate, plus ratings and a no-show history, is what holds the business up: the person booked is walking into someone's home.

  5. 05

    Live chat that support can audit

    Customer-provider conversations run on Firestore so they feel instant, then sync back to the backend, where the record lives. Support pulls the whole thread from the panel when a dispute lands, instead of asking either side for screenshots.

Next project

Coco Aventura

The whole operation of a beach club with cabins, from booking to end-of-shift cash count.