Agenda turnos, cobra con MercadoPago y lleva tu caja, clientes y stock desde un programa para Windows. Tus datos quedan en tu PC.
Translation pending
CommerceJavaScript · HTMLGitHub @ArrayagoMOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
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
🤖 SaaS de WhatsApp con IA — Agenda turnos, cobra con MercadoPago y atiende clientes 24/7. Built with React, Node.js, MongoDB & Groq AI.
Taken from the repository README
Loading the full README.
Read the full README ↗Plataforma multi-tenant para automatizar la atención al cliente, gestión de turnos y pagos via WhatsApp, impulsada por LLaMA 3.3 70B (Groq).
| Capa | Tecnología |
|---|---|
| Backend | Node.js + Express |
| Base de datos | MongoDB + Mongoose |
| Autenticación | Passport.js — JWT + Google OAuth + Facebook OAuth |
| Cifrado | AES-256-GCM + PBKDF2 (crypto nativo de Node) |
| IA | Groq — LLaMA 3.3 70B |
| Baileys (WebSocket directo — sin Puppeteer) | |
| Tiempo real | Socket.io |
| Calendario | Google Calendar API |
| Pagos | MercadoPago |
| Audio STT | Whisper (via Groq) |
| Audio TTS | Rime.ai |
| Frontend | React + Vite + Tailwind CSS |
| Deploy | Render (backend) + Vercel (frontend) |
akira-cloud/
├── backend/
│ ├── config/
│ │ ├── db.js ← Conexión MongoDB
│ │ ├── env.validator.js ← Validación de .env al arrancar
│ │ ├── logger.js ← Winston logger
│ │ └── passport.js ← Estrategias OAuth
│ ├── middleware/
│ │ └── auth.js ← requireAuth, requireAdmin, generarJWT
│ ├── models/
│ │ ├── User.js ← Usuarios con OAuth, roles, planes y esTester
│ │ ├── Config.js ← API Keys cifradas + horarios + pausa + días bloqueados
│ │ ├── Log.js ← Auditoría con TTL automático (90 días)
│ │ └── Referido.js ← Relaciones de referidos y comisiones pendientes
│ ├── routes/
│ │ ├── auth.routes.js ← Login, registro, OAuth, generación de códigos referido
│ │ ├── bot.routes.js ← Control del bot (start/stop/logs/stats)
│ │ ├── config.routes.js ← API Keys, negocio, horarios, pausa, días bloqueados
│ │ ├── admin.routes.js ← Panel admin: usuarios, pánico, testers, referidos
│ │ └── subscription.routes.js ← Checkout y webhooks de suscripciones
│ ├── services/
│ │ ├── akira.bot.js ← Orquestador del bot (WhatsApp + IA + notificaciones)
│ │ ├── bot.manager.js ← Gestor multi-tenant + arquitectura híbrida cloud/edge
│ │ ├── worker.handler.js ← Comunicación con worker local via Socket.io
│ │ ├── crypto.service.js ← Cifrado/descifrado AES-256-GCM
│ │ └── bot/
│ │ ├── audio.service.js ← STT Whisper + TTS Rime
│ │ ├── calendar.service.js ← Google Calendar + horarios por día
│ │ ├── groq.service.js ← LLM + manejo de rate-limit
│ │ ├── mercadopago.service.js ← Pagos y verificación MP
│ │ └── persistence.service.js ← I/O de memoria del bot
│ ├── scripts/
│ │ ├── seedAdmin.js ← Crear admin inicial
│ │ └── limpiarSesiones.js ← Limpiar sesiones de WhatsApp
│ ├── tests/
│ │ ├── crypto.service.test.js
│ │ ├── env.validator.test.js
│ │ └── persistence.service.test.js
│ └── server.js ← Entrada principal
├── worker/
│ ├── worker.js ← Worker local — corre el bot en tu máquina
│ └── package.json
├── frontend/
│ └── src/
│ ├── pages/
│ │ ├── Landing.jsx ← Landing page
│ │ ├── Login.jsx ← Auth + OAuth
│ │ ├── Register.jsx ← Registro con código de referido
│ │ ├── Dashboard.jsx ← QR + logs en vivo + stats + toggle pausa rápido
│ │ ├── ConfigPage.jsx ← Keys + negocio + horarios + pausa + días bloqueados
│ │ ├── AgendaPage.jsx ← Vista de agenda del bot
│ │ ├── PlanesPage.jsx ← Suscripciones, checkout y referidos
│ │ └── AdminPanel.jsx ← Gestión de usuarios, testers y comisiones
│ ├── components/
│ │ ├── Layout.jsx
│ │ ├── OnboardingChecklist.jsx
│ │ └── ReferralCard.jsx ← Código referido + créditos ganados
│ ├── context/
│ │ └── AuthContext.jsx
│ ├── hooks/
│ │ └── useSocket.js
│ └── services/
│ └── api.js
└── scripts/
└── generar-vercel-json.js ← Genera vercel.json con la URL del backend
cd backend
npm install
# Configurar variables de entorno
cp .env.example .env
# Editar .env con tus valores (ver sección Variables de entorno)
# Crear carpeta de sesiones y logs
mkdir -p sessions logs
# Crear el admin inicial
npm run seed:admin
# Correr tests (opcional)
npm test
# Iniciar en desarrollo
npm run dev
cd frontend
npm install
npm run dev
El frontend corre en http://localhost:5173 y hace proxy al backend en http://localhost:5000.
El worker permite que el bot de WhatsApp corra en tu propia máquina en lugar del servidor cloud. Útil para evitar bloqueos de WA en IPs de datacenter.
cd worker
npm install
# Copiar y configurar .env
cp .env.example .env
# Completar BACKEND_URL y WORKER_SECRET
npm start
Una vez conectado, el panel mostrará "Worker local conectado" y los bots se iniciarán en tu máquina automáticamente.
Copiá backend/.env.example a backend/.env y completá los valores:
| Variable | Descripción |
|---|---|
MONGO_URI | URI de conexión a MongoDB |
JWT_SECRET | Clave secreta JWT — mínimo 32 chars aleatorios |
ENCRYPTION_KEY | Clave maestra AES-256 — mínimo 16 chars |
Para generar claves seguras:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
| Variable | Descripción |
|---|---|
BACKEND_URL | URL pública del backend — necesaria para webhooks de MercadoPago |
FRONTEND_URL | URL del frontend — necesaria para CORS y redirección OAuth |
MP_PLATFORM_ACCESS_TOKEN | Access Token de MercadoPago — para cobrar suscripciones |
NGROK_AUTH_TOKEN | Token de ngrok — para webhooks en desarrollo local |
| Variable | Descripción |
|---|---|
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET | OAuth con Google |
FACEBOOK_APP_ID / FACEBOOK_APP_SECRET | OAuth con Facebook |
MP_PLATFORM_WEBHOOK_SECRET | Verificación de firma en webhooks de MP |
NGROK_DOMAIN | Dominio fijo de ngrok (plan pago) |
WA_SESSIONS_PATH | Ruta de sesiones de WhatsApp (default: ./sessions) |
WORKER_SECRET | Token compartido entre backend y worker local |
/backendnpm installnpm start$7/mes) y configurar WA_SESSIONS_PATH=/data/sessionsvercel.json con la URL del backend:BACKEND_URL=https://tu-app.onrender.com node scripts/generar-vercel-json.js
/frontend en vercel.comVITE_API_URL=https://tu-app.onrender.com/api en Vercel (necesaria para el OAuth de Google Calendar)| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/auth/register | Registro con email (acepta codigoReferidoUsado) |
| POST | /api/auth/login | Login con email |
| GET | /api/auth/me | Perfil del usuario autenticado |
| GET | /api/auth/google | Iniciar OAuth con Google |
| GET | /api/auth/facebook | Iniciar OAuth con Facebook |
| PUT | /api/auth/password | Cambiar contraseña |
| POST | /api/auth/generar-codigo | Generar código de referido para usuario existente |
| Método | Ruta | Descripción |
|---|---|---|
| GET | /api/config | Obtener configuración del usuario |
| PUT | /api/config/negocio | Guardar datos del negocio |
| PUT | /api/config/horarios | Guardar horarios de atención + celular de notificaciones |
| PUT | /api/config/pausa | Activar/desactivar modo pausa |
| PUT | /api/config/dias-bloqueados | Agregar o quitar un día bloqueado |
| PUT | /api/config/keys | Guardar API Key cifrada |
| DELETE | /api/config/keys/:campo | Eliminar una API Key |
| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/bot/start | Iniciar bot |
| POST | /api/bot/stop | Detener bot |
| GET | /api/bot/status | Estado del bot |
| GET | /api/bot/logs | Logs del bot |
| GET | /api/bot/stats | Estadísticas (mensajes, reservas, cobros) |
| Método | Ruta | Descripción |
|---|---|---|
| GET | /api/subscriptions/planes | Listar planes y precios |
| POST | /api/subscriptions/checkout | Crear preferencia de pago MP |
| POST | /api/subscriptions/webhook | Webhook de notificaciones MP |
| Método | Ruta | Descripción |
|---|---|---|
| GET | /api/admin/dashboard | Stats globales |
| GET | /api/admin/users | Listar usuarios |
| POST | /api/admin/users/:id/block | Bloquear usuario + detener bot |
| POST | /api/admin/users/:id/unblock | Desbloquear usuario |
| POST | /api/admin/users/:id/tester | Activar/desactivar modo tester |
| GET | /api/admin/referidos | Listar comisiones pendientes |
| POST | /api/admin/referidos/:id/pagar | Marcar comisión como pagada |
ENCRYPTION_KEY maestra es imposible recuperarlas.MONGO_URI, JWT_SECRET, ENCRYPTION_KEY).| Plan | Mensajes/mes | Bots | Calendar | MP | Audio | Horarios config. |
|---|---|---|---|---|---|---|
| Trial | 100 | 1 | — | — | — | ✅ |
| Básico | 500 | 1 | — | — | — | ✅ |
| Pro | Ilimitado | 1 | ✅ | ✅ | ✅ | ✅ |
| Agencia | Ilimitado | 5 | ✅ | ✅ | ✅ | ✅ |
Todos los planes incluyen: modo pausa, días bloqueados y notificaciones al dueño.
# Backend
npm run dev # Desarrollo con hot-reload
npm start # Producción
npm test # Correr tests
npm run seed:admin # Crear admin inicial
npm run clean:sessions # Limpiar sesiones de WhatsApp
# Raíz del proyecto
BACKEND_URL=https://... node scripts/generar-vercel-json.js # Generar vercel.json
Akira Cloud v1.2