{"id":50927110,"url":"https://github.com/skatesham/angular-analisador-feira-ecocria","last_synced_at":"2026-06-17T00:03:42.502Z","repository":{"id":338719235,"uuid":"1158849604","full_name":"skatesham/angular-analisador-feira-ecocria","owner":"skatesham","description":"Sistema web local para análise de vendas de feira. Transforme anotações rápidas em TXT em insights acionáveis com KPIs, gráficos e exports padronizados.","archived":false,"fork":false,"pushed_at":"2026-02-16T05:16:57.000Z","size":5204,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-16T09:35:44.611Z","etag":null,"topics":["angular20","echarts","primeng20","static-site"],"latest_commit_sha":null,"homepage":"https://skatesham.github.io/angular-analisador-feira-ecocria/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skatesham.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-16T01:51:56.000Z","updated_at":"2026-02-16T05:16:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/skatesham/angular-analisador-feira-ecocria","commit_stats":null,"previous_names":["skatesham/angular-analisador-feira-ecocria"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/skatesham/angular-analisador-feira-ecocria","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skatesham%2Fangular-analisador-feira-ecocria","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skatesham%2Fangular-analisador-feira-ecocria/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skatesham%2Fangular-analisador-feira-ecocria/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skatesham%2Fangular-analisador-feira-ecocria/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skatesham","download_url":"https://codeload.github.com/skatesham/angular-analisador-feira-ecocria/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skatesham%2Fangular-analisador-feira-ecocria/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34428197,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular20","echarts","primeng20","static-site"],"created_at":"2026-06-17T00:03:32.317Z","updated_at":"2026-06-17T00:03:42.492Z","avatar_url":"https://github.com/skatesham.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📊 Analisador de Vendas de Feira\n\n\u003e Sistema web local para análise de vendas de feira. Transforme anotações rápidas em TXT em insights acionáveis com KPIs, gráficos e exports padronizados.\n\n[![Deploy](https://github.com/skatesham/angular-analisador-feira-ecocria/actions/workflows/deploy.yml/badge.svg)](https://github.com/skatesham/angular-analisador-feira-ecocria/actions/workflows/deploy.yml)\n[![Angular](https://img.shields.io/badge/Angular-20-red)](https://angular.dev)\n[![PrimeNG](https://img.shields.io/badge/PrimeNG-20-blue)](https://primeng.org)\n[![License](https://img.shields.io/badge/License-MIT-green)](LICENSE)\n\n## 🚀 Demo\n\n**[Ver Demo ao Vivo](https://skatesham.github.io/angular-analisador-feira-ecocria/)**\n\n---\n\n## 📋 Sobre o Projeto\n\nSistema desenvolvido para **pequenos produtores e ateliês** que vendem em feiras. Permite transformar anotações simples em TXT em análises completas com:\n\n- ✅ **KPIs automáticos** (faturamento, ticket médio, itens vendidos)\n- ✅ **Gráficos interativos** (ECharts)\n- ✅ **Insights determinísticos** (\"O que isso sugere\")\n- ✅ **Categorização automática** de produtos\n- ✅ **Export CSV padronizado**\n- ✅ **100% local** - dados não saem do dispositivo\n- ✅ **Dark mode** completo\n- ✅ **i18n** (pt-BR e English)\n\n---\n\n## 🎯 Funcionalidades\n\n### 📥 **Importação Inteligente**\n- Upload múltiplo de arquivos TXT\n- Drag \u0026 drop\n- Suporte a CSV e XLSX (reimport)\n- Preview antes de processar\n\n### 🔄 **Processamento Automático**\n- Parse de datas em múltiplos formatos\n- Categorização de 40+ tipos de produtos\n- Consolidação de múltiplos arquivos\n- Deduplicação automática\n- Relatório de erros e warnings\n\n### 📊 **Painel de Analytics**\n- 4 KPIs principais\n- 3 gráficos interativos (ECharts)\n- Tabela com paginação\n- Filtros por período e categoria\n- Seção \"O que isso sugere\" com insights\n\n### 💾 **Export e Privacidade**\n- CSV final padronizado (formato brasileiro)\n- Resumos por item e categoria\n- Sessão privada por padrão\n- Opção de salvar localmente (IndexedDB)\n- Botão \"Apagar todos os dados\"\n\n---\n\n## 🛠️ Stack Tecnológica\n\n| Tecnologia | Versão | Uso |\n|---|---|---|\n| **Angular** | 20 | Framework principal |\n| **PrimeNG** | 20.4.0 | Componentes UI |\n| **Tailwind CSS** | v4 | Estilização utility-first |\n| **ngx-echarts** | 20.0.2 | Gráficos interativos |\n| **ngx-translate** | 17.0.0 | Internacionalização |\n| **papaparse** | 5.5.3 | Parse de CSV |\n| **xlsx** | 0.18.5 | Parse de Excel |\n| **uuid** | 13.0.0 | Geração de IDs |\n\n---\n\n## 🚀 Início Rápido\n\n### Instalação\n\n```bash\n# Clonar repositório\ngit clone https://github.com/skatesham/angular-analisador-feira-ecocria.git\ncd angular-analisador-feira-ecocria\n\n# Instalar dependências\nnpm install\n\n# Rodar em desenvolvimento\nnpm start\n# → http://localhost:4200\n```\n\n### Build e Deploy\n\n```bash\n# Build de produção\nnpm run build:prod\n\n# Deploy para GitHub Pages (manual)\nnpm run deploy\n```\n\n---\n\n## 📁 Estrutura do Projeto\n\n```\nsrc/app/\n├── core/\n│   ├── models/              → Modelos de dados (Venda, Item, Analytics)\n│   ├── services/\n│   │   ├── feira-parser.service.ts      → Parse de TXT de feira\n│   │   ├── file-parser.service.ts       → Parse genérico (TXT/CSV/XLSX)\n│   │   ├── data-pipeline.service.ts     → Pipeline de processamento\n│   │   ├── analytics.service.ts         → Cálculo de KPIs e insights\n│   │   ├── export.service.ts            → Export CSV/TSV\n│   │   └── storage.service.ts           → IndexedDB\n│   └── theme/               → ThemeService (dark mode)\n├── features/\n│   ├── landing-feira/       → Landing page\n│   ├── como-funciona/       → Página \"Como Funciona\"\n│   ├── analisador/          → Upload e processamento\n│   ├── painel/              → Dashboard com KPIs e gráficos\n│   └── configuracoes/       → Configurações (idioma, tema, privacidade)\n├── layouts/\n│   └── landing-layout/      → Layout público (navbar + footer)\n└── shared/ui/\n    └── theme-switcher/      → Toggle light/dark\n\npublic/\n└── i18n/                    → pt-BR.json, en.json\n```\n\n---\n\n## 🎨 Componentes Principais\n\n### **Landing Feira** (`/`)\n- Hero com proposta de valor\n- Problema → Solução\n- Como funciona (3 passos)\n- Privacidade (100% local)\n- FAQ\n- Animações com `pAnimateOnScroll`\n\n### **Como Funciona** (`/como-funciona`)\n- Fluxo visual (4 etapas)\n- Tabs com exemplos:\n  - TXT de entrada\n  - CSV final\n  - Gráficos e KPIs\n  - Categorias automáticas\n\n### **Analisador** (`/analisar`)\n- Upload múltiplo (drag \u0026 drop)\n- Processamento em etapas visíveis\n- Estatísticas (arquivos, vendas, itens, linhas)\n- Warnings para produtos não categorizados\n- Navegação para painel\n\n### **Painel** (`/painel`)\n- 4 KPIs principais\n- Seção \"O que isso sugere\" (insights)\n- 3 gráficos ECharts:\n  - Top 10 produtos (barras)\n  - Participação por tipo (donut)\n  - Evolução semanal (linha)\n- Tabela com paginação\n- Botões de export\n\n### **Configurações** (`/configuracoes`)\n- Seletor de idioma (pt-BR/en)\n- Toggle dark mode\n- Informações de privacidade\n- **ConfirmDialog** para apagar dados\n- **Toast** de feedback\n\n---\n\n## 🔧 Serviços Core\n\n### **FeiraParserService**\n- Parse de TXT com regras específicas\n- Detecção de datas (DD.MM.YY, DD/MM/YY)\n- Parse de linhas \"valor quantidade descrição\"\n- Cálculo de semana ISO 8601\n- Dia da semana em português\n\n### **DataPipelineService**\n- Consolidação de múltiplos arquivos\n- Deduplicação\n- Estatísticas de processamento\n- Warnings e erros\n\n### **AnalyticsService**\n- Cálculo de KPIs\n- Insights determinísticos\n- Filtros reativos (signals)\n- Gráficos ECharts\n\n### **ExportService**\n- CSV/TSV formato brasileiro\n- Resumos por item e categoria\n- Nomeação com período\n\n---\n\n## 🌐 i18n (Internacionalização)\n\n### Idiomas Suportados\n- 🇧🇷 Português (Brasil)\n- 🇺🇸 English\n\n### Estrutura\n```json\n{\n  \"app\": { ... },\n  \"nav\": { ... },\n  \"landing\": {\n    \"hero\": { ... },\n    \"problem\": { ... },\n    \"solution\": { ... },\n    \"howItWorks\": { ... },\n    \"privacy\": { ... },\n    \"faq\": { ... }\n  },\n  \"settings\": { ... },\n  \"common\": { ... }\n}\n```\n\n### Uso\n```html\n\u003ch1\u003e{{ 'landing.hero.title' | translate }}\u003c/h1\u003e\n\u003cp-button [label]=\"'common.save' | translate\" /\u003e\n```\n\n**Guias**: Ver `I18N_GUIDE.md` e `I18N_QUICK_START.md`\n\n---\n\n## 🎨 Design System\n\n### Dark Mode\n- Tokens semânticos do PrimeNG\n- Pares obrigatórios: `bg-surface-0 dark:bg-surface-900`\n- Toggle via `ThemeService`\n- Persistência no `localStorage`\n\n### Animações\n- `pAnimateOnScroll` do PrimeNG 20\n- Classes Tailwind: `fade-in-10`, `slide-in-from-*`, `zoom-in-*`, `spin-in-*`\n- Duração: `animate-duration-1000`\n\n### Componentes PrimeNG\n- **Dialog** - Modais headless\n- **ConfirmDialog** - Confirmações com design customizado\n- **Toast** - Notificações\n- **FileUpload** - Upload com drag \u0026 drop\n- **Table** - Tabelas com paginação\n- **Tabs** - Abas\n- **SelectButton** - Seletor de idioma\n- **ToggleSwitch** - Toggle dark mode\n\n---\n\n## 📊 Categorização Automática\n\n### Tipos de Produtos (40+)\n- Tábua, Caixa, Escultura, Acessório, Kuripe, Brinquedo, Pente, Palito Cabelo, Luminárias, Incensário, etc.\n\n### Categorias (13)\n- Chaveiro, Pingente, Brinco, Anel, Porta Toalha, Carrinho, Quebra-cabeça, etc.\n\n**Arquivo**: `src/app/core/models/categorization.model.ts`\n\n---\n\n## 🔒 Privacidade e Segurança\n\n- ✅ **100% local** - processamento no navegador\n- ✅ **Sem servidores externos** - nenhum dado enviado\n- ✅ **Sessão privada** por padrão\n- ✅ **Opt-in para salvar** localmente (IndexedDB)\n- ✅ **Botão \"Apagar dados\"** com confirmação\n- ✅ **Sem rastreamento**\n- ✅ **Sem cookies de terceiros**\n\n---\n\n## 📚 Documentação Adicional\n\n- **`IMPLEMENTADO.md`** - Guia completo do sistema implementado\n- **`PROGRESSO.md`** - Status de implementação detalhado\n- **`REFATORACAO.md`** - Documentação da refatoração template → feira\n- **`I18N_GUIDE.md`** - Guia completo de i18n\n- **`I18N_QUICK_START.md`** - Início rápido i18n\n- **`DIALOGS_GUIDE.md`** - Guia de dialogs e confirms\n- **`SETUP.md`** - Instruções de setup\n\n---\n\n## 🚀 Deploy\n\n### Deploy para GitHub Pages\n\n**Um único comando faz tudo:**\n\n```bash\nnpm run deploy\n```\n\nEste comando:\n1. Faz build de produção\n2. Publica na branch `gh-pages`\n3. Pronto! 🎉\n\n### Configuração no GitHub (primeira vez)\n\n1. Vá em **Settings** → **Pages**\n2. Em **Source**, selecione **Deploy from a branch**\n3. Selecione a branch **gh-pages** e pasta **/ (root)**\n4. Clique em **Save**\n\nA aplicação estará disponível em:\n**https://skatesham.github.io/angular-analisador-feira-ecocria/**\n\n### Build Local (sem deploy)\n\n```bash\nnpm run build:prod\n```\n\n---\n\n## 🤝 Contribuindo\n\n1. Fork o projeto\n2. Crie uma branch (`git checkout -b feature/nova-funcionalidade`)\n3. Commit suas mudanças (`git commit -m 'Adiciona nova funcionalidade'`)\n4. Push para a branch (`git push origin feature/nova-funcionalidade`)\n5. Abra um Pull Request\n\n---\n\n## 📄 Licença\n\nMIT License - veja o arquivo [LICENSE](LICENSE) para detalhes.\n\n---\n\n## 👨‍💻 Autor\n\n**Ecocria**\n\n- GitHub: [@skatesham](https://github.com/skatesham)\n- Projeto: [angular-analisador-feira-ecocria](https://github.com/skatesham/angular-analisador-feira-ecocria)\n\n---\n\n## 🙏 Agradecimentos\n\n- [Angular](https://angular.dev)\n- [PrimeNG](https://primeng.org)\n- [Tailwind CSS](https://tailwindcss.com)\n- [ECharts](https://echarts.apache.org)\n\n---\n\n**Desenvolvido com ❤️ para pequenos produtores e ateliês**\n- `generateUuid()` — UUID v4\n- `encrypt()` / `decrypt()` — CryptoJS AES\n- `storageGet()` / `storageSet()` / `storageRemove()` — localStorage com namespace\n- `formatDate()` / `formatNumber()` / `formatCurrency()` — formatação por locale\n- Validators reutilizáveis para formulários reativos\n\n## Rotas\n\n| Rota | Layout | Guard | Feature |\n|---|---|---|---|\n| `/` | LandingLayout | — | Home Landing |\n| `/auth/login` | LandingLayout | guestGuard | Login |\n| `/app/dashboard` | AppLayout | authGuard | Dashboard |\n| `/app/settings` | AppLayout | authGuard | Settings |\n\n## Como Criar uma Nova Feature\n\n1. Criar pasta em `src/app/features/minha-feature/`\n2. Criar 3 arquivos: `.component.ts`, `.component.html`, `.component.css`\n3. Usar `ChangeDetectionStrategy.OnPush` e standalone component\n4. Adicionar rota lazy-loaded em `app.routes.ts`\n5. Adicionar traduções em `public/i18n/*.json`\n6. **Dark mode**: todo `bg-surface-*` com par `dark:`, todo `text-surface-*` com par `dark:`\n\n### Exemplo de componente\n\n```typescript\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n  selector: 'app-minha-feature',\n  imports: [TranslateModule],\n  templateUrl: './minha-feature.component.html',\n  styleUrl: './minha-feature.component.css',\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MinhaFeatureComponent {}\n```\n\n### Exemplo de template com dark mode correto\n\n```html\n\u003cdiv class=\"bg-surface-0 dark:bg-surface-900 border border-surface-200 dark:border-surface-700 rounded-xl p-6\"\u003e\n  \u003ch1 class=\"text-surface-900 dark:text-surface-0\"\u003e{{ 'feature.title' | translate }}\u003c/h1\u003e\n  \u003cp class=\"text-surface-500 dark:text-surface-400\"\u003e{{ 'feature.description' | translate }}\u003c/p\u003e\n\u003c/div\u003e\n```\n\n## Pares de Cores (Dark Mode)\n\n| Light | Dark | Uso |\n|---|---|---|\n| `bg-surface-0` | `dark:bg-surface-900` | Cards, header, footer |\n| `bg-surface-50` | `dark:bg-surface-950` | Fundo de página |\n| `bg-surface-100` | `dark:bg-surface-800` | Hover, destaque |\n| `text-surface-900` | `dark:text-surface-0` | Texto principal |\n| `text-surface-700` | `dark:text-surface-200` | Labels |\n| `text-surface-500` | `dark:text-surface-400` | Texto secundário |\n| `border-surface-200` | `dark:border-surface-700` | Bordas |\n| `text-red-500` | `dark:text-red-400` | Erros |\n\n\u003e **Tokens auto-adaptáveis** (não precisam de `dark:`): `bg-primary`, `text-primary`, `border-primary`, `text-primary-contrast`, `text-muted-color`, `border-surface`.\n\n## Scripts\n\n```bash\nnpm start       # Dev server (http://localhost:4200)\nnpm run build   # Build de produção\nnpm run watch   # Build com watch\nnpm test        # Testes unitários\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskatesham%2Fangular-analisador-feira-ecocria","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskatesham%2Fangular-analisador-feira-ecocria","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskatesham%2Fangular-analisador-feira-ecocria/lists"}