<?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: Dorian Morones</title>
    <description>The latest articles on Forem by Dorian Morones (@dmx).</description>
    <link>https://forem.com/dmx</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%2F535640%2Fa5a45c35-117f-4671-abd1-86a24dba8081.jpg</url>
      <title>Forem: Dorian Morones</title>
      <link>https://forem.com/dmx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/dmx"/>
    <language>en</language>
    <item>
      <title>The 'Code' was Never the Core: Reimagining the DLC with AI</title>
      <dc:creator>Dorian Morones</dc:creator>
      <pubDate>Fri, 01 May 2026 17:05:35 +0000</pubDate>
      <link>https://forem.com/dmx/the-code-was-never-the-core-reimagining-the-dlc-with-ai-1i19</link>
      <guid>https://forem.com/dmx/the-code-was-never-the-core-reimagining-the-dlc-with-ai-1i19</guid>
      <description>&lt;p&gt;Based on my recent experience trying to integrate AI into my team’s Development Life Cycle (DLC), I’ve hit some unexpected roadblocks. It wasn't just about technical hurdles; it was a mix of outdated processes, skeptical colleagues, and the pressure to meet customer expectations for security and quality. &lt;/p&gt;

&lt;p&gt;In searching for a "frictionless" way to introduce AI, I realized that the real hurdle isn't the tool or the output quality—&lt;strong&gt;it’s the human resistance to change.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Engineering Identity Shift
&lt;/h3&gt;

&lt;p&gt;This friction usually stems from a deep-seated identity crisis. As software engineers, we’ve spent decades tying our value to "the code." But whether we’re building a mobile app for an apartment complex, an HR system for payroll, or a new video game, our primary goal has always been to &lt;strong&gt;design systems that solve problems.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Code has always been the tool, not the core. Great systems aren't built by typing; they are built through engineering knowledge, architectural foresight, and a deep understanding of the customer. So why the friction? Is it a lack of AI prompts? A struggle with environment setup? Or is it just a primal human reaction to a shifting landscape?&lt;/p&gt;

&lt;h3&gt;
  
  
  From "Mechanical Typing" to "System Design"
&lt;/h3&gt;

&lt;p&gt;When we stop viewing "coding" as the heart of our job, we see it for what it truly is: a &lt;strong&gt;mechanical action.&lt;/strong&gt; Its automation is a natural step in the evolution of our craft. &lt;/p&gt;

&lt;p&gt;Far from making us obsolete, this shift actually makes the software engineer more relevant than ever. When you aren’t stuck writing code line-by-line, you finally have the bandwidth to focus on what actually matters: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;System Architecture:&lt;/strong&gt; Designing for high performance and global scalability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strategic Selection:&lt;/strong&gt; Choosing the right libraries, dependencies, and database schemas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Infrastructure:&lt;/strong&gt; Optimizing configurations for cost and reliability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Evolution of the Interface
&lt;/h3&gt;

&lt;p&gt;We’ve been here before. We moved from punch cards to assembly, then to high-level languages like C++ and Python. Each time, we moved further away from the "metal" and closer to the &lt;strong&gt;"intent."&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Today, we’re moving from "writing" to "interacting" with AI agents. It’s like managing a &lt;strong&gt;digital assembly line&lt;/strong&gt; where specialized agents handle the grunt work—drafting specs, scaffolding APIs, or hunting for edge cases. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Reality Check: Legacy Code
&lt;/h3&gt;

&lt;p&gt;Of course, this isn't a magic wand. Integrating AI into a legacy codebase remains a massive challenge, especially when there are no defined patterns or documentation. If the app is "spaghetti" code, the AI will struggle to understand the original requirements. &lt;/p&gt;

&lt;p&gt;But is this a &lt;em&gt;new&lt;/em&gt; problem? &lt;strong&gt;No.&lt;/strong&gt; It’s the exact same headache an engineer faces when they have to manually onboard or modernize a legacy tool. AI doesn't create the mess; it just shines a light on it. If a human can't understand the logic, an agent won't either. The work remains the same: we have to bridge the gap between where the system is and where it needs to be.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The Takeaway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The goal remains the same: &lt;strong&gt;solve the problem.&lt;/strong&gt; Only the interface has changed—evolving to make our process faster, more reliable, and ultimately, more impactful. &lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>management</category>
      <category>architecture</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The Augmented Builder: How AI Reimagined the Product-to-Code Pipeline</title>
      <dc:creator>Dorian Morones</dc:creator>
      <pubDate>Fri, 01 May 2026 17:05:23 +0000</pubDate>
      <link>https://forem.com/dmx/the-augmented-builder-how-ai-reimagined-the-product-to-code-pipeline-14k3</link>
      <guid>https://forem.com/dmx/the-augmented-builder-how-ai-reimagined-the-product-to-code-pipeline-14k3</guid>
      <description>&lt;p&gt;I've spent the last few weeks building &lt;strong&gt;Brainwake&lt;/strong&gt;, a mental agility app. While the goal was to create a tool for cognitive focus, the real discovery was the "new normal" of the build process.&lt;/p&gt;

&lt;p&gt;In 2026, the productivity boost from AI isn't just about &lt;strong&gt;"writing code faster"&lt;/strong&gt;—it's about &lt;strong&gt;elevating the quality of the product&lt;/strong&gt; from the first concept to the final commit. Here is how AI acted as a force multiplier across the entire lifecycle:&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 1. AI as a Strategic Product Partner
&lt;/h2&gt;

&lt;p&gt;Before opening an IDE, I used AI to stress-test the core concept. We mapped out &lt;strong&gt;gamification mechanics&lt;/strong&gt; for math and memory challenges, identifying user friction points before they became technical debt. &lt;/p&gt;

&lt;p&gt;It acted as a &lt;strong&gt;product researcher&lt;/strong&gt;, helping me define the &lt;strong&gt;&lt;em&gt;"why"&lt;/em&gt;&lt;/strong&gt; before I ever touched the &lt;strong&gt;&lt;em&gt;"how."&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Key wins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validated game mechanics through AI simulation&lt;/li&gt;
&lt;li&gt;Identified user pain points early&lt;/li&gt;
&lt;li&gt;Reduced design debt before development&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎨 2. Closing the Gap: Design Intent → Implementation
&lt;/h2&gt;

&lt;p&gt;With a background in multimedia design, I'm obsessed with &lt;strong&gt;fidelity&lt;/strong&gt;. AI has dissolved the wall between a visual idea and a working prototype. &lt;/p&gt;

&lt;p&gt;I could describe complex UI interactions and &lt;strong&gt;"Square" aesthetic principles&lt;/strong&gt;, and have the AI help translate those visual concepts into clean, high-performance &lt;strong&gt;React Native&lt;/strong&gt; components in real-time.&lt;/p&gt;

&lt;p&gt;The impact:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster prototyping&lt;/strong&gt; from design vision to working code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Higher UI/UX fidelity&lt;/strong&gt; without design-to-dev communication gaps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fewer design iterations&lt;/strong&gt; due to AI understanding aesthetic intent&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ 3. Elevating the Engineering Craft
&lt;/h2&gt;

&lt;p&gt;For the software engineer, AI has shifted the focus from &lt;strong&gt;"syntax"&lt;/strong&gt; to &lt;strong&gt;"systems."&lt;/strong&gt; For Brainwake, I used AI to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Architect Local-First Data:&lt;/strong&gt; Validating SQLite schemas and ensuring data persistence patterns were robust for offline-first usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Optimize Logic Engines:&lt;/strong&gt; Refining the algorithms behind the rapid-fire mental challenges to ensure zero-latency execution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Advanced Debugging:&lt;/strong&gt; Using AI to simulate edge cases in state management that would typically take hours of manual testing to find.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📈 Measuring the Impact: The Velocity Shift
&lt;/h2&gt;

&lt;p&gt;Moving from concept to a production-ready state happened at a pace that would have been &lt;strong&gt;impossible&lt;/strong&gt; a few years ago. By offloading the "mechanical" tasks to AI, the metrics tell a clear story:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Traditional Workflow&lt;/th&gt;
&lt;th&gt;Augmented Workflow (2026)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Code Velocity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2-3 weeks (MVP)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;4 days&lt;/strong&gt; (Full Prototype)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Test Coverage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;60% (Manual Scripting)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;95%&lt;/strong&gt; (AI-Generated Edge Cases)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Iteration Loop&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hours (Fix/Re-compile)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Minutes&lt;/strong&gt; (Real-time Refactoring)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Post-launch afterthought&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Simultaneous&lt;/strong&gt; with Architecture&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Key Performance Drivers
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Rapid Product Iteration:&lt;/strong&gt;&lt;br&gt;
I was able to pivot the &lt;strong&gt;"Memory Match"&lt;/strong&gt; logic three times in a single afternoon based on AI-simulated user feedback—a process that usually takes a full sprint of manual tweaking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero-Debt Scaffolding:&lt;/strong&gt;&lt;br&gt;
By using AI to generate the boilerplate for state management and navigation, I saved roughly &lt;strong&gt;40+ hours&lt;/strong&gt; of foundational labor, allowing me to focus 100% on the core gameplay logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instant Context Switching:&lt;/strong&gt;&lt;br&gt;
AI acted as a &lt;strong&gt;"live documentation"&lt;/strong&gt; layer, meaning I spent 0% of my time hunting through Stack Overflow and &lt;strong&gt;100%&lt;/strong&gt; of my time inside the logic.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The Takeaway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The real power of AI isn't that it &lt;strong&gt;"works for you"&lt;/strong&gt;—it's that it allows you to &lt;strong&gt;operate at a higher level of abstraction&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;It handles the repetitive syntax and boilerplate so you can focus on &lt;strong&gt;architecture, UX, and the mission&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;The future of engineering isn't just about being a &lt;strong&gt;"coder"&lt;/strong&gt;; it's about being a &lt;strong&gt;Product-Minded Architect&lt;/strong&gt; who knows how to leverage AI to move from idea to impact at record speed.&lt;/p&gt;

&lt;p&gt;I'd love for you to try the app and let me know how it sharpens your focus.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apps.apple.com/tn/app/brainwake-mental-agility/id6758255837" rel="noopener noreferrer"&gt;→ Try Brainwake here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>software</category>
      <category>product</category>
      <category>productdesign</category>
    </item>
    <item>
      <title>React Custom Tooltip</title>
      <dc:creator>Dorian Morones</dc:creator>
      <pubDate>Sun, 14 Mar 2021 16:52:53 +0000</pubDate>
      <link>https://forem.com/dmx/react-custom-tooltip-128h</link>
      <guid>https://forem.com/dmx/react-custom-tooltip-128h</guid>
      <description>&lt;p&gt;En ocasiones necesitamos dar información al usuario de la acción que ejecutara algún elemento del nuestro sitio web, una de las mejores formas de hacerlo es con un Tooltip.&lt;/p&gt;

&lt;p&gt;Primero debemos escribir el markup de nuestro nuevo tooltip:&lt;/p&gt;

&lt;p&gt;Necesitaremos 4 elementos como props:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;content = sera el contenido a mostrar dentro del tooltip.&lt;/li&gt;
&lt;li&gt;direction = definirá la posición del contenido.&lt;/li&gt;
&lt;li&gt;delay = definirá el tiempo antes de mostrar el contenido.&lt;/li&gt;
&lt;li&gt;children = sera el elemento que accionara el tooltip.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React, { FunctionComponent, useState } from 'react';

//Styled Components
import {
    TooltipContainer,
    TooltipContent
} from './styles/Tooltip_Styles';

const Tooltip: FunctionComponent&amp;lt;TooltipProps&amp;gt; = ({ 
content, 
direction = 'bottom', 
delay = 300,  
children 
}) =&amp;gt; {

  let timeout;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);

  const showTip = () =&amp;gt; {
    timeout = setTimeout(() =&amp;gt; {
      setShow(true);
    }, delay);
  };

  const hideTip = () =&amp;gt; {
    clearInterval(timeout);
    setShow(true);
  };

  return (
   &amp;lt;TooltipContainer
   onMouseEnter={showTip}
   onMouseLeave={hideTip}
   &amp;gt;
    {children}
    { show &amp;amp;&amp;amp; (
     &amp;lt;TooltipContent direction={direction}&amp;gt;
      {content}
     &amp;lt;/TooltipContent&amp;gt;
     )
    }
   &amp;lt;/TooltipContainer&amp;gt;
  )
}

export default Tooltip;

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

&lt;/div&gt;



&lt;p&gt;Dentro de nuestro tooltip tenemos dos funciones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;showTip: esta función se activara cuando el cursor este sobre el contenedor del tooltip y encargara de mostrar el contenido del tooltip que recibimos en los props, cambiando el estado &lt;code&gt;show&lt;/code&gt; a &lt;code&gt;true&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const showTip = () =&amp;gt; {
    timeout = setTimeout(() =&amp;gt; {
      setShow(true);
    }, delay);
  };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;hideTip: esta función se activara cuando el cursor salga del contenedor del tooltip y encargara de ocultar el contenido del tooltip, cambiando el estado &lt;code&gt;show&lt;/code&gt; a &lt;code&gt;false&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const hideTip = () =&amp;gt; {
    clearInterval(timeout);
    setShow(true);
  };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este punto ya tenemos la lógica para mostrar y ocultar el contenido del Tooltip, pero aún tenemos que definir la posición del contenido, y eso lo haremos con styled-components.&lt;/p&gt;

&lt;p&gt;Pueden agregar los styled-components en el mismo archivo, pero sugiero sea en uno nuevo para tener más ordene en nuestro código.&lt;/p&gt;

&lt;p&gt;En este nuevo archivo definiremos dos componentes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;TooltipContainer: sera el contenedor de todo el tooltip.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TooltipContent: sera el contenedor de la información que mostrara nuestro tooltip y la posición en la que esta información sé mostrar: top, bottom, left, right.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import styled, { css } from 'styled-components';

export const TooltipContainer = styled.div`
  display: inline-block;
  position: relative;
`

export const TooltipContent = styled.div`
  position: absolute;
  border-radius: 4px;
  left: 50%;
  transform: translateX(-50%);
  padding: 6px;
  color: #fff;
  background: #000;
  font-size: 14px;
  font-family: sans-serif;
  line-height: 1;
  z-index: 100;
  white-space: nowrap;
  &amp;amp;:before{
    content: '';
    left: 50%;
    border: solid transparent;
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
    border-width: 6px;
    margin-left: calc(6px * -1);
  }
  ${props =&amp;gt; {
    if(props.direction === 'top'){
      return css`
        top: calc(20px * -1);
        &amp;amp;:before {
          top: 100%;
          border-top-color: #000;
        }
      `
    }
    if(props.direction === 'bottom'){
      return css`
        bottom: calc(20px * -1);
        &amp;amp;:before {
          bottom: 100%;
          border-bottom-color: #000;
        }
      `
    }
    if(props.direction === 'left'){
      return css`
        left: auto;
        right: calc(100% + 20px);
        top: 50%;
        transform: translateX(0) translateY(-50%);
        &amp;amp;:before {
          left: auto;
          right: calc(6px * -2);
          top: 50%;
          transform: translateX(0) translateY(-50%);
          border-left-color: #000;
        }
      `
    }
    if(props.direction === 'right'){
      return css`
        left: calc(100% + 20px);
        top: 50%;
        transform: translateX(0) translateY(-50%);
        &amp;amp;:before {
          left: calc(6px * -1);
          top: 50%;
          transform: translateX(0) translateY(-50%);
          border-right-color: #000;
        }
      `
    }
  }}
`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>react</category>
      <category>css</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>5 extensiones de VS Code para frontend</title>
      <dc:creator>Dorian Morones</dc:creator>
      <pubDate>Thu, 07 Jan 2021 20:02:18 +0000</pubDate>
      <link>https://forem.com/dmx/5-extensiones-de-vs-code-para-frontend-597i</link>
      <guid>https://forem.com/dmx/5-extensiones-de-vs-code-para-frontend-597i</guid>
      <description>&lt;p&gt;Durante los últimos 3 años, estuve probando extensiones de VS code para poder facilitar el día a día, y estas son mi top 5 para desarrollo frontend:&lt;/p&gt;

&lt;h4&gt;
  
  
  Turbo Console Log
&lt;/h4&gt;

&lt;p&gt;Esta extensión te permite generar solo con un shortcut "ctrl + alt + L" un &lt;code&gt;console.log&lt;/code&gt; con información importante para ser identificados rápidamente en el explorador.&lt;/p&gt;

&lt;p&gt;Ejemplo:&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;🚀 ~ file: example.tsx ~ line 97 ~ handleExample ~ valueExample&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;valueExample&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La estructura es bastante simple, primero el archivo donde está el console.log, la linea del archivo, la función en donde está el archivo y la variable que se asigna al &lt;code&gt;console.log&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=ChakrounAnas.turbo-console-log" rel="noopener noreferrer"&gt;Descargar&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Auto Close Tag
&lt;/h4&gt;

&lt;p&gt;Muchas veces cuando inicias en el desarrollo de frontend (y aun después de varios años) puedes cometer el error de omitir la etiqueta de cierre de un div o algún párrafo, o escribir mal el nombre de la etiqueta de cierre, estos errores al ser tan pequeños son difíciles de encontrar entre tantas lineas de código, Auto Close tag es la solución.&lt;/p&gt;

&lt;p&gt;Ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;// Sin Auto Close Tag
&lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Auto Close Tag&lt;span class="nt"&gt;&amp;lt;/o&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dib&amp;gt;&lt;/span&gt;

// Con Auto Close Tag
&lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Auto Close Tag&lt;span class="nt"&gt;&amp;lt;/p&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;&lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag" rel="noopener noreferrer"&gt;Descargar&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Auto Rename Tag
&lt;/h4&gt;

&lt;p&gt;Algunas veces necesitamos cambiar etiquetas, por alguna otra, como párrafos por span, o por un, Auto Rename Tag nos ayuda a hacer esto bastante rápido y con muy poco margen de error.&lt;/p&gt;

&lt;p&gt;Ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;// Sin Auto Rename Tag
&lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Auto Close Tag&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dib&amp;gt;&lt;/span&gt;

// Con Auto Rename Tag
&lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Auto Close Tag&lt;span class="nt"&gt;&amp;lt;/h2&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;&lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag" rel="noopener noreferrer"&gt;Descargar&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Import Cost
&lt;/h4&gt;

&lt;p&gt;Cuando trabajas con algún framework de Javascript, siempre es bueno saber cuando pesa alguna dependencia que estas usando para saber si es la mejor opción, Import Cost te muestra el peso de cada import que tienes en tus archivos.&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%2Fi%2Fus9lkz94ijcr1eq40675.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%2Fi%2Fus9lkz94ijcr1eq40675.png" alt="Alt Text" width="632" height="48"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost" rel="noopener noreferrer"&gt;Descargar&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  GitLens — Git supercharged
&lt;/h4&gt;

&lt;p&gt;La ultima y muy útil al trabajar en un equipo de desarrollo es GitLens, te da información sobre la línea de código en que estes situado, como quien la modifico, cuando, el commit en el que se modifico, y link directo a ese commit.&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%2Fi%2Frwmt4rdb4q1jwy7s2f7t.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%2Fi%2Frwmt4rdb4q1jwy7s2f7t.png" alt="Alt Text" width="800" height="141"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens" rel="noopener noreferrer"&gt;Descargar&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>spanish</category>
    </item>
    <item>
      <title>CSS Background color en Textos</title>
      <dc:creator>Dorian Morones</dc:creator>
      <pubDate>Wed, 06 Jan 2021 20:22:45 +0000</pubDate>
      <link>https://forem.com/dmx/css-background-color-en-textos-1k63</link>
      <guid>https://forem.com/dmx/css-background-color-en-textos-1k63</guid>
      <description>&lt;p&gt;Los degradados de color en un sitio web son detalles muy llamativos que dan peso a cierta sección, pero no solo podemos utilizarlos como fondo de un contenedor o banner, también podemos agregar un degradado de color a títulos.&lt;/p&gt;

&lt;p&gt;Primero tenemos que definir el texto al que aplicaremos el degradado:&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;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"gradient"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Mi super titulo&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una ves tenemos listo nuestro titulo, solo tenemos que aplicar estilos generales:&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;h1&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'Lato'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;'Lucida Grande'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;'Lucida Sans Unicode'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Tahoma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Sans-Serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;70px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;text-transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;uppercase&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;Para agregar el degradado necesitamos una propiedad de css llamada 'linear-gradient', que se utiliza de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;background-image: linear-gradient(direction, color-1, color-stop2, ...);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;direction: es la dirección en la que el degradado trabajara.&lt;/li&gt;
&lt;li&gt;color-1: en color principal o de inicio del degradado.&lt;/li&gt;
&lt;li&gt;color-2: en color secundario o de cierre del degradado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El código con linear-gradient aplicado se vería así:&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="nc"&gt;.gradient&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;linear-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;right&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;#30CFD0&lt;/span&gt; &lt;span class="m"&gt;30%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;#520AAB&lt;/span&gt; &lt;span class="m"&gt;80%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-background-clip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-text-fill-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;transparent&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;h3&gt;
  
  
  Resultado:
&lt;/h3&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/DorianMorones/embed/rNMKjWy?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>css</category>
      <category>webdev</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Spinner facil y rapido</title>
      <dc:creator>Dorian Morones</dc:creator>
      <pubDate>Tue, 05 Jan 2021 01:28:51 +0000</pubDate>
      <link>https://forem.com/dmx/spinner-facil-y-rapido-5bei</link>
      <guid>https://forem.com/dmx/spinner-facil-y-rapido-5bei</guid>
      <description>&lt;p&gt;Un spinner es un componente muy importante para un sitio web, ya que nos ayudar a dar información al usuario sobre el estatus de nuestra página al realizar la primera carga, o después de una acción del usuario como cambiar de opción en el menú, abrir una galería de imágenes, o enviar un formulario.&lt;/p&gt;

&lt;p&gt;Una forma muy fácil de hacer un spinner o loading es con puro css, de esta manera nos aseguramos que se visualizara y funcionara correctamente en cualquier navegador.&lt;/p&gt;

&lt;p&gt;Primero necesitamos crear un contenedor HTML:&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;"spinner"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora solo necesitamos aplicar los estilos sobre este contenedor, y al ser solo CSS, puedes elegir la manera que más te guste de implementar como CSS, SCSS, styled-components, o cualquier otro:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primero definiremos el tamano de nuestro spinner y agregaremos bordes para que sea un poco más estético:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.spinner&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;36px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;36px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-left-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#7d47ff&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;Una ves tenemos la estructura base de nuestro spinner agregaremos las animaciones, de esta manera haremos saber al usuario que nuestro sitio web sigue funcionando:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.spinner&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;36px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;36px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-left-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#7d47ff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;spin&lt;/span&gt; &lt;span class="m"&gt;1s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt; &lt;span class="n"&gt;infinite&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;Una ves agregada la animación

&lt;code&gt;spin&lt;/code&gt;

solo nos queda agregar los pasos de esa animación con

&lt;code&gt;keyframes&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@keyframes&lt;/span&gt; &lt;span class="n"&gt;spin&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="err"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;360deg&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;h3&gt;
  
  
  Resultado:
&lt;/h3&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/DorianMorones/embed/BaLxLap?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>loader</category>
      <category>spanish</category>
    </item>
  </channel>
</rss>
