<?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: Lukman Isiaka</title>
    <description>The latest articles on Forem by Lukman Isiaka (@codellyson).</description>
    <link>https://forem.com/codellyson</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%2F73933%2F1a889cd6-2f21-4d97-b4f1-148d181d34fd.jpg</url>
      <title>Forem: Lukman Isiaka</title>
      <link>https://forem.com/codellyson</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/codellyson"/>
    <language>en</language>
    <item>
      <title>Submission for the DEV Weekend Challenge: Community</title>
      <dc:creator>Lukman Isiaka</dc:creator>
      <pubDate>Mon, 02 Mar 2026 22:15:17 +0000</pubDate>
      <link>https://forem.com/codellyson/submission-for-the-dev-weekend-challenge-community-bl7</link>
      <guid>https://forem.com/codellyson/submission-for-the-dev-weekend-challenge-community-bl7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;web development community&lt;/strong&gt;. We pour hours into building apps, but understanding &lt;em&gt;why users get frustrated&lt;/em&gt; remains one of the hardest problems. Enterprise tools like FullStory and Hotjar are expensive and privacy-heavy. Indie developers, small teams, and open-source maintainers are left guessing and reading through support tickets or hoping users speak up.&lt;/p&gt;

&lt;p&gt;Reev exists because every web developer deserves to know when their UI is failing users, without needing a six-figure analytics budget.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Reev&lt;/strong&gt; is a lightweight, open-source UX frustration detector that automatically catches real user frustration on your website and asks them what went wrong -right in the moment.&lt;/p&gt;

&lt;p&gt;Drop a single &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag on your site and Reev detects &lt;strong&gt;4 types of UX frustration&lt;/strong&gt; in real time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rage Clicks&lt;/strong&gt; - 3+ rapid clicks on the same element within 1.5 seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dead Links&lt;/strong&gt; - same-origin links that return errors or timeout&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broken Images&lt;/strong&gt; - images that fail to load, including dynamically added ones&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Form Frustration&lt;/strong&gt; - users clearing and retyping the same form field repeatedly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flow Suggestions&lt;/strong&gt; - guide frustrated users to the right page with navigation hints, created manually, auto-discovered from pageview data, or imported from your sitemap&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When frustration is detected, an inline popover appears next to the problem element asking the user &lt;em&gt;"What went wrong?"&lt;/em&gt;. Their feedback is sent to your dashboard with full context -browser, device, the element they interacted with, and recent errors.&lt;/p&gt;

&lt;p&gt;The dashboard then groups repeated feedback into &lt;strong&gt;patterns&lt;/strong&gt; -so if 5 users report the same dead link on your pricing page, you see one actionable pattern instead of 5 separate reports.&lt;/p&gt;

&lt;p&gt;The tracker is &lt;strong&gt;~7KB, zero dependencies&lt;/strong&gt;, and works on any website or framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://reev.kreativekorna.com" rel="noopener noreferrer"&gt;reev.kreativekorna.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick setup - add to any site in 60 seconds:&lt;/strong&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&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReevConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;script&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://unpkg.com/reev.js/dist/reev.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;head&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}({&lt;/span&gt;
  &lt;span class="na"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your-project-id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;apiUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://reev.kreativekorna.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/codellyson" rel="noopener noreferrer"&gt;
        codellyson
      &lt;/a&gt; / &lt;a href="https://github.com/codellyson/reev" rel="noopener noreferrer"&gt;
        reev
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Reev&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;UX is hard. Reev makes it simple.&lt;/p&gt;

&lt;p&gt;Reev is a lightweight, open-source UX frustration detector with real-time feedback collection. Install a script on your site, and Reev catches frustration as it happens - rage clicks, dead links, broken images, form frustration. When issues occur, users can provide instant feedback via inline popovers. The dashboard groups repeated feedback into patterns so you can fix problems fast.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;1. Install   → Paste a &amp;lt;script&amp;gt; tag on your site
2. Detect    → Reev watches for rage clicks, dead links, broken images, and form frustration
3. Collect   → Users submit feedback when issues are detected (optional inline popovers)
4. Fix       → Reports and patterns tell you what's wrong, what users said, and where
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What Reev detects&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;br&gt;
&lt;thead&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;How it works&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/thead&gt;
&lt;br&gt;
&lt;tbody&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;strong&gt;Rage clicks&lt;/strong&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;3+ clicks on the same element within 1.5 seconds&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;strong&gt;Dead links&lt;/strong&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;Same-origin links that return errors or&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/tbody&gt;
&lt;br&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/codellyson/reev" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tracker library&lt;/strong&gt; (&lt;code&gt;reevjs/&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vanilla TypeScript compiled to a single IIFE bundle via esbuild&lt;/li&gt;
&lt;li&gt;Zero dependencies - uses native browser APIs (MutationObserver, PerformanceObserver)&lt;/li&gt;
&lt;li&gt;Configured via &lt;code&gt;window.ReevConfig&lt;/code&gt; -supports toggling each detector, popover theme (dark/light), cooldowns, and debug mode&lt;/li&gt;
&lt;li&gt;Self-initializes on DOMContentLoaded, no method calls needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Dashboard &amp;amp; API&lt;/strong&gt; (&lt;code&gt;app/&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16&lt;/strong&gt; (App Router) with React 18 and TypeScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL&lt;/strong&gt; (Neon-compatible) for event and feedback storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NextAuth.js&lt;/strong&gt; for authentication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TanStack Query&lt;/strong&gt; for data fetching&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; + &lt;strong&gt;Framer Motion&lt;/strong&gt; for the UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How detection works:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The tracker detects frustration client-side and shows a feedback popover&lt;/li&gt;
&lt;li&gt;User feedback is sent to &lt;code&gt;POST /api/events&lt;/code&gt; and stored in a dedicated feedback table&lt;/li&gt;
&lt;li&gt;When 2+ feedback reports share the same issue type and page URL, a &lt;strong&gt;pattern&lt;/strong&gt; is automatically created&lt;/li&gt;
&lt;li&gt;The dashboard shows individual reports (&lt;code&gt;/reports&lt;/code&gt;) and recurring patterns (&lt;code&gt;/patterns&lt;/code&gt;), filterable by status and issue type&lt;/li&gt;
&lt;li&gt;A separate &lt;code&gt;/flows&lt;/code&gt; page lets you manage navigation suggestions -create them manually, auto-discover common page transitions from pageview data, or import from a sitemap&lt;/li&gt;
&lt;li&gt;Flow widget is configurable per-project: display mode (on frustration or always), position, theme, and max suggestions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key architectural decisions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JSONB storage for flexible event data -no schema migrations needed when adding new event types&lt;/li&gt;
&lt;li&gt;Ring buffers for context capture (last 5 errors, last 10 breadcrumbs) lightweight memory footprint&lt;/li&gt;
&lt;li&gt;Rate limiting (60 req/min per IP, max 50 events per batch, 512KB max payload) to prevent abuse&lt;/li&gt;
&lt;li&gt;Privacy-first: no session replay, no PII collection just enough context to fix the problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Submitted By: &lt;a href="https://github.com/codellyson" rel="noopener noreferrer"&gt;codellyson&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How to parse HTML to React</title>
      <dc:creator>Lukman Isiaka</dc:creator>
      <pubDate>Thu, 19 May 2022 17:24:07 +0000</pubDate>
      <link>https://forem.com/codellyson/how-to-parse-html-to-react-38im</link>
      <guid>https://forem.com/codellyson/how-to-parse-html-to-react-38im</guid>
      <description>&lt;p&gt;Recently, I have been working on a project, one of the requirement was that I should implement a Rich Text Editor and render the text firstly in a preview card as truncated text as shown in the image below&lt;/p&gt;

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

&lt;p&gt;Secondly, The main view, is where users get to read the content in detail. This was not a problem in particular as React provides us with a built-in solution to render raw HTML. &lt;code&gt;dangerouslySetInnerHTML&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem
&lt;/h2&gt;

&lt;p&gt;React built-in solution to my problem &lt;code&gt;dangerouslySetInnerHTML&lt;/code&gt; works same way like vanilla JavaScript &lt;code&gt;innerHTML&lt;/code&gt;. this is a risky solution because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This solution by default exposes you to Cross Site Scripting (&lt;a href="https://portswigger.net/web-security/cross-site-scripting" rel="noopener noreferrer"&gt;XSS&lt;/a&gt;), to be safe you'd have to use it alongside another package &lt;code&gt;dom-purify&lt;/code&gt; to sanitize your HTML input.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The text rendered by this solution cannot be truncated because the way &lt;code&gt;dangerouslySetInnerHTML&lt;/code&gt; works is by passing it as an attribute to a JSX element &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;dangerouslySetInnerHTML&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="na"&gt;__html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;//htmlInput&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;and one of my project requirement is to have a preview of the content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;

&lt;p&gt;After doing so many research, I bumped into a package called &lt;code&gt;html-to-react&lt;/code&gt; it's available on NPM, actively maintained and about 577k weekly downloads perfect! &lt;/p&gt;

&lt;p&gt;The best thing about this package is that it solves the two problems I listed above. &lt;/p&gt;

&lt;p&gt;I can now do &lt;/p&gt;

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

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;HtmlToReactParser&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;html-to-react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ReactTruncate&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-truncated-component&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// other imports&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Wiki&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="c1"&gt;// other functions&lt;/span&gt;
&lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
   &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wiki-card&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 
     &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ReactTruncate&lt;/span&gt; &lt;span class="nx"&gt;numberOfLines&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;lineHeight&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;}.&lt;/span&gt; 
       &lt;span class="nx"&gt;ellipsis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;w-hero__desc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; 
             &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;HtmlToReactParser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Parser&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;     &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/ReactTruncate&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;   &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;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;Using the package this way, you will be able to truncate you r text anyhow you want and also render your HTML content nice and clean.&lt;/p&gt;

&lt;p&gt;Peace ✌🏽.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
