<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Lenin Mendoza</title>
    <description>The latest articles on Forem by Lenin Mendoza (@mendozalz).</description>
    <link>https://forem.com/mendozalz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F611021%2F6cd34a15-cd24-4722-bd99-5b407e5c0b93.jpg</url>
      <title>Forem: Lenin Mendoza</title>
      <link>https://forem.com/mendozalz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mendozalz"/>
    <language>en</language>
    <item>
      <title>🧵 Gestión de Múltiples Cuentas de GitHub en un Solo Sistema (Ubuntu)</title>
      <dc:creator>Lenin Mendoza</dc:creator>
      <pubDate>Wed, 25 Jun 2025 22:36:57 +0000</pubDate>
      <link>https://forem.com/mendozalz/gestion-de-multiples-cuentas-de-github-en-un-solo-sistema-ubuntu-22ll</link>
      <guid>https://forem.com/mendozalz/gestion-de-multiples-cuentas-de-github-en-un-solo-sistema-ubuntu-22ll</guid>
      <description>&lt;h2&gt;
  
  
  🚀 Objetivo
&lt;/h2&gt;

&lt;p&gt;¿Te has encontrado en la situación de tener que manejar proyectos de trabajo, personales y de freelance desde la misma máquina? Este tutorial surge de una necesidad real: separar completamente los entornos de trabajo para evitar conflictos y mantener la privacidad de cada contexto.&lt;/p&gt;

&lt;p&gt;En este tutorial aprenderás a configurar múltiples cuentas de GitHub (personal, trabajo, freelance, etc.) en un mismo sistema Ubuntu de manera organizada, segura y automatizada. Utilizaremos claves SSH específicas, configuraciones locales de Git y un script que simplificará todo el proceso.&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt;💡 ¿Por qué es importante esto?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacidad&lt;/strong&gt;: Evita que los commits de trabajo aparezcan en tu perfil personal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organización&lt;/strong&gt;: Mantén cada proyecto en su contexto correspondiente&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seguridad&lt;/strong&gt;: Usa claves SSH diferentes para cada cuenta&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profesionalismo&lt;/strong&gt;: No mezcles repositorios corporativos con proyectos personales&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibilidad&lt;/strong&gt;: Cambia fácilmente entre cuentas según el proyecto
 &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🎯 Ideal para:&lt;/p&gt;

&lt;p&gt;Desarrolladores que trabajan remotamente, Freelancers que manejan múltiples clientes, Empleados que también desarrollan proyectos personales Consultores que trabajan con diferentes organizaciones&lt;br&gt;
Cualquier persona que necesite separar sus identidades digitales&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt;📋 Lo que aprenderás:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generar y configurar múltiples claves SSH&lt;/li&gt;
&lt;li&gt;Configurar el archivo ~/.ssh/config para automatizar conexiones&lt;/li&gt;
&lt;li&gt;Establecer configuraciones locales de Git por proyecto&lt;/li&gt;
&lt;li&gt;Crear un script para cambiar automáticamente entre cuentas&lt;/li&gt;
&lt;li&gt;Verificar que todo funcione correctamente&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Al finalizar este tutorial, podrás trabajar de forma fluida con múltiples cuentas GitHub sin preocuparte por configuraciones manuales o mezclar contextos, te lo digo por experiencia propia 😬.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Comencemos:
&lt;/h2&gt;

&lt;p&gt;🪖 Requisitos previos&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tener Git instalado &lt;code&gt;(sudo apt install git)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Tener una cuenta o varias cuentas activas en GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;     &lt;/p&gt;
&lt;h2&gt;
  
  
  🧹 Paso 0: Limpieza y reinicio de configuración previa (opcional)
&lt;/h2&gt;

&lt;p&gt;Si quieres comenzar completamente desde cero:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Elimina configuraciones globales de Git
rm ~/.gitconfig

# Elimina claves SSH existentes (cuidado si tienes otras claves en uso)
rm -rf ~/.ssh

# Limpia credenciales en caché
git credential-cache exit

⚠️ Esto borra todas las configuraciones previas de Git y SSH. Haz un respaldo si es necesario.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;     &lt;/p&gt;

&lt;h2&gt;
  
  
  🔑 Paso 1: Crear claves SSH por cada cuenta
&lt;/h2&gt;

&lt;p&gt;El primer paso es crear un par de claves SSH (pública y privada) para cada una de tus cuentas. Esto le permite a GitHub autenticarte de forma segura sin necesidad de&lt;br&gt;
  contraseñas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Cuenta personal
ssh-keygen -t ed25519 -C "tu_correo_personal@ejemplo.com" -f ~/.ssh/id_ed25519_personal

# Cuenta de trabajo
ssh-keygen -t ed25519 -C "tu_correo_trabajo@empresa.com" -f ~/.ssh/id_ed25519_trabajo

# Cuenta freelance (opcional)
ssh-keygen -t ed25519 -C "tu_correo_freelance@otro.com" -f ~/.ssh/id_ed25519_freelance

No es obligatorio agregar passphrase, pero es recomendable por seguridad.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;     &lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Paso 2: Para activar el agente y agregar claves al ssh-agent
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_personal
ssh-add ~/.ssh/id_ed25519_trabajo
ssh-add ~/.ssh/id_ed25519_freelance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;     &lt;/p&gt;

&lt;h2&gt;
  
  
  📂 Paso 3: Configura tu archivo ~/.ssh/config
&lt;/h2&gt;

&lt;p&gt;Esto permite a Git usar la clave correcta según el repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Cuenta personal
Host github-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_personal

# Cuenta de trabajo
Host github-trabajo
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_trabajo

# Cuenta freelance (opcional)
Host github-freelance
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_freelance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;     &lt;/p&gt;

&lt;h2&gt;
  
  
  🤝 Paso 4: Asociar claves con GitHub
&lt;/h2&gt;

&lt;p&gt;Ahora, debes asociar la parte pública de cada clave con su cuenta de GitHub correspondiente.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Copia tu clave pública, por ejemplo:&lt;br&gt;
&lt;code&gt;cat ~/.ssh/id_ed25519_personal.pub&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pégala en GitHub: Settings &amp;gt; SSH and GPG Keys &amp;gt; New SSH Key&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Repite el proceso para cada cuenta.&lt;br&gt;
     &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🔍 Paso 5: El Script Interactivo para Gestionarlo Todo:
&lt;/h2&gt;

&lt;p&gt;Guarda este código en un archivo llamado git_manager.sh en tu Escritorio o donde prefieras.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; #!/bin/bash

# --- CONFIGURACIÓN DE CUENTAS DE GITHUB ---
# IMPORTANTE: Edita estas variables con tus datos correctos.

# Cuenta 1: Personal
USER_PERSONAL="mendozalz"
EMAIL_PERSONAL="mendoza124302@gmail.com"
HOST_PERSONAL="github-personal"

# Cuenta 2: Trabajo
USER_TRABAJO="trabajo"
EMAIL_TRABAJO="flavioanez@gmail.com"
HOST_TRABAJO="github-trabajo"

# Cuenta 3: Tati
USER_TATI="tatim79"
EMAIL_TATI="tatianagomez3219@gmail.com"
HOST_TATI="github-tati"

# --- FIN DE LA CONFIGURACIÓN ---


# --- LÓGICA DEL SCRIPT ---

# Colores para la salida
GREEN="\033[0;32m"
YELLOW="\033[0;33m"
CYAN="\033[0;36m"
NC="\033[0m" # No Color

# Verificar si estamos dentro de un repositorio de Git
if ! git rev-parse --is-inside-work-tree &amp;gt; /dev/null 2&amp;gt;&amp;amp;1; then
  echo -e "${YELLOW}ERROR: No estás en un repositorio de Git.${NC}"
  echo "Por favor, ejecuta este script desde la carpeta raíz de tu proyecto."
  exit 1
fi

# Función para configurar el repositorio local
configurar_repositorio() {
    echo -e "${CYAN}--- Configurar Repositorio Local ---${NC}"
    echo "Selecciona la cuenta de GitHub que deseas usar para este repositorio:"
    echo "1) Personal ($USER_PERSONAL)"
    echo "2) Trabajo ($USER_TRABAJO)"
    echo "3) Tati ($USER_TATI)"
    read -p "Opción: " choice

    local user=""
    local email=""
    local host=""

    case $choice in
        1) user=$USER_PERSONAL; email=$EMAIL_PERSONAL; host=$HOST_PERSONAL ;;
        2) user=$USER_TRABAJO; email=$EMAIL_TRABAJO; host=$HOST_TRABAJO ;;
        3) user=$USER_TATI; email=$EMAIL_TATI; host=$HOST_TATI ;;
        *) echo -e "${YELLOW}Opción no válida.${NC}"; return ;;
    esac

    echo -e "\nConfigurando Git localmente para ${GREEN}$user${NC}..."

    # 1. Configurar usuario y email localmente
    git config user.name "$user"
    git config user.email "$email"
    echo "Usuario y email configurados para este repositorio."

    # 2. Actualizar la URL del remote 'origin' para usar el Host y Usuario de SSH correctos
    if git remote -v | grep -q "origin"; then
        local current_url=$(git remote get-url origin)
        # Extraer solo el nombre del repositorio (ej: mi-proyecto.git)
        local repo_name=$(basename "$current_url")
        # Construir la nueva URL con el host y el usuario seleccionados
        local new_url="git@$host:$user/$repo_name"

        git remote set-url origin "$new_url"
        echo "URL del remote 'origin' actualizada a: ${GREEN}$new_url${NC}"
    else
        echo -e "${YELLOW}ADVERTENCIA: No se encontró un remote llamado 'origin'.${NC}"
        echo "Asegúrate de agregar un remote para poder hacer push/pull."
    fi

    echo -e "\n${GREEN}¡Configuración completada!${NC}"
    echo "Configuración local actual:"
    git config --local -l | grep user
    git remote -v
}

# Funciones para comandos de Git
git_add() {
    echo -e "\n${CYAN}--- Git Add ---${NC}"
    git add .
    echo "Se han añadido todos los cambios al staging area."
}

git_commit() {
    echo -e "\n${CYAN}--- Git Commit ---${NC}"
    read -p "Mensaje del commit: " message
    git commit -m "$message"
}

git_push() {
    echo -e "\n${CYAN}--- Git Push ---${NC}"
    git push
}

git_pull() {
    echo -e "\n${CYAN}--- Git Pull ---${NC}"
    git pull
}

git_status() {
    echo -e "\n${CYAN}--- Git Status ---${NC}"
    git status
}


# Menú principal
while true; do
    echo -e "\n${CYAN}===== GESTOR DE CUENTAS GIT =====${NC}"
    echo "Repositorio actual: $(basename "$(pwd)")"
    echo "Usuario Git local: ${GREEN}$(git config user.name || echo "No configurado")${NC}"
    echo "Email Git local: ${GREEN}$(git config user.email || echo "No configurado")${NC}"
    echo -e "${CYAN}-----------------------------------${NC}"
    echo "Elige una opción:"
    echo "1) ${YELLOW}Configurar Repositorio${NC} (¡Primer paso obligatorio!)"
    echo "2) Git Add ."
    echo "3) Git Commit"
    echo "4) Git Push"
    echo "5) Git Pull"
    echo "6) Git Status"
    echo "7) Salir"
    read -p "Opción: " main_choice

    case $main_choice in
        1) configurar_repositorio ;;
        2) git_add ;;
        3) git_commit ;;
        4) git_push ;;
        5) git_pull ;;
        6) git_status ;;
        7) echo "Saliendo..."; exit 0 ;;
        *) echo -e "${YELLOW}Opción no válida.${NC}" ;;
    esac
done


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;     &lt;/p&gt;

&lt;h2&gt;
  
  
  📃 Paso 6: Cómo Usar el Script.
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Dale permisos de ejecución (solo necesitas hacerlo una vez):&lt;br&gt;
&lt;code&gt;chmod +x /ruta/a/tu/git_manager.sh&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navega a tu repositorio en la terminal:&lt;br&gt;
&lt;code&gt;cd /ruta/a/mi-proyecto&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ejecuta el script:&lt;br&gt;
&lt;code&gt;/ruta/a/tu/git_manager.sh&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Usa el menú:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La primera vez en un repo, elige la Opción 1 para seleccionar qué cuenta (Personal, Trabajo o Tati) quieres usar. El script ajustará el user.name, user.email y la
 URL remota automáticamente.&lt;/li&gt;
&lt;li&gt;Una vez configurado, puedes usar las demás opciones (add, commit, push, pull, status) directamente desde el menú.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;     &lt;/p&gt;

&lt;h2&gt;
  
  
  🌍 Paso 7: El Método Manual (Alternativa)
&lt;/h2&gt;

&lt;p&gt;Si prefieres no usar un script, siempre puedes configurar un repositorio manualmente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 1. Sitúate en tu proyecto
cd /ruta/a/mi-proyecto

# 2. Configura el usuario y email para ESTE proyecto
git config user.name "Tu Nombre de Usuario de Trabajo"
git config user.email "tu_correo_de_trabajo@empresa.com"

# 3. Cambia la URL remota para que use el Host correcto de tu .ssh/config
# La sintaxis es: git@&amp;lt;HOST_DEL_SSH_CONFIG&amp;gt;:&amp;lt;usuario_github&amp;gt;/&amp;lt;repo&amp;gt;.git
git remote set-url origin git@github-trabajo:usuario_trabajo/proyecto-cliente.git

# 4. Verifica que todo esté correcto
git remote -v
git config user.name

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;     &lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Ejemplo real de error y solución
&lt;/h2&gt;

&lt;p&gt;Si ves este error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ERROR: Repository not found.
fatal: No se pudo leer del repositorio remoto.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pero al ejecutar:&lt;br&gt;
&lt;code&gt;ssh -T git@github-freelance&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Obtienes:&lt;br&gt;
&lt;code&gt;Hi Freelance! You've successfully authenticated, but GitHub does not provide shell access.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Entonces el problema no es de autenticación, sino que:&lt;/p&gt;

&lt;p&gt;✅ El error está en el nombre del repositorio mal especificado en el &lt;code&gt;remote&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Por ejemplo, si configuraste esto incorrectamente:&lt;br&gt;
&lt;code&gt;git remote set-url origin git@github-freelance:Freelance/repositorio.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Y el nombre real del repo es &lt;code&gt;finanzas-2025&lt;/code&gt;, debes corregirlo así:&lt;br&gt;
&lt;code&gt;git remote set-url origin git@github-freelance:Freelance/finanzas-2025.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Luego verifica con:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote -v
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;     &lt;/p&gt;

&lt;h2&gt;
  
  
  📄 Tips adicionales
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Usa &lt;code&gt;git config --global --unset user.name&lt;/code&gt; y &lt;code&gt;--unset user.email&lt;/code&gt; para limpiar la configuración global.&lt;/li&gt;
&lt;li&gt;Puedes usar &lt;code&gt;gh&lt;/code&gt; (GitHub CLI) si quieres automatizar la creación de repos desde la terminal.&lt;/li&gt;
&lt;li&gt;Evita usar tokens personales si trabajas con varias cuentas; el sistema SSH es más seguro y escalable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;     &lt;/p&gt;

&lt;h2&gt;
  
  
  📝 Créditos y utilidad
&lt;/h2&gt;

&lt;p&gt;Este material fue diseñado como base para un tutorial en Dev.to o LinkedIn que facilite el trabajo colaborativo en entornos con múltiples identidades.&lt;/p&gt;

&lt;p&gt;Ideal para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Freelancers&lt;/li&gt;
&lt;li&gt;Desarrolladores con proyectos open source y clientes&lt;/li&gt;
&lt;li&gt;Empresas que gestionan identidades separadas para sus equipos
     &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Licencia
&lt;/h2&gt;

&lt;p&gt;Este proyecto es libre de usar. Puedes compartirlo, clonarlo o modificarlo sin restricciones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión:
&lt;/h2&gt;

&lt;p&gt;Con esta configuración, puedes trabajar en múltiples proyectos con diferentes identidades de GitHub sin conflictos. El script interactivo simplifica enormemente el&lt;br&gt;
  proceso, permitiéndote cambiar de contexto con un solo comando y asegurando que cada commit y push se atribuya a la cuenta correcta.&lt;/p&gt;

&lt;p&gt;✉️ Si te fue útil, considera compartirlo para que otros lo encuentren también.&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>linux</category>
      <category>github</category>
    </item>
    <item>
      <title>Cómo Cambiar el Favicon Basado en el Esquema de Color del Sistema sin JavaScript</title>
      <dc:creator>Lenin Mendoza</dc:creator>
      <pubDate>Wed, 22 May 2024 21:41:59 +0000</pubDate>
      <link>https://forem.com/mendozalz/como-cambiar-el-favicon-basado-en-el-esquema-de-color-del-sistema-sin-javascript-2op1</link>
      <guid>https://forem.com/mendozalz/como-cambiar-el-favicon-basado-en-el-esquema-de-color-del-sistema-sin-javascript-2op1</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introducción:&lt;/strong&gt;&lt;br&gt;
En este tutorial, aprenderemos cómo cambiar el favicon de un sitio web basado en el esquema de color del sistema del usuario. Esto significa que el favicon se mostrará de manera diferente según si el sistema está en modo claro u oscuro. Lo mejor de todo es que lo haremos sin necesidad de usar JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requisitos:&lt;/strong&gt;&lt;br&gt;
Un editor de texto (como Visual Studio Code).&lt;br&gt;
Conocimientos básicos de HTML.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 1: Preparación de los Favicones&lt;/strong&gt;&lt;br&gt;
Antes de comenzar, necesitaremos tener dos favicones: uno para el modo claro y otro para el modo oscuro. En mi caso el diseñador me paso una imagen en modo oscuro, es decir solo para la preferencia a modo claro y como desarrolladores con habilidades recursivas debemos ayudar a agilizar este tipo de cosas sin depender de que el diseñador se desocupe para nosotros llevar a acabo este tipo de tareas tan sencillas.&lt;/p&gt;

&lt;p&gt;En mi caso utilice esta herramienta online:&lt;br&gt;
&lt;a href="https://pinetools.com/es/colorizar-imagen" rel="noopener noreferrer"&gt;https://pinetools.com/es/colorizar-imagen&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 2: Estructura Básica del Documento HTML&lt;/strong&gt;&lt;br&gt;
Creamos un nuevo archivo HTML y escribimos la estructura básica del documento HTML en mi caso lo incluí en el Layout ya que estaba trabajando sobre ASTRO, esto también aplica para aplicaciones de NextJs (en esta caso es un poco distinto debido a la naturaleza del servidor de renderizado y la gestión del ciclo de vida en Next.js, pero si es posible) esta comprobado:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="es"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;title&amp;gt;Cambio Dinámico de Favicon&amp;lt;/title&amp;gt;
    &amp;lt;!-- Aquí añadiremos las etiquetas &amp;lt;link&amp;gt; para los favicones --&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Lorem ipsum&amp;lt;/h1&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Paso 3: Incluir los Favicones en el Documento HTML&lt;/strong&gt;&lt;br&gt;
Ahora, vamos a incluir los favicones en el documento HTML utilizando las etiquetas  con el atributo media:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;head&amp;gt;
    &amp;lt;!-- Incluimos el favicon para el modo claro --&amp;gt;
    &amp;lt;link href="/fav_negro.ico" rel="icon" media="(prefers-color-scheme: light)"&amp;gt;
    &amp;lt;!-- Incluimos el favicon para el modo oscuro --&amp;gt;
    &amp;lt;link href="/fav_blanco.ico" rel="icon" media="(prefers-color-scheme: dark)"&amp;gt;
&amp;lt;/head&amp;gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Paso 4: Explicación&lt;/strong&gt;&lt;br&gt;
Utilizamos la etiqueta  con el atributo media para especificar el favicon que se debe utilizar según el esquema de color del sistema.&lt;br&gt;
(prefers-color-scheme: light) indica que el favicon se utilizará cuando el sistema esté en modo claro.&lt;br&gt;
(prefers-color-scheme: dark) indica que el favicon se utilizará cuando el sistema esté en modo oscuro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 5: Verificación&lt;/strong&gt;&lt;br&gt;
Guarda el archivo HTML y ábrelo en tu navegador. Cambia el tema de tu sistema entre claro y oscuro para ver cómo el favicon se actualiza automáticamente.&lt;/p&gt;

&lt;p&gt;Y este fue mi caso:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxowuqg7t9dr9zqdc3i5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxowuqg7t9dr9zqdc3i5.gif" alt="gif animado mostrando el modo light y dark en el favicon"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusión:&lt;/strong&gt;&lt;br&gt;
¡Felicidades! Has aprendido cómo cambiar dinámicamente el favicon de tu sitio web basado en el esquema de color del sistema del usuario sin necesidad de usar JavaScript. ¡Ahora tu sitio será aún más personalizado y atractivo para tus visitantes!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Redirigir después de enviar datos en formulario dentro de Astro y TypeScript con componentes de React (Mi solución)</title>
      <dc:creator>Lenin Mendoza</dc:creator>
      <pubDate>Tue, 14 May 2024 03:17:01 +0000</pubDate>
      <link>https://forem.com/mendozalz/redirigir-despues-de-enviar-datos-en-formulario-dentro-de-astro-y-typescript-con-componentes-de-react-mi-solucion-39i9</link>
      <guid>https://forem.com/mendozalz/redirigir-despues-de-enviar-datos-en-formulario-dentro-de-astro-y-typescript-con-componentes-de-react-mi-solucion-39i9</guid>
      <description>&lt;p&gt;Recientemente me encontré con un problema en la que tuve que usar un componente de React para controlar un formulario con &lt;strong&gt;react-hook-form&lt;/strong&gt; y usarlo dentro de astro, mi problema era como re-dirigirlo luego de enviar los datos y llevarlo a la pagina de Gracias! pues la documentación de astro te propone usar "Astro.redirect" pero este no funciona con componente de react cuando necesitamos escuchar un evento y en mi caso dentro del componente de react yo necesitaba escuchar el evento &lt;code&gt;window.dispatchEvent&lt;/code&gt; y pasando &lt;code&gt;formSubmitted&lt;/code&gt; como detalle, así que me puse a investigar y buscar en la documentación o tirando de Claude o ChatGPT para dar con algo y sé que no sera la mejor solución pero seguro que a otros les resultará útil este enfoque y no pasar dos horas tirando del hilo para ser más productivos en sus trabajos asi que de manera breve y espero se entienda aquí les dejo mi solución: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Crear el formulario de componente React&lt;/strong&gt;&lt;br&gt;
Primero, necesitamos tener un formulario en nuestra aplicación web en mi caso fue un componente de react para poder usar los beneficios que nos ofrece &lt;strong&gt;react-hook-form&lt;/strong&gt;. Puede ser cualquier formulario que desees, en este caso practico pongo un caso donde el usuario debe dejar los datos como nombre, apellido y correo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// components/Form.tsx

import { useRef, useState } from "react";
import { useForm } from "react-hook-form";

const Form: React.FC = () =&amp;gt; {
  const { register, handleSubmit, reset } = useForm();
  const formRef = useRef&amp;lt;HTMLFormElement&amp;gt;(null);
  const [btnEnviando, setBtnEnviando] = useState("Dejar datos");

  const enviar = (data: any) =&amp;gt; {
    setBtnEnviando("Enviando datos...");
    const formData = new FormData(formRef.current!);
    // Aquí iría tu lógica de envío del formulario, por ejemplo, con fetch, en este caso, supondremos que estamos enviando los datos a una hoja de Google Sheet.

const formDatab = new FormData(formRef.current!);
    fetch(
      "https://script.google.com/macros/s/la-id-de-tu-hoja-de-google-UTQwKC-B-py/exec",
      {
        method: "POST",
        body: formDatab
      }
    )

    .then((res) =&amp;gt; {
      const contentType = res.headers.get("Content-Type");
      if (contentType &amp;amp;&amp;amp; contentType.includes("application/json")) {
        return res.json();
      } else {
        return res.text();
      }
    })
    .then((data) =&amp;gt; {
      console.log(data);
      reset(); 
      setBtnEnviando("Dejar datos");
        // Después de enviar el formulario con éxito, puedes disparar un evento personalizado.

    const formSubmitted = true; // Suponiendo que el envío fue exitoso
    window.dispatchEvent(new CustomEvent('formSubmitted', { detail: formSubmitted }));
  };
    })
    .catch((error) =&amp;gt; {
      console.log(error);
      setBtnEnviando("Dejar datos")
    });



  return (
    &amp;lt;form ref={formRef} onSubmit={handleSubmit(enviar)}&amp;gt;
      {/* Campos del formulario */}
      &amp;lt;input type="submit" value={btnEnviando} /&amp;gt;
    &amp;lt;/form&amp;gt;
  );
};

export default Form;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Escuchar el evento de envío del formulario&lt;/strong&gt;&lt;br&gt;
En el script de tu página o componente (es este caso es el index.astro), escucha el evento personalizado &lt;strong&gt;formSubmitted&lt;/strong&gt; que se dispara cuando el formulario se envía con éxito.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// index.astro o componente principal

&amp;lt;script&amp;gt;
window.addEventListener('formSubmitted', (event: Event) =&amp;gt; {
  const customEvent = event as CustomEvent&amp;lt;boolean&amp;gt;;
  const formSubmitted = customEvent.detail;

  if (formSubmitted) {
// Al puro estilo y uso de vanilla JS
    window.location.href = '/thank-you-page'; // Redirige al usuario a la página de agradecimiento
  }
});
&amp;lt;/script&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Con estos pasos, hemos podido crear un sistema para redirigir al usuario a una página específica (Ej. la pagina de agradecimiento) después de enviar datos en un formulario de componente React en tu aplicación web Astro usando TypeScript.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claro, aquí tienes una conclusión que resalta la utilidad de la solución y anima a otros desarrolladores a contribuir con sus propias soluciones:&lt;/p&gt;

&lt;p&gt;Conclusión:&lt;/p&gt;

&lt;p&gt;En resumen, aunque enfrenté algunos desafíos al intentar redirigir a los usuarios después de enviar un formulario en Astro con un componente de React, encontré una solución efectiva al escuchar el evento personalizado formSubmitted y utilizando window.location.href para la redirección. Si bien esta solución puede no ser la más elegante o convencional, ha demostrado ser efectiva en mi caso y espero que también sea útil para otros desarrolladores que enfrenten problemas similares.&lt;/p&gt;

&lt;p&gt;Es importante recordar que el mundo del desarrollo web está lleno de desafíos y soluciones creativas. No siempre existe una única manera "correcta" de hacer las cosas, y es precisamente esta diversidad de enfoques lo que hace que nuestra comunidad sea tan vibrante y enriquecedora. Por lo tanto, te animo a que, si encuentras una solución ingeniosa a un problema, la compartas con la comunidad. ¡Quién sabe, tu solución podría ser la ayuda que alguien más necesita!&lt;/p&gt;

&lt;p&gt;Recuerda, ¡todos podemos contribuir con nuestras propias ideas y soluciones para hacer que el desarrollo web sea aún mejor!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cómo Integrar un Componente React en WordPress con Elementor: Mi Experiencia y Solución (Actualización 23.5.24)</title>
      <dc:creator>Lenin Mendoza</dc:creator>
      <pubDate>Wed, 31 Jan 2024 19:13:30 +0000</pubDate>
      <link>https://forem.com/mendozalz/como-integrar-un-componente-react-en-wordpress-con-elementor-mi-experiencia-y-solucion-26c8</link>
      <guid>https://forem.com/mendozalz/como-integrar-un-componente-react-en-wordpress-con-elementor-mi-experiencia-y-solucion-26c8</guid>
      <description>&lt;p&gt;&lt;strong&gt;Presentación:&lt;/strong&gt;&lt;br&gt;
Un saludo mi nombre es Lenin Mendoza y en este post quiero compartir con ustedes algo que no lo había en internet hasta este post, lo cierto es que en una prueba técnica se me solicito que se implementara un componente de React (Contador de calorías) dentro de Wordpress con Elementor, en el repositorio de wordpress existen 3 complementos que uno de ellos tiene su ultima actualización hace 5 años, el otro se debe integrar el componente en un servidor aparte (la idea es que todo el código quede en local), y llamarlo como si fuese un &lt;strong&gt;iframe&lt;/strong&gt; lo que no es muy recomendado, y el ultimo no me permitía renderizar el componente pues solo trabaja con el theme Twenty Twenty-One.&lt;/p&gt;

&lt;p&gt;En fin la única alternativa que tuve fue implementar mi propio método y vaya que si me resulto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advertencia:&lt;/strong&gt;&lt;br&gt;
Es mi primera ves al crear un articulo, si ven que algo me he saltado o hace falta para que el contenido sea mas claro y preciso por favor no duden en escribirme en la caja de comentarios que con todo gusto aceptare sus recomendaciones, el fin de esto es ir mejorando de a poco.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Se entiende:&lt;/strong&gt;&lt;br&gt;
En este apartado doy por entendido que conoces como manipular código dentro de wordpress, y sabes construir un complemento (buildear) este mismo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comprendido lo ultimo mencionado pues vayamos al lio:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Este código en React tiene como objetivo cargar y mostrar el contenido de un archivo HTML utilizando shortcodes en WordPress, tal como lo hacemos al querer cargar estilos, fuentes o JavaScript. No lo cree como un plugins pues como era a modo de pruebas lo integre directamente en el archivo functions.php del theme (luego me animo y creo un complemento).&lt;br&gt;
 Aquí está una explicación detallada de cada parte y como lo hice:&lt;/p&gt;

&lt;p&gt;Lo primero que debes hacer es tener tu componente de React definido, es decir que lógica quieres implementar dentro de Wordpress, en mi caso era un contador de calorías, donde le indicaba al usuario la cantidad de calorías quemadas según la distancia recorrida, estatura, edad y genero, aqui una imagen de lo que describo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlvv24ixd9atffgupger.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlvv24ixd9atffgupger.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora debes construir tu componente de React, es decir buildearla, en mi caso utilice VIT la cual te genera una carpeta “dist” esta carpeta &lt;strong&gt;dist&lt;/strong&gt; asi mismo la subiremos por ftp si tienes tu Wordpress en un servidor en la nube, en mi caso yo utilizo localwp lo que me facilita muchas cosas, debes copiar y pegar esa carpeta dist en &lt;strong&gt;app\public\wp-content\themes\hello-elementor-child&lt;/strong&gt; (es recomendable utilizar un child-theme pues en una actualización podrías perder el código), aqui una captura de donde deberás agregar tu carpeta dist:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fshwwc4zwur96msk8z8qx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fshwwc4zwur96msk8z8qx.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En esa ruta pegaras tu carpeta dist con todo su contenido sin alterar nada y debería verse asi:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9io577gozb1vfjr1f6qa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9io577gozb1vfjr1f6qa.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora cumplido esos pasos vayamos a el archivo functions.php que podrías bien editarlo directamente basado en la ruta en VSC o como fue mi caso directamente en la ruta theme de tu dashboard de Wordpress lo cual lo consigues en Appearance &amp;gt; Theme File Editor &amp;gt; Select theme to edit: Hello Elementor &amp;gt; Theme Functions (functions.php):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvb31soi5ekh2onx7b8ye.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvb31soi5ekh2onx7b8ye.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El código:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

// React

function cargar_archivo_html() {
    ob_start();
    include_once(get_template_directory() . '/dist/index.html'); 
    return ob_get_clean(); 
}

function registrar_shortcode_html() {
    add_shortcode('mostrar_archivo_html', 'cargar_archivo_html');
}

function enqueue_react_assets() {
    wp_enqueue_script('react-app', get_template_directory_uri() . '/dist/assets/index.js', array(), null, true);
    wp_enqueue_style('react-app-css', get_template_directory_uri() . '/dist/assets/index.css', array(), null);
}

add_action('wp_enqueue_scripts', 'enqueue_react_assets');

add_action('init', 'registrar_shortcode_html');



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Explicando el código:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Función &lt;code&gt;cargar_archivo_html()&lt;/code&gt;&lt;/strong&gt;: &lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Implementa &lt;code&gt;ob_start()&lt;/code&gt; para iniciar el almacenamiento en búfer (espacio de memoria temporal) de salida, sin esto se inyectaría directamente el código sin procesar y te daría problemas al renderizar el componente asi que no puedes omitirlo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Incluye el contenido del archivo HTML ubicado en la ruta &lt;code&gt;/dist/index.html&lt;/code&gt; del tema actual (recuerda que estamos dentro de la carpeta dist que creaste en tu componente de React).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agrega la ruta de tu script de tipo módulo que esta dentro de la carpeta &lt;code&gt;/dist/assets/index-6qsmj8p8.js&lt;/code&gt; donde (/index-6qsmj8p8.js) es el archivo construido de manera automática al momento de build y entiéndase que este nombre puede variar según sea el proceso de construcción y te recomiendo que para fines prácticos lo renombres y lo dejes solo como &lt;strong&gt;index.js&lt;/strong&gt; tal como se ve en el codigo de arriba, si lo renombras es probable que tengas que hacer cambios dentro de index.html por si no te funciona (en mi caso no fue necesario).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tambien debes agregar un enlace a una hoja de estilo CSS desde la ruta &lt;code&gt;/dist/assets/index-fXWzvgFu.css&lt;/code&gt; que igual al caso del scrip.js donde (/index-fXWzvgFu.css) este puede variar, una vez más te recomiendo renombrarlo a &lt;strong&gt;index.css&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Utiliza &lt;code&gt;ob_get_clean()&lt;/code&gt; para obtener y limpiar el contenido almacenado en el búfer y lo devuelve.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Función &lt;code&gt;registrar_shortcode_html()&lt;/code&gt;&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Registra un shortcode llamado &lt;code&gt;'mostrar_archivo_html'&lt;/code&gt; que está vinculado a la función &lt;code&gt;cargar_archivo_html()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;add_action('init', 'registrar_shortcode_html')&lt;/code&gt;&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Registra la función &lt;code&gt;registrar_shortcode_html()&lt;/code&gt; para que se ejecute durante la fase de inicialización de WordPress.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Observación en esta actualización 23.5.24&lt;/strong&gt; se ha cambiado el código para registrar los archivos index.js y index.css tal como lo recomienda WORDPRESS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Atención:&lt;/strong&gt;&lt;br&gt;
Antes de cualquier implementación siempre, siempre debes crear un respaldo de seguridad de tu sitio como buenas practicas.&lt;/p&gt;

&lt;p&gt;Repito para implementar esto en tu proyecto, debes copiar y pegar este código en el archivo &lt;code&gt;functions.php&lt;/code&gt; de tu tema de WordPress. Luego, puedes usar el shortcode &lt;code&gt;[mostrar_archivo_html]&lt;/code&gt; en tus publicaciones o páginas para mostrar el contenido del archivo HTML y violà felicitaciones ya tienes tu componente de React dentro de Wordpress con Elementor sin ningún problema, libre de dependencias externas y posibles fallos en el futuro, pero es recomendado crearte tu propio plugins de manera tal que no quede inyectado directamente en el functions.php y para que tu tengas el control de ello al momento de querer depurar. Un saludo y espero que esto les sea de mucha utilidad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PD:&lt;/strong&gt; He trabajado los estilos con Tailwind CSS es posible que si no logras ver los estilos es por que deberías trabajarlo como lo hice yo... &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saludos y gracias a  Rigoberto Nava por reportar el caso.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>wordpress</category>
      <category>elementor</category>
    </item>
  </channel>
</rss>
