Proyecto académico

ExpressMX

Plataforma web y móvil para gestionar servicios a domicilio: un panel administrativo, una app para clientes y otra para prestadores, con un solo backend y una base de datos PostgreSQL.

Caso Práctico SOFTWARE 6 · Licenciatura en Informática · Acuerdo 286 de la SEP. «Desarrollo de una Plataforma Web y Móvil para la Gestión de Servicios a Domicilio».

La demo abre el panel administrativo con una cuenta de demostración compartida. Los datos son ficticios y se restablecen cada noche.

Arquitectura
Monolito modular
Repositorio
Monorepo pnpm + Turborepo
Frentes
Panel web, app cliente y app prestador
Diagramas
66 figuras en PlantUML

01 · El caso

Del teléfono y la libreta a una plataforma

Servicios Express MX es una empresa hipotética de servicios a domicilio que opera de manera informal, por teléfono y mensajería. El caso práctico le atribuye cuatro problemas concretos:

  • Mala asignación de servicios
  • Falta de seguimiento
  • Pérdida de clientes
  • Errores en la facturación

La dirección quiere una app para clientes, otra para prestadores y un sistema web administrativo, pero no tiene requerimientos ni arquitectura definidos, y el equipo es nuevo. El diagnóstico de la tesis organiza la respuesta en cuatro frentes —captura de la demanda, asignación, seguimiento, y facturación y conciliación— más dos transversales: soporte y compliance.

02 · La solución

Módulos de la plataforma

Cada módulo responde a uno de esos frentes y está modelado en los diagramas y en la matriz de trazabilidad de la tesis.

  • Catálogo de servicios

    Categorías y servicios navegables, zonas de cobertura y tarifas por zona. La empresa decide qué se ofrece y a qué precio.

  • Órdenes y asignación

    El cliente solicita el servicio con dirección, fecha y método de pago; la orden se asigna automáticamente según disponibilidad, zona y carga del prestador, con ajuste manual cuando la operación lo pide. Seguimiento, evidencias, cargos extra y cierre con doble PIN.

  • Alta de prestadores

    Registro solo con código de invitación, CURP y validación de mayoría de edad; después, los documentos y la disponibilidad del prestador.

  • Finanzas con segregación de funciones

    Pagos, cortes quincenales a prestadores, facturas CFDI y reembolsos que requieren aprobación con segregación de funciones (SoD) para reducir el riesgo de fraude interno.

  • Soporte ITIL con SLA

    Tickets con mensajería y escalamiento L1–L2–L3, base de conocimiento, encuestas CSAT e incidentes mayores (MIM). El SLA depende del tipo, la prioridad y la categoría, con calendario laboral y festivos mexicanos.

  • RBAC y Zero Trust

    Permisos atómicos y un rol por defecto restrictivo. El acceso de soporte a los datos personales de un cliente usa break-glass: PIN, motivo y caducidad.

  • Auditoría

    Bitácora centralizada con correlación por caso o ticket, y Row Level Security en PostgreSQL para que cada actor vea solo lo que le corresponde.

03 · Arquitectura

Un monolito modular en un monorepo

Para una empresa emergente con un solo equipo, la tesis descarta los microservicios y propone un monolito modular: un workspace pnpm + Turborepo con tres aplicaciones y paquetes compartidos, y un único backend Next.js que sirve la API y el panel administrativo.

App clienteExpo · React Nativeapps/mobile-client
App prestadorExpo · React Nativeapps/mobile-provider
Panel administrativo + APINext.js · App Router · Route Handlersapps/web
PostgreSQLRLS · enums · triggers
Paquetes compartidos del monorepo
  • @expressmx/database
  • @expressmx/validations
  • @expressmx/types
  • @expressmx/utils
  • @expressmx/config-*
Vista simplificada del repositorio. Los diagramas de componentes, paquetes y despliegue están en la galería.

Las apps móviles no importan @expressmx/database: todo acceso a datos pasa por la API, así que la cadena de conexión nunca viaja en un bundle móvil.

Por qué un monolito

  • Despliegue atómico

    Una sola release sincroniza backend y frontend.

  • Transacciones reales

    El cierre con doble PIN y la conciliación financiera ocurren en una sola transacción de PostgreSQL, sin sagas ni mensajería distribuida.

  • Tipos compartidos

    TypeScript de extremo a extremo; el mismo esquema Zod valida el formulario y la petición en el servidor.

  • Costo

    Un equipo pequeño no puede pagar la operación de una flota de microservicios.

Stack

Tecnologías propuestas en el caso práctico (tabla de la p. 25), sin números de versión.
CapaTecnologíaRazón principal
Panel web (admin)Next.js + App RouterSSR y API en un solo despliegue
Apps móviles (cliente y prestador)Expo + React Native + NativeWindMultiplataforma sin Swift ni Kotlin; las mismas habilidades sirven para ambas
BackendNext.js Route Handlers (Node + Edge)La misma base de código que el panel web
LenguajeTypeScript estrictoTipos compartidos entre cliente y servidor
Base de datosPostgreSQL (Neon)Branching, ACID, RLS, JSONB
Acceso a datosDriver pg + SQL + helpersControl fino sobre planes de consulta y RLS
AutenticaciónJWT propio + bcryptSin depender de un proveedor externo
ValidaciónZodEsquemas compartidos entre cliente y servidor
UI webshadcn/ui + TailwindComponentes que se copian al proyecto, sin lock-in
UI móvilNativeWind + PhosphorTailwind en React Native e iconos consistentes
PruebasVitest + Playwright + Testing LibraryUn solo stack TypeScript
CIGitHub Actions + servicio PostgresEstándar y gratuito al volumen del proyecto
DespliegueVercel + Neon + Resend + Expo EASServerless con costo predecible

Sobre la demo

La demo pública ejecuta únicamente el panel administrativo web. Las apps móviles de cliente y prestador (Expo) están en el repositorio, en apps/mobile-client y apps/mobile-provider, pero no se publican como demo.

Calidad

El pipeline de GitHub Actions ejecuta typecheck y lint, las pruebas con Vitest contra un servicio PostgreSQL real y el build de Turborepo. Las pruebas E2E con Playwright están en el repositorio, pero su job de CI sigue desactivado (if: false) hasta contar con un administrador semilla determinista.

04 · Diagramas

El paquete de diagramas de la tesis

66 figuras hechas con PlantUML, agrupadas en las mismas waves que el paquete entregado con la tesis. Abre cualquiera para verla en grande; todas se descargan en PNG, SVG y fuente PlantUML. Las etiquetas (Fig. 4, A.1, B.13…) indican dónde aparece cada figura en el caso práctico.

Wave 0 · 9 figuras

Modelo entidad-relación (notación Chen)

Modelo conceptual de la base de datos en notación de Chen: rectángulos para entidades, óvalos para atributos y rombos para relaciones. Se divide en nueve vistas para que cada una sea legible en formato carta; las nueve salen de un mismo archivo PlantUML.

Wave 1 · 12 figuras

UML estructural

La estructura estática del sistema: clases por dominio, componentes, paquetes del monorepo y nodos de despliegue.

Wave 2 · 31 figuras

UML conductual

La dinámica del sistema: casos de uso por grupo de actores, secuencias de los flujos críticos, actividades de los procesos de negocio y máquinas de estado de las entidades con ciclo de vida.

Casos de uso 5

Secuencia 9

Actividad 6

Máquinas de estado 11

Wave 3 · 9 figuras

UX/UI

Arquitectura de información, mapas de sitio del panel web y de las dos apps móviles, y los cinco flujos de usuario críticos.

Wave 4 · 5 figuras

DevOps, QA y seguridad

Pipeline de CI/CD, estrategia de ramas en Git y en Neon, pirámide de pruebas y modelo de amenazas STRIDE.

El paquete completo, con PNG, SVG, fuentes PlantUML y los documentos Markdown de cada wave, pesa 3,5 MB. Algunas fuentes incluyen la hoja de estilo compartida _style.iuml de su carpeta, que también viene en el .zip.

Descargar .zip

05 · Documentos

El caso práctico y su documentación

Caso práctico (PDF)

El trabajo escrito completo: marco teórico, resolución de los seis problemas del caso, conclusiones, referencias y anexos. Versión pública: se omitieron el nombre y el folio del sustentante.

PDF · 60 páginas · 1,3 MB · en español

Escritos de apoyo por wave

Los textos que acompañan a los diagramas, incluidos los doce wireframes de baja fidelidad.

Paquete completo de diagramas. PNG, SVG y fuentes PlantUML de las 66 figuras, más los documentos Markdown y las notas de cada wave · 3,5 MB.

Descargar .zip

Diagrama

Descargar PNG SVG PlantUML