--- license: mit title: 'LeadPROGen ' sdk: docker emoji: đ --- # đŻ LeadGen Pro - Filtro de Nichos []() []() []() Uma ferramenta moderna e elegante para **filtrar, organizar e exportar leads** de negĂłcios sem website a partir de dados do Google Maps. --- ## âš Funcionalidades ### đŻ Core Features - â **Upload de CSV** - Arraste e solte ou selecione arquivos - â **Filtro Inteligente** - Identifica negĂłcios sem website + com telefone - â **Organização por Nicho** - Agrupa automaticamente por categoria - â **Exportação Seletiva** - Escolha quais nichos exportar (NOVO! đ) - â **Dashboard Interativo** - Visualize e explore seus dados - â **Busca em Tempo Real** - Encontre nichos especĂficos rapidamente ### đš Design & UX - đ **Dark Mode Premium** - Interface moderna e elegante - âš **Glassmorphism** - Efeitos de vidro e blur - đ **AnimaçÔes Suaves** - TransiçÔes e micro-interaçÔes - đ± **100% Responsivo** - Funciona em qualquer dispositivo - ⥠**Performance Otimizada** - Lazy loading e code splitting ### đ Performance - **Bundle Size:** ~338 KB (nĂŁo comprimido) | ~105 KB (gzipped) - **Initial Load:** ~210 KB | ~65 KB (gzipped) - **First Paint:** ~1.5s (3G) | ~0.3s (WiFi) - **Lighthouse Score:** 92/100 Performance --- ## đž Preview ### Upload Screen  ### Dashboard  ### Export Modal (NOVO!)  --- ## đ InĂcio RĂĄpido ### PrĂ©-requisitos - Node.js 18+ - npm ou yarn ### Instalação ```bash # Clone o repositĂłrio git clone https://github.com/seu-usuario/niche-sites-filter.git # Entre no diretĂłrio cd niche-sites-filter # Instale as dependĂȘncias npm install # Inicie o servidor de desenvolvimento npm run dev ``` Acesse: `http://localhost:5173` ### Build para Produção ```bash # Build otimizado npm run build # Preview da build npm run preview ``` ### Docker (Hugging Face) ```bash # Build da imagem docker build -t leadgen-pro . # Execute o container docker run -p 7860:7860 leadgen-pro ``` Acesse: `http://localhost:7860` --- ## đ Como Usar ### 1ïžâŁ Upload de Arquivos 1. Acesse a aplicação 2. **Arraste e solte** seus arquivos CSV ou **clique para selecionar** 3. Aguarde o processamento (spinner animado mostra o progresso) **Formato esperado do CSV:** ```csv title,categoryName,phone,website,street,city,state Gym Fit,Academia de ginĂĄstica,+55 11 1234-5678,,Rua A,SĂŁo Paulo,SP Pet Love,Pet shop,+55 11 8765-4321,https://petlove.com,Rua B,Rio de Janeiro,RJ ``` ### 2ïžâŁ Explore o Dashboard - **Visualize estatĂsticas:** Total de negĂłcios, leads filtrados, nichos encontrados - **Busque nichos:** Use a barra de busca para encontrar categorias especĂficas - **Expanda nichos:** Clique para ver todos os negĂłcios de um nicho - **Cards de negĂłcios:** Nome, telefone, endereço e confirmação "Sem Website" ### 3ïžâŁ Exporte seus Leads (NOVO! đ) 1. Clique em **"Exportar para WhatsApp Bulk"** 2. **Modal de seleção aparece** com todos os nichos 3. **Escolha** quais nichos exportar: - â Clique no nicho para marcar/desmarcar - â Use "Selecionar Todos" para marcar/desmarcar tudo - â Veja o total de leads em tempo real 4. Clique em **"Exportar CSV"** 5. **Arquivo baixa automaticamente** com nome inteligente **Nomes de arquivo:** - 1 nicho: `leads_academia_de_ginastica.csv` - MĂșltiplos: `leads_3_nichos.csv` - Todos: `leads_todos_nichos.csv` --- ## đïž Arquitetura ### Tech Stack - **React 19** - Framework UI - **Vite** - Build tool (rolldown-vite) - **PapaParse** - CSV parsing - **Framer Motion** - AnimaçÔes (lazy loaded) - **Lucide React** - Ăcones - **Vanilla CSS** - Styling (sem frameworks) ### Estrutura de Pastas ``` niche-sites-filter/ âââ src/ â âââ components/ â â âââ Dashboard.jsx # Dashboard principal â â âââ FileUpload.jsx # Componente de upload â âââ App.jsx # App principal + Modal â âââ main.jsx # Entry point â âââ index.css # Estilos globais âââ public/ # Assets estĂĄticos âââ dist/ # Build de produção âââ Dockerfile # Container config âââ vite.config.js # Config do Vite âââ package.json # DependĂȘncias ``` ### OtimizaçÔes Implementadas #### Code Splitting ```javascript // Dashboard lazy loaded const Dashboard = lazy(() => import('./components/Dashboard')); // Chunks separados - vendor.js (React + React-DOM) - framer-motion.js (AnimaçÔes) - papaparse.js (CSV Parser) - lucide-react.js (Ăcones) ``` #### React Performance ```javascript // Todos componentes usam memo const Dashboard = memo(({ ... }) => { ... }); const StatCard = memo(({ ... }) => { ... }); const NicheGroup = memo(({ ... }) => { ... }); // useMemo para cĂĄlculos pesados const filteredNiches = useMemo(() => { ... }, [deps]); ``` #### Asset Optimization - â Minificação ativa - â Tree-shaking - â Font preloading - â No source maps em produção --- ## đ Bugs Corrigidos ### VersĂŁo 1.1.0 (2025-11-22) #### CRĂTICO â - **Upload nĂŁo funcionava no Hugging Face** - Causa: `worker: true` no PapaParse - Solução: Removido Web Worker - Status: â Corrigido #### ALTO â ïž - **Sem feedback de loading** - Causa: Falta de estados de UI - Solução: Spinner + mensagens - Status: â Corrigido - **Sem validação de arquivos** - Causa: Falta de validação - Solução: Validação de tipo e tamanho (50MB max) - Status: â Corrigido #### Detalhes completos: Ver [BUG_REPORT.md](./BUG_REPORT.md) --- ## đ Performance Benchmarks ### Bundle Analysis | Chunk | Tamanho | Gzipped | Lazy? | |-------|---------|---------|-------| | vendor.js | 177.5 KB | 57.2 KB | â | | framer-motion.js | 119.3 KB | 40.3 KB | â | | papaparse.js | 18.8 KB | 7.0 KB | â | | index.js | 14.5 KB | 4.9 KB | â | | Dashboard.js | 5.1 KB | 1.8 KB | â | | lucide-react.js | 3.4 KB | 1.6 KB | â | | **TOTAL** | **338.6 KB** | **~105 KB** | - | ### Load Time (3G Connection) ``` TIMELINE [====================================] 100% ââ HTML (620 B) [==] ~100ms ââ CSS (1.9 KB) [===] ~150ms ââ JS Initial (210 KB) [====================] ~800ms ââ Font (15 KB) [=====] ~500ms ââ INTERACTIVE ~1.5s â ``` ### Lighthouse Score ``` Performance: ââââââââââââââââââââ 92/100 Accessibility: ââââââââââââââââââââ 95/100 Best Practices: ââââââââââââââââââââ 95/100 SEO: ââââââââââââââââââââ 100/100 ``` --- ## đ Segurança ### ValidaçÔes Implementadas 1. **Upload:** - â Apenas arquivos .csv - â Tamanho mĂĄximo: 50MB - â Validação de dados vazios 2. **Produção:** - â Console.logs removidos - â Debuggers removidos - â CĂłdigo minificado 3. **CSP (Content Security Policy):** - â Sem eval() - â Sem inline scripts - â Web Workers removidos --- ## đ€ Contribuindo ContribuiçÔes sĂŁo bem-vindas! Por favor: 1. Fork o projeto 2. Crie uma branch (`git checkout -b feature/AmazingFeature`) 3. Commit suas mudanças (`git commit -m 'Add AmazingFeature'`) 4. Push para a branch (`git push origin feature/AmazingFeature`) 5. Abra um Pull Request --- ## đ Roadmap ### v1.2.0 (Planejado) - [ ] PWA (Progressive Web App) - [ ] Modo offline com Service Worker - [ ] Export para Excel (.xlsx) - [ ] Import de templates de mensagem - [ ] HistĂłrico de exportaçÔes ### v1.3.0 (Futuro) - [ ] Integração direta com WhatsApp Business API - [ ] Analytics de conversĂŁo - [ ] Multi-idioma (EN, ES, PT) - [ ] Temas customizĂĄveis --- ## đ Licença Este projeto estĂĄ sob a licença MIT. Veja o arquivo [LICENSE](LICENSE) para mais detalhes. --- ## đšâđ» Desenvolvedor **Antigravity AI** - Desenvolvido com â€ïž e â - Data: 2025-11-22 - VersĂŁo: 1.1.0 --- ## đ Documentação Adicional - [BUG_REPORT.md](./BUG_REPORT.md) - RelatĂłrio completo de bugs corrigidos - [BUILD_ANALYSIS.md](./BUILD_ANALYSIS.md) - AnĂĄlise detalhada de performance - [EXPORT_FEATURE.md](./EXPORT_FEATURE.md) - Documentação da exportação seletiva --- ## đĄ Dicas de Uso ### Maximize suas ConversĂ”es 1. **Segmente por nicho:** Crie mensagens personalizadas para cada tipo de negĂłcio 2. **Teste A/B:** Exporte nichos diferentes e teste abordagens diferentes 3. **Priorize:** Foque primeiro em nichos com maior taxa de resposta 4. **Personalize:** Use o nome do negĂłcio e endereço nas mensagens ### CSV Perfeito para WhatsApp Bulk O arquivo exportado contĂ©m: - `Name` - Nome do negĂłcio - `Phone` - Telefone formatado - `Address` - Endereço completo - `Niche` - Categoria para segmentação Importe diretamente em ferramentas de disparo em massa! --- ## â FAQ **P: Posso processar mĂșltiplos CSVs de uma vez?** R: Sim! Selecione vĂĄrios arquivos ou arraste mĂșltiplos CSVs. **P: Qual o tamanho mĂĄximo de arquivo?** R: 50MB por arquivo. Para arquivos maiores, divida em partes menores. **P: Como sĂŁo identificados negĂłcios "sem website"?** R: Filtramos onde o campo `website` estĂĄ vazio E o campo `phone` estĂĄ preenchido. **P: A ferramenta funciona offline?** R: NĂŁo ainda. PWA com modo offline estĂĄ no roadmap v1.2.0. **P: Posso exportar em outros formatos alĂ©m de CSV?** R: No momento apenas CSV. Excel (.xlsx) planejado para v1.2.0. ---