NexusGear es un comercio electrónico desarrollado con Laravel para la venta de periféricos tecnológicos ergonómicos. La tienda está orientada a dos perfiles principales de usuario:
- Office & Focus: usuarios que buscan comodidad, productividad y salud postural durante largas jornadas de trabajo.
- Gamer Pro: usuarios que buscan periféricos de alto rendimiento sin renunciar a la ergonomía.
El catálogo incluye productos como ratones verticales, teclados compactos, reposamuñecas y soportes para portátiles. La versión 1.0 se centra en el caso de uso principal pedido en la EPD 3: permitir que un usuario registrado compre productos, consulte sus pedidos y reciba confirmación por correo, mientras que el administrador puede gestionar productos y pedidos. La entrega 2.0 amplía el alcance con categorías N:M, gestión de perfil (idioma, direcciones y contraseña), favoritos y métricas de popularidad en administración.
El desarrollo se fundamenta en los siguientes pilares:
- Frameworks: uso de Laravel 12, Eloquent ORM, Blade, Vite + SASS y Bootstrap 5.
- Funcionalidad: implementación del caso principal de compra, operaciones CRUD de productos, carrito, pedidos y panel de administración.
- Autenticación: sistema completo de registro, inicio de sesión, verificación de correo y recuperación de contraseña mediante Laravel Fortify.
- Identidad de marca: diseño visual propio basado en la psicología del color asignado al grupo.
- Comunicación: configuración SMTP para recuperación de contraseñas y confirmación de pedidos.
- Persistencia: diseño relacional con relaciones 1:1, 1:N y N:M, seeders y control transaccional en el checkout.
- Categorías: gestión N:M con CRUD en administración y filtros avanzados en el catálogo.
- Perfil e idioma: edición del perfil, direcciones y preferencia de idioma aplicada en la interfaz.
- Favoritos: listado personal y panel administrativo con ranking de productos más guardados.
- Gestión del proyecto: uso de Git, GitHub y tablero Kanban para organizar el trabajo.
Repositorio público: https://github.com/Parritoso/Laravel
El proyecto incluye una pila Docker Compose para levantar NexusGear sin instalar PHP, MySQL, Redis, MongoDB ni Node directamente en el sistema.
Servicios expuestos:
- Aplicación: http://localhost:8080
- Vite: http://localhost:5173
- Mailpit: http://localhost:8025
Si algún puerto ya está ocupado, puedes cambiarlo al ejecutar make, por ejemplo:
make docker-up APP_PORT=8081Comandos desde la raíz del repositorio:
make docker-up
make docker-test
make docker-reset
make docker-downmake docker-up crea NexusGear/.env desde NexusGear/.env.docker.example si no existe, construye la imagen PHP, instala dependencias, genera APP_KEY, ejecuta migraciones y siembra datos de demo cuando la base de datos está vacía.
Para probar compras reales en local, configura STRIPE_SECRET con una clave de test válida en NexusGear/.env. Los correos de recuperación, verificación y pedidos se capturan en Mailpit.
Siguiendo las directrices del proyecto, se ha establecido el verde agua como color primario de la plataforma. Esta elección encaja con la temática ergonómica porque transmite calma, equilibrio, frescura y bienestar, valores relacionados con la reducción de fatiga en contextos de trabajo y juego prolongado.
- Psicología del color: el verde agua refuerza la idea de salud postural, comodidad y tecnología no agresiva.
- Aplicación en Bootstrap 5: se personaliza la variable
$primaryen SASS para que botones, enlaces, badges, navegación y estados visuales mantengan coherencia de marca. - Diseño responsive: las vistas públicas y de administración están construidas con Bootstrap 5 y componentes propios, adaptadas a escritorio y móvil.
| Uso | Nombre | Código HEX |
|---|---|---|
| Color primario real en SASS | Verde agua | #4FD1C5 |
| Variación oscura / precio | Verde profundo | #117864 |
| Texto principal / panel admin | Dark Gear | #2D3748 |
| Fondo de interfaz | Gris claro | #F8FAFC |
| Superficies | Blanco | #FFFFFF |
Los mockups se encuentran en la carpeta docs/ y sirven como referencia visual del flujo público, el flujo de usuario autenticado y el panel de administración. Se plantean con una composición limpia, navegación superior en la tienda pública, sidebar en administración y componentes de formulario/listado coherentes con Bootstrap 5.
Mockups de tienda y usuario
Página principal
Catálogo de productos
Detalle de producto
Historial de pedidos del usuario
Inicio de sesión
Perfil de usuario
Edición de perfil
Área segura (cambio de contraseña)
Lista de favoritos
Mockups del panel de administración
Dashboard de administración
Gestión de productos
Listado de pedidos
Formulario de edición de producto
Detalle de pedido
- El catálogo de productos debe ser público para usuarios no registrados.
- El sistema debe permitir buscar productos por nombre o descripción, filtrarlos por perfil/categoría principal y ordenarlos por precio o nombre.
- El usuario debe poder registrarse, iniciar sesión, cerrar sesión, verificar su correo y recuperar la contraseña.
- El usuario registrado y verificado debe poder añadir productos al carrito, modificar cantidades, eliminar líneas y vaciar el carrito.
- El checkout debe validar stock, crear el pedido, descontar inventario, generar factura y vaciar el carrito.
- El usuario debe poder consultar el historial de pedidos y el detalle de cada pedido propio.
- El usuario debe recibir un correo de confirmación tras completar una compra.
- El administrador debe poder crear, editar, listar y eliminar productos.
- El administrador debe poder consultar todos los pedidos y actualizar su estado.
- Un usuario estándar no debe poder acceder a rutas de administración.
- El sistema debe permitir asignar una o varias categorías a cada producto y filtrar por categorías múltiples.
- El administrador debe poder gestionar categorías (CRUD) y asociarlas a productos en altas y ediciones.
- El usuario debe poder gestionar su perfil (nombre, idioma, direcciones) y cambiar la contraseña desde un área segura.
- La plataforma debe mostrar la interfaz en español o inglés según el idioma del usuario.
- El usuario debe poder marcar y desmarcar favoritos y consultarlos desde su perfil.
- El administrador debe poder consultar los productos más marcados como favoritos.
- Uso obligatorio de Bootstrap 5 para interfaces responsive.
- Arquitectura de base de datos diseñada previamente con cardinalidades 1:1, 1:N y N:M.
- Uso de migraciones, modelos Eloquent y seeders.
- Checkout protegido mediante transacción de base de datos y bloqueo de productos durante la actualización de stock.
- Código gestionado con Git y alojado en GitHub.
- Proyecto funcional sin pasarela de pago real.
- Configuración SMTP mediante variables de entorno.
- Internacionalización basada en ficheros de idioma y middleware de selección de idioma.
- Relación N:M gestionada con tabla pivote y migraciones de sincronización.
El proyecto utiliza un modelo relacional para usuarios, roles, catálogo, carritos, pedidos, facturas, direcciones, favoritos, categorías y descuentos.
El diagrama conceptual se encuentra en:
Entidades principales:
- Usuario: cuenta registrada en el sistema.
- Rol: define permisos de administración o cliente.
- Producto: artículo vendible del catálogo.
- Categoría: clasificación del producto. En la entrega 2.0 se permite asignar una o varias categorías por producto mediante tabla pivote.
- Carrito: carrito activo del usuario.
- Pedido: compra realizada por un usuario.
- Factura: documento asociado a un pedido.
- Dirección: direcciones de envío previstas para el perfil de usuario.
- Favorito: relación entre usuarios y productos guardados.
- Descuento: cupón o rebaja aplicable a productos.
El siguiente diagrama refleja el esquema físico actual. La relación activa entre producto y categoría en v2.0 se realiza mediante la tabla pivote producto_categoria, lo que permite asociaciones múltiples por producto.
erDiagram
USERS ||--|| CARRITOS : "posee"
USERS ||--o{ PEDIDOS : "realiza"
USERS ||--o{ DIRECCIONES : "gestiona"
USERS ||--o{ FAVORITOS : "marca"
USERS ||--o{ ROL_USUARIO : "tiene"
ROLES ||--o{ ROL_USUARIO : "asigna"
PRODUCTOS ||--o{ PRODUCTO_CATEGORIA : "clasifica"
CATEGORIAS ||--o{ PRODUCTO_CATEGORIA : "clasifica"
CARRITOS ||--o{ ITEM_CARRITO : "contiene"
PRODUCTOS ||--o{ ITEM_CARRITO : "anadido_a"
PEDIDOS ||--o{ LINEA_PEDIDO : "contiene"
PRODUCTOS ||--o{ LINEA_PEDIDO : "vendido_en"
PEDIDOS ||--|| FACTURAS : "genera"
PRODUCTOS ||--o{ FAVORITOS : "es_marcado"
PRODUCTOS ||--o{ DESCUENTO_PRODUCTO : "recibe"
DESCUENTOS ||--o{ DESCUENTO_PRODUCTO : "aplica"
USERS {
bigint id PK
string name
string email
string language
timestamp email_verified_at
string password
}
ROLES {
bigint id PK
string nombre_rol
}
ROL_USUARIO {
bigint usuario_id PK, FK
bigint rol_id PK, FK
datetime asignado_el
}
PRODUCTOS {
bigint id PK
string nombre
float precio
text descripcion
string imagen
integer stock
boolean destacado
}
CATEGORIAS {
bigint id PK
string nombre
string slug
}
CARRITOS {
bigint id PK
bigint usuario_id FK
datetime created_at
datetime updated_at
}
ITEM_CARRITO {
bigint carrito_id PK, FK
bigint producto_id PK, FK
integer cantidad
float precio_actual
}
PEDIDOS {
bigint id PK
bigint usuario_id FK
enum estado
datetime fecha
}
LINEA_PEDIDO {
bigint pedido_id PK, FK
bigint producto_id PK, FK
integer cantidad
float precio_unitario
float subtotal
}
FACTURAS {
bigint id PK
bigint pedido_id FK
string numero_factura
float subtotal
float iva
float total_factura
datetime fecha_emision
}
DIRECCIONES {
bigint id PK
bigint usuario_id FK
string calle
string numero
string ciudad
string codigo_postal
}
FAVORITOS {
bigint usuario_id PK, FK
bigint producto_id PK, FK
datetime agregado_el
}
DESCUENTOS {
bigint id PK
string codigo
string tipo
float valor
datetime fecha_fin
}
PRODUCTO_CATEGORIA {
bigint producto_id PK, FK
bigint categoria_id PK, FK
}
DESCUENTO_PRODUCTO {
bigint descuento_id PK, FK
bigint producto_id PK, FK
}
- 1:1:
users↔carritos. - 1:1:
pedidos↔facturas. - 1:N:
users→pedidos. - 1:N:
users→direcciones. - 1:N:
carritos→item_carrito. - 1:N:
pedidos→linea_pedido. - N:M:
users↔rolesmedianterol_usuario. - N:M:
users↔productosmediantefavoritos. - N:M:
productos↔descuentosmediantedescuento_producto. - N:M:
productos↔categoriasmedianteproducto_categoria(relación activa en v2.0).
- Precio congelado:
item_carrito.precio_actualylinea_pedido.precio_unitarioguardan el precio en el momento de la operación. - Checkout transaccional: el proceso de compra usa
DB::transaction()para crear pedido, líneas, factura, descontar stock y vaciar carrito como una única operación. - Bloqueo de stock: durante el checkout se usa
lockForUpdate()sobre cada producto para evitar inconsistencias de inventario. - Factura única: cada pedido genera una factura con número
NG-YYYYMMDD-ID, subtotal, IVA del 21% y total. - Carrito por usuario: se crea automáticamente o bajo demanda mediante
firstOrCreate(). - Roles: el middleware
adminevita que usuarios estándar entren en el panel de administración. - Formato monetario: los modelos exponen accessors para mostrar precios con formato europeo.
- Categorías N:M: la relación se mueve a
producto_categoria, con migración que eliminacategoria_idy sincronización desde formularios y seeders. - Internacionalización: el idioma se guarda en
users.languageySetLocalelo aplica en cada petición; hay ficheros para español, inglés, portugués y japonés. - Favoritos: se modelan como tabla pivote con alta/baja instantánea y ranking de popularidad en el dashboard.
- Descuentos: existe CRUD de descuentos en administración y asignación opcional a productos, aunque no forma parte del alcance mínimo de v1.0.
- Actor: visitante o usuario registrado.
- Precondición: ninguna.
- Flujo principal:
- El actor accede a la página de productos.
- El sistema muestra productos con nombre, descripción, precio, stock y categoría/perfil.
- El actor puede buscar por nombre o descripción.
- El actor puede filtrar por una o varias categorías (
Office & Focus,Gamer Pro, etc.). - El actor puede ordenar por destacados, precio o nombre.
- El actor puede abrir el detalle de un producto.
- Actor: visitante.
- Precondición: no tiene sesión iniciada.
- Flujo principal:
- El visitante accede al formulario de registro o login.
- El sistema valida los datos mediante Fortify.
- Al registrarse, se crea la cuenta y se envía verificación de correo.
- Tras verificar el correo, el usuario queda habilitado para rutas protegidas.
- Actor: usuario registrado y verificado.
- Precondición: sesión iniciada.
- Flujo principal:
- El usuario añade un producto disponible al carrito.
- El sistema comprueba el stock.
- El usuario modifica cantidades, elimina productos o vacía el carrito.
- El carrito muestra subtotales y total actualizado.
- Flujo alternativo: si la cantidad supera el stock, el sistema rechaza la operación y muestra un aviso.
- Actor: usuario registrado y verificado.
- Precondición: carrito con al menos un producto.
- Flujo principal:
- El usuario revisa su carrito.
- Pulsa finalizar compra.
- El sistema valida stock dentro de una transacción.
- El sistema crea pedido, líneas de pedido y factura.
- El sistema descuenta stock y vacía el carrito.
- El usuario recibe correo de confirmación.
- El usuario es redirigido al detalle del pedido.
- Flujo alternativo: si algún producto no tiene stock suficiente, no se crea pedido y el carrito permanece intacto.
- Actor: usuario registrado y verificado.
- Precondición: sesión iniciada.
- Flujo principal:
- El usuario accede a sus pedidos.
- El sistema lista sus pedidos ordenados por fecha.
- El usuario abre un pedido.
- El sistema muestra productos, cantidades, precios, estado y factura.
- Restricción: un usuario no puede ver pedidos de otro usuario.
- Actor: administrador.
- Precondición: sesión iniciada con rol
admin. - Flujo principal:
- El administrador accede al panel.
- Lista productos con filtros.
- Crea productos indicando nombre, descripción, precio, stock, categoría/perfil, destacado y descuento opcional.
- Edita productos existentes.
- Elimina productos que no aparezcan en pedidos.
- Actor: administrador.
- Precondición: sesión iniciada con rol
admin. - Flujo principal:
- El administrador accede al listado de pedidos.
- Filtra por estado.
- Abre el detalle de un pedido.
- Actualiza el estado entre
pendiente,procesando,enviado,entregadoycancelado.
- Actor: usuario registrado.
- Precondición: el usuario no recuerda su contraseña.
- Flujo principal:
- El usuario solicita recuperación desde el formulario.
- Fortify envía un correo con enlace de restablecimiento.
- El usuario define una nueva contraseña.
- Puede volver a iniciar sesión.
- Actor: usuario recién registrado.
- Precondición: el usuario ha creado una cuenta y tiene pendiente verificar su correo.
- Flujo principal:
- El sistema envía un correo de verificación tras el registro.
- El usuario abre el correo y accede al enlace de verificación.
- Fortify valida la firma del enlace.
- El sistema marca el correo como verificado.
- El usuario accede a las funcionalidades protegidas, como carrito, checkout, pedidos y onboarding.
- Flujo alternativo: si el enlace ha caducado, el usuario puede solicitar un nuevo correo de verificación.
- Actor: usuario registrado con sesión activa.
- Precondición: el usuario ha iniciado sesión.
- Flujo principal:
- El usuario abre el menú de su cuenta.
- Pulsa la opción de cerrar sesión.
- El sistema invalida la sesión activa.
- El usuario vuelve a navegar como visitante.
- Actor: usuario registrado y verificado.
- Precondición: el usuario accede tras verificar su correo.
- Flujo principal:
- El usuario entra en la pantalla de configuración inicial.
- Selecciona el idioma de preferencia.
- Revisa las opciones de dirección, intereses y tipo de uso propuestas por el asistente.
- Completa el asistente.
- El sistema guarda el idioma seleccionado y redirige al inicio de la tienda.
- Actor: administrador.
- Precondición: sesión iniciada con rol
admin. - Flujo principal:
- El administrador accede a
/admin/dashboard. - El sistema muestra indicadores generales de productos, stock bajo, pedidos totales y pedidos en curso.
- El administrador consulta los pedidos recientes.
- El administrador consulta los productos con menor stock.
- Desde el panel puede ir a productos, pedidos, categorías o descuentos.
- El administrador accede a
- Actor: administrador.
- Precondición: sesión iniciada con rol
admin. - Flujo principal:
- El administrador accede a la sección de categorías.
- El sistema muestra el listado de categorías existentes.
- El administrador crea una categoría indicando nombre y
slug. - El administrador edita los datos de una categoría.
- El administrador elimina categorías que no estén asociadas a productos.
- Las categorías quedan disponibles en los formularios y filtros de productos.
- Actor: administrador.
- Precondición: sesión iniciada con rol
admin. - Flujo principal:
- El administrador accede a la sección de descuentos.
- El sistema muestra el listado de descuentos y el número de productos asociados.
- El administrador crea un descuento indicando código, tipo, valor y fecha de fin.
- El administrador edita descuentos existentes.
- El administrador elimina descuentos cuando ya no se necesiten.
- Actor: administrador.
- Precondición: existen productos y descuentos activos.
- Flujo principal:
- El administrador entra en el formulario de creación o edición de producto.
- El sistema carga los descuentos activos disponibles.
- El administrador selecciona un descuento opcional para el producto.
- Al guardar, el sistema sincroniza la relación entre producto y descuento.
- El producto queda asociado al descuento elegido.
- Actor: usuario registrado y verificado.
- Precondición: sesión iniciada.
- Flujo principal:
- El usuario accede a su perfil.
- Edita su nombre e idioma preferido.
- Guarda los cambios.
- El sistema actualiza el perfil y aplica el idioma seleccionado.
- Actor: usuario registrado y verificado.
- Precondición: sesión iniciada.
- Flujo principal:
- El usuario abre la sección de direcciones en su perfil.
- Añade una nueva dirección con calle, número, ciudad y código postal.
- Edita o elimina direcciones existentes.
- El sistema guarda los cambios y muestra confirmación.
- Actor: usuario registrado y verificado.
- Precondición: sesión iniciada y confirmación de contraseña actual.
- Flujo principal:
- El usuario accede a la pantalla de cambio de contraseña.
- Introduce su contraseña actual y la nueva contraseña.
- El sistema valida y actualiza el hash.
- El usuario mantiene la sesión activa con la nueva credencial.
- Actor: usuario registrado y verificado.
- Precondición: sesión iniciada.
- Flujo principal:
- El usuario marca o desmarca un producto desde el catálogo o el detalle.
- El sistema actualiza la lista de favoritos.
- El usuario consulta su listado de favoritos desde el perfil.
- Desde la lista puede eliminar favoritos o añadir productos al carrito.
- Actor: administrador.
- Precondición: sesión iniciada con rol
admin. - Flujo principal:
- El administrador accede al dashboard.
- El sistema muestra el ranking de productos más marcados como favoritos.
- El administrador puede acceder al producto para su gestión.
La aplicación Laravel se encuentra en la carpeta NexusGear/.
app/Http/Controllers/ProductController.php: catálogo público, búsqueda, filtro y detalle de producto.app/Http/Controllers/CartController.php: alta, actualización, eliminación y vaciado del carrito.app/Http/Controllers/CheckoutController.php: vista de checkout.app/Http/Controllers/OrderController.php: checkout, historial y detalle de pedidos del usuario.app/Http/Controllers/FavoriteController.php: alta/baja y listado de favoritos.app/Http/Controllers/ProfileController.php: vista y edición de perfil, idioma y contraseña.app/Http/Controllers/DireccionController.php: CRUD de direcciones de envío.app/Http/Controllers/Admin/ProductController.php: CRUD de productos para administración.app/Http/Controllers/Admin/OrderController.php: gestión de pedidos en administración.app/Http/Controllers/Admin/CategoriaController.php: CRUD de categorías.app/Http/Controllers/Admin/DiscountController.php: CRUD de descuentos.app/Http/Controllers/OnboardingController.php: selección inicial de idioma y preferencias tras verificar correo.
User: autenticación, roles, carrito, pedidos, direcciones y favoritos.Producto: catálogo, categorías N:M, descuentos, favoritos, carrito y líneas de pedido.Categoria: categorías del catálogo con relación N:M.ProductoCategoria: tabla pivote de categorías de producto.CarritoeItemCarrito: carrito y líneas.PedidoyLineaPedido: pedidos y detalle de compra.Factura: factura asociada a pedido.RolyRolUsuario: roles y tabla pivote.Direccion: direcciones de envío previstas para el perfil.Favorito: tabla pivote de favoritos.DescuentoyDescuentoProducto: descuentos y asignación a productos.
resources/views/home.blade.php: página principal.resources/views/products/*.blade.php: catálogo y detalle.resources/views/cart/index.blade.php: carrito.resources/views/orders/*.blade.php: pedidos del usuario.resources/views/admin/*.blade.php: panel de administración.resources/views/auth/*.blade.php: vistas de Fortify.resources/views/auth/profile/*.blade.php: perfil, edición y cambio de contraseña.resources/views/favorites/index.blade.php: listado de favoritos.resources/views/emails/orders/confirmation.blade.php: correo de confirmación de pedido.
CheckAdmin: controla el acceso al panel de administración.SetLocale: aplica el idioma del usuario cuando está disponible.
| Método | URI | Descripción |
|---|---|---|
| GET | / |
Página principal |
| GET | /productos |
Catálogo público |
| GET | /productos/{producto} |
Detalle de producto |
| GET/POST | /login |
Inicio de sesión |
| GET/POST | /register |
Registro |
| GET/POST | /forgot-password |
Recuperación de contraseña |
| GET/POST | /reset-password |
Restablecimiento de contraseña |
| GET | /email/verify |
Aviso de verificación de correo |
| Método | URI | Descripción |
|---|---|---|
| GET | /home |
Redirección según rol |
| GET | /carrito |
Ver carrito |
| POST | /carrito/productos/{producto} |
Añadir producto |
| PATCH | /carrito/productos/{producto} |
Actualizar cantidad |
| DELETE | /carrito/productos/{producto} |
Eliminar línea |
| DELETE | /carrito |
Vaciar carrito |
| GET | /checkout |
Vista de checkout |
| POST | /checkout |
Finalizar compra |
| GET | /pedidos |
Historial de pedidos |
| GET | /pedidos/{pedido} |
Detalle de pedido |
| GET | /favoritos |
Listado de favoritos |
| POST | /favoritos/productos/{producto} |
Añadir favorito |
| DELETE | /favoritos/productos/{producto} |
Eliminar favorito |
| GET/POST | /onboarding |
Configuración inicial |
| GET | /profile |
Perfil del usuario |
| GET | /profile/edit |
Editar perfil |
| PATCH | /profile |
Actualizar perfil |
| POST | /direcciones |
Crear dirección |
| PUT | /direcciones/{direccion} |
Editar dirección |
| DELETE | /direcciones/{direccion} |
Eliminar dirección |
| GET | /profile/password |
Formulario de cambio de contraseña |
| PUT | /profile/password |
Actualizar contraseña |
Todas usan middleware auth, verified y admin.
| Método | URI | Descripción |
|---|---|---|
| GET | /admin/dashboard |
Dashboard |
| RESOURCE | /admin/products |
CRUD de productos |
| RESOURCE | /admin/categorias |
CRUD de categorías |
| RESOURCE | /admin/discounts |
CRUD de descuentos |
| GET | /admin/orders |
Listado de pedidos |
| GET | /admin/orders/{pedido} |
Detalle de pedido |
| PATCH | /admin/orders/{pedido} |
Actualizar estado |
El entorno se puede poblar con:
php artisan migrate:fresh --seedSeeders ejecutados:
RolSeeder: crea los rolesadminycustomer.CategoriaSeeder: creaOffice & Focus(office) yGamer Pro(gamer).ProductSeeder: crea productos iniciales.ProductoCategoriaSeeder: asigna categorías iniciales a productos.UserSeeder: crea usuarios iniciales.
Credenciales iniciales:
| Rol | Contraseña | |
|---|---|---|
| Admin | admin@nexusgear.com |
admin123 |
| Cliente | juan@example.com |
user123 |
Productos iniciales:
- Nexus Vertical Pro
- Aqua Keys 60
- Focus Pad Gel
- Split Core Ergo
- Pulse Mouse X
- Lift Dock Stand
- Stealth Wrist Rest
- Tactile Flow TKL
Requisitos:
- PHP
^8.2 - Composer
- Node.js y npm
- MySQL o SQLite
Instalación básica:
cd NexusGear
composer install
npm install
cp .env.example .env
php artisan key:generate
php artisan migrate:fresh --seed
npm run build
php artisan serveDurante desarrollo:
npm run devLa aplicación usa Laravel Mail para:
- Verificación de correo.
- Recuperación de contraseña.
- Confirmación de pedido mediante
OrderConfirmationMail.
Variables principales en .env:
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=nexusgear.info@gmail.com
MAIL_PASSWORD=app_password_de_gmail
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=nexusgear.info@gmail.com
MAIL_FROM_NAME="NexusGear Support"El correo de pedido se envía después de confirmar la transacción del checkout y usa la plantilla resources/views/emails/orders/confirmation.blade.php.
| Bloque | Estado | Observaciones |
|---|---|---|
| Catálogo público | Completado | Búsqueda, filtro por perfil/categoría principal, ordenación y detalle |
| Autenticación Fortify | Completado | Registro, login, logout, verificación y recuperación |
| Carrito | Completado | Añadir, modificar, eliminar, vaciar y validar stock |
| Checkout | Completado | Transacción, factura, stock y correo |
| Pedidos de usuario | Completado | Historial y detalle protegido |
| Admin productos | Completado | CRUD con categoría principal y descuento opcional |
| Admin pedidos | Completado | Listado, detalle y cambio de estado |
| Admin categorías | Implementado | CRUD disponible y categorías integradas en productos |
| Admin descuentos | Implementado | CRUD y asignación opcional a productos |
| Internacionalización base | Implementado | Middleware de idioma y ficheros de traducción iniciales |
| Onboarding | Implementado | Selección inicial de idioma y preferencias |
| Imágenes de producto | Implementado | Campo imagen y recurso por defecto en almacenamiento público |
| Bloque | Estado | Observaciones |
|---|---|---|
| Categorías N:M | Completado | Asociación múltiple con producto_categoria y filtro por categorías |
| CRUD de categorías | Completado | Gestión completa en administración |
| Perfil de usuario | Completado | Edición de nombre, idioma y acceso a direcciones |
| Direcciones (CRUD) | Completado | Alta, edición y eliminación desde perfil |
| Cambio de contraseña | Completado | Área segura con confirmación de contraseña |
| Internacionalización | Completado | Interfaz en ES/EN con soporte adicional PT/JA |
| Favoritos | Completado | Alta/baja y listado personal con acciones rápidas |
| Ranking de favoritos | Completado | Top 5 en dashboard de administración |














