<?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>DEV Community: José Antonio Fernández</title>
    <description>The latest articles on DEV Community by José Antonio Fernández (@joseamaya).</description>
    <link>https://dev.to/joseamaya</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%2F556070%2Fa606b427-6e2e-4135-861c-ba3119ddce03.jpeg</url>
      <title>DEV Community: José Antonio Fernández</title>
      <link>https://dev.to/joseamaya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joseamaya"/>
    <language>en</language>
    <item>
      <title>Your way of programming directly helps financial goals.</title>
      <dc:creator>José Antonio Fernández</dc:creator>
      <pubDate>Mon, 22 Sep 2025 15:17:39 +0000</pubDate>
      <link>https://dev.to/joseamaya/your-way-of-programming-directly-helps-financial-goals-2fk3</link>
      <guid>https://dev.to/joseamaya/your-way-of-programming-directly-helps-financial-goals-2fk3</guid>
      <description>&lt;p&gt;Seven years ago I was starting in tech in Panama with a challenging role for my 7-years-ago self: I was the &lt;strong&gt;Administrator of Technological Resources&lt;/strong&gt; at an institution dedicated to higher education professional training in Panama, part of what was then the world’s largest university network (Laureate).&lt;/p&gt;

&lt;p&gt;The organization was undergoing a structural change, and I had the fortune to witness part of it, which was very enriching for developing professional experience.&lt;/p&gt;

&lt;p&gt;My role at that time was to analyze hardware/software information and technical requirements to fit the client's needs, especially within the allocated budget.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Indeed, I had to negotiate with suppliers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was starting to familiarize myself with very financial terms—Forecast, General Ledger, EBITDA, the stock market, and many more.&lt;/p&gt;

&lt;p&gt;Every decision I made had to positively impact that financial goal, so a miscalculation not only affected the final client but also directly impacted the budget execution and, in that vertical, many other business areas. So I learned something important that I apply to every development I do; I call this 'unfavorable planning'.&lt;/p&gt;

&lt;p&gt;It is nothing more than planning my execution with the minimum time and resources available, so that I can mentally find creative ways to achieve the same with less, not just reduce to save.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Instead of maintaining separate Adobe Creative Cloud license agreements for different cost centers, group them to get a better volume price and significant savings.&lt;/p&gt;

&lt;p&gt;I transferred that thought to my new profession, because instead of focusing on having 10 days to complete the task, I focus on having 5 days. In this way I manage to split and tackle the most important tasks for the success of my execution, and then when I group them, I have the complete solution. It’s basically an assembly process where I create all the functionalities (functions) separately and then I assemble them. After a few days I have something functional and I do the second iteration, the third, the fourth, and in a short time the task is solved, which allows me to invest some time in creating a scalable structure to reduce maintenance costs of the product in the long term.&lt;/p&gt;

&lt;p&gt;Programming is like finance: you should find creative ways to invest your time to achieve outcomes in the short, medium, and long term.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I am a software development expert, and that is what I do. You can contact me at my website: &lt;a href="http://www.joseamaya.com" rel="noopener noreferrer"&gt;www.joseamaya.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ia</category>
      <category>webdeveloper</category>
      <category>softwaredeveloper</category>
    </item>
    <item>
      <title>📸 I need a place to store preview screenshots of my React components and a button that says "copy code" to easily paste it into my project. Why is it so hard to find a simple solution for something so straightforward? 🤔</title>
      <dc:creator>José Antonio Fernández</dc:creator>
      <pubDate>Wed, 09 Apr 2025 01:37:38 +0000</pubDate>
      <link>https://dev.to/joseamaya/i-need-a-place-to-store-preview-screenshots-of-my-react-components-and-a-button-that-says-copy-4dbc</link>
      <guid>https://dev.to/joseamaya/i-need-a-place-to-store-preview-screenshots-of-my-react-components-and-a-button-that-says-copy-4dbc</guid>
      <description></description>
      <category>react</category>
      <category>help</category>
    </item>
    <item>
      <title>¿Cómo implementar Tailwind en un tema de Shopify? (ESP)</title>
      <dc:creator>José Antonio Fernández</dc:creator>
      <pubDate>Tue, 18 Mar 2025 05:39:15 +0000</pubDate>
      <link>https://dev.to/joseamaya/como-implementar-tailwind-en-un-tema-de-shopify-esp-35gh</link>
      <guid>https://dev.to/joseamaya/como-implementar-tailwind-en-un-tema-de-shopify-esp-35gh</guid>
      <description>&lt;p&gt;El proceso de creación de temas es una de las tareas constamente repetitiva en el proceso de desarrollo de Shopify, especificamente en el desarrollo de temas de Shopify.&lt;/p&gt;

&lt;p&gt;Algo importante en este proceso de desarrollo es que gran parte del tiempo es dedicado al desarrollo de secciones.&lt;/p&gt;

&lt;p&gt;También desde 2025 en adelante que se empezó con la adopción de bloques como piezas estructurales dentro de la interfaz de usuario con la que un comerciante puede interactuar en el pesonalizador de Shopify.&lt;/p&gt;

&lt;p&gt;Ser agil en la implementación de temas de Shopify es primordial. &lt;/p&gt;

&lt;p&gt;Voy especificarte como logré agilizar al máximo mi proceso de desarrollo de temas para diferentes comerciantes.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Implementación de Tailwindcss como marco CSS para el frontend.
&lt;/h2&gt;

&lt;p&gt;Esto es tan sencillo como ir a la web de tailwind y extraer la CDN de la versión para desarrollo del mismo, o en otras palabras, sencillamente agrega esto dentro de tu archivo &lt;code&gt;theme.liquid&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fsz0jpmd2f5ecr4ptbyli.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fsz0jpmd2f5ecr4ptbyli.png" alt="Lineas de codigo 1" width="800" height="575"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Debes configurar tu entorno de desarrollo de la siguiente manera:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;NPM&lt;/li&gt;
&lt;li&gt;NodeJS&lt;/li&gt;
&lt;li&gt;TailwindCLI&lt;/li&gt;
&lt;li&gt;Shopify CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Ahora, cuando te asegures que tienes todas las herramientas configuradas debes seguir los siguientes pasos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;*&lt;em&gt;Crear un archivo en el directorio Raiz que se llame: *&lt;/em&gt;&lt;code&gt;tailwind.config.js&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ficfzaii962nyic7o3pcy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ficfzaii962nyic7o3pcy.png" alt="Lineas de codigo 2" width="377" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Agrega la siguiente configuración al archivo &lt;code&gt;tailwind.config.js&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/** @type {import('tailwindcss').Config} */&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*/*.liquid&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;

  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="na"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;

  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ejecuta el comando &lt;code&gt;npm init&lt;/code&gt; para crear un nuevo paquete en el directorio raiz&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fasq93wppgsf3vewj8g0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fasq93wppgsf3vewj8g0x.png" alt="Lineas de codigo 3" width="800" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dentro del archivo package.json que se genera al ejecutar npm init debes agregar la siguiente linea de código:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"tw"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx @tailwindcss/cli -i ./assets/tailwind.css -o ./assets/output.css"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debes agregar eel siguiente archivo en la carpeta assets de tu tema de Shopify:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;tailwind.css&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;
  
  
  El archivo  debe contener &lt;code&gt;@import "tailwindcss";&lt;/code&gt;
&lt;/h2&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhjdwrsl79v3rhtgtimjy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhjdwrsl79v3rhtgtimjy.png" alt="Lineas de codigo 4" width="450" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Volvamos a leer la linea almacenada en package.json donde veremos el &lt;code&gt;output.css&lt;/code&gt;&lt;/strong&gt; que contiene todos los estilos de nuestras secciones, compilados y optimizados para producción:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Frsufih8t24zgpvwpqnjl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Frsufih8t24zgpvwpqnjl.png" alt="Lineas de codigo 5" width="800" height="42"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Puedes notar que se almacena en assets, lo que hace mucho mas simple el agregarlo al tema de la siguiente forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight liquid"&gt;&lt;code&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'output.css'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;asset_url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;stylesheet_tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Llegados a este punto tienes que tener claro 2 cosas:
&lt;/h2&gt;

&lt;p&gt;Debes &lt;strong&gt;comentar la CDN de desarrollo de tailwind&lt;/strong&gt; que si bien es cierto ayuda a agilizar todo el proceso de desarrollo con tailwindcss.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fz8a2wzrh59996ikf17qx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fz8a2wzrh59996ikf17qx.png" alt="Lineas de codigo 6" width="800" height="27"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Probar que todas las secciones, bloques de tu tema se vean correctamente. &lt;/p&gt;

&lt;p&gt;Puedes leer mas tips sobre shopify en mi blog personal:&lt;br&gt;
&lt;a href="https://joseamaya.com" rel="noopener noreferrer"&gt;Blog de Shopify - José Amaya&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtu.be/mN8vmAMlGDY" rel="noopener noreferrer"&gt;Video de Youtube&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tailwindcss</category>
      <category>shopify</category>
      <category>shopifytheme</category>
    </item>
    <item>
      <title>2025 - Developer Roadmap</title>
      <dc:creator>José Antonio Fernández</dc:creator>
      <pubDate>Tue, 21 Jan 2025 02:19:39 +0000</pubDate>
      <link>https://dev.to/joseamaya/2025-shopify-roadmap-ld9</link>
      <guid>https://dev.to/joseamaya/2025-shopify-roadmap-ld9</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/newyear"&gt;2025 New Year Writing challenge&lt;/a&gt;: Compiling 2025.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mi roadmap para 2025 (Consultaré el mismo con el paso de los días)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Enero ⭐
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Aprender sobre los web componentes y subir un proyecto&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Febrero ⭐
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Aprender sobre WASM y crear un proyecto&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Marzo ⭐
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lanzar mi primer MVP de prototipo de Chat avanzado para generar liquid components&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Abril ⭐
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Empezar la construir de un tema comercial para Shopify&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mayo ⭐
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Terminar la construcción del tema y enviar a publicar en Shopify&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Junio ⭐
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Empezar el desarrollo una app móvil&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Julio ⭐
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Subir una versión estable a Google Play Store&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agosto ⭐
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Encontrar un nicho de mercado y crear un Micro SAAS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Septiembre ⭐
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Empezar la construcción del SAAS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Octubre ⭐
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dimensionar y lanzar mi primer MVP &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Noviembre ⭐
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Certificar en una tecnología en la nube &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Diciembre ⭐
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lanzar una plataforma de reviews en Panamá &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>newyearchallenge</category>
      <category>career</category>
    </item>
    <item>
      <title>2024 - Lecciones y más</title>
      <dc:creator>José Antonio Fernández</dc:creator>
      <pubDate>Tue, 21 Jan 2025 02:02:19 +0000</pubDate>
      <link>https://dev.to/joseamaya/2024-lecciones-y-mas-4d8f</link>
      <guid>https://dev.to/joseamaya/2024-lecciones-y-mas-4d8f</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/newyear"&gt;2025 New Year Writing challenge&lt;/a&gt;: Retro’ing and Debugging 2024.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;El año 2024 ha sido un gran año para mi, de todas los diferentes aprendizajes voy a resaltar los mas importantes que sin duda le dieron un giro fenomenal a favor.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  1. Me especialice en comercio electrónico ⭐
&lt;/h1&gt;

&lt;p&gt;Un increíble viaje durante mas mi 3 año consecutivo desarrollando sobre Shopify me hizo adquirir grandes conocimientos en el área de comercio electrónico, ahora hago implementaciones estratégicas para lograr siempre mejores resultados. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Empecé a usar las tecnologías serverless de &lt;strong&gt;Cloudflare&lt;/strong&gt; ☁️
&lt;/h1&gt;

&lt;p&gt;Sí, lancé mi portafolios y usé Cloudflare, muy básico pensado siempre en dar a cliente lo que necesito sobre la tecnología base de mi stack. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxum4jg4yv4t5k082yuxf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxum4jg4yv4t5k082yuxf.png" alt="Image de mi portafolios" width="800" height="597"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://joseamaya.com" rel="noopener noreferrer"&gt;link a portafolios&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Empecé a aprender sobre Micro SAAS y como crear software que se pueda monetizar 📕
&lt;/h1&gt;

&lt;p&gt;Estuve estudiante las leyes locales sobre como monetizar un servicio digital lo cual me dejo abierta una gran gama de posibilidades&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  4. Aprendí mas a detalle Docker y Google Cloud Run para procesamiento de datos a gran escala
&lt;/h1&gt;

&lt;p&gt;Me gusto mucho la simplicidad de despliegue de Docker en Google Cloud Run, increíblemente genial y potente.&lt;/p&gt;

&lt;h1&gt;
  
  
  5. Cree mi primer side Project para unificar PDFS
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://merge-pdf.ui-blocks.com/" rel="noopener noreferrer"&gt;Merge PDF&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fgi5xvk4ynzi6s70u8uc5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fgi5xvk4ynzi6s70u8uc5.png" alt="Image de UI de unificador de PDFs" width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  6. Compre un Dominio para iniciar con un proyecto personal en Panamá, catalogopanama.com 🚀
&lt;/h1&gt;

&lt;p&gt;Sin embargo me tocó posponerlo pero al menos ya tengo un espacio destinado. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  7. Empecé a adoptar RemixJS como mi framework base
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F7hh030m3fqx3ppglchj2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F7hh030m3fqx3ppglchj2.png" alt="Cree mi primer RemixJS" width="800" height="630"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  8. Aprendí a cuidar mucho más mi salud física y mental
&lt;/h1&gt;

&lt;p&gt;Importante para el correcto funcionamiento del cuerpo ya que la profesión así lo amerita. &lt;/p&gt;

&lt;h1&gt;
  
  
  9. COPILOT COPILOT COPILOT
&lt;/h1&gt;

&lt;p&gt;Sin duda, la integración de Copilot se ha vuelto parte fundamental de mi proceso de desarrollo. &lt;/p&gt;

&lt;h1&gt;
  
  
  Gracias por leer
&lt;/h1&gt;

&lt;p&gt;Mi nombres es José Amaya y me dedico crear tecnologías para diferentes empresas en Panamá y cualquier parte del mundo &lt;/p&gt;

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

</description>
      <category>devchallenge</category>
      <category>newyearchallenge</category>
      <category>career</category>
      <category>shopify</category>
    </item>
    <item>
      <title>How use dompdf to generate a simple invoice pdf?</title>
      <dc:creator>José Antonio Fernández</dc:creator>
      <pubDate>Mon, 07 Feb 2022 00:34:45 +0000</pubDate>
      <link>https://dev.to/joseamaya/how-use-dompdf-to-generate-a-simple-invoice-pdf-11o9</link>
      <guid>https://dev.to/joseamaya/how-use-dompdf-to-generate-a-simple-invoice-pdf-11o9</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.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%2Fj2irve1r72f5wrdcb9f8.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fj2irve1r72f5wrdcb9f8.PNG" alt="Invoice formato with PHP" width="800" height="545"&gt;&lt;/a&gt;At this moment to understand the basis in composer I have decided to create a simple pdf generator with Dompdf package.&lt;/p&gt;

&lt;p&gt;This package is awesome and simple, to create a pdf invoice solution for download or create an automatic invoice delivery system.&lt;/p&gt;

&lt;p&gt;The idea for monetization:&lt;br&gt;
A create simple auth token system with API_KEY and token to receive JSON data for generating pdf in a simple PHP hosting.&lt;br&gt;
Free hosting for testing this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.000webhost.com/" rel="noopener noreferrer"&gt;Free PHP Hosting&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ok, the code:&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1:
&lt;/h3&gt;

&lt;p&gt;run this, for a run this you need to install composer&lt;br&gt;
&lt;code&gt;composer require dompdf/dompdf&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
The Dompdf documentation: : &lt;br&gt;
&lt;a href="https://packagist.org/packages/dompdf/dompdf" rel="noopener noreferrer"&gt;Dompdf Documentation&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2:
&lt;/h3&gt;

&lt;p&gt;Load vendor.autoload.php package&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'vendor/autoload.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 3:
&lt;/h3&gt;

&lt;p&gt;Use the main class to create functionalities&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Cargar paquete para usar el modulo de Dompdf&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Dompdf\Dompdf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Dompdf\Options&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Create an instance of the class Dompdf
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$dompdf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Dompdf&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Enable remote origins (for download image)
&lt;/h3&gt;

&lt;p&gt;If not enable this, the image not render in the pdf file and break the template format preset&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Options&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$options&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'isRemoteEnabled'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$dompdf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Dompdf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 4:
&lt;/h3&gt;

&lt;p&gt;Create an HTML template, with a text string&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$htmlTemplate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'
&amp;lt;style&amp;gt;
//all styles for the custom template 
&amp;lt;/style&amp;gt;

&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;htmlcontent&amp;gt;
    .......
&amp;lt;/html&amp;gt;
'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;To pass dynamic vars using this format into the string&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="s1"&gt;'.$contenidoDinamico.'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For creating bucle with PHP array using the other var to generate a string with Concat operator (htmlinfo.= 'bucleGetInfo') or array method to push data&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 5:
&lt;/h3&gt;

&lt;p&gt;Load HTML with loadHtml method of the class instance previously named&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$dompdf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;loadHtml&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 6:
&lt;/h3&gt;

&lt;p&gt;Set a size for the page with the setPaper Method&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$dompdf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setPaper&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'A4'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'landscape'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 7:
&lt;/h3&gt;

&lt;p&gt;Server compiled and fusion HTML with a PDF format to create a pdf image:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$dompdf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 8:
&lt;/h3&gt;

&lt;p&gt;Write this information of saving in temporal server memory for sending a file to the client request&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$dompdf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$fileName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://github.com/syntaxter/pdf_generator" rel="noopener noreferrer"&gt;Link al repo&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.instagram.com/syntaxter/" rel="noopener noreferrer"&gt;Siguemente en las redes como @syntaxter&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png" alt="[deleted user] image"&gt;
    &lt;/div&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;[Deleted User]&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>php</category>
      <category>html</category>
      <category>css</category>
      <category>dompdf</category>
    </item>
    <item>
      <title>Crear un formulario interactivo con Figma, CSS, HTML, JS 😀</title>
      <dc:creator>José Antonio Fernández</dc:creator>
      <pubDate>Wed, 08 Sep 2021 06:33:34 +0000</pubDate>
      <link>https://dev.to/joseamaya/crear-un-formulario-interactivo-con-figma-css-html-js-1d9e</link>
      <guid>https://dev.to/joseamaya/crear-un-formulario-interactivo-con-figma-css-html-js-1d9e</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fwww-ismyt-com%2Fimage%2Fupload%2Fv1628822848%2FIMAGENES%2FGITHUB%2Fheader-jordan-animation_c1is5k.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fwww-ismyt-com%2Fimage%2Fupload%2Fv1628822848%2FIMAGENES%2FGITHUB%2Fheader-jordan-animation_c1is5k.svg" alt="Texto de encabezado" width="2049" height="344"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Una de las principales razones por las cuales te dedicas a &lt;strong&gt;&lt;em&gt;desarrollar software&lt;/em&gt;&lt;/strong&gt; es la mejora constante de tu potencial como programador, quiero que estos post sirvan de ejemplo de la evolución que puedes lograr desarrollando el habito de enfocarte y programar cada día a un nivel que supere tu nivel anterior.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Inspiración
&lt;/h2&gt;

&lt;p&gt;Este proyecto fue creado con la finalidad de promover mi capacidad de desarrollo a nivel CSS/HTML/JS a un nivel muy básico, dentro del mismo intentó representar la forma más simple de emplear algunas pequeñas interacciones solo reutilizando las funciones que se encargan de las diferentes validaciones de los datos dentro del formulario.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fr7ywjddht4chml9pbc4p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fr7ywjddht4chml9pbc4p.png" alt="Imagen de referencia" width="477" height="652"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  El diseño
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ftfy6wfytwgi3rx42pbqd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ftfy6wfytwgi3rx42pbqd.png" alt="Diseño de formulario web" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bien, como parte importante del trabajo la inspiración de las diferentes imágenes está basada en la siguiente imagen original y el concepto de un formulario desarrollado para el concepto de barbería o cualquier otro tipo de proyecto pero variando la imagen de vector gráfico principal (SVG) construido con figma sin utilizar una herramienta profesional de diseño gráfico.&lt;/p&gt;

&lt;p&gt;Las interacciones y el resto de archivos también están construidos en forma solo exportado a CSS con el objetivo de lograr una mejor adaptación del diseño para asegurar una compatibilidad con el resto de dispositivos.&lt;/p&gt;


&lt;h2&gt;
  
  
  El tecnicismo
&lt;/h2&gt;

&lt;p&gt;Ahora lo importante, destacamos lo más importante el truco CSS y JS para lograr las pequeñas interacciones.&lt;/p&gt;

&lt;p&gt;Basándose en un diseño por componentes, está estructurado para que sea escalable lo que permite utilizar un elemento de tipo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ftqkpxgrvgel7jfyt2re5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ftqkpxgrvgel7jfyt2re5.png" alt="Diseño de input" width="440" height="148"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"inputApellido"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt;
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;
    &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt;
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Introducir apellido..."&lt;/span&gt;
    &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"apellido"&lt;/span&gt;
    &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;data-animacion=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"spanApellido inputs"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Para poder utilizar la gran funcionalidad llamada:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Display grid&lt;/em&gt;&lt;/strong&gt; que nos permite ser tan capaces y arquitectónicos como el mismo Bootstrap con un pequeño adhesivo de complejidad.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;grid-template-rows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="py"&gt;grid-column-gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;grid-row-gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0px&lt;/span&gt; &lt;span class="m"&gt;70px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;En todo caso, veamos algo del código JS donde principalmente seleccionas los elementos que estarás evaluando de forma completamente manual.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;validacionCelular&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;textVal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;celular&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;vacio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;textVal&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;textVal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;spanCelular&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;animacion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;svgCelular&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fill&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;black&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;spanCelular&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;animacion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="nx"&gt;svgCelular&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fill&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Con el paso de los años puedes simplemente definir una objeto a través de la información que extraes del form para validar si existe algún campo vacío o para detectar el input en actividad, sin embargo no es lo que necesitamos, son pocos campos y simplemente no representa una ganancia en rendimiento de miles de bytes por lo tanto no invierto tiempo en esto (pero como reto, intentalo).&lt;/p&gt;

&lt;p&gt;¡Okay!, prestemos atención al evento de escucha cuando un elemento esté en modo enfoque (que estés dentro del elemento con el fin de hacer algo)&lt;/p&gt;

&lt;p&gt;Ahora este otro, que es básicamente un evento que detecta cuando la tecla está presionada, ojo con este evento puede que si el usuario solo presiona y mantiene presionada la tecla te genere datos estúpidamente sucios para joderte (generalmente se trata de algún dev pendejo que no tiene nada que hacer), puedes hacerlo más eficiente con un simple change o un simple input que son eventos maravillosos a la hora de hacer validaciones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fnymajejbnwt5hl53k2cr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fnymajejbnwt5hl53k2cr.png" alt="Validacion de estado de input" width="359" height="295"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//animadores y validadores&lt;/span&gt;
&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;keyup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;validacionNombre&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;apellido&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;keyup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;validacionApellido&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;correo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;keyup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;validacionCorreo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;celular&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;keyup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;validacionCelular&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;mensaje&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;keyup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;validacionMensaje&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;En la parte de refactorización simplemente tengo la misma función que hace visible o invisible la animación de “esta activo y escribiendo” lo cual ahora me parece bastante asqueroso pero así lo hacía antes de dominar al 100% el uso de this, o cualquier otro evento.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Código que requiere factorización&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;interactionCorreo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;spanCorreo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;visibility&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;visible&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="nf"&gt;validacionCorreo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;interactionCelular&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;spanCelular&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;visibility&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;visible&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;validacionCelular&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;interactionMensaje&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;spanMensaje&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;visibility&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;visible&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;validacionMensaje&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aquí viene una pequeña lógica de validación, esta validación simplemente es simple no requeriría un If/Else porque seguramente con un operador ternario podría solventar esto, sin embargo me gustan los If ya que aunque no es seguro que los recuerde en 3 meses si tengo agregar algún módulo o funcionalidad integrado con el form no tendré ni puta idea de que hacía este formulario con ese operador ternario (después de tu primer proyecto empresarial sabes que esto es una maldición de código de la que no te librarás.&lt;/p&gt;

&lt;p&gt;En fin, espero que tengas una idea básica de cómo construir validaciones con JS e interacciones que se alimentan de esa validación.&lt;/p&gt;

&lt;p&gt;Este es mi correo profesional &lt;strong&gt;&lt;em&gt;&lt;a href="mailto:jose@joseamaya.tech"&gt;jose@joseamaya.tech&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;, si me escribes te aseguro que tendrás una respuesta.&lt;/p&gt;

&lt;p&gt;Atentamente, &lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fw8w4gpnhjlhity24so1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fw8w4gpnhjlhity24so1m.png" alt="Perfil" width="27" height="27"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;José A. Amaya&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href="https://github.com/syntaxter/web-form-validation" rel="noopener noreferrer"&gt;Link al repo&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://syntaxter.github.io/web-form-validation/" rel="noopener noreferrer"&gt;Link a la demo&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.instagram.com/syntaxter/" rel="noopener noreferrer"&gt;Siguemente en las redes como @syntaxter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>figma</category>
      <category>css</category>
      <category>html</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Vista para extraer datos de cohetes desde SpaceX API 🍋</title>
      <dc:creator>José Antonio Fernández</dc:creator>
      <pubDate>Fri, 20 Aug 2021 00:30:00 +0000</pubDate>
      <link>https://dev.to/joseamaya/vista-para-extraer-datos-de-cohetes-desde-spacex-api-4jdi</link>
      <guid>https://dev.to/joseamaya/vista-para-extraer-datos-de-cohetes-desde-spacex-api-4jdi</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fwww-ismyt-com%2Fimage%2Fupload%2Fv1628822848%2FIMAGENES%2FGITHUB%2Fheader-jordan-animation_c1is5k.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fwww-ismyt-com%2Fimage%2Fupload%2Fv1628822848%2FIMAGENES%2FGITHUB%2Fheader-jordan-animation_c1is5k.svg" alt="Imagen de portada" width="2049" height="344"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Hablemos rápidamente sobre como hacer renderizado desde el cliente con Literal Strings (ES6). &lt;br&gt;&lt;br&gt;
No necesitas manipular un Shadow Dom, o crear custom elements, ni tampoco templates con todas tus funcionalidades porque puedes implementar o inyectar código Javascript directamente desde el cliente y pasarlo como parte del contenido HTML de un elemento contenedor con el famoso innerHTML.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;El famoso innerHTML:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        contenedorCardsData.innerHTML += `
                            &amp;lt;div class="contenedorCardsItems"&amp;gt;
                                &amp;lt;h4&amp;gt;${element.serial}&amp;lt;/h4&amp;gt;
                                &amp;lt;div class="contenedorStatus"&amp;gt;
                                    &amp;lt;span class="blue"&amp;gt;${element.type}&amp;lt;/span&amp;gt;
                                    &amp;lt;span class="yellow"&amp;gt;${element.status}&amp;lt;/span&amp;gt;
                                &amp;lt;/div&amp;gt;

                                &amp;lt;div class="contenedorTextos"&amp;gt;
                                    &amp;lt;p class="descripcion"&amp;gt;${element.last_update}&amp;lt;/p&amp;gt;
                                    &amp;lt;p class="fechaLanzamiento"&amp;gt;Fecha de Lanzamiento&amp;lt;/p&amp;gt;
                                    &amp;lt;p class="fechaLanzamientoContent"&amp;gt;${element.original_launch}&amp;lt;/p&amp;gt;
                                &amp;lt;/div&amp;gt;
                            &amp;lt;/div&amp;gt;
                            `;
    } else {

        // Pasar código para mostrar advertencia de que no existen resultados

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

&lt;/div&gt;




&lt;p&gt;Siendo este un desarrollo que me tomó mas o menos 15 min crearlo, tiene muchas cosas que mejorar por lo que puedes agrear tus propias mejoras, puedes agregar filtros, de hecho el botón del filtro esta listado en la UI solo debes agregarle funcionalidad y practicar ya que el código para pasar peticiones fetch lo tienes acá: &lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async function busqueda() {
    var categorie = document.querySelector('#categoria').value;
    var spacexApi = await fetch(`https://api.spacexdata.com/v4/${categorie}`);
    return spacexApi;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tres lineas de código que te permiten obtener la respuesta y poder manejarla como promesa para poder hacer con ella lo que quieras.&lt;/p&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Veamos como se ve el diseño final 🍋&lt;/strong&gt;
&lt;/h3&gt;



&lt;p&gt;&lt;a href="https://media2.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%2F2z2emhefnjio7fbshymo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F2z2emhefnjio7fbshymo.png" alt="Dashboard UI SpaceX" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Los elementos amarrillos tienen una pequeña animación de loading, abajo verás el código.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🍋 Solo se basa en un par de parametros que pasas a través de Fetch
&lt;/h3&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
Como siempre, trato de dejar el código de la forma mas entendible posible para que puedas reutilizar los estilos en cualquiera de tus frameworks favoritos, finalmente cuando envias la petición a través de fetch puedes manejar directamente esa respuesta, gracias a que el endpoint de SpaceX API te genera el resultado en base al query que estas haciendo y sin usar ní una sola clase. &lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fyj99lref3ctyz045dgup.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fyj99lref3ctyz045dgup.png" alt="Dashboard Results Space X" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Conocimiento importantes para el desarrollo?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;fetch API
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:root {
    --main-bg-color: #0E0E0E;
    --secondary-bg-color: #161616;
    --blue-color: #4E54FF;
    --yellow-color: #F4E236;
    --bg-cards: rgba(255, 255, 255, 0.103);
}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CSS ( Grid / Flex / Keyframes )
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;header {
    height: 200px;
    width: 100%;
    display: grid;
    grid-template-columns: 20% 30% 20% 15% 15%;
    grid-template-rows: 100px;
}

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CSS / Animación previa a la búsqueda
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.loading::before {
    content: "";
    width: 40px;
    height: 100%;
    background: linear-gradient(96.4deg, rgba(255, 255, 255, 0) 4.54%, rgba(255, 255, 255, 0.265283) 57.15%, rgba(255, 255, 255, 0) 94.26%);
    position: absolute;
    opacity: .4;
    animation: move 1s infinite;
}

//el keyframe
@keyframes move {
    0% {
        transform: translateX(0px) rotate(0deg);
    }
    50% {
        transform: translateX(200px) rotate(20deg);
    }
    100% {
        transform: translateX(0px) rotate(0deg);
    }
}

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CSS / Estilización de la lista
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.listaSeleccion {
    display: flex;
    justify-content: center;
    align-items: center;
}

.listaSeleccion select {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 100px;
    background-color: transparent;
    border: none;
    outline: none;
    font-family: Montserrat;
    font-weight: 500;
    color: var(--main-yellow);
}

.listaSeleccion select * {
    background-color: var(--main-blue);
    border: none;
    box-shadow: none;
}

.listaSeleccion select&amp;gt;option {
    background-color: var(--main-blue);
    border: none;
    box-shadow: none;
    color: var(--main-yellow);
}


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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Javascript / Manejador de eventos principal
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
search.addEventListener('click', function(e) {
    let select = categorie.value;
    let string = txtSearch.value;
    busqueda()
        .then(data =&amp;gt; { return data.json() })
        .then(res =&amp;gt; {
            // console.log(res);
            contenedorCardsData.innerHTML = "";
            if (select == "capsules") {
                res.forEach(element =&amp;gt; {
                    busquedaCapsules(element, string);
                })
            } else if (select == "history") {
                res.forEach(element =&amp;gt; {
                    buscarHistory(element, string);
                })
            }

        });


});

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CSS / Microinteraction para el filtro
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
.contenedorFilter span {
    width: 25px;
    height: 2px;
    margin: 3px;
    background-color: var(--main-blue);
    transition: .4s;
    cursor: pointer;
}

.contenedorFilter:hover span {
    width: 35px;
}

.contenedorFilter:hover span:nth-child(2) {
    width: 10px;
}

.contenedorFilter span:nth-child(2) {
    width: 15px;
    height: 2px;
    margin: 3px;
    background-color: var(--main-yellow);
}

.contenedorFilter span:nth-child(3) {
    width: 10px;
    height: 2px;
    margin: 3px;
    background-color: var(--main-yellow);
}

.contenedorFilter:hover span:nth-child(3) {
    width: 5px;
}

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

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Sí no conoces CSS, JS te costará mil veces .&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h2&gt;
  
  
  Este código no ha sido testeado, por lo tanto lo puedes mejorar mil veces mas
&lt;/h2&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
Parte importante de tu aprendizaje en web design, es la utilización de APIs y manejo del DOM con un enfoque en desarrollo web 2021, evita esmerarte en que tu aplicación sea compatible con IE, ya tiene una muerte anunciada así que mejorar preparate para adentrarte en del desarrollo mordenos, APIS, Frameworks, Javascript Moderno...&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Es el encarga de cambiar la propiedad de display none a block y viceversa, puedes animar la transición del elemento contenedor como práctica o simplemente dejarlo como está actualmente.&lt;/p&gt;



&lt;p&gt;Este es mi correo profesional &lt;strong&gt;&lt;em&gt;&lt;a href="mailto:jose@joseamaya.tech"&gt;jose@joseamaya.tech&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;, si me escribes te aseguro que tendrás una respuesta.&lt;/p&gt;

&lt;p&gt;Atentamente, &lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fw8w4gpnhjlhity24so1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fw8w4gpnhjlhity24so1m.png" alt="Perfil" width="27" height="27"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;José A. Amaya&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href="https://github.com/syntaxter/spacex-api-rockets" rel="noopener noreferrer"&gt;Link al repo&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://syntaxter.github.io/spacex-api-rockets/" rel="noopener noreferrer"&gt;Link a la demo&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.instagram.com/syntaxter/" rel="noopener noreferrer"&gt;Siguemente en las redes como @syntaxter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>html</category>
      <category>css</category>
      <category>javascript</category>
      <category>spacex</category>
    </item>
    <item>
      <title>Dashboard simple en NodeJS x ExpressJS 🍋</title>
      <dc:creator>José Antonio Fernández</dc:creator>
      <pubDate>Sat, 14 Aug 2021 05:03:42 +0000</pubDate>
      <link>https://dev.to/joseamaya/dashboard-simple-en-nodejs-x-expressjs-57a7</link>
      <guid>https://dev.to/joseamaya/dashboard-simple-en-nodejs-x-expressjs-57a7</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fwww-ismyt-com%2Fimage%2Fupload%2Fv1628822848%2FIMAGENES%2FGITHUB%2Fheader-jordan-animation_c1is5k.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fwww-ismyt-com%2Fimage%2Fupload%2Fv1628822848%2FIMAGENES%2FGITHUB%2Fheader-jordan-animation_c1is5k.svg" alt="Portada del post" width="2049" height="344"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Este fue uno de mis primeros diseños enfocados en el aprovechamiento de un backend que gestionaba el envío masivo a través de un hosting basado en PHP para obtener un archivo CSV, transformarlo a JSON y luego decodificarlo.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Abajo te explico como utilizar este diseño en tu web o relacionarlo con otros mencionandote las clases principales.&lt;br&gt;
&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Veamos como se ve el diseño final 🍋
&lt;/h3&gt;



&lt;p&gt;&lt;a href="https://media2.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%2F39onmga85eb9n55ota6a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F39onmga85eb9n55ota6a.png" alt="Diseño UI de Dashboard" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  🍋 Y también tiene un campo para introducción de datos
&lt;/h3&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
Esto lo puedes reciclar como un componente para un framework o simplemente usarlo como JS simple para gestionar peticiones para almacenar datos en una db, json o cualquier lugar donde lo utilices de forma recurrente. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F8rwibkher5nbr8m7asrg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F8rwibkher5nbr8m7asrg.png" alt="Segunda imagen de Dashboard" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Conocimiento importantes para el desarrollo?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CSS / Variables
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:root {
    --main-bg-color: #0E0E0E;
    --secondary-bg-color: #161616;
    --blue-color: #4E54FF;
    --yellow-color: #F4E236;
    --bg-cards: rgba(255, 255, 255, 0.103);
}
}

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CSS / Display grid
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;element {
    display: grid;
    grid-template-columns: 30% 70%;
}

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CSS / Display Flex
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.contenedorLogo {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    padding-left: 20px;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CSS / Mixing CSS Hover Parent to Child
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.contenedorPerfil img:hover~span {
    position: absolute;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    transform: translateX(7px);
    background: var(--blue-color);
    transition: 0.5s;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CSS / Postion Fixed
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.pencil {
    position: fixed;
    width: 75px;
    height: 75px;
    background-color: var(--yellow-color);
    left: 50px;
    bottom: 30px;
    border-radius: 50%;
    display: flex;
    justify-content: center;
    align-items: center;
    cursor: pointer;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CSS / Postion reset styles (inputs)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.formularioArchivo input {
    width: 80%;
    height: 40px;
    border: none;
    border-bottom: 3px solid var(--yellow-color);
    margin: 20px;
    padding: 10px;
    background: transparent;
    outline: none;
    font-size: 1.3rem;
    color: #fff;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CSS / Microinteraction for close button
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#closeOpen::after {
    content: "";
    position: absolute;
    width: 25px;
    height: 2px;
    background-color: var(--yellow-color);
    transform: rotate(45deg);
    transition: .4s;
}

#closeOpen:hover::after {
    transform: rotate(0deg);
    transition: .4s;
}

#closeOpen::before {
    content: "";
    position: absolute;
    width: 25px;
    height: 2px;
    background-color: var(--yellow-color);
    transform: rotate(-45deg);
    transition: .4s;
}

#closeOpen:hover::before {
    transform: rotate(0deg);
    transition: .4s;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;blockquote&gt;
&lt;p&gt;Sí no conoces CSS te costará mil veces .&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h2&gt;
  
  
  El código en Javascript que permite mostrar/ocultar el formulario de carga de contenido
&lt;/h2&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
Este formulario solo contiene datos importantes para completar la funcionalidad de carga del elemento principal, este elemento permite que puedas enviar una petición, put, post, delete, get para renderizar los datos desde el servidor tienes el botón principal para procesar todos estos.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Código en js / Frontend
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;closeOpen.addEventListener('click', () =&amp;gt; {
    contenedorPopUp.style.display = "none";
})

pencil.addEventListener('click', () =&amp;gt; {
    contenedorPopUp.style.display = "grid";
})

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

&lt;/div&gt;



&lt;p&gt;Es el encarga de cambiar la propiedad de display none a block y viceversa, puedes animar la transición del elemento contenedor como práctica o simplemente dejarlo como está actualmente.&lt;/p&gt;



&lt;p&gt;Este es mi correo profesional &lt;strong&gt;&lt;em&gt;&lt;a href="mailto:jose@joseamaya.tech"&gt;jose@joseamaya.tech&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;, si me escribes te aseguro que tendrás una respuesta.&lt;/p&gt;

&lt;p&gt;Atentamente, &lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/syntaxter/node-dashboard-campaigns" rel="noopener noreferrer"&gt;Link al repo&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://syntaxter.github.io/node-dashboard-campaigns/" rel="noopener noreferrer"&gt;Link a la demo&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.instagram.com/syntaxter/" rel="noopener noreferrer"&gt;Siguemente en las redes como @syntaxter&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fw8w4gpnhjlhity24so1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fw8w4gpnhjlhity24so1m.png" alt="Perfil" width="27" height="27"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;José A. Amaya&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>express</category>
      <category>javascript</category>
      <category>css</category>
    </item>
    <item>
      <title>🏀 Animación de cards al estilo Jordan 🏀</title>
      <dc:creator>José Antonio Fernández</dc:creator>
      <pubDate>Fri, 13 Aug 2021 04:16:22 +0000</pubDate>
      <link>https://dev.to/joseamaya/animacion-de-cards-al-estilo-jordan-2mod</link>
      <guid>https://dev.to/joseamaya/animacion-de-cards-al-estilo-jordan-2mod</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fwww-ismyt-com%2Fimage%2Fupload%2Fv1628822848%2FIMAGENES%2FGITHUB%2Fheader-jordan-animation_c1is5k.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fwww-ismyt-com%2Fimage%2Fupload%2Fv1628822848%2FIMAGENES%2FGITHUB%2Fheader-jordan-animation_c1is5k.svg" alt="Banner animación cards Jordan" width="2049" height="344"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Este diseñ fue creado usando unicamente css y html, lenguajes de programaciones sobre los cuales se fundamente la web.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Abajo te explico como utilizar este diseño en tu web o relacionados otros de tus elementos para crear una mejor experiencia de usuario.&lt;br&gt;
&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Veamos como se ve el diseño final
&lt;/h3&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Frzenftisn7cbqj668sqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Frzenftisn7cbqj668sqn.png" alt="Cover de diseño final cards jordan" width="800" height="639"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Conocimiento importantes para el desarrollo?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CSS / Position Relative
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.card {
    position: relative;
    width: 100%;
    height: 100%;
    z-index: 10000;
    transition: 0.6s;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CSS / Position Absolute
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;img {
    position: absolute;
    max-width: 280px;
    left: 20px;
    top: 80px;
    transform: rotate(-35deg);
    transition: 0.5s;
}

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CSS / Hover Selector
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.contenedor:hover .card img {
    left: 20px;
    top: 40px;
    transition: 0.5s;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CSS / ::Before and After Pseudo ELements
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.contenedor:hover::before {
    width: 250px;
    height: 250px;
    right: -35px;
    top: -30px;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Sí no conoces CSS te costará mil veces .&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h2&gt;
  
  
  El código en Javascript que permite cambiar las zapatillas
&lt;/h2&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
Es bien sabido que javascript es el lenguaje por mucho mas usado en la web, pero para generar dinamismo esto puede servirte como un compoente y de esa forma te permite generar ids, enlaces dinamicos entre otras cosas para que tus compoentes sean totalmente reactivos o simplemente integrar la card a un motor de plantilla o lo que quieras hacer con ella.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Código en js
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;btnMorado.addEventListener("click", () =&amp;gt; {
    document.getElementById("imagen").src = "img/awesome-shoes-violet.png";
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Qué simplemente detecta el elemento y te permite cambiar dinamicamente la imagen previamente almacenada en el repo, o generar una función para extraer estos datos desde el backend y generar ids personalizados de forma dinamica y no manual que es mi caso particular.&lt;/p&gt;



&lt;p&gt;Este es mi correo profesional &lt;strong&gt;&lt;em&gt;&lt;a href="mailto:jose@joseamaya.tech"&gt;jose@joseamaya.tech&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;, si me escribes te aseguro que tendrás una respuesta.&lt;/p&gt;

&lt;p&gt;Atentamente, &lt;/p&gt;

&lt;h3&gt;
  
  
  Link al repo: &lt;a href="https://github.com/syntaxter/ui-animation-cards-jordan" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Link a la demo: &lt;a href="https://syntaxter.github.io/ui-animation-cards-jordan" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.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%2Fw8w4gpnhjlhity24so1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fw8w4gpnhjlhity24so1m.png" alt="Foto de perfil" width="27" height="27"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;José A. Amaya&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>github</category>
      <category>figma</category>
    </item>
    <item>
      <title>Escenarios: La creación de APIs en la empresa</title>
      <dc:creator>José Antonio Fernández</dc:creator>
      <pubDate>Tue, 10 Aug 2021 22:47:07 +0000</pubDate>
      <link>https://dev.to/joseamaya/escenarios-la-creacion-de-apis-en-la-empresa-5bn3</link>
      <guid>https://dev.to/joseamaya/escenarios-la-creacion-de-apis-en-la-empresa-5bn3</guid>
      <description>&lt;p&gt;Entre mas pasa el tiempo se vuelve mas necesario entender los principios del desarrollo de #APIs (#REST/#HTTP).&lt;/p&gt;

&lt;p&gt;Mira este escenario:&lt;br&gt;
Tienes una base de datos local a la que le inyectas semanalmente los nuevos correos registrados pero esto es tan manual como descargar un archivo csv y ingresarlo a un #CRM que valida la existencia o no de los registros.&lt;/p&gt;

&lt;p&gt;Dependiendo si es nuevo, si existe, si tiene error el procesa los envios masivos.&lt;/p&gt;

&lt;p&gt;La mejora (considerando que se usa #WP u otro #CMS):&lt;br&gt;
WordPress proporciona un acceso a los registros de nuevos suscriptores y este es validado con un token, y credenciales que fueron generadas por la API de WP de esta forma puedes gestionar con un API + #Middleware un gateway diseñado de forma local esta integración para extraer esos datos desde WP de automáticamente.&lt;/p&gt;

&lt;p&gt;Esto se genera con una tarea en el CRM que extrae los datos desde nuestro API, este API hace un balanceo para no sobrecargar el servidor y nuestro middlware limpia los registros de espacios o caracteres o cadenas de texto maliciosas antes de llegar a su destino.&lt;/p&gt;

&lt;p&gt;Ahora, este mismo API tiene un punto final donde el equipo de ventas puede ver el total de los nuevos registros procesados o nuevas personas que visualizaron la campaña o que interactuaron.&lt;/p&gt;

&lt;p&gt;Lo genial, sí mañana ventas decide que su CRM no le es funcional solo debe apuntar el nuevo CRM hacia nuestra ruta (dentro de nuestro API local) y evitar tener que construir un nuevo módulo para extraer o inyectar estos datos.&lt;/p&gt;

&lt;p&gt;Con la facilidad de que si usas un sistema replica (a nivel de VM/#Serverless/Cloud Computing) tu servicio en producción jamás se verá afectado tan sencillo como eso.&lt;/p&gt;

</description>
      <category>api</category>
      <category>rest</category>
      <category>http</category>
    </item>
    <item>
      <title>La zona de confort del programador</title>
      <dc:creator>José Antonio Fernández</dc:creator>
      <pubDate>Wed, 04 Aug 2021 23:54:19 +0000</pubDate>
      <link>https://dev.to/joseamaya/la-zona-de-confort-del-programador-4g14</link>
      <guid>https://dev.to/joseamaya/la-zona-de-confort-del-programador-4g14</guid>
      <description>&lt;p&gt;En todas las profesiones modernas existe un punto en el cual el crecimiento como profesional se verá estancado, cuando eres consciente de que estás estancado y no quieres crecer por miedo, por comodidad en ese momento entras a tu zona de confort.&lt;/p&gt;

&lt;p&gt;Siempre que te mantengas bajo un paraguas empresarial debes saber que la forma más favorable de permanecer en el trabajo es demostrando que sabes lo que haces y que tienes conocimiento (muchas no significa traer nuevas formas de hacer las cosas).&lt;/p&gt;

&lt;p&gt;No sabes cuántos programadores se quedan estancados en un solo lugar y cuando la realidad decide abrirle los ojos se dan cuenta que esa realidad a la que se adaptaron por muchos años de servicio a una empresa cambió totalmente (esto es muy riesgoso cuando estás en esta profesión).&lt;/p&gt;

&lt;p&gt;La cosa es es que al estar en una empresa en la que te sientes muy cómodo generalmente tiene el patrón de no cambiar la forma en que hace las cosas y eso significa que ahora el conocimiento que estas adquiriendo es mucho menor al que adquiriste para llegar donde estás y dejas de ser competitivo, pregúntate:&lt;/p&gt;

&lt;p&gt;¿Si salgo de aquí y voy al mercado nuevamente, soy alguién que una empresa contrataría y por qué?&lt;/p&gt;

&lt;p&gt;Es por eso que en algún momento debes mejorar habilidades como comunicación, liderazgo, oratoria y empatía porque es bien sabido que aunque amemos lo que hacemos hoy en 20 años puede que ya no sea así y dejes de hacer algo que amas a pasar a hacer algo por lo que te pagan.&lt;/p&gt;

&lt;p&gt;Nunca debes pensar a corto plazo, todas tus luchas de hoy deben significar algo en tu futuro lejano porque hoy resistimos todo pero en 20,30,40 años creeme que nuestra opinión será otra.&lt;/p&gt;

&lt;h1&gt;
  
  
  desarrolloweb #programacion #programador #tecnologia #sistemas #emprender #motivacion #diseñoweb #disenoweb #disenoui
&lt;/h1&gt;

</description>
    </item>
  </channel>
</rss>
