Aplicativo mobile para gerenciamento de orçamentos e cotações, desenvolvido com React Native e Expo. O projeto segue o design do Figma disponível em: Budget App Design
O Orçamentos App é uma solução completa para criação, edição e gerenciamento de orçamentos profissionais. Com uma interface intuitiva e moderna, permite que profissionais autônomos e pequenas empresas criem cotações detalhadas com facilidade.
-
📋 Gerenciamento de Orçamentos
- Criação de novos orçamentos com numeração automática
- Edição de orçamentos existentes
- Duplicação de orçamentos
- Exclusão de orçamentos com confirmação
-
🛠️ Gestão de Serviços
- Adição de múltiplos serviços por orçamento
- Edição de serviços (título, descrição, preço, quantidade)
- Remoção de serviços
- Cálculo automático de subtotal
-
💰 Cálculos Financeiros
- Subtotal automático dos serviços
- Sistema de desconto por porcentagem
- Cálculo automático do valor total
- Visualização de valores com formatação de moeda (R$)
-
🏷️ Sistema de Status
- Rascunho (Draft)
- Enviado (Sent)
- Aprovado (Approved)
- Recusado (Declined)
- Indicação visual por cores e ícones
-
📤 Compartilhamento
- Captura de screenshot do orçamento
- Compartilhamento via apps nativos (WhatsApp, Email, etc)
- Exportação como imagem PNG
-
💾 Armazenamento Local
- Persistência de dados com AsyncStorage
- Acesso offline aos orçamentos
- Sincronização automática
-
⌨️ Experiência do Usuário
- KeyboardAvoidingView em formulários
- Inputs com máscaras (moeda, porcentagem, quantidade)
- Validação de campos obrigatórios
- Feedback visual em ações
O projeto foi desenvolvido seguindo fielmente o design disponível no Figma:
- Layout responsivo e adaptável
- Componentização modular
- Sistema de ícones personalizado (17 ícones SVG)
- Paleta de cores consistente
- Tipografia hierárquica (TitleLg, TitleSm, TitleXs, TextSm, TextXs)
- React Native 0.81.5 - Framework para desenvolvimento mobile
- Expo 54.0.27 - Plataforma de desenvolvimento
- TypeScript 5.3.3 - Tipagem estática
- React Navigation 7.1.24 - Navegação entre telas
- React Navigation Stack 7.8.5 - Stack Navigator
- react-native-svg 15.15.1 - Renderização de SVGs
- react-native-safe-area-context 5.6.0 - Áreas seguras
- react-native-screens - Otimização de telas
- react-native-view-shot 4.0.3 - Captura de screenshots
- expo-sharing 14.0.8 - Compartilhamento nativo
- expo-crypto - Geração de UUIDs
- @react-native-async-storage/async-storage 2.2.0 - Armazenamento local
- react-native-currency-input 1.1.1 - Input de moeda
orcamentos-app/
├── src/
│ ├── app/ # Telas da aplicação
│ │ ├── Home.tsx # Lista de orçamentos
│ │ ├── AddBudget.tsx # Criar/Editar orçamento
│ │ └── BudgetDetails.tsx # Detalhes do orçamento
│ │
│ ├── components/ # Componentes reutilizáveis
│ │ ├── button.tsx
│ │ ├── check.tsx
│ │ ├── currency-value.tsx
│ │ ├── icon.tsx # Seletor de ícones
│ │ ├── icons.tsx # 17 ícones SVG
│ │ ├── input.tsx
│ │ ├── status.tsx
│ │ ├── tag.tsx
│ │ ├── section.tsx
│ │ ├── service-item.tsx
│ │ ├── add-service-modal.tsx
│ │ └── ...
│ │
│ ├── routes/ # Configuração de rotas
│ │ ├── index.tsx
│ │ └── StackRoutes.tsx
│ │
│ ├── storage/ # Camada de persistência
│ │ └── budget-storage.ts
│ │
│ ├── types/ # Definições TypeScript
│ │ ├── budget-type.ts
│ │ ├── service-type.ts
│ │ └── budget-status-types.ts
│ │
│ ├── utils/ # Funções utilitárias
│ │ ├── currency-utils.ts
│ │ ├── budget-utils.ts
│ │ └── array-utils.ts
│ │
│ ├── config/ # Configurações
│ │ └── budget-config.ts
│ │
│ └── consts/ # Constantes
│ └── budget-consts.ts
│
├── android/ # Código nativo Android
├── ios/ # Código nativo iOS
├── app.json # Configuração Expo
├── tsconfig.json # Configuração TypeScript
└── package.json # Dependências
- Node.js 18+
- npm ou yarn
- Expo CLI
- Para iOS: Xcode e CocoaPods
- Para Android: Android Studio
- Clone o repositório
git clone <repository-url>
cd orcamentos-app- Instale as dependências
yarn install
# ou
npm install- Para iOS, instale os pods
cd ios && pod install && cd ..- Inicie o projeto
# Com Expo
npx expo start --dev-client
# Ou diretamente para iOS
yarn ios
# Ou diretamente para Android
yarn android- Na tela inicial, toque no botão "Nova cotação"
- Preencha as informações gerais (Título e Cliente)
- Selecione o status do orçamento
- Adicione serviços usando o botão "Adicionar serviço"
- Para cada serviço, informe:
- Título do serviço
- Descrição
- Preço unitário
- Quantidade
- (Opcional) Adicione um desconto percentual
- Toque em "Salvar" para finalizar
- Na lista de orçamentos, toque no card desejado
- Visualize todos os detalhes:
- Informações do cliente
- Lista de serviços
- Cálculos financeiros (subtotal, desconto, total)
- Abra o orçamento desejado
- Toque no botão "Compartilhar"
- Aguarde a captura da tela
- Escolha o aplicativo para compartilhar (WhatsApp, Email, etc)
- Abra o orçamento desejado
- Toque no ícone de editar (lápis)
- Modifique as informações necessárias
- Toque em "Salvar"
- Abra o orçamento desejado
- Toque no ícone de copiar
- Um novo orçamento será criado com os mesmos dados
- O número do orçamento será incrementado automaticamente
O projeto conta com 17 ícones SVG convertidos para React Native:
checkchevron-leftchevron-rightcopycredit-carddirection-up-rightedit-penfiltermultiplynote-with-textplusshoptagtrash-2arrow-syncdeclinedarchive-file
Uso:
<Icon name="edit-pen" size={24} color="#6A46EB" />A camada de armazenamento (BudgetStorage) oferece:
add(budget)- Adicionar novo orçamentoupdate(budget)- Atualizar orçamento existenteremove(id)- Remover orçamentogetById(id)- Buscar orçamento específicogetAll()- Listar todos os orçamentosgetLastBudgetNumber()- Obter último número usado
formatCurrency(1500); // "R$ 1.500,00"
formatCurrency(1500.5); // "R$ 1.500,50"// Subtotal
priceSubtotal = services.reduce(
(acc, service) => acc + service.price * service.quantity,
0
);
// Desconto
discountAmount = (priceSubtotal * discountPercentage) / 100;
// Total
priceTotal = priceSubtotal - discountAmount;Botão com variantes (primary, secondary, danger), suporte a ícones e estado desabilitado.
Campo de entrada com tipos (text, search, currency, textfield) e validação visual.
Container com header, ícone e área de conteúdo expansível.
Card de serviço com título, descrição, preço, quantidade e botão de edição.
Badge visual de status com cores específicas e ícone.
Etiqueta colorida para destacar informações (desconto, quantidade, etc).
Principais cores utilizadas no projeto:
- Primary:
#6A46EB - Danger:
#DB4D4D - Success:
#30752F - Background:
#FAFAFA - Border:
#F0F0F0 - Text:
#0F0F0F,#4A4A4A,#676767
Configurado em src/config/budget-config.ts:
export const BUDGET_STATUS_DEFAULT_OPTION = {
label: "Rascunho",
value: "draft",
};Este projeto foi desenvolvido para fins educacionais.
Thiago Santos
⭐ Se este projeto foi útil para você, considere dar uma estrela!