← Volver al inicio

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

🌐
Frontend
Angular 19
Vercel
⚙️
Backend
Spring Boot
Render
💾
Database
PostgreSQL
Render
☁️
Storage
Cloudinary
Imágenes
  • 🔐 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.

Tailwind 4Mobile-firstSCSS
🌓

Modo claro/oscuro

Persistencia de tema con localStorage y variantes `dark` aplicadas a toda la UI.

Dark ModeAccesible
🎞️

Microinteracciones

Transiciones sutiles en tarjetas, botones y módulos para mejorar la percepción de calidad.

TransitionsOn-scroll

🧭 Flujo de uso por rol

👤 Cliente

  1. Inicia sesión y accede a "Mis coches".
  2. Añade un coche (selecciona marca y modelo disponibles).
  3. Sube una foto del coche (Cloudinary).
  4. Consulta las facturas asociadas a tus coches.

👷 Empleado

  1. Inicia sesión y abre "Tareas".
  2. Actualiza estados: pendiente → en progreso → completado.
  3. Revisa tu ficha de empleado.

👨‍💼 Gerente

  1. Gestiona coches, empleados, talleres y facturas.
  2. Crea marcas/modelos y configura el catálogo.
  3. 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

Usuario:cliente1
Contraseña:!4Gv@wP8xFqZ

👷 Empleado

Usuario:empleado1
Contraseña:t3L#kQ1uXjZ9

👨‍💼 Gerente

Usuario:gerente1
Contraseña:H7r@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).

23:00 UTC≈ 00:00 MadridDiario
🔐

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.