Synaplan
기업을 위한 오픈소스 AI 플랫폼
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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