You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Plataforma multi-tenant para centros comerciales que conecta a clientes, tiendas y administradores en una sola experiencia digital. Incluye una aplicación web SSR y una aplicación móvil nativa construidas sobre un monorepo compartido.
Edita apps/web/.env con tus valores. Consulta la sección Variables de entorno para una descripción completa.
4. Levantar la infraestructura
# Entorno de desarrollo (PostgreSQL, Redis, MinIO, Mailpit)
docker compose -f docker-compose.dev.yml up -d
5. Ejecutar migraciones y seed
# Aplica las migraciones de Prisma
pnpm --filter @mallhub/web run prisma:migrate
# Puebla la base de datos con datos iniciales
pnpm --filter @mallhub/web run prisma:seed
6. Compilar traducciones
pnpm --filter @mallhub/web run i18n:compile
7. Iniciar el servidor de desarrollo
# Todos los workspaces en paralelo
pnpm dev
# Solo la aplicación web
pnpm --filter @mallhub/web run dev
# Solo la aplicación móvil
pnpm --filter @mallhub/mobile run dev
La aplicación web estará disponible en http://localhost:5173.
El servidor de email de desarrollo (Mailpit) en http://localhost:8025.
La consola de MinIO en http://localhost:9001.
Variables de entorno
Todas las variables se definen en apps/web/.env. El archivo apps/web/.env.example sirve de referencia.
Secreto para firmar sesiones (mínimo 32 caracteres)
Credenciales del admin inicial
Variable
Descripción
ADMIN_EMAIL
Email del administrador de plataforma creado en el seed
ADMIN_NAME
Nombre del administrador
ADMIN_PASSWORD
Contraseña del administrador
Email (Resend)
Variable
Descripción
RESEND_API_KEY
API key de Resend
RESEND_FROM_EMAIL
Dirección remitente
RESEND_FROM_NAME
Nombre remitente
Cola de notificaciones (Redis + BullMQ)
Variable
Default
Descripción
REDIS_URL
—
URL de conexión a Redis
NOTIFICATIONS_WORKER_CONCURRENCY
5
Trabajos paralelos del worker
NOTIFICATIONS_WORKER_LIMIT_MAX
60
Máximo de emails por ventana
NOTIFICATIONS_WORKER_LIMIT_DURATION_MS
60000
Ventana de rate limit en ms
Almacenamiento de archivos (MinIO / S3)
Variable
Default
Descripción
MINIO_ENDPOINT
http://localhost:9000
Endpoint interno de MinIO
MINIO_ACCESS_KEY
minioadmin
Access key
MINIO_SECRET_KEY
minioadmin
Secret key
MINIO_BUCKET
mallhub
Nombre del bucket
MINIO_PUBLIC_URL
http://localhost:9000
URL pública para las URLs de imágenes
Inteligencia Artificial
Variable
Descripción
OPENAI_API_KEY
API key de OpenAI (para reportes IA del Admin CC)
Frontend
Variable
Default
Descripción
VITE_APP_API_URL
http://mallhub.lat
URL de la API consumida desde el cliente
Scripts disponibles
Ejecutar desde la raíz del monorepo:
Comando
Descripción
pnpm dev
Inicia todos los workspaces en modo desarrollo
pnpm build
Construye todos los workspaces
pnpm lint
Ejecuta Biome en todos los workspaces
pnpm format
Formatea todos los archivos con Biome
pnpm type-check
Verifica tipos TypeScript en todos los workspaces
pnpm --filter @mallhub/web run prisma:migrate
Aplica migraciones de Prisma
pnpm --filter @mallhub/web run prisma:seed
Ejecuta el seed de la base de datos
pnpm --filter @mallhub/web run i18n:compile
Compila los mensajes de Paraglide
Validación obligatoria antes de cada commit:pnpm format → pnpm lint → pnpm type-check
Aplicación Web
Rutas principales
Públicas
Ruta
Descripción
/
Landing page con malls y productos destacados
/malls
Listado de centros comerciales
/malls/:mallId
Detalle de un mall
/malls/:mallId/stores
Tiendas de un mall
/stores/:storeId
Detalle de una tienda
/products/:productId
Detalle de un producto
/search
Búsqueda global
Autenticación
Ruta
Descripción
/auth/login
Inicio de sesión
/auth/register
Registro de cuenta
/auth/reset-password
Solicitud de recuperación de contraseña
Dashboard del cliente
Ruta
Descripción
/dashboard
Resumen de la cuenta
/dashboard/reservations/:id
Detalle de una reservación
/products/:productId/reserve
Flujo de reserva (3 pasos)
Admin Local (tienda)
Ruta
Descripción
/store-local/dashboard
Panel principal
/store-local/products
Gestión de productos
/store-local/reservations
Gestión de reservaciones
/store-local/promotions
Gestión de promociones
/store-local/config
Configuración de la tienda
Admin CC (centro comercial)
Ruta
Descripción
/admin-cc/dashboard
Métricas del mall
/admin-cc/stores
Gestión de tiendas
/admin-cc/events
Eventos del mall
/admin-cc/ai-reports
Reportes generados con IA
/admin-cc/config
Configuración del mall
Admin Platform
Ruta
Descripción
/admin/dashboard
Métricas globales
/admin/malls
Gestión de centros comerciales
/admin/stores
Gestión de tiendas
/admin/users
Gestión de usuarios y roles
/admin/billing
Suscripciones y pagos
/admin/campaigns
Campañas de marketing
/admin/moderation
Reportes de moderación
/admin/audit
Registro de auditoría
/admin/health
Estado de salud del sistema
Aplicación Móvil
Pantallas
Tabs (cliente autenticado)
Tab
Descripción
Home
Feed con malls y productos destacados
Search
Búsqueda con historial
Favorites
Tiendas y productos guardados
Reservations
Lista de reservaciones del usuario
Profile
Perfil y configuración
Pantallas de detalle
Pantalla
Descripción
mall/[mallId]
Información y galería del mall
mall/[mallId]/stores
Tiendas del mall
store/[storeId]
Perfil de la tienda
product/[productId]
Detalle de producto con stock
reserve/[productId]
Flujo de reserva con selector de fecha
reservation/[reservationId]
Detalle con código QR
Admin Local (móvil)
Pantalla
Descripción
Dashboard
Estadísticas rápidas
Products
Listado con edición y eliminación
Add / Edit Product
Formulario con carga de imagen
Reservations
Reservaciones recibidas
Scan QR
Escáner para confirmar reservaciones
Promotions
Gestión de promociones
Config
Configuración de la tienda
Paquetes compartidos
@mallhub/ui
Librería de componentes basada en shadcn/ui y Tailwind CSS v4. Todos los tokens de color y tipografía están definidos como variables CSS en packages/ui/src/global.css. Los componentes se consumen directamente desde @mallhub/ui en la aplicación web.
@mallhub/notifications
Infraestructura de cola de emails basada en BullMQ y Redis. Expone un dispatcher que encola trabajos de envío sin bloquear el hilo principal. La entrega final se realiza a través de Resend.
Base de datos
El schema completo se encuentra en apps/web/prisma/schema.prisma. A continuación, los modelos agrupados por dominio:
El proyecto incluye dos configuraciones de Docker Compose:
Desarrollo (docker-compose.dev.yml)
Almacenamiento en memoria, ideal para desarrollo local rápido.
docker compose -f docker-compose.dev.yml up -d
Servicio
Puerto
Descripción
PostgreSQL 17
5432
Base de datos principal
Redis 7
6379
Cola de notificaciones
MinIO
9000 / 9001
Almacenamiento de archivos / Consola web
Mailpit
1025 / 8025
Servidor SMTP local / Bandeja de pruebas
Producción local (docker-compose.local-prod.yml)
Con volúmenes persistentes e imagen Docker de la aplicación.
docker compose -f docker-compose.local-prod.yml up -d
Incluye un servicio minio-init que crea el bucket automáticamente al iniciar, y el servicio app que corre la build de Node.js en el puerto configurado por APP_HOST_PORT (por defecto 80).
Roles y permisos
El sistema de autorización combina Better Auth (gestión de sesiones y roles) con CASL (habilidades por recurso).
Rol
Descripción
CUSTOMER
Usuario final. Puede explorar, reservar y gestionar su perfil.
ADMIN_LOCAL
Administrador de una tienda. Gestiona productos, reservaciones y promociones de su tienda.
ADMIN_CC
Administrador de un centro comercial. Supervisa tiendas, eventos, métricas y reportes IA.
ADMIN_PLATFORM
Superadministrador. Acceso completo a todos los recursos del sistema.
Las constantes de roles se definen en better-auth-access-control.lib.ts. Los tres archivos que deben mantenerse alineados son:
better-auth-server.lib.ts
app-ability.lib.ts
trpc.init.ts
Convenciones de commits
Este proyecto usa Conventional Commits validado con CommitLint y Husky.