Saltar al contenido
Demo de producto para una presentación universitaria← Todos los proyectos

Domus

Un equipo universitario tenía la idea de Domus, una plataforma que conecta a personas con profesionales del hogar, y necesitaba mostrarla funcionando en su presentación. Construí una demo 100% frontend que recorre el flujo completo de contratación entre los tres roles, con datos simulados y una vista para proyectar en TV.

Aplicación web en React y TypeScript que simula un marketplace de servicios para el hogar: landing, app del cliente, app del profesional y panel de administración. Toda la información vive en el navegador, sin backend, para que la presentación no dependa de servicios externos.

PropósitoProyecto freelance con alcance y entregables acordados por escrito: el flujo principal se puede recorrer de punta a punta, en vivo y entre dos celulares a la vez.
Resultado claveFlujo completo demostrable: búsqueda, solicitud, aceptación, viaje en mapa, trabajo, confirmación, calificación con fotos y pago simulado.
Stack
React 19TypeScriptReact RouterZustandTailwind CSS v4LeafletViteVitestPlaywrightNetlify
(01)Problema

Presentar una idea de negocio que todavía no existe, sin que la demo falle frente al jurado.

El equipo tenía la propuesta y una referencia visual, pero no un producto que mostrar. Necesitaban algo que se viera y se usara como una app real, y que fuera estable durante la exposición.

  1. La propuesta involucra tres tipos de usuario (cliente, profesional y administrador) que tienen que interactuar entre sí.
  2. Una demo con backend real agregaba costo, tiempo y puntos de falla que no aportaban a la presentación.
  3. El jurado tenía que entender el flujo completo en pocos minutos, idealmente viendo las dos partes a la vez.
(02)Solución

Una demo que se comporta como el producto, con datos simulados y controles para quien presenta.

Se acordó un documento de alcance con las pantallas, el flujo principal y lo que quedaba afuera (backend, pagos reales, autenticación). Sobre eso se construyó una app navegable de punta a punta.

  1. Landing con buscador por problema y ciudad, recorrido animado de «cómo funciona» y sección para profesionales.
  2. App del cliente: categorías, perfiles de profesionales con reseñas, presupuesto estimado, solicitud, seguimiento con mapa, confirmación, calificación con fotos y pago simulado.
  3. App del profesional: solicitudes nuevas, trabajos en curso, código de inicio que entrega el cliente, ganancias, perfil y membresía.
  4. Panel de administración con métricas, usuarios, profesionales, solicitudes, finanzas y configuración.
  5. Vista de presentación con los dos celulares lado a lado y botón para reiniciar la demo.
(03)Arquitectura

Una SPA organizada por rol, con el dominio separado de las pantallas.

Las reglas del negocio (estados, estimados, búsqueda, notificaciones) viven en módulos puros y testeados; las pantallas solo las consumen.

Pantallas

React 19 con React Router y rutas lazy por rol (landing, cliente, profesional, admin y presentación), protegidas por rol de sesión.

Estado

Zustand con persistencia: un store de la demo con acciones de dominio (crear solicitud, aceptar, iniciar viaje, calificar, pagar) y una sesión por pestaña.

Dominio

Módulos puros para la máquina de estados, presupuestos estimados, búsqueda, tiempos de respuesta y diferencias entre estados para generar avisos.

Calidad y deploy

Vitest para el dominio, Playwright para el flujo principal y Netlify con lint y tests como condición para publicar.

Fig. 01Ciclo de vida de una solicitud
Máquina de estados de una solicitud en DomusCamino principal: pendiente, aceptada, en camino, en proceso, terminada, confirmada y pagada. El profesional mueve la solicitud hasta terminarla; el cliente la confirma y la paga. Desde aceptada se puede pasar directo a en proceso. Mientras está pendiente, aceptada o en camino, el profesional puede rechazarla y el cliente cancelarla.Psi ya está en el domicilio, empieza directoPPPPCC01Pendiente02Aceptada03En camino04En proceso05Terminada06Confirmada07Pagadaantes de empezar el trabajoPRechazadaCCancelada// frontend/src/lib/status.tsTRANSITIONS.pendiente = {aceptada: 'profesional',rechazada: 'profesional',cancelada: 'cliente',}

Cada paso tiene un dueño. Las transiciones viven en un solo objeto, TRANSITIONS, y canTransition(desde, hacia, rol) las valida antes de tocar el store: las pantallas no deciden qué se puede hacer. Para pasar a «en proceso», el profesional necesita el código que le da el cliente.

P · ProfesionalC · ClienteEstado finalFinal sin éxito
(04)Stack y decisiones

El objetivo era una demo estable y rápida de iterar, así que el stack es solo frontend: React y Zustand para simular el producto completo, Tailwind para mantener el diseño consistente y tests para que los cambios de último momento no rompan la presentación.

React 19TypeScriptReact RouterZustandTailwind CSS v4LeafletViteVitestPlaywrightNetlify
  1. Demo sin backend: el estado vive en un store de Zustand persistido en localStorage, así la presentación no depende de una API ni de la conexión, y se puede reiniciar con un botón.
  2. Los estados de una solicitud forman una máquina de estados con permisos por rol (quién puede pasar de «pendiente» a «aceptada», de «terminada» a «confirmada», etc.), definida en un solo lugar y cubierta por tests.
  3. Avisos «en tiempo real» entre roles sin servidor: cada pestaña escucha los cambios del store que llegan por el evento storage y muestra la notificación cuando la otra parte actúa.
  4. Vista de presentación para TV con dos celulares lado a lado (cliente y profesional) en iframes con sesiones independientes, para mostrar las dos caras del flujo al mismo tiempo.
  5. El alcance publicado se controla con una variable de entorno (solo landing, cliente, profesional o completo), y el build deja afuera el código de los roles que no se publican.
(05)Resultados
Suite de tests
88Unitarios · Vitest12E2E100 en total
01

Flujo completo demostrable: búsqueda, solicitud, aceptación, viaje en mapa, trabajo, confirmación, calificación con fotos y pago simulado.

02

Tres apps con diseño responsive (cliente, profesional y administrador), con dashboard de métricas y finanzas para el administrador.

03

88 tests unitarios y 12 de punta a punta con Playwright; el deploy en Netlify no se publica si fallan el lint o los tests.

(06)Siguiente paso

¿Hablamos sobre una oportunidad similar?