Open-Source Cold Email & Warmup Platform
Warmbly is the open-source platform for cold email: warm your mailboxes, send campaigns, and triage every reply. Run it on our cloud or self-host the whole thing.
Fidelización por QR para restaurantes, bares y cafés
Translation pending
MarketingTypeScript · PLpgSQLGitHub @antonyalvaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Sistema de fidelización para restaurantes, bares y cafés basado en el modelo del reel analizado en docs/ANALISIS_DESARROLLO.md:
Stack: Next.js 16 (App Router, Server Actions), Tailwind 4, Supabase (Postgres + Auth), WhatsApp Cloud API.
| Módulo | Ruta | Quién |
|---|---|---|
| Carta digital + registro al club | /m/{token} | Cliente (celular) |
| Cupón de bienvenida en pantalla y por WhatsApp | /m/{token}/bienvenida | Cliente |
| Canje de cupones | /mesero | Mesero / caja |
| Resumen con KPIs | /admin | Admin / encargado |
| Clientes, ficha, visitas, baja manual | /admin/clientes | Admin / encargado |
| Campañas por segmento, costo estimado, envío en lotes | /admin/campanas | Admin / encargado |
| Plantillas de WhatsApp (espejo de Meta) | /admin/plantillas | Admin / encargado |
| Mesas, QR imprimibles | /admin/mesas | Admin / encargado |
| Carta (productos) | /admin/carta | Admin / encargado |
| Configuración del local | /admin/configuracion | Admin |
| Webhook de WhatsApp (estados y BAJA) | /api/whatsapp/webhook | Meta |
| Procesador de campañas para cron | /api/campanas/procesar | Cron |
Segmentos disponibles: toda la base, inactivos hace N días, frecuentes (3+ visitas en 90 días), cumpleaños en los próximos N días. Se excluye automáticamente a quien ya recibió 2 campañas en la semana.
supabase/migrations/0001_init.sqlsupabase/seed.sql (local "Café Demo" con 12 mesas, carta y plantillas de ejemplo)anon y la clave service_role.Antes de usarlo con un local real, editar en supabase/seed.sql (o luego en /admin/configuracion)
el país (ISO 2 letras), la zona horaria y la moneda: definen el prefijo telefónico y los formatos.
cp .env.example .env.local
Completar NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY y SUPABASE_SERVICE_ROLE_KEY.
Dejar WHATSAPP_PROVIDER=mock para probar sin cuenta de Meta: los mensajes se simulan y se ven en la consola.
npm install
npm run crear-usuario -- --email [email protected] --password "cambiar123" --rol admin --local demo --nombre "Admin"
Roles: admin (todo), encargado (panel sin configuración), mesero (solo canje de cupones).
npm run dev
/admin/mesas en el celular o en otra pestaña./admin/mesas, abrir el enlace de la mesa 1./mesero, canjear ese código./admin/campanas/nueva: elegir "Promo de hoy", segmento "Toda la base", calcular destinatarios, completar
las variables y crear la campaña.entregado (el mock lo simula)./admin/plantillas. Las variables nombre y local se completan solas; el resto se pide al crear la campaña.
Toda plantilla de marketing debe incluir cómo darse de baja (el webhook procesa "BAJA")..env.local: WHATSAPP_PROVIDER=meta, WHATSAPP_TOKEN (token permanente de sistema),
WHATSAPP_PHONE_NUMBER_ID y WHATSAPP_VERIFY_TOKEN.https://TU-DOMINIO/api/whatsapp/webhook con el verify token, y
suscribirse al campo messages./admin/configuracion, cargar el Phone Number ID del local y el costo por mensaje de tu país
(tarifa de conversación de marketing de Meta) para que el costo estimado sea real.Límites a tener en cuenta: los números nuevos tienen un tope diario de destinatarios que sube con el uso; los
envíos se hacen en lotes de WHATSAPP_LOTE (50 por defecto) y se puede repetir el envío hasta terminar.
Para campañas con fecha o para terminar envíos largos sin tocar el panel, llamar periódicamente (cada 1 a 5 min):
curl -X POST https://TU-DOMINIO/api/campanas/procesar -H "x-cron-secret: $CRON_SECRET"
En Vercel se puede declarar en vercel.json como Cron Job; en otro hosting, con cron-job.org o GitHub Actions.
supabase/migrations/0001_init.sql esquema, índices y RLS
supabase/seed.sql local demo, mesas, carta, plantillas
scripts/crear-usuario.ts alta de usuarios del panel
src/proxy.ts sesión y protección de /admin y /mesero
src/lib/auth.ts sesión + roles
src/lib/segmentos.ts cálculo de segmentos y límite de frecuencia
src/lib/campanas.ts procesamiento de envíos en lotes
src/lib/whatsapp/ proveedor mock y Meta Cloud API
src/app/m/[token]/ flujo público del cliente
src/app/admin/ panel
src/app/mesero/ canje de cupones
src/app/api/ webhook y cron
local_id; RLS queda activo
como defensa adicional.Ver docs/ANALISIS_DESARROLLO.md: captura de consumo (ticket o pedido desde el QR), segmentos guardados, automatizaciones (cumpleaños, inactivos, ocupación), integración con POS, multi-local con planes.