Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Aplicação SaaS multiempresa em Next.js, TypeScript e Supabase. Esta primeira entrega implementa uma base de ambiente de cliente para autenticação, isolamento de dados, registro e acompanhamento de ideias e triagem ESG indicativa.
Crie um projeto Supabase e copie .env.example para .env.local.
Preencha NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY (ou publishable key compatível) e NEXT_PUBLIC_SITE_URL. Não coloque a chave service_role no frontend nem em variáveis NEXT_PUBLIC_*.
No SQL Editor do Supabase, execute a migração inicial.
Em Authentication, crie ou convide o primeiro usuário administrador da empresa. O cadastro público não está habilitado.
Associe o usuário a uma organização usando o SQL Editor com um UUID real do usuário:
insert into public.organizations (name, status)
values ('Organização de demonstração', 'active')
returning id;
Use o id retornado e o id do usuário exibido em Authentication > Users:
insert into public.memberships (organization_id, user_id, role)
values ('UUID_DA_ORGANIZACAO', 'UUID_DO_USUARIO', 'company_admin');
Esses comandos são apenas para provisionamento inicial feito por uma pessoa autorizada no painel Supabase; não os exponha em páginas públicas.
Configure em Authentication > URL Configuration a URL do site e o redirect http://localhost:3000/auth/callback (e a URL de produção correspondente).
Execute também a migração do administrador da plataforma no SQL Editor.
Para promover um usuário já criado a administrador da plataforma (perfil separado de qualquer empresa cliente), rode no SQL Editor:
update auth.users
set raw_app_meta_data = raw_app_meta_data || jsonb_build_object('platform_admin', true)
where id = 'UUID_DO_USUARIO';
Depois, peça para essa pessoa encerrar a sessão e entrar novamente: o token de acesso só reflete a permissão após um novo login. Esse usuário acessa /admin e não precisa de membership em nenhuma organização.
Execute a migração de critérios ESG e base de conhecimento. Ela cria uma versão ativa de critérios equivalente à triagem original, então nada muda até o administrador da plataforma publicar uma nova versão.
(Opcional, habilita a IA) Defina SUPABASE_SERVICE_ROLE_KEY (Supabase > Project Settings > API Keys) e um provedor de IA em .env.local (veja os exemplos em .env.example):
ollama pull qwen2.5:7b) e use AI_PROVIDER=ollama e AI_MODEL=qwen2.5:7b. Precisa de um computador com memória suficiente e não funciona em hospedagens como a Vercel (só onde o Ollama estiver acessível).AI_PROVIDER=gemini ou groq, AI_MODEL e AI_API_KEY. Verifique os termos: camadas gratuitas podem usar o conteúdo enviado.ANTHROPIC_API_KEY e, opcionalmente, ANTHROPIC_MODEL.AI_PROVIDER=openai-compatible, AI_BASE_URL, AI_MODEL, AI_API_KEY.As chaves são lidas apenas no servidor; nunca use o prefixo NEXT_PUBLIC_ nelas. Sem IA configurada, o fluxo de ideias funciona sem copiloto e sem avaliação por IA, e a interface informa isso.
Execute a migração de decisões gerenciais.
Execute a migração de acesso por link e, em Authentication > Sign In / Providers, habilite Allow anonymous sign-ins (necessário para colaboradores entrarem sem cadastro). Recomenda-se habilitar também CAPTCHA (Authentication > Attack Protection) para reduzir abuso.
Execute a migração de uso da plataforma.
Execute a migração que restringe ideias aos colaboradores por link.
Instale dependências e inicie:
npm install
npm run dev
Abra http://localhost:3000.
auth.users.raw_app_meta_data.platform_admin = true): acessa /admin. Gerencia empresas clientes (cadastro, situação da conta, módulos habilitados), vincula usuários já existentes a empresas e consulta indicadores agregados (contagens) de todas as empresas. Vê uma lista resumida das ideias enviadas (título, área, situação, data e pilares), pela função platform_list_ideas. Não tem acesso ao texto das ideias, à análise, às conversas, aos autores nem aos projetos de nenhuma empresa — isso é reforçado por Row Level Security no banco, não apenas pela interface.memberships.role = 'company_admin'): acesso completo aos dados da própria organização (/dashboard, /ideas, /projects), avaliando e decidindo sobre as ideias enviadas pelos colaboradores e conduzindo os projetos. A gestão não cadastra ideias: ideias só são criadas por colaboradores que entraram pelo link de acesso (regra garantida no banco por is_link_collaborator).memberships.role = 'member'): entra pelo link de acesso da empresa, sem cadastro nem senha (sessão anônima do Supabase Auth vinculada a uma única empresa). Registra ideias, conversa com o copiloto e acompanha apenas as próprias ideias (situação, próxima ação e mensagens da gestão). Não vê ideias de outros colaboradores, justificativas internas nem avaliações humanas da gestão.Cada empresa pode ter os módulos "Ideias" e "Projetos" habilitados ou desabilitados individualmente pelo administrador da plataforma; a aplicação bloqueia o acesso no backend (não apenas oculta o menu) quando um módulo está desligado.
app_metadata/membership no backend (não apenas na interface)./admin): cadastro e edição de empresas clientes, situação da conta, módulos habilitados por empresa, vínculo de usuários já cadastrados a uma empresa e trocas de perfil/situação, indicadores agregados (contagens) por situação de empresas, ideias e projetos, e trilha de auditoria das ações administrativas./dashboard e /admin), calculados apenas com dados registrados:
platform_usage_overview)./ideas (gestão): Ambiental, Social, Governança e Sem classificação, com contagem e ordenação pelo potencial. Uma ideia pode estar em mais de uma pasta. A lista carrega até 1.000 ideias.A migração inicial cria organizations, memberships, ideas, idea_activity, esg_projects e esg_indicators. A migração 20261024_idea_decisions.sql adiciona a situação "priorizada", responsável, prazo e prioridade às ideias; cria idea_status_transitions (fluxo configurável), idea_decisions (histórico interno, visível só à gestão) e idea_feedback (mensagens entre gestão e autor). Mudanças de situação, responsável, prazo e prioridade só ocorrem pelas funções record_idea_decision e respond_to_info_request: um trigger bloqueia updates diretos, inclusive de administradores da empresa, para que nenhuma decisão fique sem justificativa e histórico. A mesma migração restringe a leitura de ideias ao autor e à gestão da empresa. A migração 20261023_idea_copilot.sql adiciona a ideas o texto original, a proposta estruturada e a data de envio; torna rascunhos privados do autor; cria idea_copilot_messages (conversa) e idea_evaluations (avaliações da IA). Usuários autenticados não têm política de escrita para respostas do copiloto nem para avaliações: elas são gravadas apenas pelo servidor com a chave service role, depois de verificar a permissão do usuário com a sessão dele, o que impede forjar uma avaliação por chamada direta à API. A gestão da empresa lê a conversa somente após o envio (o colaborador é avisado antes de confirmar). O conteúdo enviado à IA inclui título, área e texto da ideia, sem e-mail ou identificação do autor; o texto do colaborador é tratado como dado não confiável no prompt. Logs de falha registram apenas o identificador da ideia e o código do erro. A migração 20261022_esg_criteria.sql cria esg_criteria_versions (com índice que garante uma única versão ativa e a função platform_activate_criteria_version, que arquiva a anterior de forma atômica) e esg_knowledge_items; ambas podem ser lidas por usuários autenticados (a triagem roda com a sessão de quem envia a ideia) e só são alteradas pelo administrador da plataforma, com registro na trilha de auditoria. A migração 20261021_platform_admin.sql adiciona display_name e enabled_modules a organizations, a tabela platform_audit_log e funções security definer (platform_dashboard_stats, platform_list_organizations, platform_find_user_by_email, platform_list_organization_members) que retornam apenas contagens e metadados administrativos — nunca o conteúdo de ideias, conversas ou projetos de uma empresa cliente. Ideias, projetos, indicadores e trilha de auditoria carregam ; as políticas RLS validam a membership ativa no servidor PostgreSQL. As operações da aplicação usam a chave pública do Supabase e sessão do usuário, sem service role.
O modelo inicial associa cada conta de empresa a uma organização. Administradores de empresa podem rever todas as ideias do próprio ambiente; colaboradores podem enviar ideias, e só o autor pode editar uma ideia ainda em rascunho. Ideias submetidas são preservadas e não têm operação de exclusão na interface. Alterações de situação são limitadas ao administrador da empresa e registradas sem copiar descrição ou conteúdo confidencial para a auditoria. O administrador da plataforma não possui membership em nenhuma organização e não tem select liberado nas tabelas ideas, esg_projects ou esg_indicators — apenas nas tabelas administrativas (organizations, memberships) e nas funções agregadas.
SUPABASE_SERVICE_ROLE_KEY em uma rotina de servidor) nem configuração de provedores de IA. Os critérios são por palavra-chave (sem pesos por termo nem critérios específicos por empresa), e a base de conhecimento ainda não é exibida às empresas clientes nem usada na triagem. A edição de um registro de conhecimento incrementa o número de versão, mas o conteúdo anterior não é guardado.ideas.analysis) do próprio rascunho no momento do envio; a avaliação por IA não tem esse problema. A triagem por termos é exibida como sinal auxiliar.idea_status_transitions); ainda não há tela para o administrador da plataforma configurá-lo. Não há notificações por e-mail de decisões ou pedidos de complementação./admin. Antes de produção, habilite MFA/políticas de senha no Supabase, restrinja redirects, configure domínio HTTPS, monitoramento e revisão de segurança.Com .env.local configurado, execute npm test, npm run lint, npx tsc --noEmit e npm run build. O teste usa node --experimental-strip-types (Node.js 22.6+). Para publicar na Vercel ou plataforma Node compatível, configure as mesmas variáveis no ambiente de produção, aplique a migração ao projeto Supabase de produção e cadastre a URL de callback correspondente em Auth. Nunca exponha credenciais de administração do Supabase.
src/lib/esg-nlp.ts, esg-lexicon.ts, esg-classifier.ts, esg-assessment.ts, esg-questions.ts): sem IA externa. Classifica por regras versionadas e similaridade TF-IDF, trata acentos, plural, negação e contexto, cita evidências do texto e se abstém sem base. Oito critérios recebem nota só com base explícita; sem base, ficam pendentes e nunca viram zero, e a pontuação final só existe com todos avaliados. Os escores são heurísticos: pesos e limiares ainda não foram calibrados com especialistas, e o resultado fica em ideas.analysis, congelado no envio. Consulta e simulador em /admin/esg-engine; edição do dicionário ainda não existe.src/lib/esg-project-proposal.ts, só para a gestão): a partir da ideia e da análise, monta objetivo, situação atual, solução, recursos, indicadores possíveis e próximos passos, sem inventar fatos, custos ou retorno financeiro. Indica o potencial de adesão (estimativa pelo que o texto define) e recomenda "Aceitar", "Aceitar com condições" ou "Não aceitar por enquanto", com os motivos. Não muda a situação da ideia: a decisão continua humana, com justificativa. Temas sensíveis sempre pedem especialista. Ao criar o projeto de uma ideia aprovada, o formulário já vem preenchido.ESG_EXTERNAL_AI=true.src/lib/esg-engine.ts): a avaliação por IA classifica pilar principal, secundários e 12 subcategorias e dá notas de 0 a 5 em oito critérios. O sistema calcula a pontuação de 0 a 100, a faixa e os motivos de revisão humana e congela isso na avaliação, com a versão do prompt e os registros de conhecimento usados. Não aprova ideias nem substitui a triagem v1, que continua ativa. Pesos e taxonomia ainda ficam no código; não há editor nem perfil por empresa.20261101_seed_knowledge_base.sql importa 40 registros iniciais, sem duplicar nem sobrescrever (reversão em supabase/scripts/rollback_knowledge_seed.sql). A IA recebe as regras de classificação e os registros relacionados à ideia, não a base inteira.ideas.author_name, ideas.author_email). Aparecem para a gestão, que pode usar o e-mail para contato; a plataforma não envia e-mails automáticos. Nenhum dos dois é enviado à IA, e nenhum é verificado./acesso/[token]): a gestão da empresa (/equipe) ou o administrador da plataforma (detalhe da empresa) gera links com identificação e validade; cada link pertence a uma única empresa, concede apenas o perfil de colaborador e pode ser revogado. O vínculo é feito no banco (join_organization_with_link): uma sessão nunca fica em duas empresas, e empresas suspensas ou inativas não aceitam entradas. A gestão vê quem entrou por link e pode bloquear colaboradores. Limite de 20 novas ideias por pessoa em 24 horas./ideas/new): a ideia nasce como rascunho visível só para o autor; o texto original é preservado e não pode ser alterado (garantido por trigger no banco)./ideas/[id]/copilot; provedor configurável: Ollama local, Gemini, Groq, outra API compatível com OpenAI ou Anthropic Claude): faz perguntas progressivas, ajuda a identificar beneficiários, relações E/S/G, indicadores e riscos, usando a versão ativa dos critérios ESG e os registros ativos da base de conhecimento. Limite de 30 mensagens do colaborador por ideia. A conversa pode ser retomada depois./ideas/[id]/review): o copiloto organiza a conversa em campos (problema, solução, contexto, beneficiários, dimensões ESG, benefícios, indicadores, riscos, próximos passos); campos sem informação ficam como "não informado". O colaborador edita, salva o rascunho e confirma o envio explicitamente./ideas/[id], painel "Registrar decisão"): aceitar, solicitar complementação, encaminhar para avaliação técnica, priorizar, aprovar, não priorizar, iniciar e concluir implementação, reabrir e arquivar, conforme as transições da tabela idea_status_transitions. Toda decisão exige justificativa interna, pode definir responsável, prazo e prioridade e registrar uma avaliação humana (concordância com a IA, potencial e dimensões) sem apagar a avaliação da IA. O histórico identifica quem decidiu e quando. Ideias aprovadas têm atalho para criar projeto./admin/esg-criteria: termos-chave, explicação e indicadores sugeridos por dimensão (E, S, G) e limites de potencial. Versões nascem como rascunho; apenas uma fica ativa por vez, e versões ativas ou arquivadas são imutáveis (para ajustá-las, duplique). Cada ideia registra na análise qual versão de critérios a avaliou, exibida no detalhe da ideia. Se não houver versão ativa válida, a triagem usa os critérios padrão embutidos em src/lib/esg-analysis.ts./admin/knowledge): conceitos, critérios de avaliação, regras de classificação, referências, perguntas orientadoras e recomendações, com categoria, fonte, situação e número de versão incrementado a cada edição. Nesta entrega o conteúdo é consultivo e não altera a triagem automática.organization_id