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.
- 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
- 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.
- 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.
- 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.
- 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.
- 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.