{"id":25441,"date":"2023-01-19T00:00:00","date_gmt":"2023-01-19T00:00:00","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/reconstrucao-do-aplicativo-mailgun-parte-dois\/"},"modified":"2026-09-22T13:18:17","modified_gmt":"2026-09-22T13:18:17","slug":"reconstrucao-do-aplicativo-mailgun-parte-dois","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/reconstrucao-do-aplicativo-mailgun-parte-dois\/","title":{"rendered":"Um mergulho profundo no aplicativo Mailgun: parte 2 \u2013 uma execu\u00e7\u00e3o triunfal"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Quando iniciamos a jornada de reconstru\u00e7\u00e3o do aplicativo Mailgun, tr\u00eas longos anos atr\u00e1s, passamos boa parte do tempo na prova de conceito, no planejamento e nos testes. <b>Nosso objetivo principal?<\/b> Criar uma experi\u00eancia no aplicativo que destaque os diferentes produtos do nosso portf\u00f3lio, permita uma navega\u00e7\u00e3o f\u00e1cil entre eles e ofere\u00e7a suporte a esses produtos de forma eficiente com uma \u00fanica infraestrutura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O escopo deste projeto foi t\u00e3o grande que precisamos de mais de uma publica\u00e7\u00e3o para descrever o que motivou a reconstru\u00e7\u00e3o, como a fizemos, o que aprendemos e o que a implementa\u00e7\u00e3o dessa nova tecnologia significa para o nosso futuro. Na primeira parte desta jornada \u00e9pica, &#8220;<a href=\"https:\/\/www.mailgun.com\/blog\/dev-life\/mailgun-app-rebuild-part-one\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Parte 1: ideias excelentes<\/a>&#8220;, levamos voc\u00ea de volta no tempo para observar o nosso processo. Deixamos voc\u00ea entrar em nossas mentes e compartilhamos os motivos desse empreendimento, al\u00e9m de mostrarmos os <a href=\"https:\/\/www.mailgun.com\/blog\/dev-life\/mailgun-app-rebuild-part-one\/#chapter-8\" target=\"_tabs\" rel=\"noopener noreferrer\">desafios<\/a> que sab\u00edamos que enfrentar\u00edamos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agora, na &#8220;Parte 2: uma execu\u00e7\u00e3o triunfal&#8221;, vamos levar voc\u00ea aos bastidores para mostrar como implementamos esse projeto, como nossas equipes colaboraram e a fun\u00e7\u00e3o que o design desempenhou em nosso processo de pensamento.\u00a0 Tem drama, tem migra\u00e7\u00f5es&#8230; e provavelmente algumas refer\u00eancias de fic\u00e7\u00e3o cient\u00edfica at\u00e9 demais. Junte-se a n\u00f3s nesta jornada.<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-2190\"><p class=\"h5 m-0\" id=\"toc-title-2190\">\u00cdndice<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#uma-rapida-recapitulacao-de-como-chegamos-ate-aqui\">Uma r\u00e1pida recapitula\u00e7\u00e3o de como chegamos at\u00e9 aqui<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#module-federation\">Module Federation<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#a-colaboracao-com-o-design-para-criar-o-processo-de-cadastro\">A colabora\u00e7\u00e3o com o design para criar o processo de cadastro<\/a><a class=\"scrollme link-body-color\" href=\"#como-estabelecer-o-escopo-do-design\">Como estabelecer o escopo do design<\/a><a class=\"scrollme link-body-color\" href=\"#por-dentro-da-mente-do-design\">Por dentro da mente do design<\/a><a class=\"scrollme link-body-color\" href=\"#a-substituicao-de-ativos-visuais-para-ficarem-alinhados-a-marca\">A substitui\u00e7\u00e3o de ativos visuais para ficarem alinhados \u00e0 marca<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#a-medida-que-o-portal-evolui\">\u00c0 medida que o portal evolui<\/a><a class=\"scrollme link-body-color\" href=\"#ciclo-de-feedback\">Ciclo de feedback<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">05<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#aja-com-excelencia-e-crie-coisas-legais\">Aja com excel\u00eancia e crie coisas legais<\/a><a class=\"scrollme link-body-color\" href=\"#rodem-os-creditos\">Rodem os cr\u00e9ditos<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Uma r\u00e1pida recapitula\u00e7\u00e3o de como chegamos at\u00e9 aqui<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A motiva\u00e7\u00e3o para atualizar o aplicativo Mailgun foi inspirada nas limita\u00e7\u00f5es da nossa infraestrutura legada, especificamente na nossa <a href=\"https:\/\/www.mailgun.com\/blog\/dev-life\/mailgun-app-rebuild-part-one\/#chapter-6\" target=\"_tabs\" rel=\"noopener noreferrer\">organiza\u00e7\u00e3o multirreposit\u00f3rio<\/a>, em que cada projeto de front-end tinha seu pr\u00f3prio reposit\u00f3rio, apesar de muitos projetos repetirem as mesmas tarefas. O que isso significou para as nossas equipes? Para come\u00e7ar, localizar um c\u00f3digo espec\u00edfico ou encontrar bugs era quase t\u00e3o f\u00e1cil quanto Deckard ca\u00e7ando replicantes desonestos em uma cidade dist\u00f3pica densamente povoada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Gerenciar v\u00e1rios reposit\u00f3rios com recursos redundantes reduz os tempos de resposta e esgota os recursos. <\/b>Nossa solu\u00e7\u00e3o? A reorganiza\u00e7\u00e3o em uma estrutura de monorepo modular. Nos termos de <i>Blade Runner<\/i>, em vez de ca\u00e7ar replicantes por uma cidade extensa, estar\u00edamos navegando dentro de uma \u00fanica megaestrutura em que os projetos s\u00e3o organizados em m\u00f3dulos e os replicantes se tornam pesquis\u00e1veis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esse plano de a\u00e7\u00e3o exigiria a implementa\u00e7\u00e3o de novas ferramentas na nossa pilha, um novo visual para a nossa IU e o gerenciamento de grandes quantidades de c\u00f3digo legado. Se voc\u00ea nos permite parafrasear: &#8220;O homem encontrou o seu par&#8221;&#8230; e agora o problema \u00e9 da engenharia.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4053\" width=\"856\" height=\"1082\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screen_Shot_2022-12-30_at_10.07.04_AM.png\" alt=\"Mailgun team members as Blade Runner characters\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screen_Shot_2022-12-30_at_10.07.04_AM.png 856w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screen_Shot_2022-12-30_at_10.07.04_AM-237x300.png 237w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screen_Shot_2022-12-30_at_10.07.04_AM-768x971.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screen_Shot_2022-12-30_at_10.07.04_AM-810x1024.png 810w\" sizes=\"(max-width: 856px) 100vw, 856px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Module Federation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Uma das primeiras etapas na configura\u00e7\u00e3o do nosso novo aplicativo foi descobrir uma maneira de reutilizar o m\u00e1ximo poss\u00edvel do nosso sistema legado para n\u00e3o precisarmos reconstruir tudo. No entanto, n\u00e3o quer\u00edamos continuar a dar suporte a todas as nossas depend\u00eancias legadas obsoletas. <b>Precis\u00e1vamos de uma forma de empacotar o nosso c\u00f3digo existente para que ele n\u00e3o fosse rejeitado pela nova infraestrutura.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/module-federation\" target=\"_tabs\" rel=\"noopener noreferrer\">Module Federation<\/a> \u00e9 uma forma de definir um bloco de c\u00f3digo (todo o nosso aplicativo legado, neste caso) como um recurso singular e import\u00e1vel, que pode ser aut\u00f4nomo ou configurado para compartilhar recursos com o consumidor. <b>O Module Federation ofereceu uma solu\u00e7\u00e3o que nos permitiu reempacotar o c\u00f3digo existente para que pudesse ser consumido pela nova plataforma<\/b> sem comprometer todos os novos recursos incr\u00edveis do nosso plano. A maior parte da nossa equipe de desenvolvimento poderia continuar fazendo corre\u00e7\u00f5es de bugs e atualiza\u00e7\u00f5es na nossa base de c\u00f3digo antiga, e o novo aplicativo receberia tudo de gra\u00e7a!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para fazer isso acontecer, precis\u00e1vamos criar um middleware de roteamento declarativo que nos permitisse direcionar o tr\u00e1fego entre os aplicativos antigo e novo. Portaremos o c\u00f3digo legado gradualmente para a nova plataforma, mas, at\u00e9 l\u00e1, essa solu\u00e7\u00e3o de roteamento por p\u00e1gina nos permitiria lan\u00e7ar novos recursos sem perder o ritmo \u2013 e sem a dor de cabe\u00e7a de reescrever tudo de uma vez. Como j\u00e1 definimos as regras, isso facilitaria a altera\u00e7\u00e3o e a manuten\u00e7\u00e3o do roteamento no nosso aplicativo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4085\" width=\"1440\" height=\"864\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/EN-Progress.png\" alt=\"A progress chart illustrating the steps we needed to take from creating the new app &apos;Portal&apos; (\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/EN-Progress.png 1440w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/EN-Progress-300x180.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/EN-Progress-768x461.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/EN-Progress-1024x614.png 1024w\" sizes=\"(max-width: 1440px) 100vw, 1440px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Al\u00e9m dos componentes de migra\u00e7\u00e3o em grande escala, tamb\u00e9m tivemos de resolver a migra\u00e7\u00e3o e a adapta\u00e7\u00e3o dos processos existentes, focados em recursos que ainda precisariam funcionar de uma maneira familiar para o usu\u00e1rio no novo aplicativo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A colabora\u00e7\u00e3o com o design para criar o processo de cadastro<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">At\u00e9 agora, destacamos alguns dos elementos gerais, como armazenamento e gerenciamento de recursos. Por\u00e9m, esse projeto foi uma reconstru\u00e7\u00e3o de todo o aplicativo Mailgun, que j\u00e1 continha processos em funcionamento voltados para a clientela que precis\u00e1vamos proteger ou melhorar. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O processo de cadastro no aplicativo \u00e9 um bom exemplo de como tivemos que avaliar os modelos atuais, trabalhar com v\u00e1rias equipes e implementar a nossa nova pilha. Ao dividir um projeto para a a\u00e7\u00e3o, h\u00e1 algumas perguntas que sempre fazemos:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>1. Como obtemos e preparamos o plano para os dados atualmente?<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Estrat\u00e9gia: <\/b>documentar o cadastro atual e a l\u00f3gica de cria\u00e7\u00e3o de conta do processo existente do Mailgun. Isso nos ajudaria a arquivar nossos processos passados, mas tamb\u00e9m a analisar exatamente como \u00edamos alterar o sistema atual para estabelecer as bases da nossa atualiza\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>2. Quais s\u00e3o as etapas da nossa itera\u00e7\u00e3o atual at\u00e9 o estado desejado?<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Estrat\u00e9gia: <\/b>depois de documentarmos e incluirmos nossas a\u00e7\u00f5es no plano, precisamos melhorar nossa base de conhecimento. Focamos no aprendizado das conven\u00e7\u00f5es e dos recursos do framework React que usar\u00edamos para permitir a renderiza\u00e7\u00e3o no lado do servidor e recursos adicionais para dar suporte \u00e0 nossa efici\u00eancia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>3. Que tipo de trabalho \u00e9 necess\u00e1rio das outras equipes?<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Estrat\u00e9gia:<\/b> criar a IU. Como est\u00e1vamos efetivamente mesclando dois produtos independentes em um pacote de produtos que compartilham uma infraestrutura, precis\u00e1vamos criar a IU ao mesmo tempo que faz\u00edamos as altera\u00e7\u00f5es nos produtos. Isso significaria que a maior parte das atualiza\u00e7\u00f5es tamb\u00e9m seria um redesenho.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Como estabelecer o escopo do design<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">O nosso principal objetivo era diferenciar os nossos produtos \u2013 Mailgun e Mailgun Optimize \u2013 sem criar duas infraestruturas separadas para dar suporte a eles. Voc\u00ea poderia se perguntar: por que separ\u00e1-los? Por que n\u00e3o apenas mesclar os produtos? N\u00e3o seria mais f\u00e1cil? Bem, na verdade n\u00e3o. Nossos produtos t\u00eam prop\u00f3sitos muito espec\u00edficos, e a compra de um deles n\u00e3o significa que um usu\u00e1rio precise comprar todos eles. Al\u00e9m disso, o <b>objetivo final<\/b> por tr\u00e1s da reconstru\u00e7\u00e3o era desenvolver uma infraestrutura que pudesse dar suporte \u00e0 adi\u00e7\u00e3o de mais produtos no futuro, sem comprometer a funcionalidade do back-end nem criar uma situa\u00e7\u00e3o em que os produtos fossem dif\u00edceis de navegar na perspectiva do usu\u00e1rio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A solu\u00e7\u00e3o? Design. Isso significou estabelecer novos padr\u00f5es para os nossos aplicativos Mailgun e Mailgun Optimize em termos de ilustra\u00e7\u00f5es, cores da marca e formata\u00e7\u00e3o de texto. Isso tamb\u00e9m significou alinhar o marketing com a forma como falamos sobre os nossos produtos e como eles funcionam juntos.<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> Sab\u00edamos que quaisquer padr\u00f5es que estabelec\u00eassemos se tornariam a base para a adi\u00e7\u00e3o de novos produtos e recursos no futuro.<\/div>\r\n    <\/div>\r\n\n\n\n<h3 class=\"wp-block-heading\">Por dentro da mente do design<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Quando come\u00e7amos a criar o processo de design, <b>tivemos que considerar as \u00e1reas compartilhadas do aplicativo em compara\u00e7\u00e3o com as \u00e1reas espec\u00edficas dele. <\/b>Recursos como faturamento e o processo de cadastro seriam \u00e1reas compartilhadas, em compara\u00e7\u00e3o com as \u00e1reas independentes da IU, que atenderiam aos nossos produtos individuais.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Come\u00e7amos em 2021 analisando a se\u00e7\u00e3o de faturamento e nos concentrando na l\u00f3gica de como lidar\u00edamos com a possibilidade de os usu\u00e1rios terem uma conta de faturamento compat\u00edvel com o gerenciamento e a personaliza\u00e7\u00e3o de v\u00e1rios produtos. Isso definiu o tom de como ir\u00edamos avan\u00e7ar e analisar recursos como faturamento ou o nosso processo de cadastro, da perspectiva da converg\u00eancia de v\u00e1rios produtos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mapeamos todos os pontos de contato que dependeriam de um espa\u00e7o compartilhado ou de um espa\u00e7o espec\u00edfico dos produtos dentro do aplicativo. Isso incluiu elementos como uma navega\u00e7\u00e3o \u00e0 esquerda que seria espec\u00edfica do produto e incluiria configura\u00e7\u00f5es que tamb\u00e9m eram espec\u00edficas do produto, mas que tamb\u00e9m garantiria que os espa\u00e7os compartilhados no aplicativo seguissem os mesmos padr\u00f5es.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"quote hub-quote longform-spacings d-flex flex-column rounded-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 shadow-sm bg-primary\" data-theme=\"light\">\r\n\r\n        <div class=\"quote-logo mb-3\">\r\n                            <svg height=\"40\" class=\"quote-icon quote-icon-color\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/custom-icons\/quotes-right.svg\"><\/svg>\r\n                    <\/div>\r\n\r\n        <blockquote class=\"quote-content content-body m-0 text-body-color\" id=\"quote-block-fd960772f32bc15d9a23d9ba9425fc73\">\r\n            Fizemos muita pesquisa da concorr\u00eancia, e tamb\u00e9m de tend\u00eancias gerais de padr\u00f5es de design, para ver como a altern\u00e2ncia entre produtos em um \u00fanico aplicativo era feita atualmente e o que fazia sentido em rela\u00e7\u00e3o ao que era necess\u00e1rio na navega\u00e7\u00e3o superior.        <\/blockquote>\r\n\r\n                    <div class=\"d-flex gap-3 mt-5\">\r\n                                    <div>\r\n                        <img decoding=\"async\" width=\"72\" height=\"72\" class=\"rounded-lg quote-author\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/nicki_snyder.jpeg\" alt=\"Foto de Nicki Snyder\">\r\n                    <\/div>\r\n                                <div class=\"d-flex flex-column align-self-center fs-sm\">\r\n                    <cite class=\"mb-0 fw-bold text-accent fst-normal\" aria-describedby=\"quote-block-fd960772f32bc15d9a23d9ba9425fc73\">\r\n                        Nicki Snyder                    <\/cite>\r\n                                    <\/div>\r\n            <\/div>\r\n            <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Em seguida, analisamos os elementos da jornada do usu\u00e1rio, para que pud\u00e9ssemos <b>mapear a estrutura de design<\/b> e os esquemas de cores que ajudariam a otimizar a experi\u00eancia do usu\u00e1rio. Foram duas as perguntas que usamos para nos guiar:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Em qual fluxo um usu\u00e1rio entraria, agora que est\u00e1 navegando em um \u00fanico aplicativo em vez de em dois aplicativos separados?<\/li>\n\n\n\n<li>Qual seria o nosso plano para lidar e ajustar o fluxo de design em torno de um recurso espec\u00edfico no novo aplicativo?<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Criamos designs que variavam as cores e o posicionamento para direcionar os usu\u00e1rios para as intera\u00e7\u00f5es dentro do aplicativo e, em seguida, realizamos testes de usu\u00e1rio para observar e validar os caminhos do usu\u00e1rio. Para onde os usu\u00e1rios estavam navegando? O que os movimentos do mouse nos diziam sobre qualquer hesita\u00e7\u00e3o? O que as pessoas esperavam ver?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Com essas pesquisas de testes de usu\u00e1rio, conseguimos ajustar os elementos de design para otimizar a navega\u00e7\u00e3o de uma forma que fosse intuitiva para os nossos usu\u00e1rios. Depois disso, lan\u00e7amos uma <b>experi\u00eancia Beta<\/b> para usu\u00e1rios selecionados, que nos permitiu coletar informa\u00e7\u00f5es de sess\u00f5es e inst\u00e2ncias reais de usu\u00e1rios para nos guiar sobre o que funcionou e o que ainda precis\u00e1vamos ajustar.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4091\" width=\"2075\" height=\"845\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/app.png\" alt=\"A screen shot of the new app user interface illustrating the design unity and product specific navigation menu.\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/app.png 2075w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/app-1536x626.png 1536w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/app-2048x834.png 2048w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/app-300x122.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/app-768x313.png 768w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/app-1024x417.png 1024w\" sizes=\"(max-width: 2075px) 100vw, 2075px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">A substitui\u00e7\u00e3o de ativos visuais para ficarem alinhados \u00e0 marca<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A mudan\u00e7a dos ativos visuais foi uma parte para a navega\u00e7\u00e3o e a outra para a unifica\u00e7\u00e3o. Estilizar os menus de navega\u00e7\u00e3o com a nossa paleta de cores com identidade de marca pode parecer uma necessidade puramente est\u00e9tica, mas sab\u00edamos que est\u00e1vamos criando o tema de como nossos produtos se distinguiriam em um espa\u00e7o compartilhado no futuro.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"quote hub-quote longform-spacings d-flex flex-column rounded-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 shadow-sm bg-primary\" data-theme=\"light\">\r\n\r\n        <div class=\"quote-logo mb-3\">\r\n                            <svg height=\"40\" class=\"quote-icon quote-icon-color\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/custom-icons\/quotes-right.svg\"><\/svg>\r\n                    <\/div>\r\n\r\n        <blockquote class=\"quote-content content-body m-0 text-body-color\" id=\"quote-block-3bcae0c9ff5d071d60900cc2f098e4b2\">\r\n            Criamos uma estrutura de navega\u00e7\u00e3o que pudesse ser dimensionada n\u00e3o apenas no Mailgun e no Mailgun Optimize, mas tamb\u00e9m nos nossos outros produtos de e-mail no futuro.        <\/blockquote>\r\n\r\n                    <div class=\"d-flex gap-3 mt-5\">\r\n                                    <div>\r\n                        <img decoding=\"async\" width=\"72\" height=\"72\" class=\"rounded-lg quote-author\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/nicki_snyder.jpeg\" alt=\"Foto de Nicki Snyder\">\r\n                    <\/div>\r\n                                <div class=\"d-flex flex-column align-self-center fs-sm\">\r\n                    <cite class=\"mb-0 fw-bold text-accent fst-normal\" aria-describedby=\"quote-block-3bcae0c9ff5d071d60900cc2f098e4b2\">\r\n                        Nicki Snyder                    <\/cite>\r\n                                            <span class=\"mb-0 text-body-color\">Diretoria de design e experi\u00eancia do produto<\/span>\r\n                                    <\/div>\r\n            <\/div>\r\n            <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Os \u00edcones dos produtos permitiriam o reconhecimento independente da marca sem criar a confus\u00e3o de mostrar os logotipos completos. Isso tamb\u00e9m nos daria a oportunidade de criar um caminho para o reconhecimento da marca para outros produtos do nosso portf\u00f3lio, com links para eles a partir de seus \u00edcones. Ao adicionar uma \u00e1rea <b>Explorar<\/b> no aplicativo, onde os usu\u00e1rios alternam entre os produtos, poder\u00edamos ajudar a fazer vendas cruzadas para os usu\u00e1rios e aumentar o reconhecimento sobre o nosso pacote completo de produtos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">E, por fim, como equipe, achamos que seria muito legal ter um visual totalmente novo para acompanhar a nova tecnologia, de modo a ampliar o impacto de tudo o que hav\u00edamos criado de novo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c0 medida que o portal evolui<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Os aplicativos n\u00e3o podem ficar estagnados, e o <b>portal<\/b> evoluir\u00e1 com o tempo. Esse foi o principal objetivo de construir algo com a l\u00f3gica e a infraestrutura feitas para dimensionar. Ent\u00e3o, quais s\u00e3o as coisas que esperamos mudar primeiro?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>O refinamento da arquitetura de implanta\u00e7\u00e3o:<\/strong> em &#8220;<a href=\"https:\/\/www.mailgun.com\/blog\/dev-life\/mailgun-app-rebuild-part-one\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Parte 1: ideias excelentes<\/a>&#8220;, falamos sobre o volume da programa\u00e7\u00e3o que escrevemos na \u00faltima d\u00e9cada \u2013 milhares de linhas \u2013 e, assim como levar\u00e1 tempo para portarmos gradualmente esse c\u00f3digo, tamb\u00e9m levar\u00e1 tempo para desativar os nossos processos de implanta\u00e7\u00e3o anteriores. Isso significou que tivemos que criar o <b>portal<\/b> para funcionar com dois processos de implanta\u00e7\u00e3o, nossos processos legados e nossa nova compila\u00e7\u00e3o usando o Cockpit \u2013 o que foi o empreendimento mais f\u00e1cil de todos&#8230; <i>Isso foi um pesadelo: dois processos de implanta\u00e7\u00e3o! Nossa ambi\u00e7\u00e3o \u00e9 enorme.<\/i><\/li>\n\n\n\n<li><strong>O gerenciamento de v\u00e1rias bases de programa\u00e7\u00e3o:<\/strong> enquanto trabalhamos para portar gradualmente o nosso c\u00f3digo, continuaremos precisando gerenciar v\u00e1rias bases de c\u00f3digo e portar o c\u00f3digo de diferentes conjuntos de produtos antes de podermos unificar.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Ciclo de feedback<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">O <b>portal <\/b>passou tanto pelos testes de usu\u00e1rio quanto pela fase Beta, portanto, conseguimos detectar e corrigir todos os bugs \u2013 como ningu\u00e9m da engenharia diria na vida.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O redesenho do aplicativo foi executado para atender aos nossos usu\u00e1rios e tamb\u00e9m facilitar a vida das nossas equipes internas que o gerenciam. Assim, implementamos o feedback das observa\u00e7\u00f5es e coment\u00e1rios internos e externos. Partimos com a inten\u00e7\u00e3o de que nenhum processo piorasse, de que a atualiza\u00e7\u00e3o do aplicativo n\u00e3o priorizasse um processo sacrificando a qualidade do outro. E temos a confian\u00e7a de que tudo est\u00e1 t\u00e3o bom quanto \u2013 ou melhor do que \u2013 a nossa vers\u00e3o legada.<\/p>\n\n\n    <div data-content-type=\"longform\"  class=\"callout text-body-color px-5 py-6 px-md-6 px-lg-7 py-md-7 longform-spacings rounded-lg bg-light\" data-theme=\"light\">\r\n\r\n        <div class=\"content-body\"> Se algo n\u00e3o parecer muito certo no aplicativo, ou se voc\u00ea apenas quiser dar um oi, <a href='https:\/\/www.mailgun.com\/contact\/support\/'>entre em contato com a nossa equipe<\/a>. N\u00e3o estamos apenas ouvindo, estamos prestando aten\u00e7\u00e3o.<\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Aja com excel\u00eancia e crie coisas legais<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Como se encerra uma publica\u00e7\u00e3o quando o projeto est\u00e1 em andamento? O aplicativo Mailgun saiu recentemente da fase Beta, e estamos fazendo pequenas melhorias regularmente enquanto preparamos o plano para os lan\u00e7amentos maiores, que ser\u00e3o compat\u00edveis com essa reconstru\u00e7\u00e3o inicial. Bill e Ted diriam para serem excelentes uns com os outros e continuarem festejando. Em termos de engenharia, isso significa que seguimos em frente e iteramos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rodem os cr\u00e9ditos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Esse projeto representa um marco importante na separa\u00e7\u00e3o visual dos nossos produtos Mailgun e Mailgun Optimize no nosso aplicativo. Ele tamb\u00e9m representa uma mudan\u00e7a na tecnologia e em como estamos abordando o nosso desenvolvimento de front-end. Al\u00e9m de ser apenas um design bonito, focamos no desempenho para manter os nossos lan\u00e7amentos pequenos e \u00e1geis. As mudan\u00e7as introduzidas com essa reconstru\u00e7\u00e3o foram o resultado de um incr\u00edvel esfor\u00e7o de equipe, que nos permitir\u00e1 nos afastar do nosso mon\u00f3lito legado de front-end.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o conseguir\u00edamos ter feito isso sem a ajuda da nossa equipe incrivelmente talentosa, e n\u00e3o quer\u00edamos encerrar essa s\u00e9rie sem estender os nossos agradecimentos especiais a ela.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>Equipe central da IU<\/b>: Nando Pe\u00f1a, Matt Leong, Matthew Prestlien<\/li>\n\n\n\n<li><b>Equipe de crescimento<\/b>: Keith Cruz, Ryan Little, Jorge Miramontes, Mazen Abdul<\/li>\n\n\n\n<li><b>Equipe do Mailgun Optimize<\/b>: David Ortiz, Dannon Gilbert, Jeffrey Jurgajtis, Peter Trinder<\/li>\n\n\n\n<li><b>Equipe do Mailgun<\/b>: Celeste Rance, Jonathan Kruse, Iqbal Singh, Levi Trejo, John Badali, Chris Farmer, Nicki Snyder (design)<\/li>\n\n\n\n<li><b>Patrocinador executivo<\/b>: Josh Odom<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Esse projeto come\u00e7ou como um movimento de base dentro do Mailgun e cresceu \u00e0 medida que se espalhou pelas equipes. Hoje, o nosso aplicativo atualizado oferece suporte a experi\u00eancias mais elevadas para os usu\u00e1rios <i>e <\/i>a uma experi\u00eancia melhorada para o desenvolvimento. Mas n\u00e3o terminamos. Nunca terminamos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><i>Voc\u00ea quer entrar nos bastidores e acompanhar as nossas hist\u00f3rias enquanto implantamos mais coisas legais? Assine a nossa newsletter para ficar por dentro.<\/i><\/p>\n\n\n    <div data-content-type=\"longform\" class=\"longform-spacings\">\r\n        <div class=\"cta bg-primary rounded-lg px-5 py-6 p-md-7 px-md-6\">\r\n                    <div class=\"form-subscription\">\r\n                            <div class=\"h4 mb-3\">\r\n                    Mantenha-me informado! Receba \u00f3timos recursos em sua caixa de entrada toda semana.                <\/div>\r\n                                    <form accept-charset=\"UTF-8\" action=\"\" enctype=\"multipart\/form-data\" data-form-subscription method=\"POST\" style=\"max-width: 400px;\">\r\n                <div class=\"row justify-content-between align-items-top g-2\">\r\n                    <div class=\"col-10\">\r\n                        <input type=\"email\" name=\"email\" class=\"form-control\" placeholder=\"Email\" autocomplete=\"email\" required>\r\n                        <div data-fs=\"error\" role=\"alert\" class=\"invalid-feedback\">\r\n                            Please complete this required field.                        <\/div>\r\n                    <\/div>\r\n                                            <div class=\"col-12 order-last mt-3 fs-xxs\" data-fs=\"acceptance\" style=\"display:none;\">\r\n                            \r\n                                <div class=\"form-check\">\r\n                                    <input id=\"formSubscriptionAcceptance-terms-6215\" class=\"form-check-input\"\r\n                                        type=\"checkbox\" name=\"terms\">\r\n                                    <label for=\"formSubscriptionAcceptance-terms-6215\" class=\"form-check-label text-body-color\">\r\n                                        I have read and agree to the Terms of Service.                                        <span class=\"hs-form-required\">*<\/span>\r\n                                    <\/label>\r\n                                <\/div>\r\n\r\n                            \r\n                                <div class=\"form-check\">\r\n                                    <input id=\"formSubscriptionAcceptance-privacy-2289\" class=\"form-check-input\"\r\n                                        type=\"checkbox\" name=\"privacy\">\r\n                                    <label for=\"formSubscriptionAcceptance-privacy-2289\" class=\"form-check-label text-body-color\">\r\n                                        I have read and agree to the Privacy Policy.                                        <span class=\"hs-form-required\">*<\/span>\r\n                                    <\/label>\r\n                                <\/div>\r\n\r\n                                                    <\/div>\r\n                    \r\n                                            <div class=\"col-12 order-last fs-xxs mb-0 mt-2 text-body-color\">\r\n                            Envie-me a newsletter da Mailjet. Eu concordo expressamente em receber a newsletter e sei que posso cancelar a inscri\u00e7\u00e3o facilmente a qualquer momento.                        <\/div>\r\n                    \r\n                    <div class=\"col-2\">\r\n                        <button type=\"submit\" value=\"Submit\" aria-label=\"Submit\" class=\"btn btn-secondary btn-icon\">\r\n                            <svg aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/layout\/chevron-right.svg\"><\/svg>\r\n                        <\/button>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <input type=\"hidden\" name=\"formSubscriptionRecaptchaToken\" data-fs=\"recaptcha-token\">\r\n                <input type=\"hidden\" name=\"customListID\" value=\"\">\r\n\r\n            <\/form>\r\n            <div data-fs=\"message-success\" style=\"display: none;\">\r\n                <p class=\"mb-0 mt-2 text-body-color\">\r\n                    Verifique sua caixa de entrada mensalmente para receber sua newsletter da Mailjet!                <\/p>\r\n            <\/div>\r\n        <\/div>\r\n        <\/div>\r\n    <\/div>\r\n","protected":false},"excerpt":{"rendered":"<p>A reconstru\u00e7\u00e3o do aplicativo Mailgun foi um empreendimento imenso e uma jornada incr\u00edvel. Vamos levar voc\u00ea para tr\u00e1s das nossas telas em um mergulho profundo de duas partes sobre como e por que fizemos isso acontecer. Na parte 1, respondemos \u00e0 pergunta: Por que reconstruir? Na parte 2, vamos mergulhar na implementa\u00e7\u00e3o e execu\u00e7\u00e3o.<\/p>\n","protected":false},"author":17,"featured_media":3952,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[19],"class_list":["post-25441","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-dev-life"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Como reconstru\u00edmos o aplicativo Mailgun para v\u00e1rios produtos: parte 2 - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Uma coisa \u00e9 ter uma ideia, e outra \u00e9 execut\u00e1-la. Confira a parte 2 da nossa jornada de reconstru\u00e7\u00e3o do aplicativo, na qual trabalhamos com v\u00e1rias equipes para concretizar a nossa vis\u00e3o.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/reconstrucao-do-aplicativo-mailgun-parte-dois\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como reconstru\u00edmos o aplicativo Mailgun para v\u00e1rios produtos: parte 2 - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Uma coisa \u00e9 ter uma ideia, e outra \u00e9 execut\u00e1-la. Confira a parte 2 da nossa jornada de reconstru\u00e7\u00e3o do aplicativo, na qual trabalhamos com v\u00e1rias equipes para concretizar a nossa vis\u00e3o.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/reconstrucao-do-aplicativo-mailgun-parte-dois\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-22T13:18:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/reconstrucao-do-aplicativo-mailgun-parte-dois\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/reconstrucao-do-aplicativo-mailgun-parte-dois\\\/\",\"name\":\"Como reconstru\u00edmos o aplicativo Mailgun para v\u00e1rios produtos: parte 2 - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/reconstrucao-do-aplicativo-mailgun-parte-dois\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/reconstrucao-do-aplicativo-mailgun-parte-dois\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"datePublished\":\"2023-01-19T00:00:00+00:00\",\"dateModified\":\"2026-09-22T13:18:17+00:00\",\"description\":\"Uma coisa \u00e9 ter uma ideia, e outra \u00e9 execut\u00e1-la. Confira a parte 2 da nossa jornada de reconstru\u00e7\u00e3o do aplicativo, na qual trabalhamos com v\u00e1rias equipes para concretizar a nossa vis\u00e3o.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/reconstrucao-do-aplicativo-mailgun-parte-dois\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/reconstrucao-do-aplicativo-mailgun-parte-dois\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/reconstrucao-do-aplicativo-mailgun-parte-dois\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/reconstrucao-do-aplicativo-mailgun-parte-dois\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/inicio\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Um mergulho profundo no aplicativo Mailgun: parte 2 \u2013 uma execu\u00e7\u00e3o triunfal\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Como reconstru\u00edmos o aplicativo Mailgun para v\u00e1rios produtos: parte 2 - Transactional Email API Service For Developers | Mailgun","description":"Uma coisa \u00e9 ter uma ideia, e outra \u00e9 execut\u00e1-la. Confira a parte 2 da nossa jornada de reconstru\u00e7\u00e3o do aplicativo, na qual trabalhamos com v\u00e1rias equipes para concretizar a nossa vis\u00e3o.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/reconstrucao-do-aplicativo-mailgun-parte-dois\/","og_locale":"pt_BR","og_type":"article","og_title":"Como reconstru\u00edmos o aplicativo Mailgun para v\u00e1rios produtos: parte 2 - Transactional Email API Service For Developers | Mailgun","og_description":"Uma coisa \u00e9 ter uma ideia, e outra \u00e9 execut\u00e1-la. Confira a parte 2 da nossa jornada de reconstru\u00e7\u00e3o do aplicativo, na qual trabalhamos com v\u00e1rias equipes para concretizar a nossa vis\u00e3o.","og_url":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/reconstrucao-do-aplicativo-mailgun-parte-dois\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","article_modified_time":"2026-09-22T13:18:17+00:00","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/reconstrucao-do-aplicativo-mailgun-parte-dois\/","url":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/reconstrucao-do-aplicativo-mailgun-parte-dois\/","name":"Como reconstru\u00edmos o aplicativo Mailgun para v\u00e1rios produtos: parte 2 - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/reconstrucao-do-aplicativo-mailgun-parte-dois\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/reconstrucao-do-aplicativo-mailgun-parte-dois\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","datePublished":"2023-01-19T00:00:00+00:00","dateModified":"2026-09-22T13:18:17+00:00","description":"Uma coisa \u00e9 ter uma ideia, e outra \u00e9 execut\u00e1-la. Confira a parte 2 da nossa jornada de reconstru\u00e7\u00e3o do aplicativo, na qual trabalhamos com v\u00e1rias equipes para concretizar a nossa vis\u00e3o.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/reconstrucao-do-aplicativo-mailgun-parte-dois\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/reconstrucao-do-aplicativo-mailgun-parte-dois\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/reconstrucao-do-aplicativo-mailgun-parte-dois\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/reconstrucao-do-aplicativo-mailgun-parte-dois\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/pt\/inicio\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/pt\/blog\/"},{"@type":"ListItem","position":3,"name":"Um mergulho profundo no aplicativo Mailgun: parte 2 \u2013 uma execu\u00e7\u00e3o triunfal"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/pt\/#website","url":"https:\/\/www.mailgun.com\/pt\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!","publisher":{"@id":"https:\/\/www.mailgun.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/pt\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/25441","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/users\/17"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/25441\/revisions"}],"predecessor-version":[{"id":25448,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/25441\/revisions\/25448"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media\/3952"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media?parent=25441"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog_category?post=25441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}