Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Plataforma con un único chatbot configurable. Contexto: constitution.md, roadmap.md, specs/. La app no arranca si falta DATABASE_URL o si ENCRYPTION_KEY no es de 32 bytes en base64. Sin estas variables todo funciona, pero el chatbot dice que no puede agendar citas. Para habilitarlo:檢視完整 README ↗
Plataforma con un único chatbot configurable. Contexto: constitution.md, roadmap.md, specs/.
Requisitos: Node 22.9 o superior (npm run db:migrate usa --env-file-if-exists, que existe desde esa versión) y
Docker, para la base de datos.
npm install
docker compose up -d # PostgreSQL 17 en localhost:5432
cp .env.example .env.local # y completar ENCRYPTION_KEY con: openssl rand -base64 32
npm run db:migrate # aplica las migraciones de ./drizzle
npm run dev # http://localhost:3000
La app no arranca si falta DATABASE_URL o si ENCRYPTION_KEY no es de 32 bytes en base64.
Si el puerto 5432 ya está ocupado por otro PostgreSQL, cambia el puerto en docker-compose.yml
(por ejemplo "55432:5432") y ajusta el puerto en DATABASE_URL.
Para que el chatbot responda hay que cargar un proveedor (OpenAI u OpenRouter), un modelo y una API key en la
pantalla «Tu chatbot». Eso se guarda cifrado en la base, no en .env.local. Sin eso la plataforma funciona, pero el
chat no contesta.
Variable opcional: AGENDA_TIME_ZONE es la zona horaria de las citas (006). Por defecto, America/Bogota.
Sin estas variables todo funciona, pero el chatbot dice que no puede agendar citas. Para habilitarlo:
http://localhost:3000/api/google/callback.env.local (GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REDIRECT_URI).Después, en «Tu chatbot» → «Agendamiento de citas», conecta la cuenta y define el horario de atención.
Los permisos que se piden son los mínimos: crear eventos (calendar.events) y consultar disponibilidad
(calendar.freebusy). El permiso se guarda cifrado, igual que la API key.
Variables de entorno en Vercel, solo en Production (las cadenas salen del botón «Connect» de Supabase):
DATABASE_URL — Transaction pooler (puerto 6543): la usa la app.DATABASE_MIGRATION_URL — Session pooler (puerto 5432): la usan las migraciones, que Supabase recomienda correr por la conexión directa o por este pooler, no por el de transacciones.ENCRYPTION_KEY — una nueva, distinta de la local. Si se pierde, hay que volver a cargar la API key y reconectar Google.npm run build aplica las migraciones después de compilar, solo cuando VERCEL_ENV=production. Si fallan, el despliegue
no sale. Mientras corre el build, la versión anterior sigue atendiendo con el esquema nuevo: un cambio que borre o
renombre columnas se hace en dos despliegues.
npm test — Vitest (unitarios e integración; requiere la base levantada)npm run lint, npm run typecheck, npm run buildnpm run db:generate — genera una migración a partir de lib/schema.tsPara comprobar que quedó bien montado, con la base levantada:
npm test && npm run lint && npm run typecheck && npm run build