Sistema completo de gestão de vendas, estoque, caixa e relatórios desenvolvido com React Native + Expo e SQLite.
AppVendas é um MVP de um sistema de gestão comercial mobile-first, projetado para pequenos e médios negócios. O aplicativo oferece controle completo de:
- ✅ Estoque: Gestão de produtos, lotes e códigos de barras
- ✅ Vendas: PDV (Ponto de Venda) completo
- ✅ Caixa: Controle de abertura, fechamento e movimentações
- ✅ Relatórios: Dashboards e análises gerenciais
- React Native com Expo (~51.0.0)
- TypeScript (strict mode)
- SQLite (expo-sqlite) - Banco de dados local
- Expo Router - Navegação file-based
- React Hook Form + Zod - Formulários e validação
- Expo Camera - Scanner de código de barras
- Expo Image Picker - Captura e seleção de imagens
app/ # Rotas (Expo Router)
├── (auth)/ # Autenticação
├── (tabs)/ # Menu principal
├── estoque/ # Módulo de estoque
├── vendas/ # Módulo de vendas
├── caixa/ # Módulo de caixa
└── relatorios/ # Relatórios
components/ # Componentes reutilizáveis
├── ui/ # Componentes base (Button, Input, etc)
├── forms/ # Componentes de formulário
└── estoque/ # Componentes específicos do estoque
lib/ # Bibliotecas e utilitários
├── database/ # SQLite config e queries
│ ├── migrations/ # Migrations versionadas
│ └── queries/ # Queries organizadas por módulo
├── context/ # React Context (Auth, Toast)
├── hooks/ # Custom hooks
├── utils/ # Funções utilitárias
└── validations/ # Schemas Zod
types/ # Definições TypeScript
constants/ # Constantes (cores, espaçamento)
- Busca por nome com debounce
- Cards com foto, nome, quantidade e preço
- Badges de alerta (estoque baixo, validade próxima)
- Pull to refresh
- Dados básicos (nome, preços, quantidade)
- Scanner de múltiplos códigos de barras
- Sistema de lotes (número, validade, quantidade)
- Captura de foto (câmera ou galeria)
- Validação completa com Zod
- Visualização completa das informações
- Histórico de entradas
- Opções: Inativar ou Excluir
- Validação de movimentações antes de excluir
- Registro de notas fiscais
- Seleção múltipla de produtos
- Atualização de lotes e códigos
- Atualização automática de quantidades
- Login com email e senha
- Armazenamento seguro (Expo Secure Store)
- Proteção de rotas
- Logout com limpeza de sessão
Este projeto utiliza Cursor Rules para guiar o desenvolvimento. As regras estão em .cursor/rules/:
- 01-projeto-arquitetura.mdc - Arquitetura geral e princípios
- 02-autenticacao-navegacao.mdc - Sistema de auth e rotas
- 03-banco-de-dados.mdc - Estrutura do SQLite
- 04-modulo-estoque.mdc - Implementação do estoque
- 05-componentes-ui.mdc - Design system e componentes
- 06-validacao-formatacao.mdc - Validações e formatações
- 07-tipos-interfaces.mdc - Tipos TypeScript
- 08-dependencias-setup.mdc - Setup e dependências
- Node.js 18+
- npm ou yarn
- Expo CLI
- iOS Simulator (Mac) ou Android Studio (Android)
# Clonar o repositório
git clone <repo-url>
cd AppVendas
# Instalar dependências
npm install
# Iniciar o projeto
npx expo start# Banco de dados
npx expo install expo-sqlite expo-file-system
# Formulários
npm install react-hook-form @hookform/resolvers zod
# Câmera e imagens
npx expo install expo-camera expo-image-picker expo-image
# Armazenamento
npx expo install expo-secure-store @react-native-async-storage/async-storage
# UI
npx expo install expo-haptics react-native-reanimated- users - Usuários do sistema
- produtos - Cadastro de produtos
- codigos_barras - Múltiplos códigos por produto
- lotes - Controle de lotes e validade
- entradas - Notas de entrada
- itens_entrada - Itens das entradas
- vendas - Registro de vendas
- itens_venda - Itens das vendas
- caixa - Controle de caixa
- movimentacoes_caixa - Movimentações do caixa
O sistema utiliza migrations versionadas em lib/database/migrations/. Para adicionar uma nova migration:
- Criar arquivo
00X_nome_migration.ts - Implementar função
up(db) - Registrar no array de migrations
- Primary:
#007AFF(light) /#0A84FF(dark) - Success:
#34C759/#32D74B - Warning:
#FF9500/#FF9F0A - Danger:
#FF3B30/#FF453A
- Button (variantes: primary, secondary, outline, ghost)
- Input (com validação e error states)
- Card (elevated, outlined, filled)
- Modal
- Toast
- Badge
- Loading
# Desenvolvimento
npx expo start
# Android
npx expo start --android
# iOS
npx expo start --ios
# Web
npx expo start --web# Lint
npm run lint
# Type check
npm run type-check
# Format
npm run format
# Reset database (dev)
npm run reset-db# Instalar EAS CLI
npm install -g eas-cli
# Build Android (APK)
eas build --platform android --profile preview
# Build Android (AAB - produção)
eas build --platform android --profile production
# Build iOS
eas build --platform ios- Câmera: Scanner de código de barras e foto de produtos
- Galeria: Seleção de imagens da galeria
Configuradas em app.json:
{
"plugins": [
["expo-camera", { "cameraPermission": "..." }],
["expo-image-picker", { "photosPermission": "..." }]
]
}- Definir tipos em
types/ - Criar schema de validação em
lib/validations/ - Implementar queries em
lib/database/queries/ - Criar componentes em
components/ - Implementar tela em
app/
- ✅ Sempre usar tipos TypeScript explícitos
- ✅ Validar formulários com Zod
- ✅ Usar transações para operações múltiplas no SQLite
- ✅ Implementar loading states e error handling
- ✅ Adicionar feedback visual (toast, haptics)
- ❌ Nunca usar
anyou dados mockados - ❌ Nunca fazer queries sem prepared statements
# Resetar database
npm run reset-db
npx expo start --clear# Rebuild do app nativo
npx expo prebuild --clean
npx expo run:android
# ou
npx expo run:ios# Regenerar tipos do Expo Router
npx expo customize tsconfig.jsonEste projeto está sob a licença MIT.
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Desenvolvido com ❤️ usando React Native + Expo