<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Haroon Ahmad</title>
    <description>The latest articles on DEV Community by Haroon Ahmad (@ranaharoon3222).</description>
    <link>https://dev.to/ranaharoon3222</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F454745%2Fb2f38beb-1170-4c2d-b2e2-7421cc26f1ff.png</url>
      <title>DEV Community: Haroon Ahmad</title>
      <link>https://dev.to/ranaharoon3222</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ranaharoon3222"/>
    <language>en</language>
    <item>
      <title>How an AI Agent Actually Learns Your Website</title>
      <dc:creator>Haroon Ahmad</dc:creator>
      <pubDate>Wed, 05 Aug 2026 04:17:41 +0000</pubDate>
      <link>https://dev.to/ranaharoon3222/how-an-ai-agent-actually-learns-your-website-1076</link>
      <guid>https://dev.to/ranaharoon3222/how-an-ai-agent-actually-learns-your-website-1076</guid>
      <description>&lt;p&gt;You've probably seen the pitch a hundred times by now: "Train an AI on your website in 30 seconds!" You paste a URL, a progress bar fills up, and suddenly there's a chat bubble that answers questions about your return policy.&lt;/p&gt;

&lt;p&gt;It feels like magic. And when something feels like magic, it's hard to trust it with your customers.&lt;/p&gt;

&lt;p&gt;So let's open the box. In this article, I'll walk you through exactly what happens between "paste your URL" and "good answers", step by step, with no jargon left unexplained. By the end, you'll understand why AI agents sometimes give brilliant answers and sometimes confidently wrong ones, and, more importantly, you'll know how to fix the wrong ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intended audience:&lt;/strong&gt; anyone who runs a website, store, or support team. Zero technical background needed. If you know what a web page is, you're qualified.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Reading (the crawl)
&lt;/h2&gt;

&lt;p&gt;The first thing an AI agent does is read your website, the same way a very fast, very thorough new employee would on their first day.&lt;/p&gt;

&lt;p&gt;A small program called a &lt;em&gt;crawler&lt;/em&gt; visits your homepage, writes down everything it finds, then follows every link to your other pages and repeats. Product pages, FAQ, shipping policy, that blog post from 2021 you forgot about. All of it.&lt;/p&gt;

&lt;p&gt;Here's the part nobody tells you: &lt;strong&gt;the crawler doesn't see your website the way you do.&lt;/strong&gt; It doesn't see your beautiful design, your brand colors, or your hero animation. It sees text. Headings, paragraphs, lists, tables. Everything else is stripped away.&lt;/p&gt;

&lt;p&gt;This has a sneaky consequence: if an important fact only exists inside an image ("Free shipping over $50!" as a banner graphic), the agent never learns it. As far as the AI is concerned, that fact doesn't exist.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Gotcha #1:&lt;/strong&gt; If your agent doesn't know something that's "on your website", check &lt;em&gt;how&lt;/em&gt; it's on your website. Text in images, PDFs behind login walls, and content that only appears after clicking a button are all invisible to a crawler. Put critical facts in plain text, or upload them directly as a document or Q&amp;amp;A pair.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 2: Chopping (chunking)
&lt;/h2&gt;

&lt;p&gt;Here's a fun problem. Your website might contain 50,000 words. When a customer asks "do you ship to Canada?", the AI doesn't need 50,000 words. It needs the three sentences about international shipping.&lt;/p&gt;

&lt;p&gt;So before anything else, your content gets chopped into bite-sized pieces called &lt;em&gt;chunks&lt;/em&gt;. Think of it like tearing a cookbook into individual recipe cards. Each card is small, self-contained, and about one thing.&lt;/p&gt;

&lt;p&gt;Why does this matter to you? Because chunking rewards well-organized writing. A page with clear headings ("International Shipping", "Returns", "Warranty") chops into clean, useful cards. A page where five topics swirl together in one giant paragraph chops into confusing cards that are half about shipping and half about your founder's dog.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Gotcha #2:&lt;/strong&gt; If your agent gives muddled answers that mix two topics together, the source page probably mixes them too. Splitting one messy page into clearly-headed sections often fixes "dumb AI" instantly. The AI was never dumb; the recipe cards were.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 3: Filing (embeddings)
&lt;/h2&gt;

&lt;p&gt;This is the genuinely magical step, and it's worth two minutes to understand.&lt;/p&gt;

&lt;p&gt;Each chunk gets converted into something called an &lt;em&gt;embedding&lt;/em&gt;: a long list of numbers that captures what the chunk &lt;em&gt;means&lt;/em&gt;. Not what words it contains. What it means.&lt;/p&gt;

&lt;p&gt;Here's the intuition. Imagine a giant library where books are shelved by &lt;em&gt;topic&lt;/em&gt;, and the shelving is so precise that "refunds", "money back", and "returning an item" all end up on the same shelf, even though they share almost no words. That's what embeddings do: they give every chunk a precise address in "meaning space", where similar meanings live close together.&lt;/p&gt;

&lt;p&gt;This is why you can ask an AI agent "can I get my money back?" and it finds your refund policy, even though your policy never contains the words "money back". A keyword search would whiff. A meaning search doesn't.&lt;/p&gt;

&lt;p&gt;This single idea, &lt;strong&gt;search by meaning instead of matching words&lt;/strong&gt;, is most of what separates modern AI agents from those old rule-based chatbots that answered "I don't understand" unless you typed the exact magic phrase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Answering (retrieval)
&lt;/h2&gt;

&lt;p&gt;Now a real customer shows up and asks: "hey, my order arrived damaged, what do I do?"&lt;/p&gt;

&lt;p&gt;Here's the full sequence, and it happens in about a second:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The question gets converted into the same kind of "meaning address" as your chunks.&lt;/li&gt;
&lt;li&gt;The system finds the shelf neighbors: the handful of chunks whose meaning sits closest to the question. Probably your damaged-items policy, your returns process, maybe your warranty page.&lt;/li&gt;
&lt;li&gt;Those chunks get handed to the language model with an instruction that boils down to: &lt;em&gt;"Answer this customer's question using ONLY the following material."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The model writes a reply in natural language, grounded in your actual content.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last step has a name you may have seen: RAG, or &lt;em&gt;retrieval-augmented generation&lt;/em&gt;. Strip away the acronym and it's just: &lt;strong&gt;look it up first, then answer.&lt;/strong&gt; The AI is doing an open-book exam where the book is your website, instead of a closed-book exam where it guesses from memory.&lt;/p&gt;

&lt;p&gt;And that distinction is everything. A raw AI model answering from memory will happily invent a return policy for you. It's seen thousands of return policies during training; it'll generate a plausible one. Plausible and &lt;em&gt;yours&lt;/em&gt; are very different things. The look-it-up-first step is what keeps the agent saying what &lt;em&gt;you&lt;/em&gt; say, not what the average of the internet says.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Gotcha #3:&lt;/strong&gt; When an agent "hallucinates", it's almost always because retrieval came back empty. The customer asked something your content doesn't cover, and the model filled the silence. The fix isn't a smarter model. It's noticing the gap (good agents show you unanswered questions) and adding the missing content, often as a simple Q&amp;amp;A pair. Each one is like handing your new employee a sticky note: "if anyone asks THIS, say THIS."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why "training" is really "re-reading"
&lt;/h2&gt;

&lt;p&gt;One more mental-model correction, because this word causes endless confusion.&lt;/p&gt;

&lt;p&gt;When a tool says it "trains" an agent on your website, it usually does &lt;em&gt;not&lt;/em&gt; mean the underlying AI model is being rebuilt around your data. It means your content is being read, chopped, and filed into that meaning-library so the model can look things up.&lt;/p&gt;

&lt;p&gt;This is good news for you, for three reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Updates are cheap.&lt;/strong&gt; Changed your shipping prices? Re-reading a page takes seconds. Rebuilding a model would take days.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your data stays yours.&lt;/strong&gt; Your content sits in a library the agent consults. It isn't melted into the model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mistakes are fixable.&lt;/strong&gt; Wrong answer? Fix the source content, re-sync, done. No mysterious retraining rituals.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The flip side: &lt;strong&gt;the library only knows what it was last shown.&lt;/strong&gt; If you update your website and never re-sync the agent, it keeps answering from the old snapshot, confidently. Stale content is the most boring and most common cause of wrong answers. Look for an agent that re-crawls on a schedule or lets you retrain in one click.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what should you actually do with this?
&lt;/h2&gt;

&lt;p&gt;If you take away four things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write for the crawler too.&lt;/strong&gt; Critical facts belong in plain text with clear headings, not baked into images.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One topic per section.&lt;/strong&gt; Clean structure in, clean answers out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch the misses.&lt;/strong&gt; Unanswered questions are a gift: each one is a gap in your content that a two-line Q&amp;amp;A pair can fill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep it synced.&lt;/strong&gt; An AI agent is a mirror of your content on a specific day. Keep the mirror fresh.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Notice that none of these are AI skills. They're the same content hygiene that helps your human customers and your Google ranking. The AI just raised the stakes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it on your own website
&lt;/h2&gt;

&lt;p&gt;Everything in this article is exactly how &lt;a href="https://fetchply.com" rel="noopener noreferrer"&gt;Fetchply&lt;/a&gt; works under the hood: it crawls your site, files it by meaning, looks up before it answers, and shows you the questions it couldn't answer so you can fill the gaps with Q&amp;amp;A pairs or file uploads. Then it serves those answers on your website, WhatsApp, Instagram, and Shopify from one inbox, with a human-handoff button for the conversations that need a person.&lt;/p&gt;

&lt;p&gt;The free plan includes 200 AI messages a month with no card required, which is plenty to run the fun experiment: train it on your site, then ask it the ten questions your customers ask most. The answers it gets right will impress you. The ones it gets wrong will tell you exactly which page of your website needs love.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>Why your AI chatbot is losing leads (and the 3 fixes that actually work)</title>
      <dc:creator>Haroon Ahmad</dc:creator>
      <pubDate>Tue, 04 Aug 2026 02:32:21 +0000</pubDate>
      <link>https://dev.to/ranaharoon3222/why-your-ai-chatbot-is-losing-leads-and-the-3-fixes-that-actually-work-k8a</link>
      <guid>https://dev.to/ranaharoon3222/why-your-ai-chatbot-is-losing-leads-and-the-3-fixes-that-actually-work-k8a</guid>
      <description>&lt;h1&gt;
  
  
  Why your AI chatbot is losing leads (and the 3 fixes that actually work)
&lt;/h1&gt;

&lt;p&gt;You deployed an AI chatbot to capture leads. You waited for the numbers to climb. They didn't. &lt;/p&gt;

&lt;p&gt;The most likely reason is that your chatbot is acting like a static web form wearing a digital tuxedo. It asks the same boring questions, demands contact information upfront, and fails to pass qualified intent to your sales team when it matters. &lt;/p&gt;

&lt;p&gt;According to Salesforce's State of Sales report, 70% of leads are never followed up on. Reps are not ignoring leads out of laziness. They ignore them because there is no signal to tell them which leads are actually worth the call. If your chatbot just collects emails and dumps them into a queue, it is part of the 70% black hole.&lt;/p&gt;

&lt;p&gt;If you want your chatbot to generate revenue instead of just taking up space in the corner of your screen, you need to change how it operates. Here are the three structural errors killing your conversion rates and the exact fixes you need to implement.&lt;/p&gt;

&lt;h2&gt;
  
  
  The structural errors killing your conversion rates
&lt;/h2&gt;

&lt;p&gt;Before fixing the problem, you have to understand why most chatbot deployments fail. &lt;/p&gt;

&lt;p&gt;The single most common error in chatbot lead generation is asking for contact details in the first message. The visitor has received nothing in exchange. They close the chat. This is why so many teams conclude that chatbots simply do not work.&lt;/p&gt;

&lt;p&gt;Research from Heeya’s lead-gen playbook shows that a chatbot asking for an email first converts at approximately the same rate as a standard web form. The chatbot that delivers value first converts at three to five times that rate. &lt;/p&gt;

&lt;p&gt;If your bot is not delivering value, qualifying intent, and routing leads instantly, it is a cost center. Here is how to fix it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix 1: Restructure the conversation to deliver value first
&lt;/h2&gt;

&lt;p&gt;Stop treating your chatbot like a digital receptionist. Treat it like a sales engineer. &lt;/p&gt;

&lt;p&gt;You need to restructure the conversation so the bot delivers a relevant insight, recommendation, or incentive within the first few messages. Give before you take. If a visitor asks about pricing, do not ask for their email before showing them a rough estimate or a pricing tier breakdown. &lt;/p&gt;

&lt;p&gt;Consider the difference between these two approaches:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The broken approach:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bot: Hi! Enter your email to learn more about our product.
User: [Closes chat]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The value-first approach:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bot: Hi! Are you looking for pricing on the solo or enterprise plan?
User: Enterprise, for 50 users.
Bot: For 50 users, the annual plan saves you 20% compared to monthly. Want me to send a custom quote to your email?
User: Yes, me@company.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Platforms like ChatSales demonstrate this well. You point the AI at your website, and it learns from your existing content to create dynamic questions and answers. By providing a useful answer or offer before requesting an email, this single change can double or even triple your lead capture rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix 2: Implement real-time AI qualification
&lt;/h2&gt;

&lt;p&gt;Collecting an email is not qualification. You need an AI-powered qualification script that scores intent and fit in real time.&lt;/p&gt;

&lt;p&gt;Adapt traditional sales frameworks like BANT (Budget, Authority, Need, Timeline) or MEDDIC to your chat flow. When a user interacts with the bot, the AI should silently score their responses. If a prospect has no budget and no urgency, the bot can route them to a self-serve resource. If they have high intent and clear fit, the bot routes them to a human rep immediately.&lt;/p&gt;

&lt;p&gt;Firms that use AI-driven qualification frameworks adapted to chat see up to a 40% lift in high-quality lead capture. This reduces wasted follow-up effort and aligns with the Gartner forecast that 40% of enterprise applications will embed task-specific AI agents by 2026, up from less than 5% in 2025.&lt;/p&gt;

&lt;p&gt;To do this right, your AI needs to connect to your actual business data. A tool like Fetchply, for instance, learns from your docs and product data to check orders, inventory, and account details right in the chat. If a customer asks about a specific product, the bot can check stock levels, confirm availability, and qualify the lead based on their specific product interest before handing the chat to a human.&lt;/p&gt;

&lt;p&gt;This is where the shift from simple bot to AI agent happens. Generative AI is augmenting chatbots' capacity to comprehend user intent and generate human-like, contextually relevant responses. Your bot should not just read a script. It should understand the conversation and score the lead dynamically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix 3: Kill the handoff delay with CRM integration
&lt;/h2&gt;

&lt;p&gt;You can have the best value-first conversation and a perfect qualification script, but if you fail at the handoff, you lose the deal.&lt;/p&gt;

&lt;p&gt;The handoff problem is the silent killer of chatbot ROI. Research shows that booking probability drops by more than 50% when lead time exceeds a day. The longer it takes to get on a call with a prospect after they show interest, the less likely they are to book. &lt;/p&gt;

&lt;p&gt;You must integrate your chatbot tightly with your CRM. Whether you use HubSpot, Salesforce, or Pipedrive, the chatbot should trigger instant notifications, schedule calls, or even auto-dial the prospect within seconds of qualification.&lt;/p&gt;

&lt;p&gt;If someone asks to speak to a rep, the bot should instantly check the CRM, find the assigned rep, and offer immediate calendar slots. If the lead is highly qualified, an AI agent can even initiate a phone call to the prospect who just submitted their phone number. &lt;/p&gt;

&lt;p&gt;This eliminates the batch processing weakness of traditional funnels. Traffic arrives, has a conversation, gets qualified, and is routed instantly. No sitting in a queue. No waiting for a rep to have time to call.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ROI of getting it right
&lt;/h2&gt;

&lt;p&gt;When you apply these three steps, the chatbot transforms from a cost center into a reliable lead-generation engine. The numbers back this up.&lt;/p&gt;

&lt;p&gt;According to Master of Code, 55% of companies employing chatbots for marketing report an increase in high-quality leads. DemandSage notes that chatbots can improve conversion rates for e-commerce by up to 30%. Which-50 reports that AI chatbots yield conversion enhancements of 20% or greater, with proactive chat driving up to a 40% increase. &lt;/p&gt;

&lt;p&gt;Customer engagement also spikes. Localiq found that enterprises providing superior chatbot experiences see a 70% increase in customer engagement and responses. &lt;/p&gt;

&lt;p&gt;There is also a hard cost benefit. AI chatbots cost roughly $0.50 per interaction compared to $6 or more for human agents. By automating the routine questions and the initial qualification, you save your human reps for the high-value closing conversations. &lt;/p&gt;

&lt;h2&gt;
  
  
  Stop treating your chatbot like a form
&lt;/h2&gt;

&lt;p&gt;The days of deploying a simple rule-based bot to collect emails are over. By 2026, AI is expected to power 95% of all customer service interactions. &lt;/p&gt;

&lt;p&gt;If your chatbot asks for an email before delivering value, fails to qualify intent, and drops leads into a black hole CRM queue, you are losing money. &lt;/p&gt;

&lt;p&gt;Fix the conversation flow. Qualify with intent. Integrate the handoff. Turn your chatbot into the hardest working sales development rep on your team.&lt;/p&gt;

</description>
      <category>chatbots</category>
      <category>leadgen</category>
      <category>ai</category>
      <category>conversion</category>
    </item>
    <item>
      <title>Why your AI chatbot is losing leads (and the 3 fixes that actually work)</title>
      <dc:creator>Haroon Ahmad</dc:creator>
      <pubDate>Tue, 04 Aug 2026 01:47:26 +0000</pubDate>
      <link>https://dev.to/fetchply/why-your-ai-chatbot-is-losing-leads-and-the-3-fixes-that-actually-work-34d9</link>
      <guid>https://dev.to/fetchply/why-your-ai-chatbot-is-losing-leads-and-the-3-fixes-that-actually-work-34d9</guid>
      <description>&lt;p&gt;You deployed an AI chatbot to capture leads. You waited for the numbers to climb. They didn't. &lt;/p&gt;

&lt;p&gt;The most likely reason is that your chatbot is acting like a static web form wearing a digital tuxedo. It asks the same boring questions, demands contact information upfront, and fails to pass qualified intent to your sales team when it matters. &lt;/p&gt;

&lt;p&gt;According to Salesforce's State of Sales report, 70% of leads are never followed up on. Reps are not ignoring leads out of laziness. They ignore them because there is no signal to tell them which leads are actually worth the call. If your chatbot just collects emails and dumps them into a queue, it is part of the 70% black hole.&lt;/p&gt;

&lt;p&gt;If you want your chatbot to generate revenue instead of just taking up space in the corner of your screen, you need to change how it operates. Here are the three structural errors killing your conversion rates and the exact fixes you need to implement.&lt;/p&gt;

&lt;h2&gt;
  
  
  The structural errors killing your conversion rates
&lt;/h2&gt;

&lt;p&gt;Before fixing the problem, you have to understand why most chatbot deployments fail. &lt;/p&gt;

&lt;p&gt;The single most common error in chatbot lead generation is asking for contact details in the first message. The visitor has received nothing in exchange. They close the chat. This is why so many teams conclude that chatbots simply do not work.&lt;/p&gt;

&lt;p&gt;Research from Heeya’s lead-gen playbook shows that a chatbot asking for an email first converts at approximately the same rate as a standard web form. The chatbot that delivers value first converts at three to five times that rate. &lt;/p&gt;

&lt;p&gt;If your bot is not delivering value, qualifying intent, and routing leads instantly, it is a cost center. Here is how to fix it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix 1: Restructure the conversation to deliver value first
&lt;/h2&gt;

&lt;p&gt;Stop treating your chatbot like a digital receptionist. Treat it like a sales engineer. &lt;/p&gt;

&lt;p&gt;You need to restructure the conversation so the bot delivers a relevant insight, recommendation, or incentive within the first few messages. Give before you take. If a visitor asks about pricing, do not ask for their email before showing them a rough estimate or a pricing tier breakdown. &lt;/p&gt;

&lt;p&gt;Consider the difference between these two approaches:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The broken approach:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bot: Hi! Enter your email to learn more about our product.
User: [Closes chat]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The value-first approach:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bot: Hi! Are you looking for pricing on the solo or enterprise plan?
User: Enterprise, for 50 users.
Bot: For 50 users, the annual plan saves you 20% compared to monthly. Want me to send a custom quote to your email?
User: Yes, me@company.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Platforms like ChatSales demonstrate this well. You point the AI at your website, and it learns from your existing content to create dynamic questions and answers. By providing a useful answer or offer before requesting an email, this single change can double or even triple your lead capture rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix 2: Implement real-time AI qualification
&lt;/h2&gt;

&lt;p&gt;Collecting an email is not qualification. You need an AI-powered qualification script that scores intent and fit in real time.&lt;/p&gt;

&lt;p&gt;Adapt traditional sales frameworks like BANT (Budget, Authority, Need, Timeline) or MEDDIC to your chat flow. When a user interacts with the bot, the AI should silently score their responses. If a prospect has no budget and no urgency, the bot can route them to a self-serve resource. If they have high intent and clear fit, the bot routes them to a human rep immediately.&lt;/p&gt;

&lt;p&gt;Firms that use AI-driven qualification frameworks adapted to chat see up to a 40% lift in high-quality lead capture. This reduces wasted follow-up effort and aligns with the Gartner forecast that 40% of enterprise applications will embed task-specific AI agents by 2026, up from less than 5% in 2025.&lt;/p&gt;

&lt;p&gt;To do this right, your AI needs to connect to your actual business data. A tool like Fetchply, for instance, learns from your docs and product data to check orders, inventory, and account details right in the chat. If a customer asks about a specific product, the bot can check stock levels, confirm availability, and qualify the lead based on their specific product interest before handing the chat to a human.&lt;/p&gt;

&lt;p&gt;This is where the shift from simple bot to AI agent happens. Generative AI is augmenting chatbots' capacity to comprehend user intent and generate human-like, contextually relevant responses. Your bot should not just read a script. It should understand the conversation and score the lead dynamically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix 3: Kill the handoff delay with CRM integration
&lt;/h2&gt;

&lt;p&gt;You can have the best value-first conversation and a perfect qualification script, but if you fail at the handoff, you lose the deal.&lt;/p&gt;

&lt;p&gt;The handoff problem is the silent killer of chatbot ROI. Research shows that booking probability drops by more than 50% when lead time exceeds a day. The longer it takes to get on a call with a prospect after they show interest, the less likely they are to book. &lt;/p&gt;

&lt;p&gt;You must integrate your chatbot tightly with your CRM. Whether you use HubSpot, Salesforce, or Pipedrive, the chatbot should trigger instant notifications, schedule calls, or even auto-dial the prospect within seconds of qualification.&lt;/p&gt;

&lt;p&gt;If someone asks to speak to a rep, the bot should instantly check the CRM, find the assigned rep, and offer immediate calendar slots. If the lead is highly qualified, an AI agent can even initiate a phone call to the prospect who just submitted their phone number. &lt;/p&gt;

&lt;p&gt;This eliminates the batch processing weakness of traditional funnels. Traffic arrives, has a conversation, gets qualified, and is routed instantly. No sitting in a queue. No waiting for a rep to have time to call.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ROI of getting it right
&lt;/h2&gt;

&lt;p&gt;When you apply these three steps, the chatbot transforms from a cost center into a reliable lead-generation engine. The numbers back this up.&lt;/p&gt;

&lt;p&gt;According to Master of Code, 55% of companies employing chatbots for marketing report an increase in high-quality leads. DemandSage notes that chatbots can improve conversion rates for e-commerce by up to 30%. Which-50 reports that AI chatbots yield conversion enhancements of 20% or greater, with proactive chat driving up to a 40% increase. &lt;/p&gt;

&lt;p&gt;Customer engagement also spikes. Localiq found that enterprises providing superior chatbot experiences see a 70% increase in customer engagement and responses. &lt;/p&gt;

&lt;p&gt;There is also a hard cost benefit. AI chatbots cost roughly $0.50 per interaction compared to $6 or more for human agents. By automating the routine questions and the initial qualification, you save your human reps for the high-value closing conversations. &lt;/p&gt;

&lt;h2&gt;
  
  
  Stop treating your chatbot like a form
&lt;/h2&gt;

&lt;p&gt;The days of deploying a simple rule-based bot to collect emails are over. By 2026, AI is expected to power 95% of all customer service interactions. &lt;/p&gt;

&lt;p&gt;If your chatbot asks for an email before delivering value, fails to qualify intent, and drops leads into a black hole CRM queue, you are losing money. &lt;/p&gt;

&lt;p&gt;Fix the conversation flow. Qualify with intent. Integrate the handoff. Turn your chatbot into the hardest working sales development rep on your team.&lt;/p&gt;

</description>
      <category>chatbots</category>
      <category>leadgen</category>
      <category>ai</category>
      <category>conversion</category>
    </item>
    <item>
      <title>🚀 Meet Covry — Your New AI Cover Letter Sidekick</title>
      <dc:creator>Haroon Ahmad</dc:creator>
      <pubDate>Sun, 01 Jun 2025 09:45:28 +0000</pubDate>
      <link>https://dev.to/ranaharoon3222/meet-covry-your-new-cover-letter-sidekick-4079</link>
      <guid>https://dev.to/ranaharoon3222/meet-covry-your-new-cover-letter-sidekick-4079</guid>
      <description>&lt;p&gt;Hey folks! 👋&lt;br&gt;&lt;br&gt;
I just launched &lt;strong&gt;Covry&lt;/strong&gt;, a smart, time-saving tool that helps you &lt;strong&gt;generate tailored cover letters in seconds&lt;/strong&gt; — without the stress.&lt;/p&gt;

&lt;p&gt;Whether you're applying on Upwork, LinkedIn, or a job board, Covry makes it easy to stand out with letters that sound like &lt;em&gt;you&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;✅ Quick &amp;amp; personalized.&lt;br&gt;
✅ Edit Directly.&lt;br&gt;
✅ Personalized for Shopify, Wordpress, Custom Website etc...&lt;br&gt;
✅ Built for real-world jobs.&lt;br&gt;
✅ No templates. Just results.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://covry.websolave.com/" rel="noopener noreferrer"&gt;Try Covry Now&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love your thoughts &amp;amp; feedback!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
    <item>
      <title>🧨 Builder.ai’s Fall: A Cautionary Tale for Startups</title>
      <dc:creator>Haroon Ahmad</dc:creator>
      <pubDate>Mon, 26 May 2025 07:15:41 +0000</pubDate>
      <link>https://dev.to/ranaharoon3222/builderais-fall-a-cautionary-tale-for-startups-328f</link>
      <guid>https://dev.to/ranaharoon3222/builderais-fall-a-cautionary-tale-for-startups-328f</guid>
      <description>&lt;p&gt;I’m deeply saddened to share that &lt;strong&gt;Builder.ai&lt;/strong&gt; – once a &lt;strong&gt;$1.3 billion unicorn&lt;/strong&gt; backed by Microsoft and other investors – has &lt;strong&gt;filed for insolvency in the UK&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Builder.ai (formerly Engineer.ai), founded in 2016, promised to let anyone build custom apps “as easy as ordering pizza” using AI. Over the years, it raised &lt;strong&gt;~$450–500M&lt;/strong&gt; from big-name backers and promised rapid growth. But in &lt;strong&gt;May 2025&lt;/strong&gt;, the company abruptly ran out of cash, entering bankruptcy proceedings – leaving employees and the tech community stunned.&lt;/p&gt;




&lt;h2&gt;
  
  
  📅 Timeline of Key Events
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;2016:&lt;/strong&gt; Founded by Sachin Dev Duggal as &lt;em&gt;Engineer.ai&lt;/em&gt;, offering AI-powered no-code app development
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2019:&lt;/strong&gt; &lt;em&gt;WSJ&lt;/em&gt; reports their “AI” was mostly human developers; firm rebrands to Builder.ai
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2021–2022:&lt;/strong&gt; Claims 300% YoY growth; raises Series B &amp;amp; C
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;May 2023:&lt;/strong&gt; Raises $250M Series D from QIA, Microsoft joins as investor; valuation hits ~$1.3B
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Oct 2024:&lt;/strong&gt; Takes $50M debt facility from Viola Credit based on inflated forecasts
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Early 2025:&lt;/strong&gt; Revenue restated from $220M → $55M; CEO Duggal steps down
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mar 2025:&lt;/strong&gt; Emergency $75M raised; 270 layoffs
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;May 2025:&lt;/strong&gt; Lenders seize $37M of cash. Builder.ai enters UK insolvency
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💣 Why It Collapsed
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Massively Overstated Revenues&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Builder.ai’s internal audit &lt;strong&gt;slashed its 2023–2024 sales projections by 75%&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2024 forecast: $220M → &lt;strong&gt;$55M&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;2023 revenue: $180M → &lt;strong&gt;$45M&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Some insiders claimed previous figures were &lt;strong&gt;inflated by 20–300%&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  2. &lt;strong&gt;Sudden Cash Seizure&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Lenders seized &lt;strong&gt;$37M out of $42M&lt;/strong&gt; cash from Builder.ai’s accounts, citing covenant breaches. This left:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;~$5M in cash (much locked overseas)
&lt;/li&gt;
&lt;li&gt;No ability to pay staff or vendors&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;“Effectively shut down our ability to operate.” – &lt;em&gt;CEO Manpreet Ratia&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  3. &lt;strong&gt;High Burn, Big Debts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Despite raising $500M, cash burned fast:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Owed &lt;strong&gt;$85M to AWS&lt;/strong&gt;, &lt;strong&gt;$30M to Microsoft&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Only &lt;strong&gt;$7M&lt;/strong&gt; left by early 2025&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. &lt;strong&gt;Leadership Instability&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Duggal exits in Feb 2025
&lt;/li&gt;
&lt;li&gt;Replaced by Manpreet Ratia (ex-Jungle Ventures)
&lt;/li&gt;
&lt;li&gt;Investigations raised concerns of “potentially bogus” sales and shady resellers&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔧 The Business Model
&lt;/h2&gt;

&lt;p&gt;Builder.ai offered a &lt;strong&gt;no-code/AI app builder&lt;/strong&gt;, letting users spec out apps that were assembled by AI + human engineers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Promised fast, scalable, AI-driven software dev
&lt;/li&gt;
&lt;li&gt;Reality: heavily reliant on human devs, despite AI claims
&lt;/li&gt;
&lt;li&gt;Once had 1,000+ employees and clients across media, retail, and sports&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💸 Funding &amp;amp; Investors
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Round&lt;/th&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Lead Investors&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Seed–Series C&lt;/td&gt;
&lt;td&gt;2016–2022&lt;/td&gt;
&lt;td&gt;Lakestar, Jungle Ventures, Insight, WndrCo&lt;/td&gt;
&lt;td&gt;~$195M raised&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Series D&lt;/td&gt;
&lt;td&gt;2023&lt;/td&gt;
&lt;td&gt;Qatar Investment Authority, Microsoft&lt;/td&gt;
&lt;td&gt;$250M round, valuation ~$1.3–1.5B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debt Facility&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;Viola Credit&lt;/td&gt;
&lt;td&gt;$50M loan (later triggered collapse)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Emergency Raise&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;td&gt;Existing investors&lt;/td&gt;
&lt;td&gt;$75M in Mar 2025 to fix finances&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  📣 Company &amp;amp; Industry Reactions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Builder.ai Statement
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Despite the tireless efforts of our team… the business has been unable to recover from historic challenges and past decisions.”&lt;br&gt;&lt;br&gt;
– &lt;em&gt;Company LinkedIn Post&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  🔹 CEO Manpreet Ratia
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Lenders swept $40M from our accounts… shutting down our ability to operate.”&lt;br&gt;&lt;br&gt;
“We’re working with administrators to protect customers, employees, and any remaining value.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  🔹 Analysts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Phil Brunkard&lt;/em&gt; (Info-Tech): AI startups are hitting a &lt;strong&gt;“realism check”&lt;/strong&gt; post-hype
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Carrie Osman&lt;/em&gt;: A case of &lt;strong&gt;“FOMO investing”&lt;/strong&gt; chasing flashy AI narratives without substance&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 Lessons for Startups
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Be Realistic &amp;amp; Transparent&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Don’t overinflate forecasts
&lt;/li&gt;
&lt;li&gt;Unrealistic growth projections undermine trust&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Sustainability Over Speed&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Growth is great, but runway and cash flow are vital
&lt;/li&gt;
&lt;li&gt;Builder.ai burned fast and owed massive cloud bills&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Hype ≠ Product&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No-code/AI is promising, but needs solid execution
&lt;/li&gt;
&lt;li&gt;Don’t build a story that outpaces your capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Take Care of People&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Employees faced sudden job losses with little warning
&lt;/li&gt;
&lt;li&gt;Transparency and support during collapse matter&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;There May Still Be Value&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Some tech and talent may be acquired
&lt;/li&gt;
&lt;li&gt;Duggal may even attempt to buy back parts of the company&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💬 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This is a painful reminder that &lt;strong&gt;even unicorns can fall&lt;/strong&gt; – and quickly.  &lt;/p&gt;

&lt;p&gt;Builder.ai’s story is one of ambition, hype, missteps, and hard lessons. It shows us that &lt;strong&gt;AI buzzwords and big funding don’t replace business fundamentals&lt;/strong&gt;. Let’s learn from this and support the people affected.&lt;/p&gt;

&lt;p&gt;The no-code/AI space still holds promise – but it must be built on trust, transparency, and real value.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: Bloomberg, TechCrunch, WSJ, LinkedIn posts from Builder.ai leadership.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>startup</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Code CSS Directly Inside the Browser (Not Using Inspect Elements) 🔥 🔥</title>
      <dc:creator>Haroon Ahmad</dc:creator>
      <pubDate>Wed, 17 Jul 2024 12:02:56 +0000</pubDate>
      <link>https://dev.to/ranaharoon3222/code-css-directly-inside-the-browser-not-using-inspect-elements-cd8</link>
      <guid>https://dev.to/ranaharoon3222/code-css-directly-inside-the-browser-not-using-inspect-elements-cd8</guid>
      <description>&lt;h4&gt;
  
  
  Copy the code and pase it in your HTML and enjoy live coding :)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;style contenteditable="true" style="display:block; white-space: pre"&amp;gt;
body {
background: blue
}
&amp;lt;/style&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>productivity</category>
      <category>javascript</category>
      <category>browser</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>5 most useful JavaScript Utilities!</title>
      <dc:creator>Haroon Ahmad</dc:creator>
      <pubDate>Wed, 17 Jul 2024 11:09:19 +0000</pubDate>
      <link>https://dev.to/ranaharoon3222/you-wont-believe-these-5-game-changing-javascript-utilities-347e</link>
      <guid>https://dev.to/ranaharoon3222/you-wont-believe-these-5-game-changing-javascript-utilities-347e</guid>
      <description>&lt;p&gt;Hi, I'm Haroon, a Senior Full Stack Developer. Today, I'll share some incredibly useful JavaScript functions that you can use in almost every project&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Tracks the visibility of an element within the viewport
&lt;/h3&gt;

&lt;p&gt;This utility uses the Intersection Observer API to track the visibility of an element within the viewport. It calls a callback function with a boolean value indicating whether the element is visible or not.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;onVisibilityChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;observer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;IntersectionObserver&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&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="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isIntersecting&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;observe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Example usage:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;targetElement&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;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#target&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;onVisibilityChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;targetElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isVisible&lt;/span&gt;&lt;span class="p"&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="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="s2"&gt;`Element is &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;isVisible&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;visible&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;not visible&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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;
  
  
  2. Reactive viewport breakpoints
&lt;/h3&gt;

&lt;p&gt;This utility allows you to define breakpoints and get notified when the viewport width crosses these breakpoints. It calls a callback function with the current breakpoint value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;onBreakpointChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;breakpoints&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mediaQueries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;breakpoints&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bp&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;matchMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`(max-width: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;bp&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;px)`&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;checkBreakpoints&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;breakpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;breakpoints&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;bp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;mediaQueries&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;breakpoint&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;default&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;mediaQueries&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mq&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;mq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;checkBreakpoints&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="nf"&gt;checkBreakpoints&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Example usage:&lt;/span&gt;
&lt;span class="nf"&gt;onBreakpointChange&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;900&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;breakpoint&lt;/span&gt;&lt;span class="p"&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="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="s2"&gt;`Current breakpoint: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;breakpoint&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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;
  
  
  3. Reactive Clipboard API
&lt;/h3&gt;

&lt;p&gt;This utility listens to copy events and reads the copied text from the clipboard, calling a callback function with the copied text.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;onClipboardChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&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="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;copy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clipboard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readText&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Example usage:&lt;/span&gt;
&lt;span class="nf"&gt;onClipboardChange&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&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="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="s2"&gt;`Copied text: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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;
  
  
  4. Reactive Screen Orientation API
&lt;/h3&gt;

&lt;p&gt;This utility listens to changes in screen orientation and calls a callback function with the current orientation type.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;onOrientationChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&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="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;orientationchange&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;orientation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Example usage:&lt;/span&gt;
&lt;span class="nf"&gt;onOrientationChange&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;orientation&lt;/span&gt;&lt;span class="p"&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="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="s2"&gt;`Current orientation: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;orientation&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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;
  
  
  5. Reactive state to show whether the mouse leaves the page
&lt;/h3&gt;

&lt;p&gt;This utility tracks when the mouse leaves or enters the page and calls a callback function with a boolean value indicating whether the mouse has left the page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;onMouseLeavePage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&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="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mouseleave&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="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="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mouseenter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Example usage:&lt;/span&gt;
&lt;span class="nf"&gt;onMouseLeavePage&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;hasLeft&lt;/span&gt;&lt;span class="p"&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="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="s2"&gt;`Mouse has &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;hasLeft&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;left&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;entered&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; the page`&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;Each of these utilities leverages event listeners and modern APIs to provide reactive behavior in your JavaScript applications.&lt;/p&gt;

&lt;p&gt;Thank you for taking the time to explore these powerful JavaScript utilities with me. I hope you find them as useful and exciting as I do. Feel free to experiment with these functions in your projects and see how they can enhance your development process. If you have any questions or want to share your own tips, please write down in comments. Happy coding!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>react</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Unraveling the Magic Behind React 18: A Comprehensive Guide🚀</title>
      <dc:creator>Haroon Ahmad</dc:creator>
      <pubDate>Mon, 10 Apr 2023 06:26:37 +0000</pubDate>
      <link>https://dev.to/ranaharoon3222/unraveling-the-magic-behind-react-18-a-comprehensive-guide-3pp3</link>
      <guid>https://dev.to/ranaharoon3222/unraveling-the-magic-behind-react-18-a-comprehensive-guide-3pp3</guid>
      <description>&lt;p&gt;React 18 is the latest version of the popular JavaScript library for building user interfaces. It comes with several new features and improvements that aim to make the development process faster and more efficient. In this article, we'll take a look at how React 18 works behind the scenes and what makes it different from its predecessors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Suspense
&lt;/h2&gt;

&lt;p&gt;One of the major new features in React 18 is Suspense, which allows you to defer rendering of a component until some data is loaded. This can be particularly useful for components that rely on external data sources or APIs, where it may take some time to retrieve the necessary data.&lt;/p&gt;

&lt;p&gt;With Suspense, you can tell React to wait for the data to arrive before rendering the component. This makes it possible to show a loading indicator or a fallback UI while the data is being loaded. Once the data is available, React will render the component with the updated data.&lt;/p&gt;

&lt;p&gt;Here's an example of how Suspense works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Suspense } from 'react';
import { fetchData } from './api';

function App() {
  return (
    &amp;lt;div&amp;gt;
      &amp;lt;Suspense fallback={&amp;lt;div&amp;gt;Loading...&amp;lt;/div&amp;gt;}&amp;gt;
        &amp;lt;MyComponent data={fetchData()} /&amp;gt;
      &amp;lt;/Suspense&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use the &lt;code&gt;Suspense&lt;/code&gt; component to defer rendering of &lt;code&gt;MyComponent&lt;/code&gt; until the data is available. If the data takes some time to load, the &lt;code&gt;fallback&lt;/code&gt; prop will be displayed instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Concurrent Rendering
&lt;/h2&gt;

&lt;p&gt;Another major new feature in React 18 is Concurrent Rendering, which aims to improve the performance of React applications by allowing multiple components to be updated simultaneously. In previous versions of React, updates to components were done one at a time, which could lead to slow rendering times for complex applications.&lt;/p&gt;

&lt;p&gt;With Concurrent Rendering, React can work on updating multiple components at the same time, making the process much faster and more efficient. This can be particularly useful for large and complex applications where there are many components that need to be updated frequently.&lt;/p&gt;

&lt;p&gt;Here's an example of how Concurrent Rendering works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { unstable_createRoot as createRoot } from 'react-dom';

const root = createRoot(document.getElementById('root'));

function App() {
  return (
    &amp;lt;div&amp;gt;
      &amp;lt;MyComponent /&amp;gt;
      &amp;lt;MyOtherComponent /&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

root.render(&amp;lt;App /&amp;gt;);

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

&lt;/div&gt;



&lt;p&gt;In this example, we use the &lt;code&gt;unstable_createRoot&lt;/code&gt; function to create a root for our React application. This enables Concurrent Rendering, which allows multiple components to be updated simultaneously.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automatic Batching
&lt;/h2&gt;

&lt;p&gt;In previous versions of React, updates to components were batched together manually by the developer. This involved wrapping the updates in a &lt;code&gt;batch&lt;/code&gt; function to ensure that they were processed together, rather than triggering a re-render for each update.&lt;/p&gt;

&lt;p&gt;In React 18, this process is now automatic, which means that updates are automatically batched together by React. This can lead to significant performance improvements, particularly for applications with a large number of updates.&lt;/p&gt;

&lt;p&gt;Here's an example of how Automatic Batching works:&lt;br&gt;
&lt;/p&gt;

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

function MyComponent() {
  const [count, setCount] = useState(0);

  function handleClick() {
    setCount(count + 1);
    setCount(count + 1);
    setCount(count + 1);
  }

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;p&amp;gt;Count: {count}&amp;lt;/p&amp;gt;
      &amp;lt;button onClick={handleClick}&amp;gt;Increment&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use the &lt;code&gt;useState&lt;/code&gt; hook to update the count state. We call &lt;code&gt;setCount&lt;/code&gt; three times in quick succession, but React automatically batches the updates together, so the component is only re-rendered once with the updated count value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Server Components
&lt;/h2&gt;

&lt;p&gt;Another exciting new feature in React 18 is Server Components, which allows for more efficient rendering of components on the server-side. With Server Components, you can render components on the server without having to render the entire application every time.&lt;/p&gt;

&lt;p&gt;This can be particularly useful for applications with a large number of components, where rendering the entire application on the server can be slow and inefficient. With Server Components, you can render only the components that are necessary, which can greatly improve performance.&lt;/p&gt;

&lt;p&gt;Here's an example of how Server Components works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { ssrComponent } from 'react-ssr';

function MyServerComponent(props) {
  return (
    &amp;lt;div&amp;gt;
      &amp;lt;p&amp;gt;Hello, {props.name}!&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

export default ssrComponent(MyServerComponent);

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

&lt;/div&gt;



&lt;p&gt;In this example, we use the &lt;code&gt;ssrComponent&lt;/code&gt; function to create a Server Component. This component can be rendered on the server without having to render the entire application every time.&lt;/p&gt;

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

&lt;p&gt;React 18 introduces several new features and improvements that make it an even more powerful tool for building user interfaces. With Suspense, Concurrent Rendering, Automatic Batching, and Server Components, you can build applications that are faster and more efficient than ever before.&lt;/p&gt;

&lt;p&gt;By understanding how these features work behind the scenes, you can take advantage of them to build better React applications. Whether you're building a small application or a large, complex one, React 18 has the tools you need to succeed.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>news</category>
      <category>webdev</category>
    </item>
    <item>
      <title>JS Unique Tricks for Intermediators</title>
      <dc:creator>Haroon Ahmad</dc:creator>
      <pubDate>Sun, 09 Apr 2023 15:03:26 +0000</pubDate>
      <link>https://dev.to/ranaharoon3222/js-unique-tricks-for-intermediators-1d46</link>
      <guid>https://dev.to/ranaharoon3222/js-unique-tricks-for-intermediators-1d46</guid>
      <description>&lt;p&gt;Javascript is a versatile language that allows developers to create powerful and interactive web applications. In this article, we will explore some unique tricks that can be used to enhance the functionality of Javascript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trick 1: Using the Ternary Operator for Conditional Statements
&lt;/h2&gt;

&lt;p&gt;The ternary operator is a shorthand way to write conditional statements in Javascript. It is often used to replace if-else statements and can make your code more concise and easier to read.&lt;/p&gt;

&lt;p&gt;Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Without ternary operator
if (a &amp;gt; b) {
  result = "a is greater than b";
} else {
  result = "b is greater than a";
}

// With ternary operator
result = a &amp;gt; b ? "a is greater than b" : "b is greater than a";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use the ternary operator to check whether &lt;code&gt;a&lt;/code&gt; is greater than &lt;code&gt;b&lt;/code&gt; and assign the appropriate string to the &lt;code&gt;result&lt;/code&gt; variable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trick 2: Using Object Destructuring to Assign Variables
&lt;/h2&gt;

&lt;p&gt;Object destructuring is a technique that allows you to extract values from objects and assign them to variables. This can be a useful way to simplify your code and make it more readable.&lt;/p&gt;

&lt;p&gt;Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
const person = {
  firstName: "John",
  lastName: "Doe",
  age: 30
};

// Without object destructuring
const firstName = person.firstName;
const lastName = person.lastName;
const age = person.age;

// With object destructuring
const { firstName, lastName, age } = person;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use object destructuring to extract the &lt;code&gt;firstName&lt;/code&gt;, &lt;code&gt;lastName&lt;/code&gt;, and &lt;code&gt;age&lt;/code&gt; properties from the &lt;code&gt;person&lt;/code&gt; object and assign them to variables of the same name.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trick 3: Using the Spread Operator to Combine Arrays
&lt;/h2&gt;

&lt;p&gt;The spread operator is a powerful tool in Javascript that allows you to expand arrays and objects. It can be used to combine arrays in a concise and readable way.&lt;/p&gt;

&lt;p&gt;Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];

// Without spread operator
const arr3 = arr1.concat(arr2);

// With spread operator
const arr3 = [...arr1, ...arr2];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use the spread operator to combine the &lt;code&gt;arr1&lt;/code&gt; and &lt;code&gt;arr2&lt;/code&gt; arrays into a new array &lt;code&gt;arr3&lt;/code&gt;. This is much more concise than using the &lt;code&gt;concat&lt;/code&gt; method.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trick 4: Using Arrow Functions for Concise Functions
&lt;/h2&gt;

&lt;p&gt;Arrow functions are a shorthand way to write functions in Javascript. They can make your code more concise and easier to read.&lt;/p&gt;

&lt;p&gt;Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
// Without arrow function
function add(a, b) {
  return a + b;
}

// With arrow function
const add = (a, b) =&amp;gt; a + b;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use an arrow function to define the &lt;code&gt;add&lt;/code&gt; function. This is much more concise than using the &lt;code&gt;function&lt;/code&gt; keyword.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trick 5: Using Template Literals for Dynamic Strings
&lt;/h2&gt;

&lt;p&gt;Template literals are a powerful feature in Javascript that allows you to create dynamic strings. They can be used to insert variables and expressions into strings.&lt;/p&gt;

&lt;p&gt;Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const name = "John";
const age = 30;

// Without template literals
const message = "My name is " + name + " and I am " + age + " years old.";

// With template literalz
const message = `My name is ${name} and I am ${age} years old.`;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use template literals to create a dynamic string that includes&lt;/p&gt;

&lt;p&gt;the &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;age&lt;/code&gt; variables. This is much more concise and easier to read than using string concatenation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trick 6: Using the Nullish Coalescing Operator for Default Values
&lt;/h2&gt;

&lt;p&gt;The nullish coalescing operator is a relatively new feature in Javascript that can be used to provide default values for variables that may be null or undefined.&lt;/p&gt;

&lt;p&gt;Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const foo = null;
const bar = foo ?? "default value";

console.log(bar); // "default value"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use the nullish coalescing operator to assign the value of &lt;code&gt;foo&lt;/code&gt; to &lt;code&gt;bar&lt;/code&gt;. If &lt;code&gt;foo&lt;/code&gt; is null or undefined, the default value of "default value" is used instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trick 7: Using Promises for Asynchronous Code
&lt;/h2&gt;

&lt;p&gt;Promises are a powerful tool in Javascript that allow you to write asynchronous code in a synchronous style. They can be used to make your code more readable and easier to maintain.&lt;/p&gt;

&lt;p&gt;Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
function fetchData() {
  return new Promise((resolve, reject) =&amp;gt; {
    // Perform asynchronous operation
    const data = getDataFromServer();

    if (data) {
      resolve(data);
    } else {
      reject(new Error("Unable to fetch data"));
    }
  });
}

fetchData()
  .then((data) =&amp;gt; console.log(data))
  .catch((error) =&amp;gt; console.error(error));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use a promise to fetch data from a server. The &lt;code&gt;fetchData&lt;/code&gt; function returns a promise that resolves with the data if the operation is successful or rejects with an error if it fails.&lt;/p&gt;

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

&lt;p&gt;Javascript is a powerful language with many unique features that can be used to enhance the functionality of your code. By using these tricks, you can make your code more concise, readable, and easier to maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let me know in comments if you know any more  :)&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>productivity</category>
      <category>frontend</category>
    </item>
    <item>
      <title>💡 50+ JavaScript Project ideas!</title>
      <dc:creator>Haroon Ahmad</dc:creator>
      <pubDate>Thu, 26 May 2022 04:42:16 +0000</pubDate>
      <link>https://dev.to/ranaharoon3222/50-javascript-project-ideas-13pp</link>
      <guid>https://dev.to/ranaharoon3222/50-javascript-project-ideas-13pp</guid>
      <description>&lt;p&gt;In this article, I’ve collected 50+ of them, so you can have an easier job choosing your next challenge.&lt;/p&gt;

&lt;p&gt;① Modal open &amp;amp; close &lt;/p&gt;

&lt;p&gt;② Random Hex Color Generator&lt;/p&gt;

&lt;p&gt;③ Random Number Generator&lt;/p&gt;

&lt;p&gt;④ Counter Number App&lt;/p&gt;

&lt;p&gt;⑤ Border Radius Controller&lt;/p&gt;

&lt;p&gt;⑥ Box Shadow Controller&lt;/p&gt;

&lt;p&gt;⑦ Image Filter (when we click on the button)&lt;/p&gt;

&lt;p&gt;⑧ Border Width Slider&lt;/p&gt;

&lt;p&gt;⑨ Background changer using HTML Color Picker&lt;/p&gt;

&lt;p&gt;①⓪ Image Position Slider (X and Y Directions)&lt;/p&gt;

&lt;p&gt;①① Click To Download Something&lt;/p&gt;

&lt;p&gt;①② Background Choosing With Images or Gradients&lt;/p&gt;

&lt;p&gt;①③ Auto Year Update In The Footer Section&lt;/p&gt;

&lt;p&gt;①④ Date CountDown&lt;/p&gt;

&lt;p&gt;①⑤ Time CountDown&lt;/p&gt;

&lt;p&gt;①⑥ Sticky NavBar&lt;/p&gt;

&lt;p&gt;①⑦ Smooth Scrolling &lt;/p&gt;

&lt;p&gt;①⑧ Responsive NavBar(Hamburger Button)&lt;/p&gt;

&lt;p&gt;①⑨ Random Password Generator&lt;/p&gt;

&lt;p&gt;②⓪ Body Mass Index Calculator&lt;/p&gt;

&lt;p&gt;②① Notes App&lt;/p&gt;

&lt;p&gt;②② To-Do App&lt;/p&gt;

&lt;p&gt;②③ Calculator App&lt;/p&gt;

&lt;p&gt;②④ Digital Clock&lt;/p&gt;

&lt;p&gt;②⑤ Form Validation&lt;/p&gt;

&lt;p&gt;②⑥ Password Hide And Show&lt;/p&gt;

&lt;p&gt;②⑦ Password Strength Checker&lt;/p&gt;

&lt;p&gt;②⑧ Currency Converter&lt;/p&gt;

&lt;p&gt;②⑨ Dark &amp;amp; Light Mode Toggle&lt;/p&gt;

&lt;p&gt;③⓪ Alert &amp;amp; Notification&lt;/p&gt;

&lt;p&gt;③① Website Preloader Implementation&lt;/p&gt;

&lt;p&gt;③② Character CountDown&lt;/p&gt;

&lt;p&gt;③③ Temperature Calculator&lt;/p&gt;

&lt;p&gt;③④ Age Calculator(Years/Months/Day)&lt;/p&gt;

&lt;p&gt;③⑤ Music Player App&lt;/p&gt;

&lt;p&gt;③⑥ Number Guessing Game&lt;/p&gt;

&lt;p&gt;③⑦ Length Converter App(KM, M, CM, etc.)&lt;/p&gt;

&lt;p&gt;③⑧ Auto Image Change Of The Background After A Defined Time.&lt;/p&gt;

&lt;p&gt;③⑨ Contact Form&lt;/p&gt;

&lt;p&gt;④⓪ Text To Speech&lt;/p&gt;

&lt;p&gt;④① Search Something&lt;/p&gt;

&lt;p&gt;④② Music Search&lt;/p&gt;

&lt;p&gt;④③ Find The Location Of A User&lt;/p&gt;

&lt;p&gt;④④ Click To Copy&lt;/p&gt;

&lt;p&gt;④⑤ Internet Connection Checker&lt;/p&gt;

&lt;p&gt;④⑥ Quiz App&lt;/p&gt;

&lt;p&gt;④⑦ Weather App&lt;/p&gt;

&lt;p&gt;④⑧ Accordion Open &amp;amp; Close&lt;/p&gt;

&lt;p&gt;④⑨ Slider Or Carousel&lt;/p&gt;

&lt;p&gt;⑤⓪ Scroll Bottom To Top&lt;/p&gt;

&lt;p&gt;⑤① Random Joke Generator&lt;/p&gt;

&lt;p&gt;⑤② Ludo Dice Number Generator&lt;/p&gt;

&lt;p&gt;⑤③ Alarm App&lt;/p&gt;

&lt;p&gt;⑤④ Cards Expand &amp;amp; Collapse&lt;/p&gt;

&lt;p&gt;⑤⑤ Blurry Loading&lt;/p&gt;

&lt;p&gt;⑤⑥ Toast Notification&lt;/p&gt;

&lt;p&gt;⑤⑦ Hidden Search Widget&lt;/p&gt;

&lt;p&gt;⑤⑧ Page Progress&lt;/p&gt;

&lt;p&gt;⑤⑨ Find Keyboard Keys Name&lt;/p&gt;

&lt;h2&gt;
  
  
  That's all for now, we will meet in the next post😍
&lt;/h2&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Basics to Master topics in javascript 🔥🔥everyone must know</title>
      <dc:creator>Haroon Ahmad</dc:creator>
      <pubDate>Mon, 23 May 2022 17:03:49 +0000</pubDate>
      <link>https://dev.to/ranaharoon3222/basics-to-master-topics-in-javascript-everyone-must-know-3p23</link>
      <guid>https://dev.to/ranaharoon3222/basics-to-master-topics-in-javascript-everyone-must-know-3p23</guid>
      <description>&lt;h3&gt;
  
  
  ⚡ Important Basic Topics ⚡
&lt;/h3&gt;

&lt;p&gt;👉 Syntax&lt;br&gt;
👉 Variables&lt;br&gt;
👉 If else statements &lt;br&gt;
👉 Operators&lt;br&gt;
👉 Loops&lt;br&gt;
👉 Functions &lt;br&gt;
👉 Events &lt;br&gt;
👉 Cookies &lt;br&gt;
👉 Keywords&lt;br&gt;
👉 Dialogue Boxes&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ Javascript Advanced Topics ⚡
&lt;/h3&gt;

&lt;p&gt;👉 Error Handling &lt;br&gt;
👉 Validations &lt;br&gt;
👉 Animations &lt;br&gt;
👉 Multimedia &lt;br&gt;
👉 Debugging &lt;br&gt;
👉 Closure &lt;br&gt;
👉 Scope &lt;br&gt;
👉 IIFEs&lt;br&gt;
👉 Arrow Functions &lt;br&gt;
👉 Async Programming&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ JAVASCRIPT OBJECTS ⚡
&lt;/h3&gt;

&lt;p&gt;👉 Numbers &lt;br&gt;
👉 Boolean &lt;br&gt;
👉 Strings &lt;br&gt;
👉 Arrays&lt;br&gt;
👉 Date &lt;br&gt;
👉 Math &lt;br&gt;
👉 RegExp&lt;br&gt;
👉 HTML Dom&lt;/p&gt;

&lt;p&gt;⭐ Additional ⭐ &lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ Some famous resources from where you can learn javascript  ⚡
&lt;/h3&gt;

&lt;p&gt;👉 freeCodeCamp&lt;br&gt;
👉 Udemy&lt;br&gt;
👉 Scrimba&lt;br&gt;
👉 CodeMentor&lt;br&gt;
👉 Sololearn&lt;br&gt;
👉 W3Schools&lt;br&gt;
👉 Codecademy&lt;br&gt;
👉 GitHub &lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ Some famous youtube Channels to learn web develoopment ⚡
&lt;/h3&gt;

&lt;p&gt;👉 Traversy Media&lt;br&gt;
👉 Kevin Povell&lt;br&gt;
👉 Web Dev Simplified&lt;br&gt;
👉 Coder Coder&lt;br&gt;
👉 DevEd&lt;br&gt;
👉 Programming with Mosh-&lt;br&gt;
👉 Treehouse&lt;br&gt;
👉 DevTips&lt;br&gt;
👉 Fireship&lt;/p&gt;

&lt;h3&gt;
  
  
  Let me know any other resources you know :)
&lt;/h3&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>typescript</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Best 7 Platforms to Level Up Your Frontend Skills 🚀</title>
      <dc:creator>Haroon Ahmad</dc:creator>
      <pubDate>Fri, 20 May 2022 06:04:12 +0000</pubDate>
      <link>https://dev.to/ranaharoon3222/best-7-platforms-to-level-up-your-frontend-skills-4bjb</link>
      <guid>https://dev.to/ranaharoon3222/best-7-platforms-to-level-up-your-frontend-skills-4bjb</guid>
      <description>&lt;p&gt;In this article, I am sharing best site and apps which are beginner-friendly. This will improve your speed of front-end development to a whole new &lt;strong&gt;Level&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;inspired and images from @Amit_T18 from twitter&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  CSS Battles
&lt;/h3&gt;

&lt;p&gt;CSS Battle is an online CSS Code Golfing game. Here, players from all around the world try to visually replicate "Targets" in smallest possible CSS code and battle it out to get to the top of the leaderboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cssbattle.dev/" rel="noopener noreferrer"&gt;https://cssbattle.dev/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FFTGICi8VsAAFqht%3Fformat%3Djpg%26name%3D4096x4096" 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%2Fpbs.twimg.com%2Fmedia%2FFTGICi8VsAAFqht%3Fformat%3Djpg%26name%3D4096x4096" alt="CSS Battles" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript 30
&lt;/h3&gt;

&lt;p&gt;It's a 30-day vanilla JS coding challenge. During these 30 days (more or less — you can binge the tutorials Netflix style to take it as slow as you like because you'll get an instant and free access to all the videos) you'll build 30 different apps using fun and easy video tutorials&lt;/p&gt;

&lt;p&gt;&lt;a href="https://javascript30.com/" rel="noopener noreferrer"&gt;https://javascript30.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FFRbJyWoUUAAWChK.jpg" 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%2Fpbs.twimg.com%2Fmedia%2FFRbJyWoUUAAWChK.jpg" alt="JavaScript 30" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Well
&lt;/h3&gt;

&lt;p&gt;Improve your HTML and CSS skills by practicing on real design templates. With Codewell, you can browse high quality Figma templates that you can use to sharpen your HTML and CSS skills.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codewell.cc/" rel="noopener noreferrer"&gt;https://www.codewell.cc/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FFRbJzkaVsAEwvlK.jpg" 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%2Fpbs.twimg.com%2Fmedia%2FFRbJzkaVsAEwvlK.jpg" alt="Code Well" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend Mentor
&lt;/h3&gt;

&lt;p&gt;Frontend Mentor is a platform where you can solve real-world HTML, CSS and JavaScript challenges whilst working to professional designs.&lt;/p&gt;

&lt;p&gt;https:// &lt;a href="http://www.frontendmentor.io/" rel="noopener noreferrer"&gt;www.frontendmentor.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FFRbJ0pbVsAEoN8d.jpg" 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%2Fpbs.twimg.com%2Fmedia%2FFRbJ0pbVsAEoN8d.jpg" alt="Frontend Mentor" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend Practice
&lt;/h3&gt;

&lt;p&gt;With this, you get a list of websites that look nice to clone and increase your experience and ideas. Take your frontend skills to the next level by recreating real websites from real companies.&lt;br&gt;
The perfect type of practice for developers of all skill levels. &lt;/p&gt;

&lt;p&gt;https:// &lt;a href="http://www.frontendpractice.com/" rel="noopener noreferrer"&gt;www.frontendpractice.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FFRbJ166VgAABxrU.jpg" 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%2Fpbs.twimg.com%2Fmedia%2FFRbJ166VgAABxrU.jpg" alt="Frontend Practice" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Codewars
&lt;/h3&gt;

&lt;p&gt;Codewars is an educational community for computer programming. On the platform, software developers train on programming challenges known as kata. These discrete programming exercises train a range of skills in a variety of programming languages, and are completed within an online integrated development environment.&lt;/p&gt;

&lt;p&gt;https:// &lt;a href="http://www.codewars.com/" rel="noopener noreferrer"&gt;www.codewars.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FFRbJ3GGVsAEoUPV.jpg" 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%2Fpbs.twimg.com%2Fmedia%2FFRbJ3GGVsAEoUPV.jpg" alt="Codewars" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Daily UI
&lt;/h3&gt;

&lt;p&gt;Daily UI is a series of daily Design Challenges. Inspiration and Surprise Rewards! Get Started. 100% FREE.&lt;/p&gt;

&lt;p&gt;https:// &lt;a href="http://www.dailyui.co/" rel="noopener noreferrer"&gt;www.dailyui.co/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FFRbJ4O5VIAAnRO3.jpg" 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%2Fpbs.twimg.com%2Fmedia%2FFRbJ4O5VIAAnRO3.jpg" alt="Daily UI" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Hope you find these sites and apps helpful for your new design at font-end.&lt;/p&gt;

&lt;p&gt;If you find this article helpful, then let me know via your comments below.&lt;/p&gt;

</description>
      <category>design</category>
      <category>css</category>
      <category>discuss</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
