Un sistema integral de gestión de pedidos y entregas con autenticación de usuarios, roles diferenciados (admin/delivery), gestión de productos, seguimiento de órdenes y historial de entregas en tiempo real.
Construido con TypeScript, Next.js 16, React 19, TailwindCSS, shadcn/ui, y Convex.
- Autenticación segura con Lucia y @auth/core
- Roles diferenciados:
- Admin: Gestión completa del sistema
- Delivery: Gestión de entregas asignadas
- Usuario: Acceso limitado
- Contraseñas hasheadas con bcryptjs
- Crear, leer, actualizar y eliminar productos
- Información detallada: nombre, descripción, SKU, precio, cantidad
- Categorización de productos
- Imágenes asociadas con almacenamiento en Convex
- Seguimiento de fechas de creación y actualización
- Crear y gestionar pedidos
- Estados de pedidos:
- Pendiente
- Confirmado
- Listo
- En tránsito
- Entregado
- Cancelado
- Información del cliente (nombre, email, teléfono)
- Dirección de entrega
- Cálculo automático de totales
- Asignación de personal de entrega
- Asignación de pedidos a personal de entrega
- Historial completo de entregas
- Seguimiento de ubicación
- Notas y estado en tiempo real
- Historial temporal de movimientos
- Dashboard para administradores con estadísticas
- Dashboard para personal de entrega con órdenes asignadas
- Visualización de datos con gráficos
- Tablas interactivas con TanStack React Table
- Integración con Leaflet para visualización de entregas
- Ubicación en tiempo real de entregas
- React Leaflet para componentes React
- Componentes de shadcn/ui
- Diseño responsivo con TailwindCSS
- Tema claro/oscuro
- Notificaciones con Sonner
- Componentes reutilizables
- Validación de formularios con Zod y React Hook Form
- Componentes de carga y esqueletos
- Diálogos de confirmación
- Menús de navegación avanzados
- Soporte para múltiples dispositivos
- Next.js 16 - Framework React full-stack
- React 19 - Librería UI
- TypeScript - Tipado estático
- TailwindCSS 4 - Estilos CSS
- shadcn/ui - Componentes UI
- React Hook Form - Gestión de formularios
- Zod - Validación de esquemas
- TanStack React Table - Tablas avanzadas
- Leaflet & React Leaflet - Mapas interactivos
- Recharts - Gráficos y visualización
- Lucide React - Iconos
- Sonner - Sistema de notificaciones
- Next Themes - Soporte de temas
- Convex - Backend-as-a-Service
- Lucia - Autenticación
- @auth/core - Sistema de autenticación
- bcryptjs - Hashing de contraseñas
- Turborepo - Monorepo optimizado
- Biome - Linting y formateo (Ultracite preset)
- Husky - Git hooks para calidad de código
- pnpm - Package manager
- Node.js 18+ o superior
- pnpm 10.20.0 o superior
- Cuenta de Convex (gratuita en convex.dev)
- Git para control de versiones
git clone <repository-url>
cd smart-deliverypnpm installEste paso configura el backend en Convex y autentica tu aplicación:
pnpm run dev:setupEl script te pedirá que:
- Ingreses con tu cuenta de Convex (o crees una nueva)
- Selecciones o crees un nuevo proyecto
- Confirmes la configuración
Para ejecutar toda la aplicación (frontend + backend):
pnpm run devEsto iniciará:
- Frontend: localhost:3001 (Next.js)
- Backend: Convex Dev Server (sincronización automática)
La aplicación se abrirá automáticamente en tu navegador.
# Ejecutar solo la web
pnpm run dev:web
# Ejecutar solo el backend
pnpm run dev:server
# Compilar para producción
pnpm run build
# Verificar tipos TypeScript
pnpm run check-types
# Formatear y verificar código con Biome
pnpm run check
# Iniciar servidor de producción
pnpm run startsmart-delivery/
├── apps/
│ └── web/ # Aplicación Next.js
│ ├── src/
│ │ ├── app/ # Rutas de Next.js
│ │ │ ├── (app)/ # Rutas autenticadas
│ │ │ │ ├── admin/ # Panel de admin
│ │ │ │ │ ├── dashboard/
│ │ │ │ │ ├── orders/
│ │ │ │ │ ├── products/
│ │ │ │ │ └── staff/
│ │ │ │ └── delivery/ # Panel de delivery
│ │ │ └── (auth)/ # Rutas públicas
│ │ │ └── login/
│ │ ├── components/ # Componentes React
│ │ │ ├── shared/ # Componentes compartidos
│ │ │ ├── ui/ # Componentes shadcn/ui
│ │ │ └── layout files
│ │ ├── lib/ # Utilidades
│ │ ├── schemas/ # Esquemas Zod
│ │ └── utils/ # Funciones de utilidad
│ └── package.json
│
├── packages/
│ └── backend/ # Backend Convex
│ ├── convex/
│ │ ├── schema.ts # Definición de base de datos
│ │ ├── auth.ts # Autenticación
│ │ ├── users.ts # Gestión de usuarios
│ │ ├── products.ts # Gestión de productos
│ │ ├── orders.ts # Gestión de pedidos
│ │ ├── deliveryHistory.ts # Historial de entregas
│ │ ├── actions/ # Acciones personalizadas
│ │ ├── internal/ # Funciones internas
│ │ └── _generated/ # Archivos autogenerados
│ └── package.json
│
├── biome.json # Configuración Biome
├── turbo.json # Configuración Turborepo
├── pnpm-workspace.yaml # Configuración del workspace
└── tsconfig.base.json # Configuración TypeScript base
- Usuario ingresa email y contraseña
- Sistema valida credenciales con bcryptjs
- Si son válidas, se crea una sesión de Lucia
- Usuario recibe rol (admin/delivery)
- Se redirige según el rol
- Rutas bajo
(app)requieren autenticación - Rutas bajo
(auth)son públicas (solo para no autenticados)
| Rol | Acceso |
|---|---|
| Admin | Todos los módulos (productos, pedidos, staff, dashboard) |
| Delivery | Panel de entregas, órdenes asignadas, historial |
| Sin autenticar | Solo login |
{
email: string
name: string
image: string
role: 'admin' | 'delivery' | ''
}{
name: string
description: string
sku: string
price: number
quantity: number
category: string
imageStorageId: string (opcional)
createdAt: timestamp
updatedAt: timestamp
}{
orderNumber: string
status: 'pending' | 'confirmed' | 'ready' | 'in_transit' | 'delivered' | 'cancelled'
items: Array<{productId, quantity, price}>
customerName: string
customerEmail: string
customerPhone: string
deliveryAddress: string
totalAmount: number
assignedDeliveryId: string (opcional)
createdAt: timestamp
updatedAt: timestamp
deliveredAt: timestamp (opcional)
}{
orderId: string
deliveryPersonId: string
status: string
location: string (opcional)
notes: string (opcional)
timestamp: timestamp
}Este proyecto usa Ultracite, un preset de Biome de cero configuración que mantiene altos estándares de calidad:
# Formatear código automáticamente
pnpm run checkPrincipios clave:
- TypeScript explícito
- Sin
console.logen producción constpor defecto,letcuando sea necesario- Async/await en lugar de promesas
- Componentes funcionales en React
- Hooks correctamente utilizados
Más información: Ver .github/copilot-instructions.md
- Compilar la aplicación:
pnpm run build- Verificar tipos:
pnpm run check-types- Desplegar en Vercel (recomendado para Next.js):
- Conectar tu repositorio en Vercel
- Variables de entorno: Convex sincroniza automáticamente
- Deploy automático en push a main
- Ejecuta
pnpm run dev:setupnuevamente - Verifica que tengas una sesión activa en Convex
- Cambia el puerto:
next dev --port=3002 - O libera el puerto existente
- Borra cookies del navegador (DevTools > Application > Cookies)
- Limpia caché:
pnpm run dev(fuerza recarga)
- Next.js Documentation
- Convex Documentation
- shadcn/ui Components
- TailwindCSS Documentation
- Biome Documentation
- React Documentation
- Crear una rama para tu feature:
git checkout -b feature/nueva-funcionalidad - Hacer commit de tus cambios:
git commit -m "Agregar nueva funcionalidad" - Ejecutar formateo:
pnpm run check - Push a la rama:
git push origin feature/nueva-funcionalidad - Abrir un Pull Request
ISC
Desarrollado como parte del stack Better-T con Convex
¿Necesitas ayuda? Revisa la documentación de Convex o abre un issue en el repositorio.