Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Reservá tu turno en segundos, sin llamadas ni WhatsApp cruzados.
Translation pending
BusinessTypeScript · HTMLGitHub @anyels295-sourceOnlineOwner 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
Loading the full README. The saved excerpt is shown below.
Motor de reservas de citas para profesionales/emprendedores. El cliente elige un horario libre en una página pública y el turno queda creado automáticamente en el calendario real del profesional (Google y/o Outlook), con confirmación por WhatsApp y respaldo por email — sin llamadas, sin ida y vuelta de correos.Read the full README ↗
Motor de reservas de citas para profesionales/emprendedores. El cliente elige un horario libre en una página pública y el turno queda creado automáticamente en el calendario real del profesional (Google y/o Outlook), con confirmación por WhatsApp y respaldo por email — sin llamadas, sin ida y vuelta de correos.
Es la primera pieza del proyecto de agendamiento descrito en el informe
Informe - Implementacion Agendate Tu Mismo y Agente AgendaFacil.docx
(carpeta principal del proyecto). Comparte el mismo enfoque de
sincronización (Google Calendar API + Microsoft Graph API) que se usará
más adelante para integrarse con Agente AgendaFácil.
/reservar/{slug}): elegir servicio (si hay más de uno), elegir día, elegir horario, completar nombre/WhatsApp, confirmar./admin) con: Panel (métricas y próximos turnos), Agenda semanal, Reservas (buscador, filtros y acciones), Calendarios, y Configuración (datos básicos, horario, servicios, notificaciones)./api/cron/daily-summary, ver sección 8): la agenda del día, sin tener que entrar al Panel a buscarla.POST /api/admin/professionals, sin login propio por profesional todavía).src/app/api/webhooks/whatsapp/route.ts).npm install
cp .env.example .env
Completar .env con las credenciales de cada sección (el archivo tiene,
en cada bloque, el link exacto a donde se obtiene cada dato).
Generar las dos claves de seguridad:
openssl rand -base64 32 # para AUTH_SECRET
openssl rand -base64 32 # para TOKEN_ENCRYPTION_KEY (tiene que decodificar a 32 bytes, este comando ya lo hace)
Generar el hash de la contraseña de admin:
npx tsx scripts/hash-password.ts "la-contraseña-que-quieras"
# copiar la línea ADMIN_PASSWORD_HASH="..." resultante al .env
npx prisma migrate dev
Esto crea las tablas en la base de PostgreSQL de DATABASE_URL y regenera el
cliente de Prisma. Si ya tenías el proyecto corriendo desde antes de sumar
Servicios/Teams/multi-profesional, alcanza con volver a correr este mismo
comando: aplica la migración nueva (add_services_teams_multiprofessional)
sin tocar los datos existentes.
{APP_URL}/api/auth/google/callback.env.{APP_URL}/api/auth/outlook/callbackCalendars.ReadWrite, offline_access, User.Read..env.Ver docs/whatsapp-template.md para el paso a paso de la plantilla que hay
que mandar a aprobar a Meta. Mientras no esté aprobada, el sistema sigue
funcionando: la reserva se confirma igual en el calendario, solo que sin el
mensaje de WhatsApp (queda registrado como pendiente en la tabla de logs).
npm run dev
http://localhost:3000/admin/login (usar ADMIN_EMAIL / la contraseña que hasheaste)/reservar/{tu-slug}./api/cron/daily-summary manda por email, a cada profesional activo con
notifyEmail habilitado, la agenda del día (turnos de hoy, y si hubo algún
aviso a un cliente que falló ayer). No requiere ninguna dependencia nueva ni
IA — es la respuesta directa a que ambas ideas originales piden un
resumen/reporte automático (ver docs/Propuesta-funcionalidades-faltantes-MVP.docx).
Para que se dispare solo:
CRON_SECRET en .env (una palabra clave propia, igual que las demás).vercel.json ya deja configurado que
Vercel Cron llame a esta ruta todos los días a las 11:00 UTC (8:00 en
Uruguay) — Vercel agrega automáticamente el header Authorization: Bearer $CRON_SECRET si la variable está configurada en el proyecto.curl -H "Authorization: Bearer $CRON_SECRET" https://tu-dominio/api/cron/daily-summary
http:// como redirect URI en producción.src/
app/
reservar/[slug]/ página pública de reserva
cancelar/[token]/ cancelación sin login
admin/ panel del profesional (protegido)
api/ endpoints (disponibilidad, reservas, OAuth, admin)
components/ componentes de UI (cliente)
lib/
calendar/ conectores Google y Outlook + manejo de tokens
notifications/ WhatsApp + email
availability.ts servicio de disponibilidad unificado (el núcleo)
booking.ts flujo de creación/cancelación de reservas
dailySummary.ts cálculo del resumen diario (ver sección 7)
auth.ts sesión de admin
prisma/
schema.prisma modelo de datos
docs/
whatsapp-template.md plantilla a aprobar en Meta
Propuesta-funcionalidades-faltantes-MVP.docx gap analysis vs. ideas originales
scripts/
hash-password.ts utilidad para generar ADMIN_PASSWORD_HASH
vercel.json config de Vercel Cron (resumen diario)