尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
Marketplace de catálogos y pedidos.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Plataforma multi-tienda construida con Next.js y Supabase. Cada tienda tiene un catálogo público (detal y mayorista), fichas de producto, pedidos por WhatsApp con comprobante, pagos en línea (Wompi y Addi), POS, inventario, clientes, usuarios internos con permisos y campañas de RemHub Social. Un panel administrativo global gestiona todas las tiendas.
Requisitos: Node.js 20+ y un proyecto de Supabase.
npm install
cp .env.example .env.local # completa los valores (ver abajo)
npm run dev # http://localhost:3000
| Script | Uso |
|---|---|
npm run dev | Servidor de desarrollo |
npm run build | Build de producción |
npm run start | Sirve el build de producción |
npm run lint | ESLint |
| Variable | Dónde | Requerida | Descripción |
|---|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | Cliente | Sí | URL del proyecto Supabase |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Cliente | Sí | Llave anon de Supabase |
SUPABASE_SERVICE_ROLE_KEY | Servidor | Sí | Llave service_role. La usan las rutas de usuarios internos, campañas, pagos y Siigo. Nunca con prefijo NEXT_PUBLIC_ |
NEXT_PUBLIC_SITE_URL | Ambos | Para Addi | Dominio HTTPS público (callbacks de Addi, metadatos del catálogo). Alternativas: SITE_URL, VERCEL_URL |
SIIGO_API_URL, SIIGO_API_TOKEN, SIIGO_API_KEY, SIIGO_COMPANY_ID, SIIGO_INVOICE_PATH | Servidor | Opcional | Valores por defecto para facturación electrónica con Siigo (SIIGO_INVOICE_PATH por defecto /v1/invoices) |
.env* está en .gitignore: no subas llaves al repositorio. En Vercel, defínelas en Project → Settings → Environment Variables y vuelve a desplegar.
Nota: los scripts SQL mencionados a continuación no están actualmente en el árbol de trabajo (
supabase/migrations/está vacío); existen en el historial de git. Recupéralos o agrégalos de nuevo antes de configurar un entorno nuevo.
Ejecútalos en el SQL Editor de Supabase, después del esquema base (stores, store_profiles, products, categories, orders, order_items). Todos son idempotentes. Orden recomendado:
supabase/configuracion-pedidos-pagos.sql: RPCs confirm_order_v2 / update_order_items_by_token_v2, bloqueo de pedidos confirmados, formas de pago y secretos de Wompi (store_payment_secrets). Solo si usas pagos.supabase/migrations/20260927_addi_payments.sql: credenciales y pagos de Addi. Requiere el anterior.supabase/pos-precios-clientes.sql: cinco listas de precios para producto/POS y billing_customers.price_list. Necesario antes de usar POS, productos o clientes.supabase/usuarios-internos-tiendas.sql: store_users, permisos RLS por store_id y políticas restrictivas. Ejecútalo después del SQL de pagos.supabase/migrations/20261001_product_landings_social.sql: fichas de producto ampliadas, campañas y RLS por tienda.supabase/migrations/20261002_store_contact_and_quick_access_settings.sql: contactos WhatsApp, puntos físicos y accesos rápidos en store_profiles.20261002_* a 20261005_*, incluida 20261003_social_campaign_catalog_controls.sql (cover_image_url, category_id, is_public, sort_order).erp_core.sql, erp_ops.sql, erp_points.sql, erp_billing_points.sql, erp_purchase_files.sql) para inventario, operaciones y facturación por punto.Storage: el bucket product-images debe permitir subir archivos al administrador autenticado.
| Ruta | Descripción |
|---|---|
/ | Landing |
/[slug]/[mode] | Catálogo público (detal o mayor; mayor requiere clave mayorista) |
/[slug]/producto/[id] | Ficha pública del producto |
/pedido/[token] | Comprobante del pedido y pago (Wompi / Addi) |
/login, /forgot-password, /reset-password | Acceso de propietarios |
/acceso/[slug] | Acceso de usuarios internos de una tienda |
/dashboard | Panel de la tienda (protegido por middleware.ts) |
/dashboard/products, /categories | Productos y categorías |
/dashboard/pedidos | Pedidos |
/dashboard/pos | POS / facturación rápida |
/dashboard/clientes | Clientes y datos fiscales |
/dashboard/inventario | Stock, compras, traslados y operaciones |
/dashboard/store | Mi tienda: identidad, tema, contactos, puntos, accesos rápidos |
/dashboard/store/billing | Formas de pago y facturación |
/dashboard/store/users | Usuarios internos y permisos |
/dashboard/social | Campañas de RemHub Social |
/admin/* | Panel administrativo global (tiendas, usuarios, productos, pedidos, temas) |
/api/* | Rutas de servidor: pagos, Siigo, equipo de tienda, campañas, notificaciones admin |
src/
app/ Rutas (App Router), API routes y paneles dashboard/admin
components/ Componentes compartidos del catálogo
lib/ Supabase (client/server), carrito, pagos, Siigo, temas y utilidades
middleware.ts Redirige /dashboard a /login si no hay cookie de sesión
supabase/ Scripts SQL y migraciones
https://TU-DOMINIO/api/payments/wompi/webhook. El checkout de Wompi ofrece tarjetas, PSE, Nequi, Bancolombia, DaviPlata, etc., según el comercio.APPROVED, moneda COP y monto coincidente. Requiere NEXT_PUBLIC_SITE_URL público en HTTPS (Addi no alcanza localhost). Las credenciales de producción las entrega Addi tras aprobación. Ver el manual de Addi y su autenticación.stores.owner_id).USU01), contraseña (mín. 8 caracteres) y las secciones permitidas. Se genera un enlace https://TU-DOMINIO/acceso/slug?sid=...&usuario=.... La identidad Auth se deriva de tienda + usuario, así que el mismo nombre en otra tienda es otra cuenta.El POS carga productos y clientes de la tienda asignada, usa las cinco listas de precios y la lista asignada a cada cliente. La emisión con Siigo se valida en el servidor (sesión + permiso POS); las credenciales nunca llegan al navegador.
Nombre, slug público (se normaliza al guardar), clave mayorista privada, catálogos habilitados, tema con vista previa, logo, banner, redes, contactos WhatsApp (activables, con avatares y uno principal), Puntos para encontrarnos (sucursales con mapa y rutas desde la ubicación del cliente, que no se guarda) y tarjetas de Acceso rápido. Suscripción y vigencia se administran desde /admin.
/api/catalog/[slug]/campaigns (is_public = true, tiendas activas). En mayor solo tras validar la clave mayorista.El proyecto está pensado para Vercel: conecta el repositorio, define las variables de entorno y despliega. Después del primer despliegue, configura las URLs de webhook/callback de Wompi y Addi con el dominio de producción.