Slicko es una tienda online de calzado diseñada para ofrecer una experiencia completa de compra y gestión. Incluye catálogo de productos, carrito, pagos con Stripe, administración de pedidos y autenticación de usuarios en una arquitectura moderna React + Express + MySQL.
- Descripción general
- Funcionalidades principales
- Tecnologías
- Frontend
- Backend
- Despliegue
- Contribuciones y siguientes pasos
Slicko combina una interfaz SPA con un backend REST en Node.js para ofrecer una tienda online de calzado completa. Los usuarios pueden registrarse, navegar productos, comentar, agregar ítems al carrito y pagar con Stripe. Los administradores pueden gestionar productos, pedidos y usuarios desde el panel.
- Registro e inicio de sesión de usuarios con JWT
- CRUD completo de productos y panel administrativo
- Carrito de compras con cálculo automático de subtotal
- Checkout con Stripe y flujo de pago seguro
- Gestión de pedidos y paneles de control
- Carga de imágenes vía Cloudinary o URLs externas
- Frontend: React, Vite, React Router, Axios
- Backend: Node.js, Express, bcrypt, jsonwebtoken, express-validator
- Almacenamiento: Cloudinary para imágenes (opcional)
- Base de datos: MySQL (mysql2/promise)
- Pagos: Stripe
El frontend de Slicko es una SPA construida con React y Vite. Administra la navegación de usuario, el catálogo de productos, el carrito, los formularios de autenticación y la experiencia visual.
Frontend/
├── package.json # Dependencias y scripts del proyecto
├── vite.config.js # Configuración de compilación Vite
├── index.html # Entrada HTML de la app
└── src/
├── main.jsx # Punto de entrada de la aplicación React
├── App.jsx # Componente raíz de la aplicación
├── assets/ # Imágenes, iconos, wallpapers, fuentes
├── components/ # Componentes reutilizables comunes
├── pages/ # Páginas principales (Home, Products, Auth, Admin...)
├── Styles/ # Archivos CSS y estilos globales
└── utils/ # Utilidades pequeñas (por ejemplo formatTime.js)
Crear un archivo .env en Frontend/ si se requiere exponer variables públicas.
Variables esperadas:
VITE_STRIPE_KEY
cd Frontend
npm install
npm run devEl backend de Slicko es una API REST en Express que gestiona autenticación JWT, productos, carrito, pedidos, comentarios, administración, Stripe, email y recuperación de contraseña.
El backend usa un punto de entrada central en Backend/src/index.js.
Client
|
v
Backend/src/index.js (middlewares globales)
- CORS
- express.json
- JWT Authentication (en rutas protegidas)
- File Upload (Multer en rutas de producto)
|
├─ /api/admin --> Routes --> Controller --> Model --> Database
├─ /api/usuarios --> Routes --> Controller --> Model --> Database
├─ /api/productos --> Routes --> Controller --> Model --> Database
├─ /api/cart --> Routes --> Controller --> Model --> Database
├─ /api/comment --> Routes --> Controller --> Model --> Database
├─ /api/orders --> Routes --> Controller --> Model --> Database
├─ /api/dashboard --> Routes --> Controller --> Model --> Database
├─ /api/stripe --> Routes --> Controller --> Payment Service
├─ /api/email --> Routes --> Controller --> Email Service
└─ /api/recoverpassword --> Routes --> Controller --> Model --> Database
Backend/src/routes/define los endpoints y delegan en los controladores.Backend/src/controllers/contiene la lógica de cada ruta.Backend/src/models/agrupa las consultas y la interacción con la base de datos.Backend/src/config/contiene la configuración de DB, Stripe, Cloudinary y Multer.- Los middleware de autenticación JWT se aplican en rutas que requieren usuario/admin.
Backend/
├── package.json # Dependencias y scripts del backend
└── src/
├── index.js # Punto de entrada de la API Express
├── config/ # Módulos de configuración
│ ├── db.js # Conexión MySQL
│ ├── cloudinary.js # Configuración de Cloudinary
│ ├── multer.js # Configuración de uploads con Multer
│ └── stripe.js # Configuración de Stripe
├── controllers/ # Controladores y lógica de rutas
├── models/ # Modelos y consultas a la base de datos
├── middlewares/ # Autenticación (JWT), validaciones y errores
└── routes/ # Definición de rutas Express
├── uploads/ # Subidas locales (opcional)
└── .env # Variables de entorno (no se debe versionar)
Crear un archivo .env en Backend/ con los nombres de variables necesarios para la aplicación.
Variables esperadas:
PORTDB_HOSTDB_USERDB_PASSWORDDB_NAMEJWT_SECRETSTRIPE_SECRET_KEYCLOUDINARY_CLOUD_NAMECLOUDINARY_API_KEYCLOUDINARY_API_SECRET
cd Backend
npm install
npm run dev
npm start- Crear la base de datos MySQL.
- Aplicar migraciones o ejecutar scripts de seeds si están disponibles.
- La conexión se configura en Backend/src/config/db.js.
POST /api/admin/loginGET /api/admin/users
Authorization: Bearer TOKENPOST /api/admin/newAdmin
Authorization: Bearer TOKENPUT /api/admin/updateAdmin
Authorization: Bearer TOKENDELETE /api/admin/deleteAdmin
Authorization: Bearer TOKENPOST /api/usuarios/register
Content-Type: application/jsonPOST /api/usuarios/login
Content-Type: application/jsonGET /api/usuarios
Authorization: Bearer TOKENPUT /api/usuarios/update
Authorization: Bearer TOKEN
Content-Type: application/jsonDELETE /api/usuarios/delete
Authorization: Bearer TOKENGET /api/productosGET /api/productos/:producto_idPOST /api/productos/createProduct
Authorization: Bearer TOKENPOST /api/productos/upload-image
Authorization: Bearer TOKEN
Content-Type: multipart/form-dataPUT /api/productos/update/:producto_id
Authorization: Bearer TOKENDELETE /api/productos/delete/:producto_id
Authorization: Bearer TOKENGET /api/cart
Authorization: Bearer TOKENPOST /api/cart
Authorization: Bearer TOKEN
Content-Type: application/jsonPUT /api/cart
Authorization: Bearer TOKEN
Content-Type: application/jsonDELETE /api/cart
Authorization: Bearer TOKENGET /api/orders/userOrders
Authorization: Bearer TOKENGET /api/orders
Authorization: Bearer TOKENPUT /api/orders/orderUpdate/:pedido_id
Authorization: Bearer TOKENGET /api/comment/:producto_idGET /api/comment/user
Authorization: Bearer TOKENPOST /api/comment/:producto_id
Authorization: Bearer TOKEN
Content-Type: application/jsonDELETE /api/comment/:comentario_id
Authorization: Bearer TOKENGET /api/dashboard
Authorization: Bearer TOKENPOST /api/stripe/create-payment-intent
Authorization: Bearer TOKEN
Content-Type: application/jsonPOST /api/email/send
Content-Type: application/jsonPOST /api/recoverpassword/forgot-password
Content-Type: application/jsonPOST /api/recoverpassword/verify-code
Content-Type: application/jsonPOST /api/recoverpassword/reset-password
Content-Type: application/json- Frontend: Vercel
- Backend: Railway
- Base de datos: MySQL gestionado o MySQL en Railway
- Seguir los patrones de código en
Backend/src/yFrontend/src/. - Abrir issues para solicitudes de funciones o corrección de errores.