<?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: RahulReddy</title>
    <description>The latest articles on Forem by RahulReddy (@hey_raahul).</description>
    <link>https://forem.com/hey_raahul</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%2F627215%2Fe7414466-7d8d-4c18-802c-ceff6cc1afc4.jpg</url>
      <title>Forem: RahulReddy</title>
      <link>https://forem.com/hey_raahul</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hey_raahul"/>
    <language>en</language>
    <item>
      <title>GSEO: How to Get Found in the AI Search World</title>
      <dc:creator>RahulReddy</dc:creator>
      <pubDate>Tue, 27 Jan 2026 00:02:13 +0000</pubDate>
      <link>https://forem.com/playfulprogramming/gseo-how-to-get-found-in-the-ai-search-world-4m14</link>
      <guid>https://forem.com/playfulprogramming/gseo-how-to-get-found-in-the-ai-search-world-4m14</guid>
      <description>&lt;p&gt;Search is no longer about finding the best page to click. It’s about getting the best answer instantly. Tools like ChatGPT, Perplexity, and Gemini are changing how people discover information, and this shift is forcing a new way of thinking about SEO.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. From Links to Answers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For a long time, search worked in a very predictable way. You typed a query into Google, scanned through ten blue links, and clicked the one that looked most promising. Websites competed to rank higher because clicks were the goal.&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%2Fzfqp0cpd5m4b1utjwfop.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%2Fzfqp0cpd5m4b1utjwfop.png" alt=" " width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That behavior is fading fast.&lt;/p&gt;

&lt;p&gt;Today, when someone asks a question, they often receive a complete answer directly inside an AI interface. Instead of choosing between links, the user is given a summarized response that feels final and authoritative. In many cases, the user never visits a website at all.&lt;/p&gt;

&lt;p&gt;Search has moved from “Which link should I click?” to “Here’s the answer you were looking for.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. How AI Picks an Answer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI doesn’t rely on a single webpage when answering a question. It reads across many sources such as blog posts, documentation, tweets, and product pages, then combines what it learns into one clear response.&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%2Fyjh5jsmq4k6h8enhmh7d.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%2Fyjh5jsmq4k6h8enhmh7d.png" alt=" " width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In simple terms, AI picks content it can summarize cleanly without guessing. The easier your content is to explain, the more likely it is to be used.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Perfect GSEO Page&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A strong GSEO page is designed for understanding, not just ranking. It starts with a clear title that tells both humans and AI exactly what the page is about. Early in the content, it defines the topic in simple language so there is no confusion about the subject.&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%2F8d17moey794gaw5da958.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%2F8d17moey794gaw5da958.png" alt=" " width="711" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal of a GSEO page is not to impress with complexity. It is to teach so clearly that an AI can confidently repeat the explanation in its own words.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Old vs New Metrics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Traditional SEO success was measured using rankings, clicks, and impressions. While these still matter, they no longer tell the full story.&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%2Fbj4vdoo8d036hpsbgs51.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%2Fbj4vdoo8d036hpsbgs51.png" alt=" " width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Success in GSEO is less about traffic volume and more about authority and influence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thought&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GSEO is not about gaming algorithms. It’s about explaining things so clearly that machines and humans both understand you. When your content becomes easy to summarize, compare, and trust, AI systems naturally choose it.&lt;/p&gt;

&lt;p&gt;The future of SEO belongs to those who focus less on ranking pages and more on becoming the answer.&lt;/p&gt;

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

&lt;p&gt;Try free SEO tools &lt;a href="https://www.useSEO.app" rel="noopener noreferrer"&gt;https://www.useSEO.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>marketing</category>
    </item>
    <item>
      <title>Art of creating accessible link</title>
      <dc:creator>RahulReddy</dc:creator>
      <pubDate>Sun, 24 Sep 2023 11:46:21 +0000</pubDate>
      <link>https://forem.com/playfulprogramming/art-of-creating-accessible-link-5glk</link>
      <guid>https://forem.com/playfulprogramming/art-of-creating-accessible-link-5glk</guid>
      <description>&lt;p&gt;Hyperlinks are the backbone of web navigation, allowing users to seamlessly move between web pages and access valuable content. However, creating accessible hyperlinks is essential to ensure that all users, including those with disabilities, can interact with your website effectively. In this blog post, we will explore best practices for creating accessible hyperlinks, providing examples that adhere to these guidelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Importance of Accessible Hyperlinks
&lt;/h2&gt;

&lt;p&gt;Accessible hyperlinks not only make your website more user-friendly but also contribute to better search engine optimization (SEO). They improve the overall user experience, leading to higher user engagement and satisfaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Use the Appropriate Role and Accessible Name
&lt;/h2&gt;

&lt;p&gt;When marking up hyperlinks, it's crucial to specify the appropriate role and provide an accessible name. The role defines the nature of the element, such as whether it's a link, button, or image, while the accessible name is the text that is presented to screen reader users.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a href="https://www.google.com" role="link" aria-label="Visit Google"&amp;gt;Google&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Avoid Generic Link Text
&lt;/h2&gt;

&lt;p&gt;Avoid using generic link text like "click here" or "read more." Instead, use descriptive and meaningful link text that conveys the link's purpose.&lt;/p&gt;

&lt;p&gt;Bad practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a href="mailto:info@example.com"&amp;gt;Click here to get in touch&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better Practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a href="mailto:info@example.com"&amp;gt;Contact us at info@example.com&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Provide Context and File Information
&lt;/h2&gt;

&lt;p&gt;When linking to files, inform users of the file format and size. This helps users understand what to expect before clicking on the link and prevents unexpected changes in context.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a href="documents/report.pdf"&amp;gt;Download our annual report (PDF, 2.5 MB)&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Inform Users of New Windows or Tabs
&lt;/h2&gt;

&lt;p&gt;When a hyperlink opens in a new window or tab, it's essential to inform users of this behaviour to prevent confusion.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a href="https://example.com" target="_blank" rel="noopener noreferrer"&amp;gt;Visit Example.com (opens in a new tab)&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Style Links for Clarity and Consistency
&lt;/h2&gt;

&lt;p&gt;Use CSS to style links appropriately for different states (unvisited, visited, hovered, active, and focused). Clear and consistent link styling improves usability and helps users understand their current interaction state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a:link {
    color: #0077cc; /* unvisited link */
}

a:visited {
    color: #551a8b; /* visited link */
}

a:hover {
    color: #ff6600; /* mouse over link */
}

a:active {
    color: #ff0000; /* selected link */
}

a:focus {
    outline: 2px solid #00f; /* keyboard focus */
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;FYI: Confusion of using buttons or links. If takes somewhere use links it the submitting form or run the javascript us button&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Creating accessible hyperlinks is not only a best practice for web development but also a way to improve SEO and user satisfaction. By following these guidelines and examples, you can create a web environment that is welcoming and inclusive for all users, regardless of their abilities. Making your hyperlinks accessible is a small but significant step toward a more inclusive and user-friendly website.&lt;/p&gt;

&lt;p&gt;If you would like to support my blogs/for a coffee - &lt;a href="https://www.buymeacoffee.com/Rahulmreddy" rel="noopener noreferrer"&gt;BuyMeCoffee&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Referrences
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.a11y-collective.com/blog/the-perfect-link/#h-click-here" rel="noopener noreferrer"&gt;Creating the perfect link by Rian Rietveld&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://css-tricks.com/block-links-the-search-for-a-perfect-solution/" rel="noopener noreferrer"&gt;Block Links: The Search for a Perfect Solution by Vikas Parashar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://css-tricks.com/block-links-are-a-pain-and-maybe-just-a-bad-idea/" rel="noopener noreferrer"&gt;Block Links Are a Pain (and Maybe Just a Bad Idea) by Chris Coyier&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>a11y</category>
      <category>webdev</category>
      <category>html</category>
    </item>
    <item>
      <title>Getting Started with GitHub Actions - Basics</title>
      <dc:creator>RahulReddy</dc:creator>
      <pubDate>Thu, 23 Feb 2023 16:37:39 +0000</pubDate>
      <link>https://forem.com/playfulprogramming/github-actions-basics-12em</link>
      <guid>https://forem.com/playfulprogramming/github-actions-basics-12em</guid>
      <description>&lt;p&gt;Automation is a key part of modern DevOps practices, allowing software development teams to quickly and efficiently develop, test, and deploy software. GitHub Actions is a powerful automation platform that can be used to automate tests, builds, and deployments.&lt;/p&gt;

&lt;p&gt;With GitHub Actions, developers can create custom workflows to integrate with existing processes and automate their workflow from code to deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisite
&lt;/h2&gt;

&lt;p&gt;Though we will start exploring GitHub actions from the beginning. It is good to have some Basic understanding of,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;GitHub&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;YAML(Yet Another Markup Language)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the end of this post, you will be able to write a simple workflow which triggers whenever a user creates an issue in GiHub and it will auto-assign to the specified user.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what are GitHub Actions?
&lt;/h2&gt;

&lt;p&gt;In simple terms, GitHub Actions is a way to make your computer do things automatically. For example, you can make your computer check your code for errors every time you make a change, or you can make it automatically create a new version of your project when you're ready to share it with others. It's like having a robot helper to help you with your projects!&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub actions and its components
&lt;/h2&gt;

&lt;p&gt;Before diving into creating workflow and actions it is good to know the key concepts involved in creating them.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Workflow
&lt;/h2&gt;

&lt;p&gt;GitHub workflow is a configurable automated process defined by a YAML file that will run when any event is triggered in your repository.&lt;/p&gt;

&lt;p&gt;Workflows are defined in the &lt;code&gt;.github/workflows&lt;/code&gt; directory in a repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Events
&lt;/h2&gt;

&lt;p&gt;GitHub Events are special triggers that can cause a workflow to run. For example, when someone pushes a change to a repository, that can trigger a workflow to run.&lt;/p&gt;

&lt;p&gt;GH Actions are event-driven, which means you can define what happens after a specific event.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Jobs
&lt;/h2&gt;

&lt;p&gt;GitHub Jobs are the individual tasks that make up a workflow. A job is a set of steps that run on the same runner.&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%2Fofcuncb2owo4sp5tzjvg.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%2Fofcuncb2owo4sp5tzjvg.png" alt="GitHub Jobs" width="799" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Steps
&lt;/h2&gt;

&lt;p&gt;Steps are individual tasks that can run commands, such as a shell command or an action, in a job within a workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Action
&lt;/h2&gt;

&lt;p&gt;Actions are the commands that define the steps of each job. They are combined into steps to create a job. Actions are standalone commands that can be portable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Magic of Workflow:
&lt;/h2&gt;

&lt;p&gt;Now we have a high-level understanding of different components, let us write and customize our first workflow.&lt;/p&gt;

&lt;p&gt;First and foremost we need a &lt;code&gt;.yml&lt;/code&gt; file to create our workflow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;All workflow files related to GitHub Actions must live in the .github/ workflows directory and must have either the .yml or .yaml file extension.&lt;/p&gt;
&lt;/blockquote&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%2Fdphpub0a6g8wabipnc8t.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%2Fdphpub0a6g8wabipnc8t.png" alt="GitHub Actions starter" width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: &lt;a href="https://github.com/DeRaowl/gh-actions" rel="noopener noreferrer"&gt;gh-actions&lt;/a&gt; is my repository name created. You can name it as per your choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Workflow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;GH Actions&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;issues&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;opened&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;auto-assign&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
        &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Auto-assign&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;PR'&lt;/span&gt;
              &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pozil/auto-assign-issue@v1&lt;/span&gt;
              &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                  &lt;span class="na"&gt;assignees&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deraowl&lt;/span&gt;
                  &lt;span class="na"&gt;repo-token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Don't worry about the weird syntax, it is a YAML code and I will explain every line in-depth. So no worries :)&lt;/p&gt;

&lt;p&gt;Specific keys that can be added to the workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;name:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;We need to provide a meaningful full name as it will be 
 visible on the actions tab in the GitHub repository.&lt;/li&gt;
&lt;li&gt;As it is an optional field, If you do not add this key 
 and a corresponding value, GitHub will set the name of 
 your workflow to the file path relative to the root of 
 the repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;on:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;This mandatory key specifies which event or events will 
 trigger the workflow.
&lt;/li&gt;
&lt;li&gt;This accepts a single event or an array of events.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;jobs&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Workflow runs can have one or more jobs.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;job_id&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Each job defined must have the job_id associated with 
 it.&lt;/li&gt;
&lt;li&gt;Each job ID must start with either an underscore (_) or 
 with a letter and must be unique to that specific job.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;runs_on&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;It is a required field, that specifies the type of 
 machine that the job will run on.&lt;/li&gt;
&lt;li&gt;In our case, we are using ubuntu-latest as a virtual 
 environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;steps&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Steps are tasks that exist within a job. They can contain 
 a series of tasks and run commands, set up tasks, or run 
 an action.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To Summarise the above workflow,&lt;/p&gt;

&lt;p&gt;The Issue assignment workflow will run every time an issue is opened. This will trigger a job called auto-assign, which will run on the latest version of Ubuntu, running on a GitHub-hosted runner.&lt;/p&gt;

&lt;p&gt;The step within the job will use an action called Auto-assign issue, which can be found in GitHub Marketplace. This step will use a repository token (GITHUB_TOKEN), which is automatically created when GitHub Actions are enabled in a repository. Finally, the job will assign an assignee – in this case, deraowl – to the newly created issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trigger the Workflow
&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%2Fyhhukn86llzzy4dmzm81.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%2Fyhhukn86llzzy4dmzm81.png" alt="Trigger workflow" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To trigger the above-created workflow just open a new issue under the same repository and click on Submit a new issue. And that's it.&lt;/p&gt;

&lt;p&gt;It will trigger the workflow which is mentioned above&lt;/p&gt;

&lt;p&gt;If your workflow fails due to a &lt;code&gt;For resources not accessible by integration&lt;/code&gt;, go to &lt;code&gt;github.com/username/repository/actions&lt;/code&gt; and under the general section change Workflow permission to Read and write permissions. This should resolve the&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%2F9pu1ayktvaay4t4prfgm.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%2F9pu1ayktvaay4t4prfgm.png" alt="GitHub workflow error" width="799" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Check Actions Live
&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%2F6bmbiwv0p3l3fdkakw7c.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%2F6bmbiwv0p3l3fdkakw7c.png" alt="GitHub Action in Live" width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now navigate to the Actions section in the header. Here you can see the job &lt;code&gt;auto-assign&lt;/code&gt; which will be executed successfully. It is a simple job created which will start executing as soon as an issue has been created.&lt;/p&gt;

&lt;p&gt;This can be used to auto-assign the assignee or auto-create specific labels. We will explore multiple jobs and actions in upcoming posts.&lt;/p&gt;

&lt;p&gt;Now if you check the issue which we created earlier named &lt;code&gt;GH actions testing&lt;/code&gt; under the Assignees section is now assigned to DeRaowl which is me.&lt;/p&gt;

&lt;p&gt;This name we defined in the job under &lt;code&gt;assignees&lt;/code&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%2Fpcu1i0ocnjmpgr99xgyb.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%2Fpcu1i0ocnjmpgr99xgyb.png" alt="GitHub in Actions" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  And it's a wrap
&lt;/h2&gt;

&lt;p&gt;So that's it. How easy it is to create a workflow. In upcoming posts, we will explore and create much more complex jobs and also will explain how we can create our job as &lt;code&gt;auto-assign&lt;/code&gt; and publish it to GitHub marketplaces.&lt;/p&gt;

&lt;p&gt;You can check out my &lt;a href="https://github.com/DeRaowl/gh-actions" rel="noopener noreferrer"&gt;Repositor&lt;/a&gt;y for the code. And if you want to explore more about GitHub actions then GitHub has very good Documentation.&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.github.com/en/actions" rel="noopener noreferrer"&gt;https://docs.github.com/en/actions&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/marketplace/actions/auto-assign-issue" rel="noopener noreferrer"&gt;https://github.com/marketplace/actions/auto-assign-issue&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://lo-victoria.com/series/github-actions" rel="noopener noreferrer"&gt;https://lo-victoria.com/series/github-actions&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>codenewbie</category>
      <category>fullstack</category>
      <category>google</category>
      <category>ai</category>
    </item>
    <item>
      <title>Automatic Batching in React 18</title>
      <dc:creator>RahulReddy</dc:creator>
      <pubDate>Sun, 03 Jul 2022 16:02:55 +0000</pubDate>
      <link>https://forem.com/playfulprogramming/automatic-batching-in-react-18-273h</link>
      <guid>https://forem.com/playfulprogramming/automatic-batching-in-react-18-273h</guid>
      <description>&lt;p&gt;&lt;strong&gt;Batching&lt;/strong&gt; is when React groups multiple state updates into a single re-render for better performance. In React 17 and prior, updates inside React event handlers were batched. But updates inside of promises, setTimeout, native event handlers, or any other event were not batched in React by default. &lt;br&gt;
&lt;br&gt;&lt;br&gt;
  However, In &lt;strong&gt;React18&lt;/strong&gt; we are introduced to improved version of batching called &lt;strong&gt;Automatic Batching&lt;/strong&gt;. It will enabled batching of all the state updates regardless of where they are called.&lt;/p&gt;

&lt;p&gt;Let us break out this batching process React 17 and prior along with React 18 and understand the problems we faced earlier.&lt;/p&gt;
&lt;h2&gt;
  
  
  Problem with React 17 and Prior
&lt;/h2&gt;

&lt;p&gt;Before looking into the issue, let us understand how batching works in React 17 and prior version. Our app contains two states to manage user name and city. &lt;strong&gt;onLoadUser&lt;/strong&gt; function will be invoked on button click.&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%2Fac2qp49s8b60ysusszud.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%2Fac2qp49s8b60ysusszud.png" alt="Sync React Batching"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can try the app in this @ &lt;a href="https://stackblitz.com/edit/react-ve7run?file=src%2FuserInfo.js,src%2FApp.js" rel="noopener noreferrer"&gt;StackBlitz&lt;/a&gt; . Click on a button and you will see console statement each time our App re-renders.&lt;/p&gt;

&lt;p&gt;If you observe the browser console, you will see that state changed message is logged only once for both state updates. (PS: Initial log statement occurs when your app gets mounted for the very first time).&lt;br&gt;
&lt;/p&gt;

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

export default function App() {
  const [name, setName] = useState();
  const [city, setCity] = useState();

  // Sync Function call
  const onLoadUser = () =&amp;gt; {
    setName('Rahul');
    setCity('Bangalore');
  };

  useEffect(() =&amp;gt; {
    console.log(`UseEffect Called: userDeatils ${name} ${city}`);
  }, [name, city]);

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;h1&amp;gt;Print User details&amp;lt;/h1&amp;gt;
      &amp;lt;p&amp;gt;
        User Name: &amp;lt;strong&amp;gt;{name}&amp;lt;/strong&amp;gt;
      &amp;lt;/p&amp;gt;
      &amp;lt;p&amp;gt;
        City: &amp;lt;strong&amp;gt;{city}&amp;lt;/strong&amp;gt;
      &amp;lt;/p&amp;gt;
      &amp;lt;button onClick={onLoadUser}&amp;gt;Fetch user details&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you have seen that React batched both state updates and re-rendered the component only once.&lt;br&gt;
But, what if we execute state updates in a context that is not associated with the browser?&lt;/p&gt;

&lt;p&gt;For example, consider a fetch() call that asynchronously loads data:&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%2Fifry7e5kmtswawq80jc7.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%2Fifry7e5kmtswawq80jc7.png" alt="Async functions"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you observe the browser console after executing this example, you will see 2 messages. This indicates that two separate re-renders occur for each state update.&lt;/p&gt;

&lt;p&gt;A fake API been used to fetch user details.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const onLoadUser = () =&amp;gt; {
    fetch('https://jsonplaceholder.typicode.com/users/1')
      .then((res) =&amp;gt; res.json())
      .then((data) =&amp;gt; {
        setName(data.name);
        setCity(data.address.city);
      });
  };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Any drawback here?
&lt;/h2&gt;

&lt;p&gt;As observed. we see two different behaviors with synchronous and asynchronous functions . It is a performance bottleneck. If there are lot of states coming in and you are re-rendering fairly heavy there can be multiple re-renders.&lt;br&gt;
That’s why React introduced &lt;strong&gt;Automatic Batching&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Batching works in React18?
&lt;/h2&gt;

&lt;p&gt;React v18 ensures that state updates invoked from any location will be batched by default. This will batch state updates, including native event handlers, asynchronous operations, timeouts, and intervals.&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%2F0c6crvxqatmm6n0p005k.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%2F0c6crvxqatmm6n0p005k.png" alt="React 18"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;React version should be 18&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you observe the browser console after executing this example, you will see two messages. This indicates that only one re-render occurs as React batches all state updates regardless of where they are called.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;To sum up that react 18 will batch the state updates for us no matter if it is in a simple function containing multiple state updates or a web API and interfaces like setTimeout, fetch or a promise containing multiple state updates.&lt;/p&gt;

&lt;p&gt;To know more about Automatic batching, check out &lt;a href="https://github.com/reactwg/react-18/discussions/21" rel="noopener noreferrer"&gt;Discussions here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I write about the web; you can follow me on &lt;a href="https://twitter.com/deraowl" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;. If you liked the post, give some ❤️!! Cheers&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>SASS - CSS with super power</title>
      <dc:creator>RahulReddy</dc:creator>
      <pubDate>Mon, 07 Jun 2021 11:32:30 +0000</pubDate>
      <link>https://forem.com/hey_raahul/sass-css-with-super-power-1hpk</link>
      <guid>https://forem.com/hey_raahul/sass-css-with-super-power-1hpk</guid>
      <description>&lt;p&gt;Hi Folks,&lt;/p&gt;

&lt;p&gt;If we work on small projects, there won't be a lot of need to maintain CSS, but if you're dealing with major projects? Maintaining CSS will be difficult. That's when SASS comes into play.&lt;/p&gt;

&lt;p&gt;SASS or Syntactically Awesome Style Sheets is a scripting language and CSS preprocessor which compiles into CSS. This means when we write code in SASS, it automatically converts sass code into CSS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why SASS?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It follows, "Don't repeat yourself principle" also called &lt;strong&gt;DRY PRINCIPLE&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Helps us to maintain our CSS code in a more organized manner.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  SASS comes up with 2 syntaxes:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;SCSS: Sassy CSS is a superset of CSS. In simple terms, a valid CSS file is a valid SCSS file. SCSS files have .scss file extension&lt;/li&gt;
&lt;li&gt;Intended syntax: Intended syntax mainly focuses on indentation. Intended files have a .sass file extension. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;SASS comes with a lot of features such as variables, nested rules, mixins, inline imports, built-in functions, etc. What we learn in detail.&lt;/p&gt;

&lt;h3&gt;
  
  
  SASS features.
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Variable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can declare variables globally and can use its placeholder at multiple places.&lt;/p&gt;

&lt;p&gt;SCSS,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$color-primary: #000;
$color-secondary: #333;
.nav-links{
       background-color: $color-primary;
       color: $color-secondary;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CSS,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.nav-links{
          background-color: #000;
          color: #333;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Nesting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We can nest selectors which share the same parent name which makes CSS more readable.&lt;br&gt;
SCSS,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;li{
display: inline-block
margin-left: 30px;
&amp;amp;:first-child{
margin: 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CSS,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;li{
display: inline-block;
margin-left: 30px;
}
li:first-child{
margin:0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Mixins &amp;amp; Include&lt;/strong&gt; - Mixins allow us to define CSS rules as a blueprint and we can use these rules in our selectors. To use mixins we have to use @ include followed by mixin name.&lt;br&gt;
SCSS,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$color-primary: #333;
@mixin header-main($bg-color){
color: $color-primary;
font-size: 3rem;
border: 2px solid $color-primary;
background-color: $bg-color;
}
.header {
@include header-main(#2b2b2b);  /*We can use this statement at multiple places if 
required by passing different bg-color parameter*/
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CSS,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.header {
color: #333;
font-size: 3rem;
border: 2px solid #333;
background-color: #2b2b2b;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Functions&lt;/strong&gt; - Yes, SASS allows us to create functions. To use functions we prefix function keyword with @ symbol.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@function divide($a/$b){
@return $a/$b;
}
.header{
padding: divide(30,7);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;These are some of the most useful features SASS comes with. You can read more about SASS here &lt;a href="https://sass-lang.com/documentation/syntax" rel="noopener noreferrer"&gt;Official Doc&lt;/a&gt;. This is one of the good things about learning SASS as a developer that saves so much time. However, there are disadvantages too in SASS, which you can read here &lt;a href="https://www.javatpoint.com/sass-advantages-and-disadvantages" rel="noopener noreferrer"&gt;Disadvantages&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Regarding SAAS, please let me know if this article was helpful in the comments. And your feedback is welcomed.&lt;/p&gt;

</description>
      <category>scss</category>
      <category>css</category>
      <category>saas</category>
      <category>webdev</category>
    </item>
    <item>
      <title>::Before and ::After in CSS made easy</title>
      <dc:creator>RahulReddy</dc:creator>
      <pubDate>Sat, 05 Jun 2021 03:50:14 +0000</pubDate>
      <link>https://forem.com/hey_raahul/before-and-after-in-css-made-easy-4m27</link>
      <guid>https://forem.com/hey_raahul/before-and-after-in-css-made-easy-4m27</guid>
      <description>&lt;p&gt;Hello, People&lt;/p&gt;

&lt;p&gt;Today we are going to learn about pseudo-elements, one of the most useful CSS properties.&lt;br&gt;
Pseudo-elements in CSS allow us to add content to a page without adding additional HTML elements.&lt;br&gt;
Seems confusing? Okay, in simple terms.&lt;/p&gt;

&lt;blockquote&gt;Pseudo-elements are like a shadow, which can be seen but not able to touch.&lt;/blockquote&gt;

&lt;p&gt;I can assure you that if you master these topics, you will use them all over your project. Without wasting time let us dive in.&lt;/p&gt;

&lt;h1&gt;::Before&lt;/h1&gt;

&lt;p&gt;Before selector is used to position content before the content of the selected element.&lt;/p&gt;
&lt;h3&gt;
  
  
  Syntax
&lt;/h3&gt;

&lt;p&gt;We need to add the item with the keyword ::before with the required content property. The content can be any string or even blank.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;     element::before{
      content: "";
     }

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

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Note: before and after pseudo-elements will not work without content property.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

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

&lt;h1&gt;::After&lt;/h1&gt;

&lt;p&gt;The after pseudo-element can be used to position content after the content of the selected element.&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax
&lt;/h3&gt;

&lt;p&gt;We need to add the item with the keyword ::after with the required content property.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;     element::after{
      content: "";
     }

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Note: These elements are inline by default&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I Hope, the blog was useful. If there are any queries feel free to ping me on &lt;a href="https://twitter.com/DeRaowl" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;. &lt;strong&gt;Now as a task you can create the below image&lt;/strong&gt; using before and after pseudo-elements.&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%2Fhasyko2buhni3yei585i.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%2Fhasyko2buhni3yei585i.png" alt="image.png" width="188" height="148"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The solution can be found here &lt;a href="https://codepen.io/Archisol/pen/QWpmLVK" rel="noopener noreferrer"&gt;Codepen&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more about Pseudo Elements, refer below websites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements" rel="noopener noreferrer"&gt;MDN Web-Docs&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://css-tricks.com/almanac/selectors/a/after-and-before/" rel="noopener noreferrer"&gt;CSS  Tricks&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

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