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