Brag document — Filipe Miranda Pereira
Período: 2025-11-05 a 2026-05-05 (6 meses), encerramento do plano de desenvolvimento. Caso: promoção pleno → sênior. Email: filipe.pereira@agidesk.com.br | GitHub: fm1randa
Resumo executivo
* considerando apenas as tarefas que dependiam da minha execução
Fui contratado como pleno com um plano de desenvolvimento de 6 meses. O cumprimento desse plano foi o gatilho acordado para a promoção a sênior.
Plano (4 iniciativas):
- Adoção de IA no ciclo de desenvolvimento: 100% concluído
- Solução técnica para integração React no frontend PHP: 100% concluído
- Separação do código frontend e backend do PHP: 80% concluído (deploy em produção pendente)
- Integração do módulo Agitalks no Agidesk: 40% pelo plano. Código pronto para deploy; pendente apenas staging e validação
Volume (PRs mesclados, 2025-11-05 a 2026-05-05):
- 123 em
agidesk/agidesk - 101 em 5 repositórios Agitalks: backend (35), websocket (25), frontend (19), queue (15), mail (7)
- 80 em
agicli(ferramenta interna que eu criei; ver seção 2.4) - 4 em
agidesk-development; 1 PR em aberto emagidesk-mobile(NDP-765399) - Total: 308 PRs mesclados em 9 repositórios da organização
As três iniciativas que dependiam só da minha execução foram entregues no prazo. As pendências da quarta dependem da fila de prioridades do time. Há entregas adicionais que excedem o plano original (seção 2). Antes do plano começar formalmente, dediquei as primeiras 12 semanas à estabilização do Agitalks (próxima seção).
Fase prévia: estabilização do Agitalks (17/11/2025 a 28/02/2026)
Trabalho fora do plano original mas crítico para a operação. Atuei nos 5 repositórios Agitalks (backend, websocket, frontend, queue, mail), que são produtos separados do Agidesk principal. Cerca de 42 PRs mesclados entre minha entrada no time e o início efetivo do plano.
Diagnóstico inicial. Análise documentada cobrindo 36 tickets em janela de 90 dias, com causas-raiz identificadas em sincronização em tempo real (30,6%), gestão de conversação (21,1%), bots, campanhas e roteamento. O diagnóstico orientou as frentes de estabilização que seguem.
Memória e GC. Configuração de limite de heap e rastreamento de GC nos scripts de inicialização (agitalks-backend PRs #85, #86); heapdump sob demanda via SIGUSR2 para inspeção em produção (agitalks-websocket PR #9). Rollout coordenado DEV → STAGING → PRODUCTION. Removi os logs de GC depois que a coisa estabilizou, para reduzir overhead.
Confiabilidade de socket e payload. Correção emergencial em produção (agitalks-backend PR #87, 08/12). PAT-762854: otimização do payload do SocketGateway. O payload passa a ser computado uma vez por mensagem e reusado para todos os destinatários. Reduz pressão de GC sob alta vazão (agitalks-websocket PR #13, 16/12).
Queries DocumentDB. PAT-763034: 9 índices compostos distribuídos entre agitalks-backend (5 índices, PR #99) e agitalks-queue (3 índices, PR #8). Endereça inefiências COLLSCAN → IXSCAN apontadas pela Ilegra. Migrations idempotentes para backfill por tenant. Investiguei sozinho as recomendações da Ilegra, incluindo a limitação do MongoDB para índices em múltiplos arrays (#dev-tech, 26/12).
Infraestrutura de desenvolvimento. TRF-762174: página de setup que provisiona tenant + admin via UI (agitalks-backend PR #77, agitalks-frontend PR #54); Docker Compose multi-serviço para desenvolvimento local (PR #74); refactor de README e CLAUDE.md, mais script de update de senha (PR #75); fix de symlinks em postinstall.js no primeiro dia (agitalks-frontend PR #47, 17/11).
Continuidade Jan-Fev 2026. Fix de timeout de conexão MongoDB no startup (agitalks-queue PR #12, 08/01); PAT-763095 (Datadog apenas em produção, agitalks-queue PR #14 e agitalks-websocket PR #24); releases coordenadas develop → staging → main em 12/01.
Sinais de senioridade já presentes nessa fase:
- Reorganização do board do Agitalks com gestão de backlog por situação (Pending / Refinement / Refined),
#dev-tech, 19/12 - Proposta de melhoria do fluxo Git e processo de deploy multi-repo, com documento de design compartilhado,
#dev-tech, 23/12 - Pareamento ativo com Oberdan durante o onboarding; primeiro PR mesclado no dia 1 (17/11)
- Investigação autônoma das recomendações de DocumentDB do fornecedor (Ilegra)
1. Cumprimento do plano de desenvolvimento
1.1 Adoção de IA no ciclo de desenvolvimento (100%)
Implementei a infraestrutura de IA para o time:
- Estrutura de skills, regras e agentes Claude em
.claude/(PRs #909, #1453, #1452) - Hooks de pre-commit e pre-push integrando lint-staged, ESLint, knip, react-doctor, PHPStan e TypeScript (PRs #1688, #1689, #1681, #1679)
- Baseline Prettier no codebase inteiro com plugin Tailwind class-sort (PRs #1684, #1685, com 1465 arquivos)
- Baseline PHPStan, junto da convenção "arquivo tocado sai com erros iguais ou menores" (PR #1683)
Estudei a fundo o uso prático do Claude no ciclo de dev (Opus 4.7 1M context, compaction, sessions, MCP servers, skills) e virei a referência interna do time. Postei explicações no #dev-tech sobre Claude, Datadog MCP e a habilitação do Claude Code Remote Control.
1.2 Solução técnica para integração React no frontend PHP (100%)
A decisão arquitetural foi minha: introduzir o React Bridge (PR #602) em vez de continuar evoluindo o projeto agidesk-frontend em Next.js, que estava virando um wrapper artificial em volta do Agidesk + Agitalks. Optei por embedar Agitalks diretamente no Agidesk e migrar o frontend de forma incremental no mesmo repositório PHP.
Entregas associadas:
- React 19 + Vite + esbuild com sistema de migração incremental (PR #602)
- Substituição do editor Summernote pelo TipTap (PRs #1269, #1438, #1445), incluindo modo escuro, atalhos e compatibilidade com conteúdo HTML legado
- Refatoração da Toolbar em hooks e sub-componentes (PRs #1716, #1714, #1712, #1713)
- Migração de CSS monolítico para Tailwind + CSS Modules (PRs #1408, #1401)
- Apresentação para todo o time de tecnologia em 28/02/2026
1.3 Separação do código frontend e backend do PHP (80%)
- Decoupling de assets do frontend com pipeline de build próprio (PRs #616, #703)
npm run devreflete todas as mudanças do frontend semnpm run build(PR #1137)- Servidor estático com suporte a múltiplas instâncias e hosts customizados (PRs #895, #1076)
- Spinner com feedback nos comandos
devebuild(PRs #1295, #1316) - Decoupling de traduções de UI (PR #1138, com revert estratégico em #1174 depois de identificar acoplamento residual)
- CODEOWNERS com escopo de
/assets/para o time de frontend (PRs #1086, #1460) - Tooling de qualidade React (ESLint, knip, react-doctor) com pre-commit (PRs #1535, #1538)
- Apresentação para o time concluída (28/02)
Pendência: apenas o deploy em produção, condicionado à priorização do time.
1.4 Integração do módulo Agitalks no Agidesk (40%)
Arquitetura entre os sistemas: 100%. Decisão técnica de embedar o agitalks-frontend como módulo nativo dentro do Agidesk (em vez de manter um wrapper separado), com loop SSO, mensageria em tempo real e isolamento de estilos. Aprovada em D&P em 02/03.
APIs/webhooks: 100%. PR #991 embeda o agitalks-frontend como módulo nativo no Agidesk (talks/frontend/), com loop SSO, mensageria em tempo real e isolamento de estilos. PRs #1075, #1073, #1340, #1017 cobrem rotas, navegação por contexto e tratamento de erros quando o backend Agitalks está indisponível.
Status real: o código está pronto para deploy. Pendente apenas staging e validação. A pendência depende da priorização do time, não da minha execução.
2. Execução técnica além do plano
2.1 API Platform: NDP-765399 (segurança)
Implementei o namespace /api/platform/* com tokens curtos (15 min) e rotação de refresh-token HttpOnly, separando os escopos externo (/api/v1/*) e interno (web/mobile). Validei o invariante de segurança contra 6 cenários de replay entre namespaces. Coordenei o rollout em 3 repositórios: agidesk (PR #1662), agicli (PR #82) e agidesk-mobile (PR #11), com a ordem de merge documentada publicamente no #dev-tech. Código pronto para deploy em staging e validação.
2.2 Performance: Vite 8 + Rolldown
Upgrade que tornou os builds embed do Agitalks 10x mais rápidos (PR #1326).
2.3 Segurança e robustez multi-tenant
- Pin de versão do
axiosapós divulgação de vulnerabilidade na cadeia de suprimentos (PR #1171) - Isolamento de contexto de tenant no endpoint de confirmação de usuários (PR #1456)
- Exclusão de subdomínios reservados (
www.,mail.,dev.) no parsing de tenant (PR #890) - Sanitização de embeds de iframe e atributos
data-*no HTMLPurifier (PR #1327)
2.4 agicli: ferramenta interna criada do zero
Bootstrap de uma CLI multi-repo em TypeScript/Bun, inicialmente em ~/Workspace/agitalks/agicli, depois extraída para o repositório próprio agidesk/agicli. Cobre rebase concorrente em múltiplos repos, criação idempotente de branches snapshot, deploy view com watch, integração com tasks/boards do Agidesk e o comando setup-agidesk com progresso ao vivo. Hoje é usada pelo time (skill using-agicli documentada em .claude/skills/). Mesclei 80 PRs no repositório entre janeiro e abril de 2026.
2.5 Correções e refatorações pontuais
- Loop infinito do
DOMObservercausado por IDs temporários do jQuery Sizzle (PR #1371) - Crash do TipTap na deleção de iframes (PR #1304)
- Race condition entre Tailwind watch e Vite build (PRs #1313, #1436)
- BUG-763471: collation aplicado apenas em campos string no Agitalks backend (
agitalks-backendPRs #176, #177) - Refatoração do dropdown
ChatTransfer(lógica do componente sidebar, performance noonOpene confiabilidade durante transferências de conversa)
3. Sinais de senioridade
3.1 Decisões arquiteturais que conduzi
- React Bridge sobre o repo
agidesk-frontendNext.js (descontinuei o frankenstein anterior em favor da abordagem incremental) - Embed do Agitalks como módulo nativo, em vez de manter front separado
- Namespace
/api/platform/*com tokens curtos e rotação - Convenção PHPStan baseline ("arquivo tocado sai com erros iguais ou menores"), proposta minha, adotada pelo time
3.2 Reconhecimento público
- Bruno Ukoski (
#geral, 28/01): "Parabéns @Oberda @Luis Zilli e @Filipe pelo projeto de site estático! É uma sensação muito boa ver que estamos evoluindo em tecnologia. Grande entrega, galera!", em canal de toda a empresa (thread) - Bruno Ukoski (
#dev-tech, 06/02): "Está beeeeem legal! Parabéns, @Filipe @Luis Zilli e time! Isso vai ser muito massa!", sobre a primeira execução da nova arquitetura em DEV (thread) - Bruno Ukoski (
#dev-tech, 09/03): "Muito obrigado pela atuação de todos @Jon @Luis Zilli @Filipe e tudo rodando 100% novamente.", depois de um final de semana de recuperação de filas e deploy (thread) - Oberdan Santos (
#dev-tech, 17/03): "Playwright MCP já bombando!! Valeu as dicas, @Filipe!!"; reconhecimento de compartilhamento de conhecimento depois que minhas dicas foram adotadas pelo Victor Fraga e pelo Marcus (thread) - Bruno Ukoski (
#suporte-produto, 05/04): "Que massa, @Oberda e @Filipe Grandes entregas! Parabéns!", após release do Agitalks em PRD com índices DocumentDB e correções TRF/BUG (thread) - Bruno Ukoski (
#dev-tech, 09/04): "...tá muito lindo agora. Parabéns, velho!", sobre o build depois das otimizações que ele rodou em cima do que entreguei (thread) - Bruno Ukoski (
#dev-tech, 10/04): "@Filipe ficou excelente a atualização no build! Parabéns e obrigado!", sobre a melhoria de build com Vite 8 + Rolldown (thread) - Lucas Lopes (
#dev-tech, 14/04): "Não seria possível sem a ajuda do @Oberda e @Filipe!", depois do desbloqueio do registro em HML em pareamento com diagnóstico ao vivo (thread) - Oberdan Santos (
#dev-tech, 29/04): "Ficou muito massa, @Filipe!", sobre a baseline PHPStan (thread)
3.3 Trabalho em equipe
Ofereci apoio aos colegas de time de forma recorrente ao longo do período, tanto em canais públicos quanto em DMs.
3.4 Melhorias de processo sem solicitação
- Reorganização do CODEOWNERS para reduzir ruído da atribuição automática de revisores
- Proposta de migrações por timestamp em vez de sequencial, depois de observar conflitos recorrentes entre devs (em discussão; ainda não adotada)
- Push pela maturidade de CI: lint, formatter, testes automatizados. Levantei também a discussão sobre upgrade do plano GitHub para mais minutos de Actions
- Upgrade Vite 8 + Rolldown que tornou os builds embed do Agitalks 10x mais rápidos (detalhes em 2.2). Não estava no plano nem foi solicitado, peguei como iniciativa minha
- Refatoração da saída visual dos comandos
devebuild(spinner com feedback claro durante rebuilds), deixando o output mais limpo e agradável de acompanhar (PRs #1295 e #1316) - Criação do
agiclicomo ferramenta interna multi-repo, hoje usada pelo time (detalhes em 2.4). Iniciativa própria - Baselines PHPStan e Prettier com convenções acompanhantes para evolução incremental do codebase (detalhes em 1.1). Endereçaram débito técnico que ninguém tinha pedido para resolver
3.5 Trabalho entre times
Com infra (Zilli): behaviors de CloudFront para /api/platform, source-maps e o monorepo agidesk-development. Fui incluído pelo Zilli na análise de viabilidade serverless para substituir o agitalks-websocket.
Com PM (Juliano e Sabrina): triagem e criação de cards de bug a partir de relatórios de teste em HML, sendo o responsável pela resolução.
3.6 Aprendizado técnico do período
- Engenharia de IA: estudo a fundo do Claude (Opus 4.7 1M context, compaction, sessions, MCP servers, skills)
- TipTap, Vite/Rolldown e Bun: aprendizado prático para sustentar as decisões arquiteturais
- Zustand: refatoração do
voicepanelmigrando de reducer para store (PR #1723)
3.7 Comunicação
- Apresentação para todo o time de tecnologia sobre a separação frontend/backend (28/02)
- Apresentação para toda a empresa sobre o livro Deep Work. Tenho experiência conduzindo sessões para audiências amplas
3.8 Contribuição em Softwares Open Source
openclaw/openclaw#673(10/01): propus o comandoclawdbot update(com atalho--update) para auto-atualização da CLI, cobrindo git e package manager, com flags--restart,--json,--timeoute checagens de segurança. PR fechado pelo maintainer; depois disso, ele abriu outro PR implementando a mesma ideia. A proposta foi adotada upstream.wwebjs/whatsapp-web.js#5719(15/01) — mesclado upstream: fix que substituisendSeenpormarkSeenpara corrigir o erromarkedUnreadna bibliotecawhatsapp-web.js(uma das libs mais usadas do ecossistema Node para WhatsApp). Aceito diretamente pelos maintainers.openclaw/wacli#27(03/02): propus suporte para envio de stickers na CLI WhatsApp open source. PR fechado; em 05/05 (mesma data deste documento) o PR #205 com a mesma feature foi mesclado no upstream. Segundo caso de ideia minha adotada por outra via.millionco/expect#84(05/04): bug report identificando que a criação de sessão ACP falha quando os settings do Claude usampermissions.defaultMode: "auto"na ferramenta de teste em navegadorexpect.dev.
4. Contexto de escopo prévio (gestão Trojahn)
Antes da transição de liderança, atuei em atividades que hoje não fazem parte da minha rotina:
- Entrevistas técnicas para vagas de engenharia
- Avaliação de testes técnicos (testes para casa / testes de código)
- Melhoria do processo seletivo (estrutura, rubrica)
Tenho interesse em retomar essa contribuição na estrutura atual, se fizer sentido para o time.
5. Pedido formal
Com base no que está nas seções anteriores:
- As três iniciativas do plano com execução individual estão concluídas no prazo
- A quarta tem 40% de progresso pelo plano, com escopo arquitetural e de APIs entregues. O restante depende de priorização do time
- Há entregas adicionais que excedem o plano original (API Platform, Vite 8 + Rolldown, agicli, baselines PHPStan/Prettier, segurança multi-tenant)
- O reconhecimento da liderança e os sinais de senioridade da seção 3 mostram atuação no nível esperado
Estou pronto para a promoção a sênior, conforme acordado na minha contratação. Solicito que conduzamos formalmente esse passo.
Documento gerado em 05/05/2026 com base em 6 meses de evidências objetivas (commits, PRs, threads do Slack).