Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
CidadeIA — Sistema Operacional Inteligente para Gestão Municipal Projeto real (Next.js + banco de dados + autenticação), separado do site de vendas. Este é o produto de verdade — login, cadastro de prefeitura, dashboard e IA Central conectada.查看完整 README ↗
Projeto real (Next.js + banco de dados + autenticação), separado do site de vendas. Este é o produto de verdade — login, cadastro de prefeitura, dashboard e IA Central conectada.
jose), senha
com hash bcrypt. Sem dependência de serviço de terceiro.@anthropic-ai/sdk, respondendo com base SOMENTE nos dados
reais cadastrados (nunca inventa números).npm install
cp .env.example .env
Edite o .env:
AUTH_SECRET: gere com node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"ANTHROPIC_API_KEY: opcional para rodar o site, mas necessária pra IA
Central responder de verdade. Gere em https://console.anthropic.com/settings/keys
Sem essa chave, a IA Central mostra uma mensagem explicando que precisa
ser configurada — o resto do site funciona normalmente.Depois:
npx drizzle-kit migrate # cria as tabelas no banco local.db
npm run dev # http://localhost:3000
Acesse http://localhost:3000 → você será redirecionado para /login →
clique em Cadastrar Prefeitura para criar sua primeira conta.
src/
├── app/ # Next.js App Router
│ ├── api/ # API routes (server-side)
│ ├── dashboard/ # Dashboard autenticado
│ ├── login/ # Página de login
│ ├── cadastro/ # Onboarding de prefeituras
│ ├── globals.css # Estilos globais com Tailwind v4
│ └── layout.tsx # Layout raiz
├── components/ # Componentes React reutilizáveis
├── db/ # Schema Drizzle ORM
├── lib/ # Funções e utilitários
│ ├── sessao.ts # Gerenciamento de sessão JWT
│ ├── ia.ts # Integração com IA Anthropic
│ ├── planos.ts # Lógica de planos e add-ons
│ └── ... # Outros utilitários
└── proxy.ts # Middleware de proxy/autenticação
jose, senhas com hash bcryptBanco de dados: crie um banco gratuito em https://turso.tech (libSQL
hospedado) e configure DATABASE_URL e DATABASE_AUTH_TOKEN no seu
provedor de hospedagem.
Variáveis de ambiente em produção:
AUTH_SECRET segura: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"ANTHROPIC_API_KEY se usar IA CentralNEXT_PUBLIC_APP_URL com seu domínio em produçãoDeploy no Vercel:
npm i -g vercel
vercel
Adicione as variáveis no painel do Vercel antes de fazer deploy.
Hospedagem: Vercel é o caminho mais simples para Next.js
(vercel.com → importar o repositório → configurar as variáveis de
ambiente do .env no painel do projeto).
Rode npx drizzle-kit migrate apontando pro banco de produção antes do
primeiro deploy (ou configure isso como parte do seu processo de build).
/dashboard/* (redireciona pra login se não autenticado)proxy.ts) e também na IA Central (o
contexto que a IA recebe já vem filtrado pelo cargo de quem pergunta).src/
app/
login/ → tela de login + esqueci senha
cadastro/ → wizard de 4 etapas
dashboard/
page.tsx → Visão Geral
ia/ → IA Central (chat real)
alertas/ → CRUD de alertas
configuracoes/ → dados da prefeitura
secretarias/ → Saúde, Educação, Obras, Licitações (Fase 3)
db/
schema.ts → todas as tabelas (Drizzle)
lib/
sessao.ts → JWT em cookie httpOnly
senha.ts → hash/verificação bcrypt
documento.ts → validação de CPF/CNPJ
ia.ts → lógica da IA Central (contexto real + chamada à Anthropic)
dados-prefeitura.ts → funções de leitura do banco
proxy.ts → protege rotas /dashboard/* (antigo "middleware")
/dashboard/historico, só prefeito/admin):
gráficos de tendência real — cada atualização de indicador (financeiro,
saúde, educação) já vira uma linha nova no banco, então o histórico se
acumula sozinho conforme o uso. Os gráficos só aparecem quando há pelo
menos 2 registros reais; com menos que isso, mostra uma mensagem
explicando a limitação em vez de inventar uma linha de tendência.
A partir de 3 registros reais, cada gráfico soma uma linha
tracejada de projeção estatística simples (src/lib/projecao.ts):
regressão linear sobre o histórico real, com nível de confiança
(baixa/média/alta) calculado a partir da quantidade de pontos e do R².
Essa mesma projeção (pra saldo financeiro) também entra no contexto
da IA Central quando o plano Gestão está ativo — o system prompt
instrui explicitamente a nunca apresentá-la como algo mais confiável
do que uma regressão simples. Também tem um simulador financeiro
(calculadora de "e se a receita/despesa variar X%", aritmética direta
e transparente, identificada como calculadora).
O que isso NÃO é: um gêmeo digital de verdade, nem previsão de
risco de saúde, evasão escolar, atraso de obras etc. — isso exigiria
um modelo estatístico multivariável treinado com anos de dados reais
e validado contra o que de fato aconteceu, que este sistema ainda não
tem tempo de acumular. A regressão linear simples é uma direção
aproximada de curtíssimo prazo (~30 dias), não uma simulação.@react-pdf/renderer
(gera PDF de verdade no servidor, sem precisar de navegador headless —
mais leve e confiável em produção/serverless que Puppeteer). Dois
tipos: Relatório Executivo (financeiro + alertas + resumo de todas
as secretarias, só prefeito/admin) e Relatório por Secretaria
(indicadores + lista de itens daquela área — prefeito/admin baixa
qualquer um, secretário só o da própria secretaria). Botão "Baixar
relatório (PDF)" na Visão Geral e em cada página de secretaria. Testei
extraindo o texto de dentro do PDF gerado pra confirmar que os valores
reais (receita, alerta cadastrado, unidade de saúde) aparecem
corretos — nada de conteúdo de exemplo. Os relatórios específicos por
destinatário mencionados na visão original (Vice-Prefeito, Câmara
Municipal, Tribunal de Contas, Audiências Públicas) ainda não têm
formatação própria — hoje usam o mesmo Relatório Executivo/por
secretaria; adaptar o layout para cada público é um próximo passo
natural, não uma limitação de dados.