Frontend
React com TypeScript sobre Vite, organizado por feature e com i18n PT/EN.
React with TypeScript on Vite, organised by feature, with PT/EN i18n.
Estudo de caso Case study
Um dashboard de investigação para o AWS SES que transformou bounce em diagnóstico — e diagnóstico em correção. A taxa de bounce de um provedor caiu de 11,6% para 0,8%. An investigation dashboard for AWS SES that turned bounces into diagnoses — and diagnoses into fixes. One provider's bounce rate dropped from 11.6% to 0.8%.
A demo pede um projeto Supabase configurado para exibir dados. The demo needs a configured Supabase project to show data.
O AWS SES emite um evento para cada coisa que acontece com um e-mail: entrega, bounce, reclamação, rejeição. Só que esses eventos chegam soltos. Para quem está no suporte, a informação que sobra é a pior possível: “o e-mail não chegou”.
Sem uma leitura consolidada não dá para separar as causas. Endereço digitado errado, domínio sem registro MX e falha de autenticação DMARC produzem sintomas parecidos e exigem correções completamente diferentes.
E bounce alto não é só incômodo operacional: ele degrada a reputação de envio. Quanto pior a reputação, mais mensagens legítimas caem em spam — até o provedor começar a bloquear o envio.
AWS SES emits an event for everything that happens to an email: delivery, bounce, complaint, rejection. Those events arrive scattered. For whoever is on support duty, the only information left is the worst possible one: “the email didn't arrive”.
Without a consolidated view you cannot separate causes. A mistyped address, a domain with no MX record and a DMARC authentication failure produce similar symptoms and require completely different fixes.
And a high bounce rate is not just an operational annoyance: it degrades sending reputation. The worse the reputation, the more legitimate mail lands in spam — until the provider starts blocking delivery altogether.
Construí um painel somente-leitura sobre os eventos já armazenados em Supabase/PostgreSQL. A regra central: o dashboard nunca cria, edita ou remove evento de e-mail — ele só lê, e a leitura depende de RLS e autenticação no banco.
I built a read-only panel on top of the events already stored in Supabase/PostgreSQL. The core rule: the dashboard never creates, edits or deletes an email event — it only reads, and that read depends on RLS and authentication in the database.
Resultados Results
Gráfico de barras da taxa de bounce antes e depois do Seslock Holmes. Em um provedor, caiu de 11,6% para 0,8%. No cenário geral, caiu de 6,8% para 1,8%. Bar chart of the bounce rate before and after Seslock Holmes. For one provider it fell from 11.6% to 0.8%. Overall it fell from 6.8% to 1.8%.
As duas séries usam cores distinguíveis nas formas mais comuns de daltonismo, e a barra “depois” também é hachurada — nenhuma leitura do gráfico depende só de cor. Todos os valores estão escritos ao lado das barras. The two series use colors that stay distinguishable under the most common forms of color vision deficiency, and the “after” bar is also hatched — no reading of this chart depends on color alone. Every value is written next to its bar.
React com TypeScript sobre Vite, organizado por feature e com i18n PT/EN.
React with TypeScript on Vite, organised by feature, with PT/EN i18n.
Supabase/PostgreSQL com RLS e RPCs de analytics; migrations versionadas no repositório.
Supabase/PostgreSQL with RLS and analytics RPCs; migrations versioned in the repository.
Funções serverless na Vercel, fora do navegador, com token de administração próprio.
Serverless functions on Vercel, outside the browser, with their own admin token.
GitHub Actions a cada 15 minutos, com cron diário da Vercel como reforço.
GitHub Actions every 15 minutes, with a daily Vercel cron as backup.
Um painel que lê e-mail de cliente é um painel que precisa errar pouco. As decisões de acesso vieram antes das telas:
viewer ou manager. Viewers
só visualizam; managers também criam e editam agendamentos e links. Conta nova começa como viewer.
A panel that reads customer email is a panel that needs a small blast radius. Access decisions came before the screens:
viewer or a manager.
Viewers only read; managers also create and edit schedules and links. New accounts start as viewers.
Tem mais projeto, experiência e formas de falar comigo do outro lado deste link. There are more projects, experience and ways to reach me on the other side.