Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
CRM básico para gestão de contatos, negócios (pipeline) e tarefas. Front-end estático (sem servidor próprio), mas com dados de verdade num banco Postgres gerenciado pelo Supabase: contatos, negócios, tarefas e estágios do funil ficam disponíveis em qualquer navegador/dispositivo que fizer login, não só no aparelho onde foram criados. Ver seção Banco de dados (Supabase) abaixo. O botão Exportar continua existindo como backup manual em JSON (útil antes de mudanças arriscadas ou para migrar de projeto Supabase); Importar restaura um backup, substituindo tudo que está no banco.檢視完整 README ↗
CRM básico para gestão de contatos, negócios (pipeline) e tarefas.
Front-end estático (sem servidor próprio), mas com dados de verdade num banco Postgres gerenciado pelo Supabase: contatos, negócios, tarefas e estágios do funil ficam disponíveis em qualquer navegador/dispositivo que fizer login, não só no aparelho onde foram criados. Ver seção Banco de dados (Supabase) abaixo.
O botão Exportar continua existindo como backup manual em JSON (útil antes de mudanças arriscadas ou para migrar de projeto Supabase); Importar restaura um backup, substituindo tudo que está no banco.
Tela de login com dois usuários fixos, definidos em app.js:
| Usuário | Senha |
|---|---|
matheus | m4t123 |
paulo | 123456 |
A sessão fica salva no localStorage até clicar em Sair. As senhas são
comparadas por hash (SHA-256), então não aparecem em texto puro no código —
mas isso não é segurança de verdade: é só uma trava de acesso para não
deixar o app aberto pra qualquer um. Como é 100% front-end (sem servidor),
qualquer pessoa com acesso ao app.js pode ver os hashes ou pular a
checagem de login direto pelo devtools do navegador. Não use essas
credenciais nem essa tela para proteger dados sensíveis de verdade.
O app carrega a biblioteca @supabase/supabase-js via CDN e se conecta
usando a URL/chave definidas em config.js (a "publishable key" é pública
por design — protegida pelas regras de Row Level Security do banco, não é
segredo). Antes de usar o app pela primeira vez:
supabase/schema.sql
— cria as tabelas contacts, deals, tasks, estagios, os 5 estágios
padrão e as políticas de RLS.config.js.Sem isso, a tela de login mostra "Carregando dados..." e depois um alerta de erro de conexão — é o app avisando que ainda não achou o banco.
Não há build. Sirva a pasta com qualquer servidor estático (não abra
index.html direto com duplo-clique: o fetch para o Supabase e o script
do CDN se comportam melhor servidos por http/https do que por file://):
npx serve .
# ou
python3 -m http.server 8000
Tanto em Contatos quanto em Negócios há um botão Baixar modelo CSV (gera o arquivo com o cabeçalho e uma linha de exemplo) e um botão Importar CSV para subir a planilha preenchida.
nome, empresa, email, telefone, notas. Só nome
é obrigatório. Um contato com o mesmo email de um já cadastrado é
atualizado em vez de duplicado; sem e-mail, sempre entra como novo.titulo, valor, estagio, contato_nome, contato_email. Só titulo é obrigatório. estagio aceita o nome
cadastrado na aba Funil (sem diferenciar acento/maiúsculas) ou o id
interno; se não reconhecer, cai no primeiro estágio da lista. valor
aceita tanto 1500.00 quanto o formato BR 1.500,00. O contato é
resolvido primeiro por contato_email, depois por contato_nome
(comparação exata); se nenhum bater, o negócio é importado sem contato
vinculado., ou ; como separador (detectado automaticamente pelo
cabeçalho) e campos entre aspas, então funciona tanto com CSV exportado
por planilhas em PT-BR quanto no formato "internacional" do modelo.index.html — tela de login, estrutura das telas do app e do modal de
formulário; carrega @supabase/supabase-js via CDN antes de config.js
e app.js.config.js — URL e publishable key do projeto Supabase.supabase/schema.sql — tabelas, seed dos estágios padrão e políticas RLS.style.css — estilos.app.js — login, acesso ao Supabase (carregarDados, uma função
criar/atualizar/excluir por entidade), renderização, regras de cada tela
(CRUD de contatos/negócios/tarefas/estágios, filtros, drag-and-drop do
Kanban) e importação/exportação (backup em JSON, CSV de
contatos/negócios).config.js, no
navegador de qualquer um) acessa a API do banco direto, sem passar pela
tela de login. A proteção de verdade dos dados é a política de RLS no
banco, não essa tela.ganho nem perdido. Se você excluir/renomear esses dois estágios padrão
na aba Funil e criar outros com o mesmo sentido, o Dashboard não vai saber
que eles são "estágios finais" — só afeta o card de resumo, não os dados.