Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Orçamentos da AA Montagens — app local-first, sem servidor. Feito a partir da planilha da empresa.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
App de orçamentos da AA MONTAGENS (Birigui/SP), feito a partir da planilha que a empresa usava. Funciona no navegador, no computador ou no celular. Os dados ficam na nuvem da AA Montagens (Firebase — Firestore, na conta Google da empresa) e aparecem em qualquer aparelho em que você entrar com o e-mail e a senha da oficina. Precisa de internet.README 전문 보기 ↗
App de orçamentos da AA MONTAGENS (Birigui/SP), feito a partir da planilha que a empresa usava.
Funciona no navegador, no computador ou no celular. Os dados ficam na nuvem da AA Montagens (Firebase — Firestore, na conta Google da empresa) e aparecem em qualquer aparelho em que você entrar com o e-mail e a senha da oficina. Precisa de internet.
No ar: https://alexandreandradesilva.github.io/orcamentos-aa-montagens/
Publica sozinho a cada alteração na main (GitHub Actions → GitHub Pages). O endereço é público, mas sem login só existe a tela de entrar: quem pode ler e gravar é decidido no servidor, por firestore.rules. Como o projeto na nuvem foi montado, e como dar acesso a mais alguém: docs/nuvem.md.
Precisa do Node.js 20 ou mais novo.
npm install # uma vez
npm run fontes:copiar # uma vez: copia as fontes para public/fontes
npm run dev # abre em http://localhost:5173
npm run build # gera a pasta dist/
npm run preview # abre a versão final para conferir
A pasta dist/ é o app inteiro. Pode ser copiada para um pendrive, para uma pasta na rede ou para qualquer hospedagem de arquivos estáticos. Não precisa de banco de dados nem de servidor.
Para publicar na internet e restringir o acesso, veja docs/publicar.md. Resumo: nenhum dado de cliente vai para o servidor — só o código —, e a proteção certa é no servidor (Cloudflare Access, grátis), nunca uma tela de login dentro do app, que num app só de navegador é teatro.
Funciona no navegador do celular, e dá para adicionar à tela de início (menu do Chrome ou Safari → "Adicionar à tela de início"): abre em tela cheia, com o ícone da AA Montagens, parecendo app.
Abaixo de 720px o layout muda de forma: cada item do orçamento vira um cartão (descrição inteira em cima; quantidade, unidade e valor embaixo), as listas viram cartões e a navegação vai para o pé da tela, onde o polegar alcança. Tudo o que é tocável tem no mínimo 44px.
Para ver o app já com dados sem digitar nada: na lista vazia, Ver com dados de exemplo — ou abra …/orcamentos?exemplo. Só entra com o banco vazio; nunca sobrescreve orçamento de verdade.
No celular e no computador você vê os mesmos orçamentos: é a mesma conta, o mesmo banco. Se cair a internet, o app avisa numa faixa no topo e não finge que salvou — quando voltar, salve de novo.
Orçamentos → Novo orçamento. Escolha um cliente já cadastrado ou preencha um novo. O número é reservado na hora, no formato 001/2026, e reinicia a cada ano.
Só o nome é obrigatório; o resto (CNPJ/CPF, endereço, cidade, CEP, telefone, pessoa de contato) sai no PDF e pode ser completado depois em Clientes → Editar.
Digitando um CNPJ completo, o botão Buscar puxa razão social, endereço, cidade, CEP e telefone da Receita Federal (via BrasilAPI). Preenche só o que está em branco — não atropela o que você já digitou.
Há o mesmo botão no CEP, que traz rua, bairro e cidade.
CPF não tem busca, e não é limitação do app: não existe cadastro público de pessoa física por CPF no Brasil, e não deveria existir — é dado pessoal protegido pela LGPD. Cliente pessoa física se preenche à mão; o app valida os dígitos para pegar erro de digitação.
Sem internet, as buscas avisam e você preenche à mão. Nada mais no app depende da internet.
Quem vem do Excel não precisa reaprender nada:
| Tecla | O que faz |
|---|---|
Tab / Shift+Tab | Próximo campo / anterior |
Enter | Confirma e cria uma linha abaixo |
Ctrl+D | Duplica a linha |
↑ ↓ | Sobe e desce mantendo a coluna |
Alt+↑ / Alt+↓ | Move a linha de lugar |
Ctrl+Enter | Cria uma seção |
Ctrl+V | Cola direto da planilha — várias linhas, colunas separadas por tabulação |
Esc | Cancela a edição da célula |
Valores podem ser digitados como você quiser: 25.600,00, 25600,5 ou 25600.50.
Ao digitar a descrição, aparecem os serviços que você já orçou. Escolher um traz junto a unidade e o último valor praticado — mas não sobrescreve o que você já tiver digitado. Setas escolhem, Enter aceita, Esc fecha.
Na unidade, o campo sugere as que estão em Configurações, sem impedir de digitar uma nova.
O × no fim de cada linha remove aquela linha.
Marque preço fechado no cabeçalho de uma seção quando várias frentes de serviço tiverem um preço só — como no orçamento da Igreja Portal Pérola 2, em que fachada alta, fachada baixa e os dois pergolados fecharam em R$ 25.600,00 juntos.
Com o preço fechado ligado, as quantidades e valores das linhas de dentro ficam informativos e não somam.
Uma linha com descrição mas sem quantidade ou sem valor mostra —— na coluna TOTAL e não entra na conta. É assim que a planilha registrava observações, e continua sendo — a seção "DAS OBSERVAÇÕES" é só uma seção sem preço.
Exportar PDF — na tela do orçamento e na lista. Gera orcamento-001-2026-nome-do-cliente.pdf, com texto selecionável e leve (~32 KB).
Enviar no WhatsApp — gera o PDF e envia junto com o resumo:
Detalhe fora do nosso controle: ao compartilhar arquivo, o WhatsApp do iPhone às vezes leva só o PDF e descarta o texto. É comportamento do sistema.
Os dados vivem na nuvem, então limpar o navegador ou trocar de aparelho não perde nada. O backup continua existindo como cópia extra em arquivo — para guardar por garantia, ou para levar os dados para outro sistema um dia.
A versão anterior guardava tudo no navegador do aparelho. Na primeira vez que você entrar com a nuvem ainda vazia, a lista mostra "Encontrei orçamentos guardados neste aparelho" com um botão Trazer para a nuvem — um clique e vem tudo (orçamentos, clientes, catálogo e a numeração). Se a nuvem já tiver dados, a oferta não aparece; aí o caminho é exportar o backup na versão antiga e importar aqui.
Configurações → Backup → Exportar backup. Baixa um arquivo backup-aa-montagens-2026-09-09.json com tudo: configurações, clientes, serviços e orçamentos.
Configurações → Backup → Importar backup e escolha o arquivo. O conteúdo é conferido antes de entrar — arquivo estragado é recusado inteiro, e não pela metade.
Por padrão o backup é mesclado com o que já existe (o arquivo vence em caso de conflito de id).
A planilha original não tinha tabela de preços. Por isso o catálogo se monta sozinho: toda descrição salva num orçamento entra em Serviços, com o último preço praticado como referência e a contagem de quantas vezes foi usada.
Não há o que "atualizar" à mão — é só orçar. Para corrigir uma descrição, corrija-a no orçamento e salve; a versão nova passa a valer.
É esse catálogo que alimenta as sugestões na coluna de descrição. Excluir um serviço da lista só o tira das sugestões: os orçamentos que já o usaram continuam iguais, e ele volta se for orçado de novo.
Se um dia existir uma tabela de preços de verdade em planilha, dá para importá-la — mas isso ainda não foi construído, porque não havia o que importar.
Tudo o que sai no PDF é editável em Configurações: razão social, CNPJ, inscrição estadual, endereço, telefones, quais números são WhatsApp, e-mail e site.
Também ficam ali:
Na ordem exata da planilha, com o desconto acrescentado:
TOTAL DOS SERVIÇOS = soma dos itens e dos blocos fechados
+ ACRÉSCIMO NOTA FISCAL
TOTAL
− DESCONTO (em reais, sem teto)
TOTAL A PAGAR ← o número do orçamento
Entrada sugerida (30% do total a pagar; pode ser digitada) só informa
Restante após a entrada (total a pagar − entrada) só informa
A entrada não abate do total: ela e o restante aparecem abaixo do total, como informação da condição de pagamento.
O desconto não tem limite: se passar do total, o app não corta o valor — mostra um aviso em vermelho e deixa a decisão com você.
Dinheiro é sempre inteiro em centavos, nunca número quebrado, e o arredondamento é HALF_UP no total de cada linha — o mesmo resultado que aparece na tela do Excel.
Uma diferença em relação à planilha, de propósito: a planilha trazia entrada 0 digitada à mão e subtraía a entrada no "A PAGAR". O app sugere 30% e não subtrai: o total é o mesmo do papel, e a entrada com o restante saem como informação. Detalhes em docs/paridade.md.
npm test # 117 testes
npm run lint
npm run format
npm run build # sem warnings
| Comando | O que faz |
|---|---|
npm run fontes:copiar | copia os TTF dos pacotes npm para public/fontes |
npm run casos:extrair | relê a planilha e regenera os casos de paridade |
npm run pdf:exemplo | gera exemplos/orcamento-001-2026-....pdf |
src/domain/ cálculo puro — zero React, zero I/O. É onde a regra mora.
src/dados/ a interface Repositorio, as implementações (memória, Dexie) e o backup
src/estado/ zustand: o orçamento em edição
src/telas/ as rotas e a grade densa
src/pdf/ o documento em @react-pdf/renderer
src/formato.ts todo o Intl do app, num módulo só
tools/ scripts de apoio (leitura da planilha, logo, contraste)
docs/ a auditoria da planilha e as decisões, fase por fase
| Arquivo | Sobre |
|---|---|
docs/mapeamento.md | a planilha célula a célula, e 11 anomalias |
docs/regras-de-negocio.md | as fórmulas traduzidas em regra |
docs/PERGUNTAS.md | o que ficou em aberto |
docs/decisoes.md | D1–D9, as respostas confirmadas |
docs/direcao-visual.md | paleta, tipografia, o desenho da tela |
docs/logo.md | a vetorização da marca |
docs/arquitetura.md | as camadas e por quê |
docs/paridade.md | a conferência contra a planilha |
docs/pdf.md | o PDF e o WhatsApp |
wa.me só carrega texto; no celular vai pela folha de compartilhamento.docs/paridade.md §6.docs/publicar.md| hospedar e controlar quem acessa |