


















BGV Mayorista
E-commerce B2B mayorista con asistente de IA
- Rol
- Full-stack Engineer
- Tipo de trabajo
- Trabajo para cliente
- Industria
- Distribución mayorista • E-commerce B2B
- Duración
- 6 semanas
- Año
- 2026
Resumen
El desafío
Enlaces
Privado — proyecto de cliente
Arquitectura del sistema
Monorepo con npm workspaces y dos aplicaciones. El frontend en Next.js 15 hace de backend-for-frontend: sus API routes reenvían la sesión y la IP del visitante al backend en Express, que concentra la lógica de negocio, la autenticación y las integraciones. PostgreSQL con Prisma es la única fuente de verdad, y toda regla comercial que BGV necesita ajustar (compra mínima, aprobación, datos bancarios, textos de la web) vive en tablas de configuración, así que cambiarla no requiere un deploy.
Arquitectura de la aplicación
- Frontend en Next.js App Router con API routes como proxy al backend, que reenvían la sesión y la IP del visitante.
- Backend en Express con alrededor de 100 handlers REST separados en rutas públicas, de cliente y de administración.
- Persistencia organizada en DAOs por entidad sobre Prisma.
- El asistente de IA es un paquete separado en core y adapters, sincronizado con un script propio.
- El chat responde en streaming a través de un proxy, con un parser de body separado del resto de la API.
Funcionalidades de la plataforma
- Catálogo público por rubros, con búsqueda por código y precios solo para cuentas aprobadas.
- Alta de cuenta mayorista que crea el usuario y la empresa en una sola transacción.
- Carrito por bulto cerrado o por unidad suelta, con validación de la compra mínima.
- Checkout con Mercado Pago o transferencia (5% de descuento), además de cupones.
- Seguimiento de pedidos con dos estados separados: el del pago y el de preparación y envío.
- Asistente de IA con captura de contactos y base de conocimiento editable.
- SEO: robots, sitemap, canonicals y schema de entidad.
Modelo de datos
- 25 modelos en Prisma y 32 migraciones versionadas.
- Tablas de configuración de una sola fila para datos bancarios, reglas mayoristas y moneda.
- Órdenes con borrado lógico y un id de pago único, lo que da idempotencia ante notificaciones repetidas.
- Rubros con jerarquía (padre e hijos) y orden persistido.
- Conversaciones y contactos del chat guardados como JSON completo, con columnas indexadas para ordenar y deduplicar.
Autenticación
- JWT
- bcrypt
- Google Sign-In
- Versionado de tokens
- Vinculación de cuentas
- Reset de contraseña
- Roles cliente / admin
- Estado de empresa
Infraestructura y deploy
Deploy en un VPS propio con Ubuntu 24.04, con releases atómicas y rollback automático, sin servicios gestionados: PostgreSQL 16, Nginx y PM2 corren en el mismo servidor.
Hosting y deploy
- Cada release se compila en una carpeta nueva; recién después se aplican las migraciones y se cambia el symlink current.
- Si cualquier paso falla, un trap vuelve a la release anterior, y se guardan las últimas 5.
- PM2 corre dos instancias del frontend y dos del backend en modo cluster, con recargas, reinicios con backoff y límite de memoria.
- Nginx como reverse proxy con HTTPS de Let's Encrypt para el dominio con y sin www.
Secretos y almacenamiento
- Los archivos de entorno van cifrados con dotenvx; las claves viven en una carpeta compartida que cada release vincula.
- Las fotos subidas y sus variantes optimizadas están en una carpeta compartida, así sobreviven a cada deploy.
- Un script de diagnóstico muestra la configuración resuelta sin exponer los valores.
Logs y monitoreo
- Logs de PM2
- Rotación de logs
- Script de diagnóstico
Construido con
Cobro único por pedido, en pesos, con Mercado Pago Checkout Pro o transferencia bancaria. El backend recalcula el monto en el servidor y crea una preferencia que lleva el id de la orden como external reference, que es lo que permite conciliar un pago aunque nunca llegue la notificación.
Mercado Pago
- Preferencias creadas con external reference y URL de notificación; para pagar se exige una cuenta mayorista aprobada.
- El webhook valida la firma HMAC-SHA256 con comparación en tiempo constante y deja en el log el detalle de cada rechazo.
- Si el comprador vuelve al sitio, un endpoint de sincronización actualiza el pago.
- Un proceso concilia cada 5 minutos las órdenes pendientes que tienen entre 5 minutos y 24 horas, de a 20 por corrida.
- Si hay un pedido pendiente, se reutiliza en lugar de crear uno nuevo.
Transferencia bancaria
- La orden queda pendiente con un 5% de descuento aplicado.
- El cliente recibe los datos bancarios por mail y el equipo de BGV recibe un aviso.
- Si los datos bancarios están incompletos o desactivados, la opción no aparece en el checkout.
Estados de la orden
- Pendiente
- En proceso
- Aprobada
- Rechazada
- Cancelada
- Reembolsada
Sandbox y pruebas
- Una guía de pruebas en sandbox y un script que detecta si las credenciales son de prueba o de producción.
- Tests end-to-end del flujo de compra, la transferencia, el webhook y la conciliación.
Una plataforma de e-commerce mayorista completa: sitio público, área de clientes, panel de administración con asistente de IA, scripts de carga del catálogo e infraestructura de deploy documentada.
Sitio público y clientes
- Home con hero administrable, rubros, preguntas frecuentes y mapa de cobertura.
- Catálogo y ficha de producto.
- Páginas de Nosotros, Cómo comprar y Contacto.
- Alta de cuenta mayorista, login (también con Google) y recuperación de contraseña.
- Carrito, checkout y pantallas de resultado del pago.
- Perfil con los pedidos y la seguridad de la cuenta.
Panel de administración
- Dashboard, productos, rubros con orden por arrastre, pedidos con detalle, cupones, estadísticas, datos de transferencia y contenido web.
- Asistente de IA: conversaciones, contactos, preguntas sin respuesta, base de conocimiento y ajustes.
Herramientas internas
- Extracción del catálogo desde el PDF del proveedor, con mapeo y optimización de fotos.
- Seed del catálogo real.
- Vista previa de los mails y una prueba de punta a punta de la caché compartida.
Documentación
- README
- Deploy en el VPS
- Asistente IA
- Pagos
- Google OAuth
- Seguridad
- SEO