Aplicación web integral para la gestión de pedidos y delivery de comidas, conectando a clientes, comercios y repartidores bajo la administración de un panel central. Desarrollada con Node.js, Express 5 y MongoDB.
El sistema está dividido en cuatro roles principales, cada uno con su propio portal y funcionalidades:
- Administrador (
ADMIN): Control total de la plataforma. Gestión de usuarios (clientes, comercios, repartidores), tipos de comercios y configuraciones globales (variables del sistema). - Cliente (
CLIENT): Exploración de comercios y catálogos, gestión de direcciones de entrega, carrito de compras, checkout de pedidos, seguimiento de órdenes y lista de comercios favoritos. - Comercio (
COMMERCE): Gestión del perfil del comercio, administración de categorías de menú, control de productos (creación, edición, imágenes) y gestión de pedidos recibidos. - Repartidor (
DELIVERY): Visualización de pedidos disponibles, toma de órdenes para entrega y actualización del estado del pedido hasta completarlo.
- Backend: Node.js, Express 5
- Base de datos: MongoDB + Mongoose
- Motor de Plantillas: Express Handlebars (HBS)
- Estilos: Tailwind CSS 4
- Autenticación: Sesiones persistentes (express-session) + encriptación con bcryptjs
- Envío de Emails: Nodemailer (para registro, recuperación de contraseñas, notificaciones)
- Subida de archivos: Multer (imágenes de perfil, logos de comercios, fotos de productos)
- Seguridad y Validación: express-validator
- Node.js >= 20.x
- MongoDB corriendo localmente o un cluster en MongoDB Atlas
- Clona el repositorio:
git clone https://github.com/gabrielmarte-dev/cenar-web-app.git
cd cenar-web-app- Instala las dependencias:
npm install- Configura las variables de entorno. Copia el archivo de ejemplo y ajusta los valores necesarios:
cp .env.example .env.developmentLa aplicación incluye Tailwind CSS configurado por CLI, por lo que el proceso de desarrollo compila los estilos automáticamente.
# Desarrollo completo (Inicia el servidor Node con nodemon + Tailwind CSS en modo watch simultáneamente)
npm run dev
# Solo iniciar el servidor en modo desarrollo
npm run dev:server
# Solo compilar y observar cambios de Tailwind CSS
npm run watch:css
# Construcción de estilos minimizados para producción
npm run build:css
# Iniciar en producción
npm start| Variable | Descripción |
|---|---|
NODE_ENV |
Entorno de ejecución (development / production) |
PORT |
Puerto del servidor (ej. 3000) |
MONGODB_URI_DEV |
URI de conexión a MongoDB para desarrollo |
SESSION_SECRET |
Clave alfanumérica secreta para firmar las cookies de sesión |
EMAIL_USER / EMAIL_PASS |
Credenciales del servicio SMTP para envío de correos |
EMAIL_HOST / EMAIL_PORT |
Configuración del servidor SMTP |
APP_URL |
URL base de la aplicación (ej. http://localhost:3000) |
SEED_DB |
Si es true, insertará los datos iniciales y el admin por defecto al arrancar |
DEFAULT_ADMIN_* |
Credenciales y datos del administrador por defecto a crear por el seeder |
cenar-web-app/
├── public/ # Archivos estáticos
│ ├── css/ # Hojas de estilo y Tailwind compilado
│ ├── img/ # Imágenes estáticas del sitio
│ ├── js/ # Scripts del lado del cliente (carrito, menú, etc.)
│ └── uploads/ # Imágenes subidas por los usuarios
└── src/ # Código fuente del backend
├── config/ # Configuraciones (DB, Mailer, Multer, Variables)
├── controllers/ # Lógica de las rutas agrupada por rol o entidad
├── middlewares/ # Middlewares (Autenticación, validación, manejo de archivos)
├── models/ # Esquemas y Modelos de Mongoose (Users, Orders, Products, etc.)
├── routes/ # Definición de rutas Express
├── seed/ # Script de población (seeder) de base de datos
├── services/ # Lógica de negocio e interacción con BD
├── utils/ # Utilidades, constantes y Helpers de Handlebars
└── views/ # Plantillas HBS, layouts y componentes (partials)
├── admin/ # Vistas del portal administrativo
├── auth/ # Vistas de autenticación (login, registro, recuperar pass)
├── client/ # Vistas del consumidor (catálogo, carrito, direcciones)
├── commerce/ # Vistas del panel de comercio (productos, categorías)
├── delivery/ # Vistas de la app del repartidor
├── layouts/ # Estructuras base HTML (main, auth, admin)
└── partials/ # Componentes reusables (navbar, alertas)
- Wilson Gabriel Marte - @gabrielmarte-dev
- Lorelvis Santos - @lorelvis-santos