anrry@4nrry.dev:~$ replay --since "2 years ago"

Anrry Petrin

Engenheiro de software. Construo plataformas IoT, fintech e dev tools, e entrego todo dia.

···
contribuições
···
pull requests merged
···
maior sequência, dias

conectando ao worker

Cada célula é um dia dos últimos dois anos, sincronizado ao vivo da API do GitHub. A maior parte desse trabalho vive em repositórios privados; os totais contam mesmo assim.

tabela: contribuições por mês
mêscontribuições

velocity

O salto

No primeiro ano eu estava achando um ritmo. No segundo, reconstruí meu jeito de trabalhar em volta de agentes de IA e entreguei ··· o volume de contribuições.

orgs

Três orgs, um engenheiro

Eu toco as três. Nomes e números sincronizam direto do GitHub a cada seis horas.

systems

Sistemas, não só commits

Volume é fácil de plotar. O que importa é isto: o que o cliente precisava, como eu modelei, e do que abri mão pra chegar lá.

OpenCherry: uma torre de controle para IA multi-repo

Tauri 2 · alpha · AGPL-3.0 · opencherry.dev

necessidade
Ferramentas de IA pra código assumem um repo, um agente, um terminal. Meu dia é o oposto: muitos repos, vários agentes em paralelo. O OpenCherry é o dashboard que faltava: um app desktop que observa cada repo e mostra qual agente está mexendo em quê.

decisões
Um shell Tauri 2 com UI SolidJS sobre um core Rust, depois de um pivô no mesmo dia abandonando uma GUI nativa em Rust: velocidade venceu. O core se divide em quatro crates enxutos: tipos compartilhados, operações git, detecção de agentes, persistência SQLite. O git é híbrido: operações locais rodam no libgit2 embutido, push e pull remotos chamam o git real do usuário, então as credenciais que já existem simplesmente funcionam. Agentes nunca são disparados, só detectados: uma tabela de regras varre a lista de processos e correlaciona cada agente rodando ao repo que ele está tocando. Tudo local, offline-first.

trade-offs
AGPL desde o primeiro commit: reciprocidade acima de adoção corporativa fácil. O contrato TypeScript-Rust na ponte IPC é mantido na mão, uma edição em dois arquivos a cada mudança de comando. A distribuição é um instalador sem sandbox e sem auto-update, porque o trabalho do app é justamente observar outros processos e caminhos arbitrários; sandbox de loja castraria ele.

resultado
Um alpha que já faz o trabalho: Git multi-repo com diffs, staging e sync, correlação de agentes ao vivo pra cinco CLIs, oito temas embutidos mais import de temas, e um binário que é GUI e CLI ao mesmo tempo. Ubuntu e GNOME primeiro. Código aberto em github.com/4nrry/opencherry.

SolidJS UI WebView Rust core shared types git (embedded libgit2) agent detect (sysinfo) SQLite persistence git CLI remote ops only process table read, never spawn opencherry.db local state Tauri IPC
uma ponte IPC, quatro crates enxutos, nada é disparado

Este site: publicar trabalho privado sem vazar nada

auditável: código no GitHub

necessidade
Dois anos de trabalho, 97% em repos privados. Mostrar publicamente, manter atualizado com zero manutenção, e fazer de "nada privado vaza" uma propriedade verificável, não uma promessa.

decisões
Um único Cloudflare Worker é dono de tudo: assets estáticos, uma API pequena e um cron que re-sincroniza o GitHub a cada seis horas. O sync materializa um único documento JSON seguro pra publicar. As queries por repositório são geradas a partir de uma allowlist, então nomes de repos privados nunca são sequer pedidos; um sanitizador varre o documento final e a publicação falha fechada em qualquer violação, deixando o último dataset bom servindo.

trade-offs
Atualização a cada seis horas em vez de tempo real. KV em vez de banco, porque o artefato é um documento, não uma carga de queries. Uma blocklist seria mais simples, mas este repo é público e uma blocklist de nomes privados seria ela mesma o vazamento.

resultado
Todo número desta página vem de /api/portfolio.json, e a suíte do sanitizador mais o checador de vazamentos estão no aberto.

GitHub API sync (cron, every 6h) allowlist aggregate sanitize gate KV one JSON doc /api/*.json ETag + SWR this page violation = no publish, the last good dataset keeps serving
fail-closed por design: o portão vem antes da única escrita

Mais estudos de caso chegando aqui em breve.

repos

Onde os PRs aterrissaram

Top repositórios por pull requests que eu autorei na janela, coloridos por org.

tabela: repositórios
repositórioorgPRs

rhythm

O ritmo semanal

Contribuições por dia da semana, mês a mês. O calendário do GitHub é diário, então este é o máximo de granularidade que a honestidade permite.

languages

Materiais

Bytes através das codebases das orgs e dos meus repos públicos. Projetos upstream que eu contribuo ficam de fora: não é meu código pra contar.

open-source

No aberto

A fatia pública: meus projetos e os upstream que eu contribuo.

trajectory

Como cheguei aqui

  1. 01

    Smart Compost, solo

    Entrei numa startup pequena de compostagem como o único engenheiro. Firmware, backend, frontend: o que o dia pedisse.

  2. 02

    A plataforma

    Um repo virou vinte e oito: sensores C++, microservices NestJS, três frontends, um app React Native, infra gerenciada com Helm.

  3. 03

    Mentoria

    O Bruno entrou como estagiário; hoje trabalhamos como pares. Melhor multiplicador que já entreguei.

  4. 04

    LOTVS Finance

    Comecei uma fintech com um amigo de faculdade. Meu repositório mais pesado em PRs vive lá.

  5. 05

    Ocean Words

    Construindo uma plataforma de ensino de inglês com minha namorada, que dá as aulas.

  6. 06

    No aberto

    OpenCherry, um servidor MCP no npm, PRs upstream pra ferramentas que uso todo dia. Este site é uma delas: um Worker que faz replay do meu próprio GitHub.