Sistema integral de gestión para taller mecánico, clientes, seguros e inventario
Optimizando la operación del taller, la experiencia del cliente y el control financiero en un solo lugar
Características • Tecnologías • Instalación • Uso • Arquitectura
- Descripción
- Características
- Tecnologías
- Requisitos Previos
- Instalación
- Configuración
- Scripts Disponibles
- Estructura del Proyecto
- Características Principales
- Arquitectura
- Despliegue
- Documentación Adicional
Aplicación web desarrollada en React + TypeScript para la gestión integral de un taller mecánico y sus operaciones relacionadas con:
- Clientes y vehículos
- Citas, recepciones y seguimiento de servicios
- Facturación, proformas, cotizaciones y compras
- Inventario, bodegas y existencias
- Aseguradoras y trámites de seguros
El sistema se compone de:
- Landing pública para clientes finales (cotizaciones, citas y seguimiento).
- Panel administrativo protegido (
/admin) para el personal del taller (gerencia, administración, recepción, etc.).
Construido con prácticas modernas, modularidad por dominio y un enfoque fuerte en seguridad y mantenibilidad.
- ✅ Solicitud de cotizaciones en línea.
- ✅ Programación de citas para servicios del taller.
- ✅ Seguimiento del estado de servicios / vehículos.
- ✅ Flujo de autenticación para clientes de landing.
- ✅ Dashboard / Home con visión general del taller.
- ✅ Perfil de usuario y gestión básica de cuenta.
- ✅ Gestión de clientes (alta, edición, detalle).
- ✅ Gestión de vehículos asociados a clientes.
- ✅ Recepciones y seguimiento de recepciones (estado de trabajos en curso).
- ✅ Facturas: creación, edición, detalle y búsqueda.
- ✅ Compras: registro y gestión de compras a proveedores.
- ✅ Proformas y generación de facturas desde proformas.
- ✅ Cotizaciones: detalle, edición y seguimiento.
- ✅ Aseguradoras y trámites de seguros.
- ✅ Productos / ítems con clasificación, unidades de medida y detalles.
- ✅ Impuestos, monedas y tipos de pago configurables.
- ✅ Bodegas y existencias por bodega, con restricciones por rol.
- ✅ Autenticación con verificación de sesión (
checkAuthStatus). - ✅ Rutas protegidas usando:
ProtectedRouteNotAuthenticatedRouteLandingProtectedRouteRoleGuard
- ✅ Soporte de roles como gerente y superuser para módulos críticos (bodegas, existencias, administración, reportes, etc.).
- ✅ Manejo de errores de carga de chunks (
useChunkErrorHandler) para despliegues seguros.
- ✅ Notificaciones con
sonner. - ✅ Diseño moderno con Tailwind CSS y animaciones (
framer-motion,tailwindcss-animate). - ✅ Componentes accesibles basados en Radix UI.
- ✅ Navegación SPA optimizada con React Router y code splitting (lazy loading).
- React 19.1.1 – Biblioteca de UI.
- TypeScript 5.8.x – Tipado estático.
- Vite 7.1.6 – Dev server y bundler.
- React Router 7.9.1 – Enrutamiento SPA.
- TanStack Query (React Query) 5.90.x – Estado del servidor y caché.
- Zustand 5.x – Estado global ligero (auth y otros stores).
- Tailwind CSS 3.4.17 – Utility-first CSS.
- tailwindcss-animate y
tw-animate-css– Animaciones. - Radix UI (
@radix-ui/react-*) – Primitivas accesibles. - Lucide React – Iconografía.
- cmdk – Componentes tipo command palette.
- React Hook Form 7.66.x – Manejo de formularios.
- DOMPurify – Sanitización de HTML.
- Axios – Cliente HTTP.
- Socket.IO Client – Comunicación en tiempo real (namespaces
/adminy/cliente). - date-fns – Utilidades de fechas.
- clsx, tailwind-merge y class-variance-authority – Utilidades para clases CSS.
- ESLint 9.x con reglas para React, hooks y TypeScript.
- TypeScript estricto.
- Node.js ≥ 18
- npm ≥ 9 (o cualquier otro gestor de paquetes si se adapta la configuración)
- Acceso a una API backend (idealmente NestJS) con soporte para:
- HTTP REST (
VITE_API_URL) - WebSockets / Socket.IO (
VITE_SOCKET_URL, namespaces/adminy/cliente)
- HTTP REST (
-
Clonar el repositorio
git clone <URL_DEL_REPOSITORIO> cd ui-mts-web
-
Instalar dependencias
npm install
-
Configurar variables de entorno
- Crear un archivo
.env.local(o.env) en la raíz del proyecto con al menos:
VITE_API_URL=http://localhost:3000 VITE_SOCKET_URL=http://localhost:3000/admin # Opcional: cuando el cliente final está identificado VITE_CLIENTE_ID=
- Crear un archivo
-
Iniciar el servidor de desarrollo
npm run dev
La aplicación estará disponible en
http://localhost:5173(por defecto).
| Variable | Descripción | Requerido |
|---|---|---|
VITE_API_URL |
URL base del backend HTTP | ✅ Sí |
VITE_SOCKET_URL |
URL base del servidor Socket.IO (namespace /admin) |
✅ Sí |
VITE_CLIENTE_ID |
Identificador opcional de cliente para namespace cliente | ⛔ No |
El proyecto utiliza alias de paths configurados en tsconfig.json, por ejemplo:
import { AppLayout } from '@/shared/components/layouts/AppLayout';El alias @ apunta a ./src.
# Desarrollo
npm run dev # Inicia el servidor de desarrollo con HMR
# Producción
npm run build # Compila el proyecto para producción (TypeScript + Vite)
npm run preview # Sirve el build de producción localmente
# Calidad de código
npm run lint # Ejecuta ESLint sobre el código del proyectoui-mts-web/
├── public/ # Archivos estáticos (imágenes, sitemap, robots, sonidos)
├── src/
│ ├── admin/ # Páginas y componentes de administración
│ │ ├── components/
│ │ └── pages/
│ ├── auth/ # Autenticación, acciones y store
│ ├── landing/ # Landing pública (cotización, cita, seguimiento)
│ │ ├── components/
│ │ ├── pages/
│ │ └── store/ & types/
│ ├── clientes/ # Módulo de clientes
│ ├── vehiculo/ # Módulo de vehículos
│ ├── cita/ # Citas y motivos de cita
│ ├── recepcion/ # Recepciones
│ ├── recepcion-seguimiento/ # Seguimiento de recepciones
│ ├── facturas/ # Facturación
│ ├── compra/ # Compras a proveedores
│ ├── proforma/ # Proformas
│ ├── cotizacion/ # Cotizaciones
│ ├── aseguradora/ # Aseguradoras
│ ├── tramite-seguro/ # Trámites de seguro
│ ├── items/ # Productos / ítems
│ ├── clasificacion-item/ # Clasificaciones de ítems
│ ├── unidad-medida/ # Unidades de medida
│ ├── tiposPago/ # Tipos de pago
│ ├── moneda/ # Monedas
│ ├── impuesto/ # Impuestos
│ ├── bodega/ # Bodegas
│ ├── existencia-bodega/ # Existencias por bodega
│ ├── shared/ # Componentes, hooks y utilidades compartidas
│ │ ├── api/
│ │ ├── components/
│ │ ├── config/
│ │ ├── hooks/
│ │ ├── lib/
│ │ ├── store/
│ │ ├── types/
│ │ └── utils/
│ ├── router/
│ │ └── app.router.tsx # Definición global de rutas
│ ├── TallerApp.tsx # Componente raíz de la aplicación
│ ├── main.tsx # Punto de entrada React
│ ├── app.css / index.css # Estilos base
│ └── vite-env.d.ts # Tipos de Vite
├── netlify.toml # Configuración de despliegue (Netlify)
├── package.json
├── tsconfig*.json # Configuración TypeScript
├── tailwind.config.ts # Configuración Tailwind
└── vite.config.ts # Configuración ViteCada módulo (facturas, compra, clientes, vehiculo, cita, items, bodega, etc.) sigue una estructura coherente:
actions/: llamadas a la API y lógica de negocio (capa de servicios).api/: configuración del cliente HTTP específico del módulo.hook/ohooks/: hooks personalizados para consumo en componentes.pages/: páginas principales del módulo.ui/: componentes UI específicos del dominio.types/: interfaces y tipos TypeScript del módulo.
- Formularios construidos con React Hook Form.
- Validaciones en tiempo real y manejo de errores de usuario.
- Integración con notificaciones (
sonner) para feedback inmediato.
- Uso intensivo de React Query para:
- Caché de peticiones.
- Refetch automático.
- Manejo de estados de carga y error.
El proyecto sigue una arquitectura modular por dominio funcional:
módulo/
├── actions/ # Llamadas a API (servicios)
├── api/ # Cliente HTTP del módulo
├── hook(s)/ # Hooks de negocio
├── pages/ # Vistas / páginas
├── ui/ # Componentes de interfaz
└── types/ # Tipos e interfacesComponente → Hook → Action → API → Backend
↓
React Query Cachesrc/router/app.router.tsxdefine:- Rutas de landing (
/,/seguimiento,/cotizacion,/cita…). - Rutas de auth (
/auth,/login,/register). - Panel
/admincon rutas hijas por módulo. - Redirecciones desde rutas cortas (
/facturas/*,/clientes/*, etc.) al panel admin. - Protección de rutas mediante
ProtectedRoute,LandingProtectedRoute,NotAuthenticatedRouteyRoleGuard.
- Rutas de landing (
-
Generar build de producción
npm run build
-
Servir la carpeta
disten un servidor estático (Netlify, Vercel, Nginx, etc.).
El archivo netlify.toml ya incluye configuración para despliegue como SPA (manejo de rutas y redirecciones).
- Mantener la estructura modular existente por dominio.
- Seguir las convenciones de nombres y patrón
actions/api/hook/pages/ui/types. - Ejecutar
npm run lintantes de subir cambios.