Sistema de Gestión de Taller Mecánico
📋 Sobre el Proyecto
Mecanika es una aplicación web fullstack diseñada para la gestión integral de talleres mecánicos. Permite administrar coches, tareas de mantenimiento, empleados, facturas y más, con un sistema de autenticación robusto basado en roles.
⚠️ Nota importante: La aplicación está alojada en servicios gratuitos (Render + Vercel), por lo que la primera carga puede tardar 30-60 segundos mientras el servidor se activa.
🔄 La base de datos se restaura automáticamente a un baseline todos los días a las 23:00 UTC (≈ 00:00 Europa/Madrid) para mantener datos de demostración limpios.
💾 La base de datos de demostración tiene capacidad limitada, por lo que contiene solo datos esenciales para probar las funcionalidades principales.
🛠️ Información Técnica
Frontend
- Framework: Angular 19.2.0 (Standalone Components)
- Estilos: Tailwind CSS 4.1.3 + SCSS
- Autenticación: JWT con HttpInterceptorFn
- Rutas: Guards funcionales para protección por roles
- SSR: Angular Universal (Server-Side Rendering)
- Deploy: Vercel
Backend
- Framework: Spring Boot 3.4.4
- Java: JDK 21
- Seguridad: Spring Security 6 + JWT (RS256)
- Base de datos: PostgreSQL + Hibernate/JPA
- Build: Maven (empaquetado WAR)
- Documentación: SpringDoc OpenAPI 2.8.8
- Deploy: Render (Frankfurt)
Servicios y Librerías
- Almacenamiento: Cloudinary 1.36.0
- JWT: JJWT 0.12.6 (io.jsonwebtoken)
- Keystore: JKS (Java KeyStore) para firma RS256
- CORS: Spring Security con CorsConfigurationSource (env `CORS_ALLOWED_ORIGINS`)
- Lombok: 1.18.34 (reducción de boilerplate)
- Dotenv: Variables de entorno seguras
🏗️ Arquitectura del Sistema
- 🔐 Autenticación JWT con RS256 (JKS Keystore)
- 🛡️ Validación de roles en backend (RBAC)
- 📸 Subida de imágenes a Cloudinary
- 🔄 Gestión de sesiones stateless
- 📊 Logs detallados en servidor
- 🌍 CORS configurado para dominio específico
✨ Funcionalidades Destacadas
Gestión de Coches
Registro completo de vehículos con matrícula, modelo, marca, imagen y estado (en taller, listo para entrega).
Tareas de Mantenimiento
Asignación de tareas a coches con precio, descripción y seguimiento de estado (pendiente, en progreso, completado).
Facturación
Generación automática de facturas con desglose de costos (mano de obra, tareas, IVA) y métodos de pago.
Gestión de Empleados
Control de mecánicos asignados a talleres con vinculación a usuarios del sistema.
Talleres
Registro de múltiples talleres con dirección, teléfono y sitio web.
Sistema de Roles
Tres niveles de acceso (Cliente, Empleado, Gerente) con permisos específicos para cada uno.
Gestión de Imágenes
Subida y almacenamiento de fotos de coches en Cloudinary con URLs persistentes.
Actualizaciones en Tiempo Real
Interfaz reactiva que refleja cambios inmediatamente tras cada operación CRUD.
🎨 Interfaz y Frontend
La interfaz está construida con Tailwind CSS 4 y animaciones suaves para una experiencia fluida, con soporte de temas claro/oscuro y diseño responsive desde móviles a escritorio.
Tailwind + Responsive
Utiliza utilidades modernas de Tailwind 4 con variantes personalizadas y diseño mobile-first.
Modo claro/oscuro
Persistencia de tema con localStorage y variantes `dark` aplicadas a toda la UI.
Microinteracciones
Transiciones sutiles en tarjetas, botones y módulos para mejorar la percepción de calidad.
🧭 Flujo de uso por rol
👤 Cliente
- Inicia sesión y accede a "Mis coches".
- Añade un coche (selecciona marca y modelo disponibles).
- Sube una foto del coche (Cloudinary).
- Consulta las facturas asociadas a tus coches.
👷 Empleado
- Inicia sesión y abre "Tareas".
- Actualiza estados: pendiente → en progreso → completado.
- Revisa tu ficha de empleado.
👨💼 Gerente
- Gestiona coches, empleados, talleres y facturas.
- Crea marcas/modelos y configura el catálogo.
- Audita tareas y actividad general del sistema.
👤 Roles y Permisos
El sistema implementa un control de acceso basado en roles (RBAC) con tres niveles de permisos:
👤 Cliente
✅ Puede hacer:
- Ver sus propios coches y sus detalles
- Añadir nuevos coches a su cuenta
- Actualizar información de sus coches (incluir/cambiar fotos)
- Ver sus propias facturas asociadas a sus coches
- Seleccionar marcas y modelos al añadir coches (lista predefinida)
❌ NO puede hacer:
- Eliminar coches
- Ver facturas de otros clientes
- Crear o modificar facturas
- Gestionar empleados o tareas
- Acceder al catálogo completo de marcas/modelos/talleres
👷 Empleado
✅ Puede hacer:
- Ver todas las tareas de coches asignadas
- Actualizar el estado de tareas (pendiente → en progreso → completado)
- Ver su propia información de empleado
❌ NO puede hacer:
- Acceder a gestión de coches, facturas o clientes
- Crear o eliminar tareas
- Ver información de otros empleados
- Modificar configuraciones del sistema
👨💼 Gerente
✅ Control Total del Sistema:
- Coches: Ver, crear, actualizar y eliminar todos los coches
- Facturas: Gestión completa (CRUD) de todas las facturas
- Empleados: Crear, modificar y eliminar empleados
- Tareas: Gestión completa de tareas y asignaciones
- Talleres: Crear, modificar y eliminar talleres
- Marcas/Modelos: Gestión completa del catálogo de vehículos
- Usuarios: Crear y gestionar usuarios del sistema
🔐 Credenciales de Prueba
Utiliza estas credenciales para probar la aplicación con diferentes niveles de acceso:
👤 Cliente
cliente1!4Gv@wP8xFqZ👷 Empleado
empleado1t3L#kQ1uXjZ9👨💼 Gerente
gerente1H7r@9TpWqzYz🗄️ Restauración diaria de datos
El entorno de demo se restablece cada día a un estado baseline para asegurar datos limpios y reproducibles. La tarea está automatizada en CI y se ejecuta a las 23:00 UTC (≈ 00:00 Europa/Madrid).
Baseline cifrado
Generamos un volcado con pg_dump (formato custom) y lo ciframos con AES‑256 (OpenSSL + pbkdf2) usando una clave secreta.
Almacenamiento seguro
Solo se conserva el archivo cifrado y su checksum. Sin la clave no es posible leer el contenido del dump.
Restore programado
Diariamente se descarga el baseline, se verifica el checksum, se descifra y se aplica con pg_restore --clean --if-exists sobre la base de datos.
Herramientas
Cliente PostgreSQL 18, pg_dump/pg_restore y OpenSSL. Compatibilidad garantizada con el servidor (PG 18).
Secretos
PG_RENDER_URL (conexión a la BD) y DB_BASELINE_KEY (clave de cifrado y descifrado del dump).
Consideraciones
La restauración es destructiva (resetea cambios del día). Si cambian los esquemas, hay que regenerar el baseline.