Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
CRM, projetos e gestao financeira para uma empresa de servicos com drones. • React + TypeScript + Vite • Tailwind CSS • React Hook Form + Zod • Recharts • Firebase Auth + Cloud Firestore preparados como backend principal opcional • Firebase Hosting e GitHub Pages preparados para hospedagem estática • Supabase preparado via migration SQL • Persistência local com CRUD granular por registro no Firebase ou snapshot no Supabase • Tema escuro por padrao, com opcao claro/escuro Depois acesse a URL mostrada pelo Vite.查看完整 README ↗
CRM, projetos e gestao financeira para uma empresa de servicos com drones.
npm install
npm run dev
Depois acesse a URL mostrada pelo Vite.
A conta principal tem acesso total, nao pode ser desativada e pode criar contas internas com permissoes diferentes. Por seguranca, a tela de login inicia vazia e nenhuma senha e publicada na documentacao. O banco inicia vazio para voce fazer os primeiros cadastros. As contas locais e a sessao ficam salvas no navegador para o MVP. Para limpar cadastros locais e voltar ao banco vazio, use o botao Limpar banco no menu lateral.
npm run dev # ambiente local
npm run build # valida TypeScript e gera build de producao
npm run preview # pre-visualiza o build
npm run lint # roda oxlint
npm run deploy:firebase # build e publicação no Firebase
O Firebase é opcional. Sem credenciais, o FlyFlow continua funcionando localmente. Quando as variáveis do Firebase estão preenchidas, o sistema usa Firebase Authentication e Cloud Firestore; o Supabase passa a ser apenas o segundo fallback.
Authentication > Sign-in method, habilite E-mail/senha.Authentication > Users, crie a conta principal [email protected] com uma senha segura.Firestore Database, crie o banco em modo de produção, preferencialmente em uma região próxima dos usuários.Project settings > Your apps, registre um aplicativo Web..env.example para .env.local e preencha os valores entregues pelo Firebase:VITE_FIREBASE_API_KEY=
VITE_FIREBASE_AUTH_DOMAIN=
VITE_FIREBASE_PROJECT_ID=
VITE_FIREBASE_STORAGE_BUCKET=
VITE_FIREBASE_MESSAGING_SENDER_ID=
VITE_FIREBASE_APP_ID=
VITE_FIREBASE_MEASUREMENT_ID=
As chaves VITE_* fazem parte da configuração pública do aplicativo Web. A proteção real está no login e nas regras do Firestore, não em esconder esses valores.
Autentique o Firebase CLI:
npm install -g [email protected]
firebase login
O repositório já está associado ao projeto flyflow-a97ab. Para publicar:
npm run deploy:firebase
O arquivo firebase.json configura E-mail/Senha no Authentication, o Hosting como SPA, cache de arquivos versionados e a publicação das regras e índices do Firestore. As regras em firestore.rules isolam cada espaço de trabalho e só permitem acesso a membros autenticados e ativos.
Também é possível manter o frontend gratuito no GitHub Pages e usar apenas Firebase Auth + Firestore como backend. A configuração pública do aplicativo Web está em .env.production e o workflow atual já a inclui no build.
O domínio emersongmsantos03.github.io já está autorizado no Firebase Authentication.
Ambientes publicados:
https://flyflow-a97ab.web.apphttps://emersongmsantos03.github.io/FlyFlow/workspace.Comprovantes enviados diretamente do computador usam data URL e permanecem apenas no navegador. Links externos de comprovantes são sincronizados. O Cloud Storage for Firebase exige o plano Blaze; por isso o projeto não tenta colocar arquivos pesados dentro do Firestore, que possui limite de 1 MiB por documento.
O app roda em modo local por padrao. Para preparar o banco:
.env.example para .env.local.VITE_SUPABASE_URL=
VITE_SUPABASE_ANON_KEY=
supabase db push
supabase secrets set GOOGLE_CLIENT_ID=... GOOGLE_CLIENT_SECRET=... GOOGLE_REFRESH_TOKEN=... GOOGLE_CALENDAR_ID=primary
supabase functions deploy google-calendar
As migrations em supabase/migrations/ criam:
permissions e is_primary_owner;owner_user_id;manageUsers gerenciarem contas;updated_at;Para envio real de recuperacao de senha por e-mail, conecte o Supabase Auth. No modo local, a solicitacao de reset fica registrada no navegador.
Contatos.Gerar proposta; se houver propostas anteriores, escolha nova, duplicacao, rascunho ou revisao versionada.Pagamento recebido e conferido.Serviço confirmado: escolha criar um único projeto, deixar para depois ou cancelar a movimentação. Nenhum projeto é criado sem confirmação.Agendar captacao. O evento interno e atualizado sem duplicidade e o Google Calendar e aberto por padrao.As proximas acoes e alertas sao recalculados de forma idempotente no Dashboard. Executar a automacao novamente nao duplica tarefas, pagamentos, projetos ou eventos de captacao.
src/
App.tsx # telas e fluxo do MVP
components/ui.tsx # componentes reutilizaveis
components/crm/ # CRM, quadro, lista, tarefas e painel lateral
data/demoData.ts # dados ficticios iniciais
lib/financial.ts # calculos financeiros e series de graficos
lib/format.ts # moeda, datas, telefone, WhatsApp e mapas
lib/permissions.ts # perfis e permissoes
lib/operations.ts # regras operacionais, automacoes e idempotencia
lib/validation.ts # schemas Zod dos formularios
services/auth.ts # contas locais, senha hash e sessao
services/storage.ts # persistencia local dos dados
services/firebase.ts # Firebase Auth e inicializacao do Firestore
services/firebaseData.ts # workspaces, CRUD granular e migracao do formato legado
services/cloudStorage.ts # sincronizacao do estado com Supabase
services/supabase.ts # cliente Supabase opcional
supabase/migrations/ # schema inicial do banco
Contatos, cadastre um contato, registre uma conversa e clique em Gerar proposta.Não abrir agora e depois Criar projeto; confirme que uma segunda tentativa abre o projeto existente sem duplicar.npm run build e npm run lint antes de publicar.VITE_FIREBASE_API_KEY=
VITE_FIREBASE_AUTH_DOMAIN=
VITE_FIREBASE_PROJECT_ID=
VITE_FIREBASE_STORAGE_BUCKET=
VITE_FIREBASE_MESSAGING_SENDER_ID=
VITE_FIREBASE_APP_ID=
VITE_FIREBASE_MEASUREMENT_ID=
VITE_SUPABASE_URL=
VITE_SUPABASE_ANON_KEY=
VITE_GOOGLE_MAPS_API_KEY=
VITE_LEAD_HUNTER_API_URL=
A chave da OpenAI fica somente na Firebase Function. Nunca use VITE_OPENAI_API_KEY.
cd functions
npm install
cd ..
firebase functions:secrets:set OPENAI_API_KEY
Informe a chave nova quando solicitado. Depois publique a função e configure no frontend:
firebase deploy --only functions:leadApi
VITE_LEAD_HUNTER_API_URL=https://southamerica-east1-flyflow-a97ab.cloudfunctions.net/leadApi
O OpenStreetMap continua sendo a fonte inicial gratuita. A OpenAI pesquisa contatos públicos para até dez resultados por lote e mantém campos vazios quando não encontra evidência confiável.
Para usar busca de endereços e mapas, habilite na mesma chave do Google Cloud:
Em produção, restrinja a chave aos domínios do sistema e somente a essas APIs.
Sem Firebase ou Supabase o sistema continua funcionando localmente no navegador. Se ambos estiverem configurados, Firebase tem prioridade. Com Firebase, o login usa Firebase Auth e o estado é sincronizado no workspace protegido pelas regras do Firestore. Com apenas Supabase, o comportamento anterior de Auth + app_state_snapshots protegido por RLS é mantido.
google-calendar e os segredos OAuth configurados, eventos sao criados e atualizados pelo mesmo external_event_id. Sem essa configuracao, o sistema abre o evento preenchido para confirmacao do usuario.app_state_snapshots; seu schema relacional completo permanece preparado nas migrations para uma futura adoção integral desse backend.20260714150000_crm_finance_integrity.sql precisa ser aplicada no ambiente Supabase antes de usar as novas colunas relacionais de soft delete, auditoria, comprovantes e oportunidades.