{"id":25131,"date":"2026-09-16T21:29:34","date_gmt":"2026-09-16T21:29:34","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/mailgun-app-rebuild-part-two-2\/"},"modified":"2026-09-16T21:29:34","modified_gmt":"2026-09-16T21:29:34","slug":"mailgun-app-rebuild-part-two","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mailgun-app-rebuild-part-two\/","title":{"rendered":"An\u00e1lisis a fondo de la aplicaci\u00f3n de Mailgun: parte 2 &#8211; Una ejecuci\u00f3n de lo m\u00e1s triunfal"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Cuando emprendimos el viaje de reconstrucci\u00f3n de la aplicaci\u00f3n de Mailgun hace tres largos a\u00f1os, dedicamos gran parte del tiempo a pruebas de concepto, planificaci\u00f3n y pruebas. <b>\u00bfNuestro objetivo final?<\/b> Crear una experiencia en la aplicaci\u00f3n que muestre distintos productos de nuestro cat\u00e1logo, permita navegar f\u00e1cilmente entre ellos y d\u00e9 soporte a estos productos de forma eficiente con una \u00fanica infraestructura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El alcance de este proyecto era tan grande que necesit\u00e1bamos m\u00e1s de un art\u00edculo para describir qu\u00e9 impuls\u00f3 la reconstrucci\u00f3n, c\u00f3mo la llevamos a cabo, qu\u00e9 aprendimos y qu\u00e9 supone para nuestro futuro la implementaci\u00f3n de esta nueva tecnolog\u00eda. En la primera parte de este \u00e9pico viaje, \u201c<a href=\"https:\/\/www.mailgun.com\/blog\/dev-life\/reconstruccion-app-mailgun-parte-uno\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Parte 1: ideas excelentes<\/a>\u201d, te hicimos retroceder en el tiempo para que observaras nuestro proceso. Te dejamos entrar en nuestras cabezas y compartimos nuestros motivos para este proyecto, adem\u00e1s de guiarte por los <a href=\"https:\/\/www.mailgun.com\/blog\/dev-life\/reconstruccion-app-mailgun-parte-uno\/#chapter-8\" target=\"_tabs\" rel=\"noopener noreferrer\">retos<\/a> a los que sab\u00edamos que nos enfrentar\u00edamos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora, en \u201cParte 2: una ejecuci\u00f3n de lo m\u00e1s triunfal\u201d, te llevamos entre bastidores para mostrarte c\u00f3mo implementamos este proyecto, c\u00f3mo colaboraron nuestros equipos y el rol que desempe\u00f1\u00f3 el dise\u00f1o en nuestro proceso de reflexi\u00f3n.\u00a0 Tiene drama, tiene migraciones&#8230; y probablemente demasiadas referencias a la ciencia ficci\u00f3n. Acomp\u00e1\u00f1anos en el viaje.<\/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-1682\"><p class=\"h5 m-0\" id=\"toc-title-1682\">\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=\"#un-breve-resumen-de-como-hemos-llegado-hasta-aqui\">Un breve resumen de c\u00f3mo hemos llegado hasta aqu\u00ed<\/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=\"#colaboracion-con-diseno-para-crear-el-proceso-de-registro\">Colaboraci\u00f3n con dise\u00f1o para crear el proceso de registro<\/a><a class=\"scrollme link-body-color\" href=\"#establecimiento-del-alcance-del-diseno\">Establecimiento del alcance del dise\u00f1o<\/a><a class=\"scrollme link-body-color\" href=\"#en-la-mente-del-diseno\">En la mente del dise\u00f1o<\/a><a class=\"scrollme link-body-color\" href=\"#sustitucion-de-recursos-visuales-para-ajustarlos-a-la-marca\">Sustituci\u00f3n de recursos visuales para ajustarlos a la 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-evolucione-el-portal\">A medida que evolucione el portal<\/a><a class=\"scrollme link-body-color\" href=\"#ciclo-de-retroalimentacion\">Ciclo de retroalimentaci\u00f3n<\/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=\"#sed-excelentes-los-unos-con-los-otros-y-cread-cosas-geniales\">Sed excelentes los unos con los otros y cread cosas geniales<\/a><a class=\"scrollme link-body-color\" href=\"#creditos\">Cr\u00e9ditos<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Un breve resumen de c\u00f3mo hemos llegado hasta aqu\u00ed<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La iniciativa de actualizar la aplicaci\u00f3n de Mailgun se inspir\u00f3 en las limitaciones de nuestra infraestructura heredada, en concreto con nuestra <a href=\"https:\/\/www.mailgun.com\/blog\/dev-life\/reconstruccion-app-mailgun-parte-uno\/#chapter-6\" target=\"_tabs\" rel=\"noopener noreferrer\">organizaci\u00f3n multirrepositorio<\/a>, en la que cada proyecto de frontend ten\u00eda su propio repositorio independientemente del hecho de que muchos proyectos repitieran las mismas tareas. \u00bfY esto qu\u00e9 supon\u00eda para nuestros equipos? Para empezar, que localizar c\u00f3digo espec\u00edfico o encontrar errores era casi tan f\u00e1cil como para Deckard cazar replicantes rebeldes en una ciudad dist\u00f3pica densamente poblada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Gestionar m\u00faltiples repositorios con funciones redundantes ralentiza los tiempos de respuesta y consume recursos. <\/b>\u00bfNuestra soluci\u00f3n? Reorganizarnos en una estructura de monorrepositorio modular. En t\u00e9rminos de <i>Blade Runner<\/i>, en lugar de dar caza a replicantes por toda una ciudad en expansi\u00f3n, navegar\u00edamos por una \u00fanica megaestructura donde los proyectos se organizan en m\u00f3dulos y los replicantes se pueden buscar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este plan de acci\u00f3n requer\u00eda implementar nuevas herramientas en nuestro stack, un nuevo aspecto para nuestra interfaz de usuario y gestionar grandes cantidades de c\u00f3digo heredado. Si nos permites parafrasear: \u201cEl ser humano ha encontrado a su rival\u201d&#8230; y ahora es problema del equipo de ingenier\u00eda.<\/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\">Uno de los primeros pasos para configurar nuestra nueva aplicaci\u00f3n fue encontrar la manera de reutilizar la mayor parte posible de nuestro sistema heredado para no tener que reconstruirlo todo. Pero no quer\u00edamos seguir ofreciendo asistencia a todas nuestras dependencias heredadas obsoletas. <b>Necesit\u00e1bamos una forma de empaquetar nuestro c\u00f3digo existente de modo que la nueva infraestructura no lo rechazara.<\/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> es una forma de definir un fragmento de c\u00f3digo (toda nuestra aplicaci\u00f3n heredada, en este caso) como un recurso singular e importable que puede ser independiente o estar configurado para compartir recursos con el consumidor. <b>Module Federation nos aport\u00f3 una soluci\u00f3n, ya que nos permiti\u00f3 volver a empaquetar el c\u00f3digo existente para que pudiera consumirlo la nueva plataforma<\/b> sin renunciar a todas las novedades que ten\u00edamos en el plan. La mayor parte del equipo de desarrollo podr\u00eda seguir corrigiendo errores y actualizando nuestra antigua base de c\u00f3digo, \u00a1y la nueva aplicaci\u00f3n los obtendr\u00eda gratis!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para que esto fuera posible, necesit\u00e1bamos crear un middleware de enrutamiento declarativo que nos permitiera dirigir el tr\u00e1fico entre las aplicaciones antiguas y las nuevas. Poco a poco iremos migrando el c\u00f3digo heredado a la nueva plataforma, pero hasta entonces, esta soluci\u00f3n de enrutamiento por p\u00e1gina nos permitir\u00eda lanzar nuevas funciones sin perder el ritmo, y sin el quebradero de cabeza de reescribirlo todo a la vez. Al haber definido ya las reglas, ser\u00eda m\u00e1s f\u00e1cil cambiar y mantener el enrutamiento en nuestra aplicaci\u00f3n.<\/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\">Adem\u00e1s de los componentes de la migraci\u00f3n a gran escala, tambi\u00e9n ten\u00edamos que resolver la migraci\u00f3n y la adaptaci\u00f3n de los procesos existentes centrados en funciones que deb\u00edan seguir operando de forma habitual para el usuario en la nueva aplicaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Colaboraci\u00f3n con dise\u00f1o para crear el proceso de registro<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hasta ahora, hemos arrojado luz sobre algunos de los elementos generales, como el almacenamiento y la gesti\u00f3n de recursos. Pero este proyecto consist\u00eda en la reconstrucci\u00f3n de toda la aplicaci\u00f3n de Mailgun, que ya conten\u00eda procesos operativos de cara a la clientela que deb\u00edamos proteger o mejorar. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El proceso de registro de la aplicaci\u00f3n es un buen ejemplo de c\u00f3mo tuvimos que evaluar los modelos actuales, trabajar con distintos equipos e implementar nuestro nuevo stack. A la hora de desglosar un proyecto para pasar a la acci\u00f3n, siempre nos hacemos algunas preguntas:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>1. \u00bfCu\u00e1l es nuestro plan actual de obtenci\u00f3n de datos?<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Estrategia: <\/b>documentar la l\u00f3gica actual de registro y creaci\u00f3n de cuenta para el proceso de Mailgun existente. Esto nos ayudar\u00eda a archivar nuestros procesos anteriores y tambi\u00e9n a analizar de forma precisa c\u00f3mo \u00edbamos a modificar el sistema actual para sentar las bases de nuestra actualizaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>2. \u00bfCu\u00e1les son los pasos que van desde nuestra versi\u00f3n actual hasta el estado deseado?<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Estrategia: <\/b>una vez que hubimos documentado y trazado nuestro plan de acci\u00f3n, necesit\u00e1bamos mejorar nuestra base de conocimientos. Nos centramos en aprender las convenciones y capacidades del framework de React que utilizar\u00edamos para habilitar la renderizaci\u00f3n del lado del servidor y las funciones adicionales con el fin de dar asistencia a nuestra eficiencia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>3. \u00bfQu\u00e9 trabajo se necesita por parte de otros equipos?<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Estrategia:<\/b> desarrollo de la interfaz de usuario. Dado que en la pr\u00e1ctica est\u00e1bamos fusionando dos productos independientes en una suite de productos que compart\u00edan una infraestructura, tuvimos que desarrollar la interfaz de usuario al mismo tiempo que introduc\u00edamos cambios en los productos. Esto significaba que la mayor\u00eda de las actualizaciones tambi\u00e9n ser\u00edan redise\u00f1os.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Establecimiento del alcance del dise\u00f1o<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nuestro objetivo principal era diferenciar nuestros productos, Mailgun y Mailgun Optimize, sin crear dos infraestructuras independientes para ofrecerles asistencia. Podr\u00edas preguntarte por qu\u00e9 separarlos. \u00bfPor qu\u00e9 no simplemente fusionar los productos?, \u00bfno ser\u00eda m\u00e1s f\u00e1cil? Bueno, no del todo. Nuestros productos tienen prop\u00f3sitos muy espec\u00edficos y adquirir uno de ellos no significa que un usuario tenga que comprarlos todos. Adem\u00e1s, el <b>objetivo final<\/b> tras la reconstrucci\u00f3n era desarrollar una infraestructura capaz de dar asistencia a la incorporaci\u00f3n de m\u00e1s productos en el futuro sin comprometer la funcionalidad del backend o crear una situaci\u00f3n en la que los productos fuesen dif\u00edciles de navegar desde la perspectiva del usuario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfLa soluci\u00f3n? Dise\u00f1ar. Esto supuso establecer nuevos est\u00e1ndares para nuestras aplicaciones de Mailgun y Mailgun Optimize en lo referente a ilustraciones, colores de marca y formato de texto. Tambi\u00e9n supuso alinear el marketing con la forma en que hablamos de nuestros productos y c\u00f3mo operan de forma conjunta.<\/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 los est\u00e1ndares que estableci\u00e9ramos se convertir\u00edan en la base para a\u00f1adir nuevos productos y funciones en el futuro.<\/div>\r\n    <\/div>\r\n\n\n\n<h3 class=\"wp-block-heading\">En la mente del dise\u00f1o<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Al empezar a desarrollar el proceso de dise\u00f1o, <b>tuvimos que considerar las \u00e1reas compartidas de la aplicaci\u00f3n frente a las \u00e1reas espec\u00edficas. <\/b>Funciones como la facturaci\u00f3n y el proceso de registro ser\u00edan \u00e1reas compartidas, a diferencia de las \u00e1reas independientes de la interfaz de usuario que dar\u00edan servicio a nuestros productos individuales.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Empezamos all\u00e1 por el 2021 revisando la secci\u00f3n de facturaci\u00f3n y centr\u00e1ndonos en la l\u00f3gica de c\u00f3mo \u00edbamos a conseguir que el usuario pudiera disponer de una cuenta de facturaci\u00f3n que fuera compatible con la gesti\u00f3n y personalizaci\u00f3n de m\u00faltiples productos. Esto marc\u00f3 la pauta de c\u00f3mo \u00edbamos a avanzar y analizar funciones como la facturaci\u00f3n o nuestro proceso de registro desde la perspectiva de la convergencia de varios productos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recopilamos todos los puntos de contacto que depender\u00edan de un espacio compartido o de un espacio espec\u00edfico de los productos dentro de la aplicaci\u00f3n. Esto inclu\u00eda elementos como una navegaci\u00f3n izquierda que ser\u00eda espec\u00edfica de cada producto e incluir\u00eda ajustes tambi\u00e9n espec\u00edficos, pero que a su vez garantizar\u00eda que los espacios compartidos de la aplicaci\u00f3n siguieran los mismos patrones.<\/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-04d28889001651502458ed8f56ffafed\">\r\n            Investigamos mucho a la competencia, pero tambi\u00e9n las tendencias generales de patrones de dise\u00f1o para ver c\u00f3mo se hace hoy en d\u00eda el cambio entre productos dentro de una misma aplicaci\u00f3n y qu\u00e9 ten\u00eda sentido de acuerdo a lo que se necesitaba en la navegaci\u00f3n 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-04d28889001651502458ed8f56ffafed\">\r\n                        Nicki Snyder                    <\/cite>\r\n                                    <\/div>\r\n            <\/div>\r\n            <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n, analizamos los elementos del recorrido del usuario para poder <b>trazar la estructura de dise\u00f1o<\/b> y los esquemas de color que ayudar\u00edan a optimizar la experiencia del usuario. Para orientarnos utilizamos dos preguntas:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u00bfEn qu\u00e9 flujo entrar\u00eda un usuario ahora que se mueve en una sola aplicaci\u00f3n en lugar de en dos aplicaciones separadas?<\/li>\n\n\n\n<li>\u00bfQu\u00e9 plan ten\u00edamos para gestionar y ajustar el flujo de dise\u00f1o en torno a una funci\u00f3n concreta dentro de la nueva aplicaci\u00f3n?<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Creamos dise\u00f1os que variaban los colores y la llegada a la bandeja de entrada para dirigir a nuestra base de usuarios hacia interacciones dentro de la aplicaci\u00f3n, y luego realizamos pruebas para observar y validar las rutas de cada usuario. \u00bfPor d\u00f3nde navegaban los usuarios? \u00bfQu\u00e9 nos indicaban los movimientos de su rat\u00f3n sobre sus dudas? \u00bfQu\u00e9 esperaban ver?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A partir de esta investigaci\u00f3n de pruebas de usuario, pudimos perfeccionar los elementos de dise\u00f1o para optimizar la navegaci\u00f3n de una forma que resultara intuitiva para nuestra base de usuarios. Despu\u00e9s de esto, se lanz\u00f3 una <b>experiencia beta<\/b> para usuarios seleccionados que nos permiti\u00f3 recopilar informaci\u00f3n de sesiones e instancias de usuarios reales que nos guiasen sobre lo que funcionaba y lo que a\u00fan necesit\u00e1bamos retocar.<\/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\">Sustituci\u00f3n de recursos visuales para ajustarlos a la marca<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cambiar los recursos visuales fue por una parte una cuesti\u00f3n de navegaci\u00f3n y por otra de unificaci\u00f3n. Dar estilo a los men\u00fas de navegaci\u00f3n con nuestra paleta de colores de marca puede parecer una necesidad puramente est\u00e9tica, pero sab\u00edamos que est\u00e1bamos creando la tem\u00e1tica para distinguir nuestros productos dentro de un espacio compartido en el 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-49630edceeae9a045958354e01bcc546\">\r\n            Creamos una estructura de navegaci\u00f3n que pudiera ser escalable no solo para Mailgun y Mailgun Optimize, sino tambi\u00e9n para nuestros otros productos de email en el 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-49630edceeae9a045958354e01bcc546\">\r\n                        Nicki Snyder                    <\/cite>\r\n                                            <span class=\"mb-0 text-body-color\">Directora de dise\u00f1o de experiencia, Producto<\/span>\r\n                                    <\/div>\r\n            <\/div>\r\n            <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Los iconos de los productos permitir\u00edan un reconocimiento de marca independiente sin crear la confusi\u00f3n que supondr\u00eda mostrar los logotipos completos. Esto tambi\u00e9n nos dar\u00eda la oportunidad de trazar un camino para el reconocimiento de marca de otros productos de nuestro cat\u00e1logo al enlazarlos desde sus iconos. Al a\u00f1adir un \u00e1rea para <b>Explorar<\/b> dentro de la aplicaci\u00f3n en la que los usuarios cambiaran de producto, podr\u00edamos ayudar a las ventas cruzadas a nuestra clientela y dar a conocer nuestra suite completa de productos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por \u00faltimo, como equipo, pensamos que estar\u00eda muy bien contar con un aspecto nuevo y moderno que acompa\u00f1ara a la nueva tecnolog\u00eda para amplificar el impacto de todo lo que hab\u00edamos construido.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A medida que evolucione el portal<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las aplicaciones no pueden estancarse y el <b>portal<\/b> evolucionar\u00e1 con el tiempo. Ese era el objetivo principal de construir algo con una l\u00f3gica e infraestructura hechas para escalar. As\u00ed pues, \u00bfqu\u00e9 es lo que esperamos que cambie primero?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Perfeccionamiento de la arquitectura de despliegue:<\/strong> en \u201c<a href=\"https:\/\/www.mailgun.com\/blog\/dev-life\/reconstruccion-app-mailgun-parte-uno\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Parte 1: ideas excelentes<\/a>\u201d, hablamos del volumen de c\u00f3digo que hemos escrito durante la \u00faltima d\u00e9cada (miles de l\u00edneas), y al igual que llevar\u00e1 tiempo migrar gradualmente ese c\u00f3digo, tambi\u00e9n llevar\u00e1 tiempo retirar nuestros procesos de despliegue anteriores. Esto significaba que ten\u00edamos que crear el <b>portal<\/b> para que funcionara con dos procesos de despliegue: nuestros procesos heredados y nuestra nueva compilaci\u00f3n con Cockpit, lo que result\u00f3 ser la tarea m\u00e1s f\u00e1cil de la historia&#8230; <i>\u00a1Fue una pesadilla, dos procesos de despliegue! Si algo nos sobra, es ambici\u00f3n.<\/i><\/li>\n\n\n\n<li><strong>Gesti\u00f3n de m\u00faltiples bases de c\u00f3digo:<\/strong> mientras trabajamos para migrar de forma gradual nuestro c\u00f3digo, tendremos que seguir gestionando m\u00faltiples bases de c\u00f3digo y migrando el c\u00f3digo de distintos conjuntos de productos antes de poder unificar.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Ciclo de retroalimentaci\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El <b>portal <\/b>pas\u00f3 tanto por pruebas de usuario como por la fase beta, as\u00ed que pudimos detectar y corregir todos los errores (frase que jam\u00e1s pronunciar\u00eda un profesional de la ingenier\u00eda).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El redise\u00f1o de la aplicaci\u00f3n se ejecut\u00f3 para dar servicio a nuestros usuarios y facilitar la vida de los equipos internos que gestionan la aplicaci\u00f3n. Por ello, implementamos las sugerencias de observaciones y comentarios tanto internos como externos. Partimos con la intenci\u00f3n de que ning\u00fan proceso saliera perdiendo, de que la actualizaci\u00f3n de la aplicaci\u00f3n no diera prioridad a un proceso en detrimento de la calidad de otro. Y tenemos la seguridad de que todo est\u00e1 igual de bien (o mejor) que en nuestra versi\u00f3n heredada.<\/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\"> Si algo no te parece del todo bien en la aplicaci\u00f3n, o si simplemente quieres saludar, <a href='https:\/\/www.mailgun.com\/contact\/support\/'>ponte en contacto con nuestro equipo<\/a>. No solo escuchamos, sino que prestamos atenci\u00f3n.<\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Sed excelentes los unos con los otros y cread cosas geniales<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfC\u00f3mo terminas un art\u00edculo cuando el proyecto sigue en marcha? La aplicaci\u00f3n de Mailgun acaba de salir de la fase beta y realizamos mejoras menores con regularidad, al tiempo que tenemos un plan para grandes lanzamientos que ser\u00e1n compatibles con esta reconstrucci\u00f3n inicial. Bill y Ted dir\u00edan: \u201cSed excelentes los unos con los otros y que siga la fiesta\u201d. En t\u00e9rminos de ingenier\u00eda, eso significa que seguimos adelante y que iteramos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cr\u00e9ditos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Este proyecto marca un hito importante en la separaci\u00f3n visual de nuestros productos Mailgun y Mailgun Optimize dentro de nuestra aplicaci\u00f3n. Tambi\u00e9n supone un cambio en la tecnolog\u00eda y en c\u00f3mo enfocamos nuestro desarrollo de frontend. M\u00e1s all\u00e1 de ser un dise\u00f1o bonito, nos centramos en el rendimiento para que nuestros lanzamientos sigan siendo peque\u00f1os y \u00e1giles. Los cambios introducidos con esta reconstrucci\u00f3n fueron el resultado de un incre\u00edble esfuerzo de equipo que nos permitir\u00e1 alejarnos de nuestro monolito heredado de frontend.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No lo habr\u00edamos logrado sin la ayuda de nuestro equipo, de un talento incre\u00edble, y no quer\u00edamos terminar esta serie sin expresarles nuestro m\u00e1s sincero agradecimiento.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>Equipo Central de Interfaz de Usuario<\/b>: Nando Pe\u00f1a, Matt Leong, Matthew Prestlien<\/li>\n\n\n\n<li><b>Equipo de Crecimiento<\/b>: Keith Cruz, Ryan Little, Jorge Miramontes, Mazen Abdul<\/li>\n\n\n\n<li><b>Equipo de Mailgun Optimize<\/b>: David Ortiz, Dannon Gilbert, Jeffrey Jurgajtis, Peter Trinder<\/li>\n\n\n\n<li><b>Equipo de Mailgun<\/b>: Celeste Rance, Jonathan Kruse, Iqbal Singh, Levi Trejo, John Badali, Chris Farmer, Nicki Snyder (dise\u00f1o)<\/li>\n\n\n\n<li><b>Patrocinador ejecutivo<\/b>: Josh Odom<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Este proyecto comenz\u00f3 como un movimiento de base en Mailgun y creci\u00f3 al extenderse r\u00e1pidamente por los distintos equipos. Hoy en d\u00eda, nuestra aplicaci\u00f3n actualizada est\u00e1 dando asistencia a unas experiencias de usuario de primer nivel, <i>as\u00ed como <\/i>a una experiencia de desarrollador mejorada. Pero no hemos terminado. Nunca terminamos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><i>\u00bfQuieres pasarte entre bastidores y seguir nuestras historias a medida que lanzamos m\u00e1s cosas interesantes? Suscr\u00edbete a nuestra newsletter para estar al d\u00eda.<\/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                    \u00a1Mantenme informado\/a! Recibe excelentes recursos en tu bandeja de entrada cada 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-7544\" class=\"form-check-input\"\r\n                                        type=\"checkbox\" name=\"terms\">\r\n                                    <label for=\"formSubscriptionAcceptance-terms-7544\" class=\"form-check-label text-body-color\">\r\n                                        He le\u00eddo y acepto los T\u00e9rminos de Servicio.                                        <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-9115\" class=\"form-check-input\"\r\n                                        type=\"checkbox\" name=\"privacy\">\r\n                                    <label for=\"formSubscriptionAcceptance-privacy-9115\" class=\"form-check-label text-body-color\">\r\n                                        He le\u00eddo y acepto la Pol\u00edtica de Privacidad.                                        <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                            Env\u00edame la newsletter de Mailjet. Acepto expresamente recibir la newsletter y s\u00e9 que puedo darme de baja f\u00e1cilmente en cualquier 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                    \u00a1Consulta mensualmente tu bandeja de entrada para recibir la newsletter de Mailjet!                <\/p>\r\n            <\/div>\r\n        <\/div>\r\n        <\/div>\r\n    <\/div>\r\n","protected":false},"excerpt":{"rendered":"<p>La reconstrucci\u00f3n de la aplicaci\u00f3n de Mailgun ha sido un proyecto enorme y un viaje incre\u00edble. Te llevamos detr\u00e1s de nuestras pantallas para analizar a fondo, en dos partes, c\u00f3mo y por qu\u00e9 lo hemos hecho posible. En la parte 1 respondimos a la pregunta: \u00bfPor qu\u00e9 reconstruir? En la parte 2, nos sumergiremos en la implementaci\u00f3n y ejecuci\u00f3n.<\/p>\n","protected":false},"author":17,"featured_media":3952,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[19],"class_list":["post-25131","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>C\u00f3mo reconstruimos nuestra aplicaci\u00f3n de Mailgun para m\u00faltiples productos: parte 2 - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Una cosa es tener una idea y otra, ejecutarla. Echa un vistazo a la parte 2 de nuestro viaje de reconstrucci\u00f3n de la aplicaci\u00f3n, en la que trabajamos con varios equipos para materializar nuestra visi\u00f3n.\" \/>\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\/es\/blog\/dev-life\/mailgun-app-rebuild-part-two\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo reconstruimos nuestra aplicaci\u00f3n de Mailgun para m\u00faltiples productos: parte 2 - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Una cosa es tener una idea y otra, ejecutarla. Echa un vistazo a la parte 2 de nuestro viaje de reconstrucci\u00f3n de la aplicaci\u00f3n, en la que trabajamos con varios equipos para materializar nuestra visi\u00f3n.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mailgun-app-rebuild-part-two\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\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\\\/es\\\/blog\\\/dev-life\\\/mailgun-app-rebuild-part-two\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/mailgun-app-rebuild-part-two\\\/\",\"name\":\"C\u00f3mo reconstruimos nuestra aplicaci\u00f3n de Mailgun para m\u00faltiples productos: parte 2 - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/mailgun-app-rebuild-part-two\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/mailgun-app-rebuild-part-two\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"datePublished\":\"2026-09-16T21:29:34+00:00\",\"description\":\"Una cosa es tener una idea y otra, ejecutarla. Echa un vistazo a la parte 2 de nuestro viaje de reconstrucci\u00f3n de la aplicaci\u00f3n, en la que trabajamos con varios equipos para materializar nuestra visi\u00f3n.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/mailgun-app-rebuild-part-two\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/mailgun-app-rebuild-part-two\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/mailgun-app-rebuild-part-two\\\/#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\\\/es\\\/blog\\\/dev-life\\\/mailgun-app-rebuild-part-two\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"An\u00e1lisis a fondo de la aplicaci\u00f3n de Mailgun: parte 2 \u2013 Una ejecuci\u00f3n de lo m\u00e1s triunfal\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#\\\/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\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C\u00f3mo reconstruimos nuestra aplicaci\u00f3n de Mailgun para m\u00faltiples productos: parte 2 - Transactional Email API Service For Developers | Mailgun","description":"Una cosa es tener una idea y otra, ejecutarla. Echa un vistazo a la parte 2 de nuestro viaje de reconstrucci\u00f3n de la aplicaci\u00f3n, en la que trabajamos con varios equipos para materializar nuestra visi\u00f3n.","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\/es\/blog\/dev-life\/mailgun-app-rebuild-part-two\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo reconstruimos nuestra aplicaci\u00f3n de Mailgun para m\u00faltiples productos: parte 2 - Transactional Email API Service For Developers | Mailgun","og_description":"Una cosa es tener una idea y otra, ejecutarla. Echa un vistazo a la parte 2 de nuestro viaje de reconstrucci\u00f3n de la aplicaci\u00f3n, en la que trabajamos con varios equipos para materializar nuestra visi\u00f3n.","og_url":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mailgun-app-rebuild-part-two\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","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\/es\/blog\/dev-life\/mailgun-app-rebuild-part-two\/","url":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mailgun-app-rebuild-part-two\/","name":"C\u00f3mo reconstruimos nuestra aplicaci\u00f3n de Mailgun para m\u00faltiples productos: parte 2 - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mailgun-app-rebuild-part-two\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mailgun-app-rebuild-part-two\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","datePublished":"2026-09-16T21:29:34+00:00","description":"Una cosa es tener una idea y otra, ejecutarla. Echa un vistazo a la parte 2 de nuestro viaje de reconstrucci\u00f3n de la aplicaci\u00f3n, en la que trabajamos con varios equipos para materializar nuestra visi\u00f3n.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mailgun-app-rebuild-part-two\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mailgun-app-rebuild-part-two\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mailgun-app-rebuild-part-two\/#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\/es\/blog\/dev-life\/mailgun-app-rebuild-part-two\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/es\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/es\/blog\/"},{"@type":"ListItem","position":3,"name":"An\u00e1lisis a fondo de la aplicaci\u00f3n de Mailgun: parte 2 \u2013 Una ejecuci\u00f3n de lo m\u00e1s triunfal"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/es\/#website","url":"https:\/\/www.mailgun.com\/es\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!","publisher":{"@id":"https:\/\/www.mailgun.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/es\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/#\/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\/es\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/25131","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/users\/17"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/25131\/revisions"}],"predecessor-version":[{"id":25133,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/25131\/revisions\/25133"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media\/3952"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media?parent=25131"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog_category?post=25131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}