{"id":49334016,"url":"https://github.com/emaginebr/avabot-app","last_synced_at":"2026-04-27T00:02:49.778Z","repository":{"id":350092488,"uuid":"1204753738","full_name":"emaginebr/avabot-app","owner":"emaginebr","description":"AI Agent Chat Website","archived":false,"fork":false,"pushed_at":"2026-04-12T01:29:38.000Z","size":1346,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-12T03:26:24.440Z","etag":null,"topics":["ai","ai-agent","ai-agents","chat","chatbot"],"latest_commit_sha":null,"homepage":"https://emagine.com.br/avachat","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/emaginebr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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-04-08T09:50:32.000Z","updated_at":"2026-04-12T01:29:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/emaginebr/avabot-app","commit_stats":null,"previous_names":["emaginebr/avachat-app","emaginebr/avabot-app"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/emaginebr/avabot-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emaginebr%2Favabot-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emaginebr%2Favabot-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emaginebr%2Favabot-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emaginebr%2Favabot-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emaginebr","download_url":"https://codeload.github.com/emaginebr/avabot-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emaginebr%2Favabot-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32317170,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"ssl_error","status_checked_at":"2026-04-26T23:26:25.802Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["ai","ai-agent","ai-agents","chat","chatbot"],"created_at":"2026-04-27T00:02:49.712Z","updated_at":"2026-04-27T00:02:49.767Z","avatar_url":"https://github.com/emaginebr.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AvaBot - Plataforma de Agentes de IA para Atendimento\n\n![React](https://img.shields.io/badge/React-19.x-blue)\n![TypeScript](https://img.shields.io/badge/TypeScript-6.0-blue)\n![Vite](https://img.shields.io/badge/Vite-8.x-purple)\n![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-4.x-blue)\n![License](https://img.shields.io/badge/License-MIT-green)\n\n## Overview\n\n**AvaBot** é uma plataforma para criar agentes de IA personalizados que conversam com visitantes do seu site em tempo real. Permite criar agentes com prompts customizados, alimentá-los com uma base de conhecimento (documentos e FAQs) e coletar dados de leads (nome, email, telefone) de forma natural durante a conversa. Construído com **React 19**, **TypeScript 6**, **Vite 8** e **Tailwind CSS 4**, com comunicação em tempo real via **WebSocket** e gerenciamento de estado com **Zustand**.\n\n---\n\n## 🚀 Features\n\n- 🤖 **Agentes inteligentes** - Crie agentes com prompts de sistema personalizados que entendem o contexto do seu negócio\n- 📚 **Base de conhecimento** - Upload de documentos para respostas precisas e contextualizadas (com status de processamento)\n- 💬 **Chat em tempo real** - Respostas com streaming via WebSocket — visitantes veem a IA respondendo em tempo real\n- 👤 **Coleta de leads** - Capture nome, email e telefone de forma conversacional, configurável por agente\n- 🎨 **Widget embeddable** - Componente de chat pronto para integrar em qualquer site, com cores e avatar customizáveis\n- 📊 **Histórico de conversas** - Painel administrativo com sessões e mensagens paginadas\n- 🔗 **Acesso por slug** - Cada agente tem um slug único para acesso direto via URL (`/chat/:slug`)\n- ⚡ **Ativação/desativação** - Toggle de status dos agentes sem necessidade de exclusão\n\n---\n\n## 🛠️ Technologies Used\n\n### Core Framework\n- **React 19** - Biblioteca para construção da interface\n- **TypeScript 6** - Tipagem estática para maior segurança do código\n- **Vite 8** - Build tool com HMR ultrarrápido\n\n### Estilização\n- **Tailwind CSS 4** - Framework CSS utility-first\n- **@tailwindcss/typography** - Plugin para estilização de conteúdo rich text (Markdown)\n\n### Estado e Comunicação\n- **Zustand** - Gerenciamento de estado leve e performático\n- **WebSocket nativo** - Comunicação em tempo real para o chat\n\n### Bibliotecas Adicionais\n- **React Router DOM 7** - Roteamento SPA\n- **React Markdown** - Renderização de Markdown nas respostas do agente\n- **React Dropzone** - Upload de arquivos com drag-and-drop\n\n### DevOps\n- **Docker** - Containerização com multi-stage build (Node + Nginx)\n- **Nginx** - Servidor web e reverse proxy para API e WebSocket\n- **GitHub Actions** - CI/CD com versionamento automático (GitVersion)\n- **ESLint 9** - Linting com regras para React Hooks e React Refresh\n\n---\n\n## 📁 Project Structure\n\n```\navabot-app/\n├── .github/\n│   └── workflows/           # CI/CD pipelines\n│       ├── version-tag.yml  # Versionamento automático com GitVersion\n│       ├── npm-publish.yml  # Publicação no NPM\n│       └── create-release.yml # Criação de releases no GitHub\n├── docs/                    # Documentação e diagramas\n├── public/                  # Assets estáticos (imagens, ícones)\n├── specs/                   # Especificações de features\n│   ├── 001-landing-chat-widget/\n│   └── 002-chat-start-session/\n├── src/\n│   ├── Services/            # Camada de serviços (API calls)\n│   │   ├── AgentService.ts\n│   │   ├── ChatHistoryService.ts\n│   │   └── KnowledgeFileService.ts\n│   ├── components/\n│   │   ├── admin/           # Componentes do painel administrativo\n│   │   ├── chat/            # Componentes do chat (Widget, Bubble, Window)\n│   │   └── common/          # Componentes compartilhados (404, Unavailable)\n│   ├── hooks/               # Custom hooks\n│   │   ├── useChat.ts       # Lógica de chat via WebSocket\n│   │   ├── useChatWidget.ts # Orquestração do widget\n│   │   └── useWebSocket.ts  # Conexão WebSocket genérica\n│   ├── pages/               # Páginas da aplicação\n│   │   ├── admin/           # Páginas administrativas\n│   │   └── chat/            # Página de chat por slug\n│   ├── stores/              # Zustand stores\n│   ├── types/               # TypeScript types e interfaces\n│   ├── App.tsx              # Rotas da aplicação\n│   └── main.tsx             # Entry point\n├── Dockerfile               # Multi-stage build (Node → Nginx)\n├── GitVersion.yml           # Configuração de versionamento semântico\n├── nginx.conf               # Configuração do Nginx (proxy reverso)\n├── package.json             # Dependências e scripts\n├── vite.config.ts           # Configuração do Vite\n└── README.md                # Este arquivo\n```\n\n---\n\n## 🏗️ System Design\n\nO diagrama abaixo ilustra a arquitetura de alto nível do **AvaBot**:\n\n![System Design](docs/system-design.png)\n\n**Componentes principais:**\n- **Browser** — O frontend React SPA é servido como arquivos estáticos pelo Nginx\n- **Nginx** — Atua como servidor web e reverse proxy, encaminhando chamadas REST (`/api/`) e WebSocket (`/ws/`) para o backend\n- **Backend API** — Serviço em `api:8080` que expõe a REST API e o servidor WebSocket para chat em tempo real\n- **Serviços** — Motor de IA para processamento de linguagem natural, banco de dados para persistência e armazenamento para a base de conhecimento\n\n\u003e 📄 **Source:** O arquivo Mermaid editável está disponível em [`docs/system-design.mmd`](docs/system-design.mmd).\n\n---\n\n## ⚙️ Environment Configuration\n\nAntes de executar a aplicação, configure as variáveis de ambiente:\n\n### 1. Crie o arquivo `.env`\n\n```bash\ncp .env.production .env\n```\n\n### 2. Edite o `.env`\n\n```bash\n# URL base da API backend\nVITE_API_URL=http://localhost:5000\n\n# URL do WebSocket\nVITE_WS_URL=ws://localhost:5000\n```\n\n⚠️ **IMPORTANTE**:\n- Em produção, configure `VITE_API_URL` e `VITE_WS_URL` para apontar para o servidor real\n- As variáveis com prefixo `VITE_` são expostas no bundle do cliente\n\n---\n\n## 🐳 Docker Setup\n\n### Quick Start com Docker\n\n#### 1. Build da imagem\n\n```bash\ndocker build -t avabot-app .\n```\n\n#### 2. Executar o container\n\n```bash\ndocker run -d -p 80:80 --name avabot-app avabot-app\n```\n\n#### 3. Verificar\n\nAcesse [http://localhost](http://localhost) no navegador.\n\n### Serviços (via Nginx proxy)\n\n| Serviço | URL |\n|---------|-----|\n| **Frontend SPA** | http://localhost |\n| **API (proxy)** | http://localhost/api/ |\n| **WebSocket (proxy)** | ws://localhost/ws/ |\n\n\u003e **Nota:** O Nginx faz proxy reverso para `http://api:8080`. Certifique-se de que o backend esteja acessível com o hostname `api` na mesma rede Docker.\n\n---\n\n## 🔧 Setup Manual (Sem Docker)\n\n### Pré-requisitos\n\n- **Node.js** 20+\n- **npm** 10+\n- Backend API rodando (padrão: `http://localhost:5000`)\n\n### Passos\n\n#### 1. Instalar dependências\n\n```bash\nnpm install\n```\n\n#### 2. Configurar variáveis de ambiente\n\n```bash\ncp .env.production .env\n# Edite .env com as URLs do seu backend\n```\n\n#### 3. Iniciar em modo desenvolvimento\n\n```bash\nnpm run dev\n```\n\n#### 4. Build para produção\n\n```bash\nnpm run build\n```\n\n#### 5. Preview do build\n\n```bash\nnpm run preview\n```\n\n---\n\n## 🔄 CI/CD\n\n### GitHub Actions\n\nO projeto possui 3 workflows automatizados:\n\n| Workflow | Trigger | Descrição |\n|----------|---------|-----------|\n| **Version and Tag** | Push na `main` | Calcula versão semântica via GitVersion e cria tag |\n| **Create Release** | Após Version and Tag | Cria GitHub Release para mudanças minor/major |\n| **Publish to NPM** | Tag `v*` criada | Publica o pacote no NPM |\n\n**Estratégia de versionamento:**\n- `main` → Patch increment\n- `develop` → Minor increment (tag `alpha`)\n- `feature/*` → Minor increment (tag `alpha`)\n- `release/*` → Patch increment (tag `beta`)\n- `hotfix/*` → Patch increment\n- Commits com prefixo `major:` ou `breaking:` → Major bump\n- Commits com prefixo `feat:` → Minor bump\n- Commits com prefixo `fix:` → Patch bump\n\n---\n\n## 📚 API Endpoints Consumidos\n\nO frontend consome os seguintes endpoints do backend:\n\n### Agentes\n\n| Método | Endpoint | Descrição |\n|--------|----------|-----------|\n| GET | `/api/agents` | Listar todos os agentes |\n| GET | `/api/agents/:slug` | Buscar agente por slug |\n| GET | `/api/agents/:slug/chat-config` | Configuração de chat do agente |\n| POST | `/api/agents` | Criar novo agente |\n| PUT | `/api/agents/:id` | Atualizar agente |\n| DELETE | `/api/agents/:id` | Excluir agente |\n| PATCH | `/api/agents/:id/status` | Ativar/desativar agente |\n\n### Sessões e Mensagens\n\n| Método | Endpoint | Descrição |\n|--------|----------|-----------|\n| POST | `/api/agents/:slug/sessions` | Iniciar sessão de chat |\n| GET | `/api/agents/:id/sessions` | Listar sessões (paginado) |\n| GET | `/api/sessions/:id/messages` | Listar mensagens (paginado) |\n\n### Base de Conhecimento\n\n| Método | Endpoint | Descrição |\n|--------|----------|-----------|\n| GET | `/api/agents/:id/files` | Listar arquivos do agente |\n| POST | `/api/agents/:id/files` | Upload de arquivo |\n| DELETE | `/api/agents/:id/files/:fileId` | Excluir arquivo |\n| POST | `/api/agents/:id/files/:fileId/reprocess` | Reprocessar arquivo |\n\n### WebSocket\n\n| Tipo | Endpoint | Descrição |\n|------|----------|-----------|\n| WS | `/ws/` | Conexão WebSocket para chat em tempo real |\n\n**Mensagens WebSocket:**\n- `ready` — Conexão pronta\n- `message` (envio) — Mensagem do usuário\n- `chunk` (recebimento) — Chunk de resposta (streaming)\n- `done` — Resposta completa\n- `error` — Erro no processamento\n\n---\n\n## 🔍 Troubleshooting\n\n### Problemas Comuns\n\n#### Chat widget não conecta\n\n**Verificar:**\n```bash\n# Testar se o backend está acessível\ncurl http://localhost:5000/api/agents\n```\n\n**Causas comuns:**\n- Backend não está rodando\n- Variáveis `VITE_API_URL` / `VITE_WS_URL` incorretas\n- CORS não configurado no backend\n\n#### Build falha com erros de tipo\n\n**Verificar:**\n```bash\nnpx tsc --noEmit\n```\n\n**Solução:**\n- Verifique que as versões das dependências `@types/react` e `@types/react-dom` são compatíveis com React 19\n\n---\n\n## 🚀 Deployment\n\n### Desenvolvimento\n\n```bash\nnpm run dev\n```\n\n### Produção (Docker)\n\n```bash\ndocker build -t avabot-app .\ndocker run -d -p 80:80 avabot-app\n```\n\n---\n\n## 🤝 Contributing\n\nContribuições são bem-vindas! Sinta-se à vontade para abrir um Pull Request.\n\n### Setup de Desenvolvimento\n\n1. Fork o repositório\n2. Crie uma branch de feature (`git checkout -b feature/MinhaFeature`)\n3. Faça suas alterações\n4. Execute o lint (`npm run lint`)\n5. Commit suas mudanças (`git commit -m 'feat: adiciona MinhaFeature'`)\n6. Push para a branch (`git push origin feature/MinhaFeature`)\n7. Abra um Pull Request\n\n### Padrões de Código\n\n- TypeScript strict mode\n- ESLint com regras para React Hooks\n- Commits seguindo Conventional Commits (`feat:`, `fix:`, `major:`)\n- Componentes funcionais com hooks\n\n---\n\n## 👨‍💻 Author\n\nDesenvolvido por **[Emagine](https://github.com/emaginebr)**\n\n---\n\n## 📄 License\n\nEste projeto está licenciado sob a **MIT License** - veja o arquivo [LICENSE](LICENSE) para detalhes.\n\n---\n\n## 🙏 Acknowledgments\n\n- Construído com [React](https://react.dev)\n- Estilizado com [Tailwind CSS](https://tailwindcss.com)\n- Bundled com [Vite](https://vite.dev)\n- Estado gerenciado com [Zustand](https://zustand.docs.pmnd.rs)\n\n---\n\n## 📞 Support\n\n- **Issues**: [GitHub Issues](https://github.com/emaginebr/avabot-app/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/emaginebr/avabot-app/discussions)\n\n---\n\n**⭐ Se você achou este projeto útil, considere dar uma estrela!**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femaginebr%2Favabot-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femaginebr%2Favabot-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femaginebr%2Favabot-app/lists"}