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
Controla equipos, mantenimientos, documentos, obras y novedades de tu empresa desde una sola plataforma, con datos aislados por empresa.
Translation pending
BusinessTypeScript · PLpgSQLGitHub @yaineruOnlineOwner 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 ↗Versión actual: v1.0.0
Aplicación SaaS multiempresa construida con Next.js 15, TypeScript, Tailwind CSS, componentes estilo Shadcn UI y Supabase.
app/(auth): autenticación con Supabase Auth.app/(app): área protegida y responsive.components: shell, dashboard, notificaciones y componentes UI reutilizables.lib/supabase: clientes para browser, server components y middleware.lib/tenant.ts: resolución de empresa activa, usuario y rol.lib/security.ts: sanitización, rate limiting y protección de origen.supabase/migrations: esquema SQL completo con llaves foráneas, índices, auditoría, RLS, Storage y Realtime.app/
(auth)/ Login, registro
(app)/ Área protegida: activos, mantenimientos, agenda, informes, usuarios, settings...
api/ Rutas API: Google OAuth, feeds de calendario, cron jobs, informes
calendar/public/ Página pública de disponibilidad (sin autenticación)
components/ Componentes React reutilizables (shell, calendario, informes, UI base)
lib/
actions/ Server Actions (mutaciones)
email/ Plantillas, envío SMTP/Resend, cola de correo
google/ OAuth y sincronización con Google Calendar
reports/ Generadores de PDF/Excel
supabase/ Clientes Supabase (browser/server/admin)
supabase/
migrations/ Migraciones SQL numeradas (idempotentes)
seed/ Datos de prueba (solo para desarrollo/QA)
docs/ Documentación técnica y de producción
Software propietario desarrollado para Progrúas S.A.S. Todos los derechos reservados — no distribuir sin autorización.
cp .env.example .env.local
npm install
npm run dev
Ver .env.example para la lista completa comentada. Resumen:
| Variable | Requerida | Descripción |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | Sí | URL del proyecto Supabase |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Sí | Clave pública (anon) de Supabase |
SUPABASE_SECRET_KEY | Sí | Clave de servicio (server-only, nunca exponer al cliente) |
APP_URL | Sí | URL base del despliegue (sin / final), usada para OAuth de Google |
SMTP_CREDENTIALS_ENCRYPTION_KEY | Sí para SMTP | Frase usada para cifrar las contraseñas SMTP guardadas por cada empresa |
RESEND_API_KEY / RESEND_FROM_EMAIL | No | Respaldo de envío de correo si una empresa no configuró su propio SMTP |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET | No | Habilitan la sincronización con Google Calendar |
GOOGLE_TOKEN_ENCRYPTION_KEY | No (requerida si se usa Google) | Frase usada para cifrar los tokens OAuth de Google |
CRON_SECRET | Recomendada en producción | Protege los endpoints app/api/cron/* llamados por Vercel Cron |
Ninguna variable con secretos reales debe commitearse — .gitignore excluye todos los .env* salvo .env.example.
El proyecto está pensado para desplegarse en Vercel:
supabase/migrations/ sobre el proyecto Supabase de producción (ver sección siguiente).app/api/cron/reminders, app/api/cron/email-queue y app/api/cron/expirations según vercel.json.Para despliegue alternativo en un VPS propio, ver Despliegue en Hostinger VPS.
En el editor SQL de Supabase, aplica todos los archivos de supabase/migrations/
en orden numérico (001 → el número más alto disponible). Todas las migraciones son
idempotentes, así que volver a correrlas no causa daño. No apliques nada de
supabase/seed/ en una instalación de producción real — esos archivos insertan datos
de prueba y solo sirven para un entorno de QA/desarrollo desechable.
supabase/repairs/ y supabase/diagnostics/ son notas históricas de sesiones de
depuración anteriores, ya incorporadas a las migraciones numeradas; no hace falta
correrlas.
Cada tabla operativa incluye company_id. La aplicación consulta e inserta usando la empresa activa del usuario, y Supabase RLS bloquea cualquier acceso fuera de la empresa.
Roles soportados:
SUPER_ADMINADMINSUPERVISOROPERARIOEl panel principal recalcula: