<?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: Md .Rakibul Islam</title>
    <description>The latest articles on Forem by Md .Rakibul Islam (@rakibcloud).</description>
    <link>https://forem.com/rakibcloud</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%2F1091407%2Fce4992f8-e580-46e9-a93d-0eef524b352b.jpeg</url>
      <title>Forem: Md .Rakibul Islam</title>
      <link>https://forem.com/rakibcloud</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rakibcloud"/>
    <language>en</language>
    <item>
      <title>🚨 Simplifying Incident Tracking for Enterprise Projects</title>
      <dc:creator>Md .Rakibul Islam</dc:creator>
      <pubDate>Wed, 05 Nov 2025 03:56:09 +0000</pubDate>
      <link>https://forem.com/rakibcloud/simplifying-incident-tracking-for-enterprise-projects-31pa</link>
      <guid>https://forem.com/rakibcloud/simplifying-incident-tracking-for-enterprise-projects-31pa</guid>
      <description>&lt;p&gt;In our organization, we manage multiple live projects across different servers — both private and public. With so many environments running simultaneously, things can get complex fast.&lt;br&gt;
One major challenge we faced was identifying server incidents — when a server goes down or an unexpected issue occurs, developers often struggle to quickly trace and diagnose the problem, especially for local or internal servers.&lt;br&gt;
💡 To solve this, we built a smart incident monitoring and notification system.&lt;br&gt;
Whenever an incident occurs:&lt;br&gt;
 ✅ It’s automatically logged&lt;br&gt;
 ✅ An instant notification is sent to the respective team members&lt;br&gt;
 ✅ The system provides clear project status updates and the reason for downtime&lt;br&gt;
Now, our teams can easily track all live enterprise projects and respond faster — no more guesswork or manual checks.&lt;br&gt;
This solution not only improved uptime visibility but also made our internal workflow much more efficient. ⚙️&lt;br&gt;
hashtag#DevOps hashtag#IncidentManagement hashtag#ServerMonitoring hashtag#Automation hashtag#TeamProductivity hashtag#SoftwareEngineering hashtag#Innovation&lt;/p&gt;

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

</description>
    </item>
    <item>
      <title>Multi-Type Barcode Generator 😊</title>
      <dc:creator>Md .Rakibul Islam</dc:creator>
      <pubDate>Tue, 04 Nov 2025 04:53:42 +0000</pubDate>
      <link>https://forem.com/rakibcloud/multi-type-barcode-generator-i9</link>
      <guid>https://forem.com/rakibcloud/multi-type-barcode-generator-i9</guid>
      <description>&lt;p&gt;In many organizations, we often handle multiple projects that involve different kinds of people, programs, or product management. At times, we need to generate barcodes or QR codes for things like product details, website links, or event access — and that’s where this project comes in!&lt;br&gt;
🎯 Introducing the Barcode Generator — a simple, fast, and versatile web tool that allows you to:&lt;br&gt;
 ✅ Generate 18 different types of codes (QR, EAN, UPC, Code128, and more)&lt;br&gt;
 ✅ View your generation history&lt;br&gt;
 ✅ Explore sample codes for quick testing&lt;br&gt;
💡 Whether you’re working with product data, event systems, or digital assets — this tool makes barcode creation effortless and accessible.&lt;br&gt;
🔗 Try it out here: &lt;a href="https://barcode-generator-aci-mis.netlify.app/" rel="noopener noreferrer"&gt;https://barcode-generator-aci-mis.netlify.app/&lt;/a&gt;&lt;br&gt;
hashtag#BarcodeGenerator hashtag#WebApp hashtag#JS hashtag#Developer hashtag#ProductivityTools hashtag#TechInnovation&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🔥 Progressive Web App (PWA) Setup Guide for Next.js 15 — Complete Step-by-Step Walkthrough</title>
      <dc:creator>Md .Rakibul Islam</dc:creator>
      <pubDate>Wed, 29 Oct 2025 06:24:46 +0000</pubDate>
      <link>https://forem.com/rakibcloud/progressive-web-app-pwa-setup-guide-for-nextjs-15-complete-step-by-step-walkthrough-2b85</link>
      <guid>https://forem.com/rakibcloud/progressive-web-app-pwa-setup-guide-for-nextjs-15-complete-step-by-step-walkthrough-2b85</guid>
      <description>&lt;h1&gt;
  
  
  🚀 Progressive Web App (PWA) Setup Guide for Next.js 15
&lt;/h1&gt;

&lt;p&gt;This &lt;strong&gt;comprehensive, production-ready guide&lt;/strong&gt; walks you through configuring a fully functional &lt;strong&gt;Progressive Web App (PWA)&lt;/strong&gt; in &lt;strong&gt;Next.js 15&lt;/strong&gt; — covering &lt;strong&gt;manifest setup&lt;/strong&gt;, &lt;strong&gt;service workers&lt;/strong&gt;, &lt;strong&gt;middleware fixes&lt;/strong&gt;, and &lt;strong&gt;install prompts&lt;/strong&gt; across Android, iOS, and desktop browsers.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧭 Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
Prerequisites
&lt;/li&gt;
&lt;li&gt;
Installation
&lt;/li&gt;
&lt;li&gt;
Manifest Configuration
&lt;/li&gt;
&lt;li&gt;
Next.js Configuration
&lt;/li&gt;
&lt;li&gt;
Middleware Configuration
&lt;/li&gt;
&lt;li&gt;
Service Worker Registration
&lt;/li&gt;
&lt;li&gt;
Install Prompt Component
&lt;/li&gt;
&lt;li&gt;
Layout Integration
&lt;/li&gt;
&lt;li&gt;
Testing
&lt;/li&gt;
&lt;li&gt;Troubleshooting&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🧩 Prerequisites
&lt;/h2&gt;

&lt;p&gt;Make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;Next.js 15.x&lt;/strong&gt; project set up
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js 18+&lt;/strong&gt; installed
&lt;/li&gt;
&lt;li&gt;Basic understanding of &lt;strong&gt;React hooks&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚙️ Step 1: Installation
&lt;/h2&gt;

&lt;p&gt;Install the required PWA dependency:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;next-pwa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📄 Step 2: Manifest Configuration
&lt;/h2&gt;

&lt;p&gt;Create a new file:&lt;br&gt;
public/manifest.json&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "Your App Name",
  "short_name": "App Short Name",
  "description": "Your app description",
  "id": "/",
  "start_url": "/",
  "scope": "/",
  "display": "standalone",
  "orientation": "portrait-primary",
  "background_color": "#ffffff",
  "theme_color": "#6366F1",
  "lang": "en",
  "dir": "ltr",
  "categories": ["productivity", "business"],
  "icons": [
    { "src": "/icon192.png", "sizes": "192x192", "type": "image/png", "purpose": "any" },
    { "src": "/icon512_maskable.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" },
    { "src": "/icon512.png", "sizes": "512x512", "type": "image/png", "purpose": "any" }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🧠 &lt;strong&gt;Note:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
All icons should live inside your &lt;code&gt;/public&lt;/code&gt; folder.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;icon192.png&lt;/td&gt;
&lt;td&gt;192x192&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;icon512_maskable.png&lt;/td&gt;
&lt;td&gt;512x512&lt;/td&gt;
&lt;td&gt;Maskable icon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;icon512.png&lt;/td&gt;
&lt;td&gt;512x512&lt;/td&gt;
&lt;td&gt;Primary icon&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  ⚙️ Step 3: Next.js Configuration
&lt;/h2&gt;

&lt;p&gt;Edit next.config.mjs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import withPWAInit from 'next-pwa';

const isDev = process.env.NODE_ENV === 'development';

const withPWA = withPWAInit({
  dest: 'public',
  register: false, // Manual registration
  skipWaiting: true,
  disable: false,
  sw: 'sw.js',
  scope: '/',
  swcMinify: !isDev,
  buildExcludes: [/middleware-manifest\.json$/],
  runtimeCaching: [
    {
      urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i,
      handler: 'CacheFirst',
      options: {
        cacheName: 'google-fonts-cache',
        expiration: { maxEntries: 4, maxAgeSeconds: 365 * 24 * 60 * 60 }
      },
    },
    {
      urlPattern: /\.(?:png|jpg|jpeg|svg|gif)$/,
      handler: 'CacheFirst',
      options: {
        cacheName: 'images-cache',
        expiration: { maxEntries: 64, maxAgeSeconds: 24 * 60 * 60 }
      },
    },
  ],
});

export default withPWA({
  reactStrictMode: true,
  output: 'standalone',
});

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

&lt;/div&gt;



&lt;p&gt;✅ Key Settings Explained:&lt;/p&gt;

&lt;p&gt;register: false → manual registration gives more control&lt;/p&gt;

&lt;p&gt;disable: false → PWA active in both dev &amp;amp; prod&lt;/p&gt;

&lt;p&gt;runtimeCaching → adds caching strategies for fonts, images, etc.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧱 Step 4: Middleware Configuration
&lt;/h2&gt;

&lt;p&gt;By default, Next.js middleware may block your PWA files.&lt;br&gt;
Fix that by editing src/middleware.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { NextResponse } from 'next/server';
import { cookies } from "next/headers";

export async function middleware(request) {
  const url = request.nextUrl.clone();

  // Allow PWA core files
  const pwaFiles = ['/manifest.json', '/sw.js', '/workbox'];
  if (pwaFiles.some(file =&amp;gt; url.pathname.includes(file))) {
    return NextResponse.next();
  }

  // Example auth logic
  const cookieStore = await cookies();
  const token = cookieStore.get('accessToken');
  const isLoggedIn = Boolean(token);

  if (!isLoggedIn &amp;amp;&amp;amp; url.pathname !== '/sign-in') {
    url.pathname = '/sign-in';
    return NextResponse.redirect(url);
  }

  if (isLoggedIn &amp;amp;&amp;amp; url.pathname === '/sign-in') {
    url.pathname = '/';
    return NextResponse.redirect(url);
  }

  return NextResponse.next();
}

export const config = {
  matcher: [
    '/((?!api|_next/static|_next/image|favicon.ico|public|images).*)',
  ],
};

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

&lt;/div&gt;



&lt;p&gt;⚠️ Without this, manifest.json and sw.js will be blocked, breaking your PWA.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Step 5: Service Worker Registration
&lt;/h2&gt;

&lt;p&gt;Create:&lt;br&gt;
src/components/ui/pwa-service-worker-register.jsx&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;'use client';

import { useEffect } from 'react';

export default function PWAServiceWorkerRegister() {
  useEffect(() =&amp;gt; {
    if ('serviceWorker' in navigator) {
      navigator.serviceWorker
        .register('/sw.js', { scope: '/' })
        .then(reg =&amp;gt; console.log('SW registered:', reg))
        .catch(err =&amp;gt; console.error('SW registration failed:', err));

      navigator.serviceWorker.addEventListener('controllerchange', () =&amp;gt; {
        if (window.confirm('New version available! Reload?')) {
          window.location.reload();
        }
      });
    }
  }, []);

  return null;
}

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  📲 Step 6: Install Prompt Component
&lt;/h2&gt;

&lt;p&gt;Create:&lt;br&gt;
src/components/ui/pwa-install-prompt.jsx&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;'use client';

import { useEffect, useState } from 'react';
import { toast } from 'sonner';

export default function PWAInstallPrompt() {
  const [deferredPrompt, setDeferredPrompt] = useState(null);
  const [showInstall, setShowInstall] = useState(false);
  const [isStandalone, setIsStandalone] = useState(false);
  const [isIOS, setIsIOS] = useState(false);

  useEffect(() =&amp;gt; {
    setIsIOS(/iPad|iPhone|iPod/.test(navigator.userAgent));
    setIsStandalone(window.matchMedia('(display-mode: standalone)').matches);

    const handleBeforeInstall = (e) =&amp;gt; {
      e.preventDefault();
      setDeferredPrompt(e);
      setShowInstall(true);
    };

    window.addEventListener('beforeinstallprompt', handleBeforeInstall);
    return () =&amp;gt; window.removeEventListener('beforeinstallprompt', handleBeforeInstall);
  }, []);

  if (isStandalone) return null;

  if (isIOS) {
    return (
      &amp;lt;div className="fixed bottom-4 right-4 bg-indigo-600 text-white p-4 rounded-lg shadow-lg max-w-sm"&amp;gt;
        &amp;lt;h3 className="font-semibold mb-2"&amp;gt;Install this App&amp;lt;/h3&amp;gt;
        &amp;lt;p className="text-sm mb-3"&amp;gt;Tap the share icon → “Add to Home Screen”&amp;lt;/p&amp;gt;
      &amp;lt;/div&amp;gt;
    );
  }

  if (showInstall) {
    return (
      &amp;lt;button
        onClick={async () =&amp;gt; {
          deferredPrompt.prompt();
          const { outcome } = await deferredPrompt.userChoice;
          toast[outcome === 'accepted' ? 'success' : 'info'](`User ${outcome} install`);
          setShowInstall(false);
        }}
        className="fixed bottom-4 right-4 bg-indigo-600 hover:bg-indigo-700 text-white px-6 py-3 rounded-lg shadow-lg flex items-center gap-2"
      &amp;gt;
        📲 Install App
      &amp;lt;/button&amp;gt;
    );
  }

  return null;
}

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧩 Step 7: Layout Integration
&lt;/h2&gt;

&lt;p&gt;Edit src/app/layout.jsx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import "./globals.css";
import PWAServiceWorkerRegister from "@/components/ui/pwa-service-worker-register";
import PWAInstallPrompt from "@/components/ui/pwa-install-prompt";

export const metadata = {
  title: "Your App Name",
  description: "Your app description",
  manifest: "/manifest.json",
  icons: {
    icon: "/icon512.png",
    apple: "/icon512_maskable.png",
  },
};

export const viewport = {
  themeColor: "#6366F1",
};

export default function RootLayout({ children }) {
  return (
    &amp;lt;html lang="en" suppressHydrationWarning&amp;gt;
      &amp;lt;head&amp;gt;
        &amp;lt;meta name="theme-color" content="#6366F1" /&amp;gt;
        &amp;lt;link rel="manifest" href="/manifest.json" /&amp;gt;
        &amp;lt;link rel="apple-touch-icon" href="/icon512_maskable.png" /&amp;gt;
      &amp;lt;/head&amp;gt;
      &amp;lt;body&amp;gt;
        &amp;lt;main&amp;gt;{children}&amp;lt;/main&amp;gt;
        &amp;lt;PWAInstallPrompt /&amp;gt;
        &amp;lt;PWAServiceWorkerRegister /&amp;gt;
      &amp;lt;/body&amp;gt;
    &amp;lt;/html&amp;gt;
  );
}

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  🧪 Step 8: Testing
&lt;/h2&gt;

&lt;p&gt;Run your app and open DevTools → Application Tab&lt;/p&gt;

&lt;p&gt;✅ Manifest Tab: Shows your app name, start URL, and icons&lt;br&gt;
✅ Service Workers Tab: Shows “activated and running”&lt;br&gt;
✅ Console: Logs should include&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Then check:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://localhost:3000/manifest.json" rel="noopener noreferrer"&gt;http://localhost:3000/manifest.json&lt;/a&gt; → should load JSON&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:3000/sw.js" rel="noopener noreferrer"&gt;http://localhost:3000/sw.js&lt;/a&gt; → should load the service worker file&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗 Step 9: Production Build
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sw.js is present in /public&lt;/li&gt;
&lt;li&gt;Site served over HTTPS&lt;/li&gt;
&lt;li&gt;Install prompt works in production&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧯 Step 10: Troubleshooting
&lt;/h2&gt;

&lt;p&gt;🧠 &lt;strong&gt;Note:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
These are common PWA setup issues and how to resolve them.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;th&gt;Common Cause&lt;/th&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Manifest not loading&lt;/td&gt;
&lt;td&gt;Middleware blocking&lt;/td&gt;
&lt;td&gt;See Step 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SW not registering&lt;/td&gt;
&lt;td&gt;Disabled or wrong path&lt;/td&gt;
&lt;td&gt;Check &lt;code&gt;next.config.mjs&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Install button missing&lt;/td&gt;
&lt;td&gt;Already installed or invalid manifest&lt;/td&gt;
&lt;td&gt;Clear cache + fix manifest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PWA files blocked&lt;/td&gt;
&lt;td&gt;Middleware redirect&lt;/td&gt;
&lt;td&gt;Allow &lt;code&gt;/sw.js&lt;/code&gt; &amp;amp; &lt;code&gt;/manifest.json&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  ✅ PWA Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; next-pwa installed&lt;/li&gt;
&lt;li&gt; manifest.json configured&lt;/li&gt;
&lt;li&gt; Icons (192, 512) created&lt;/li&gt;
&lt;li&gt; Middleware allowing PWA files&lt;/li&gt;
&lt;li&gt; Service worker registered&lt;/li&gt;
&lt;li&gt; Install prompt visible&lt;/li&gt;
&lt;li&gt; PWA installable on Chrome/Android/iOS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🌐 &lt;strong&gt;Browser Support&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Support&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chrome / Edge&lt;/td&gt;
&lt;td&gt;✅ Full&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firefox&lt;/td&gt;
&lt;td&gt;⚠️ Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safari&lt;/td&gt;
&lt;td&gt;⚠️ Limited (no install prompt API)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chrome Android&lt;/td&gt;
&lt;td&gt;✅ Full&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iOS Safari&lt;/td&gt;
&lt;td&gt;⚠️ Manual add to home screen&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;📚 &lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/shadowwalker/next-pwa" rel="noopener noreferrer"&gt;Next.js PWA Plugin (&lt;code&gt;next-pwa&lt;/code&gt;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/Manifest" rel="noopener noreferrer"&gt;MDN Web App Manifest Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API" rel="noopener noreferrer"&gt;Service Worker API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.chrome.com/docs/workbox/pwa-best-practices/" rel="noopener noreferrer"&gt;Chrome PWA Best Practices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧩 &lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By following this guide, you’ve built a fully functional, installable PWA in Next.js 15 — complete with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manifest setup&lt;/li&gt;
&lt;li&gt;Middleware exception handling&lt;/li&gt;
&lt;li&gt;Manual SW registration&lt;/li&gt;
&lt;li&gt;Cross-platform install prompts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can now deploy a production-ready PWA with offline caching, installability, and better UX — all without extra complexity.&lt;/p&gt;

&lt;p&gt;💡 If this helped you, drop a ❤️ or share your experience building PWAs in Next.js 15!&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>pwa</category>
      <category>webdev</category>
      <category>react</category>
    </item>
    <item>
      <title>Git commands: Boost your productivity with git</title>
      <dc:creator>Md .Rakibul Islam</dc:creator>
      <pubDate>Thu, 11 Jan 2024 07:58:34 +0000</pubDate>
      <link>https://forem.com/rakibcloud/git-commands-boost-your-productivity-with-git-3l8g</link>
      <guid>https://forem.com/rakibcloud/git-commands-boost-your-productivity-with-git-3l8g</guid>
      <description>&lt;p&gt;Welcome everyone!&lt;/p&gt;

&lt;p&gt;When I first started using Git, I have to admit, I was a bit intimidated. I had heard so much about it and knew it was an essential tool for any developer, but I didn't know where to begin. I struggled with understanding the basic commands and couldn't seem to wrap my head around the whole concept of version control.&lt;/p&gt;

&lt;p&gt;I started by going through online tutorials, reading documentation, and experimenting with different commands. I would spend hours trying to understand the different branches, commits, and merge conflicts, but I was determined to make it work. And eventually, with a lot of practice and patience, it clicked.&lt;/p&gt;

&lt;p&gt;I hope that by sharing my experience, I can help others who may be struggling with Git at the beginning. I know it can be overwhelming, but trust me, it's worth it. With the right mindset, patience and resources, you too can master Git and improve your workflow.&lt;/p&gt;

&lt;p&gt;This guide is designed for both beginners and advanced users who want to master the art of Git and improve their workflow. Whether you are a new developer just starting out with version control or an experienced professional looking to optimize your Git skills, this guide has something for everyone. We will cover essential Git commands, advanced techniques, and helpful hacks that will help you work more efficiently and effectively with Git. So let's dive in and discover the full power of Git!&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  What is git?
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
Git is a powerful version control system that allows developers to keep track of the changes made to their code. It allows developers to collaborate on projects, revert to previous versions of the code, and branch out to experiment with new features without affecting the main codebase.&lt;/p&gt;

&lt;p&gt;One of the most important aspects of Git is being able to check the status of your files, including which files have been modified, added, or deleted. Developers can use git status command for that. Another important aspect of Git is being able to view the commit history, including when and who made the changes, and what changes were made. Developers can use git log command for that.&lt;/p&gt;

&lt;p&gt;Git is widely used in software development and has become an industry standard for managing source code. It's also widely used in data science and machine learning projects.&lt;/p&gt;

&lt;p&gt;For example, a software development team is working on a project. Each member of the team can clone the repository, make changes to their local copies, and push those changes back to the central repository. This allows the team to work on the project simultaneously without conflicts. Git also allows team members to easily revert to previous versions of the code or branch off to experiment with new features without affecting the main codebase.&lt;/p&gt;

&lt;p&gt;In data science, git is useful for versioning the data, code and experiment. For example, as a data scientist, you could use git to version control your Jupyter notebooks and Python scripts, as well as the data you're using for your analysis. This allows you to easily reproduce your results and collaborate with other data scientists on the same project. Additionally, you can use git to version control your machine learning models and experiment with different versions of your model.&lt;/p&gt;

&lt;p&gt;In summary, git is a powerful version control system that is widely used in software development and data science to manage source code and other files. It allows developers and data scientists to collaborate on projects, revert to previous versions of the code, and branch out to experiment with new features without affecting the main codebase.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Cheatsheet&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;view file status
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;view short status
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git status --short
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;view in machine readable format
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git status --porcelain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;The --porcelain option causes git status to display the status in a machine-readable format, which is intended to be easy to parse by scripts and other automated tools.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;**&lt;/p&gt;
&lt;h2&gt;
  
  
  Viewing the Commit History
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;view git logs&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;git log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;view logs in single line&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;git log --oneline
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;view n numbers of logs&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;git log -n
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;single line &amp;amp; n number of logs&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;git log --oneline -n
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;log with patch changes&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;git log --patch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;showing stats&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;git log --stat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;stats: how many files were changed, and how many lines in those files were added and removed. It also puts a summary of the information at the end.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;sort stats&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;git log --shortstat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;graphical view&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;git log --graph
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;logs without merge commits&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;git log --no-merges
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;showing references with dates&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;git log --pretty=reference
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;View git history of specific line&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;git log --pretty=short -u -L &amp;lt;start line&amp;gt;,&amp;lt;end line&amp;gt;:&amp;lt;file path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Search for code within Git history&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;git log -S "CodeSnippet or searchString"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Search for commit message within Git history&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;git log --grep=&amp;lt;pattern&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;TO BE CONTINUED&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>github</category>
      <category>softwaredevelopment</category>
      <category>developer</category>
    </item>
    <item>
      <title>REACT IMAGE EDITORS</title>
      <dc:creator>Md .Rakibul Islam</dc:creator>
      <pubDate>Mon, 18 Dec 2023 11:32:29 +0000</pubDate>
      <link>https://forem.com/rakibcloud/react-image-editors-59eo</link>
      <guid>https://forem.com/rakibcloud/react-image-editors-59eo</guid>
      <description>&lt;p&gt;Here is my latest npm package for editing images with React.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/@babu60089/react-image-editors" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/@babu60089/react-image-editors&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>tutorial</category>
      <category>programming</category>
    </item>
    <item>
      <title>Prime react data table backend pagination with lazy loading</title>
      <dc:creator>Md .Rakibul Islam</dc:creator>
      <pubDate>Thu, 16 Nov 2023 06:27:46 +0000</pubDate>
      <link>https://forem.com/rakibcloud/prime-react-data-table-backend-pagination-with-lazy-loading-4lgg</link>
      <guid>https://forem.com/rakibcloud/prime-react-data-table-backend-pagination-with-lazy-loading-4lgg</guid>
      <description>&lt;p&gt;While employing PrimeReact, I encountered challenges related to the backend pagination of their data table. During these instances, I resorted to employing front-end pagination as a workaround. However, I have since developed a streamlined solution for backend pagination using my custom functions. The PrimeReact documentation lacked clarity on fetching data with a personalized style, prompting me to construct a dedicated function. Below, I outline the step-by-step process for implementing this solution.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Step 1: Define your necessary states Here, i use my own style *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;import data table from prime react into your react component &lt;br&gt;
&lt;code&gt;import {Column} from "primereact/column";&lt;br&gt;
import {DataTable} from "primereact/datatable";&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;*&lt;em&gt;Step2: fetch data with your UseEffect function *&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;*&lt;em&gt;Final Step: Show your data into prime react data table *&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;*&lt;em&gt;Here is my full code : *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;`import React, {useEffect, useRef, useState} from "react";&lt;br&gt;
import {Column} from "primereact/column";&lt;br&gt;
import {DataTable} from "primereact/datatable";&lt;br&gt;
import {baseUrl, checkAvailability} from "../../Helper/helper";&lt;br&gt;
import useData from "../../hooks/useData";&lt;br&gt;
import "./Clients.css";&lt;/p&gt;

&lt;p&gt;const Clients = () =&amp;gt; {&lt;br&gt;
    const {token} = useData().store;&lt;br&gt;
    const [loading, setLoading] = useState(false);&lt;br&gt;
    const {authPermissions} = useData().permissions;&lt;br&gt;
    const [first, setFirst] = useState(1);&lt;br&gt;
    const [rows, setRows] = useState(12);&lt;br&gt;
    const [clientData, setClientData] = useState()&lt;br&gt;
    const [totalRecords, setTotalRecords] = useState(0);&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;useEffect(() =&amp;gt; {
    //permination setup
    const IsGetClient = checkAvailability(authPermissions, "get-client-list");
    if (!IsGetClient) {
        return;
    }
    //make a options which i send with fetch function
    const options = {
        method: "GET",
        headers: new Headers({'content-type': 'application/json', Authorization: `Bearer ${token}`}),
    };
    const fetchRange = (page, pageSize) =&amp;gt; {
        setLoading(true)
        let pages = (page / pageSize) + 1
        fetch(`https://sltm.selopia.com/api/clients?page=${pages.toFixed(0)}&amp;amp;per_page=${pageSize}`, options).then((response) =&amp;gt;
            response.json()).then(data =&amp;gt; {
            console.log(data);
            setClientData(data?.data)
            setTotalRecords(data?.data?.total)
            setLoading(false);
        });
    }

    fetchRange(first, rows);
}, [authPermissions, first, rows]);

return (
    &amp;lt;div&amp;gt;
        &amp;lt;DataTable
            value={clientData?.data}
            lazy
            first={first}
            dataKey="id"
            paginator
            rows={rows}
            totalRecords={totalRecords}
            loading={loading}
            onPage={(e) =&amp;gt; {
                setFirst(e.first);
                setRows(e.rows);
            }}
            // rowsPerPageOptions={[10, 20, 50, 100, 200, 500, 1000, 1309]}

            tableStyle={{minWidth: '50rem'}}&amp;gt;

            &amp;lt;Column field="id" header="ID"&amp;gt;&amp;lt;/Column&amp;gt;
            &amp;lt;Column field="company" header="Company"&amp;gt;&amp;lt;/Column&amp;gt;
            &amp;lt;Column field="phone_no" header="Phone"&amp;gt;&amp;lt;/Column&amp;gt;

        &amp;lt;/DataTable&amp;gt;
    &amp;lt;/div&amp;gt;
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;br&gt;
export default Clients;&lt;/p&gt;

&lt;p&gt;`&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Exploring React's Top Useful Hooks with Code Examples</title>
      <dc:creator>Md .Rakibul Islam</dc:creator>
      <pubDate>Sun, 12 Nov 2023 08:58:26 +0000</pubDate>
      <link>https://forem.com/rakibcloud/exploring-reacts-top-useful-hooks-with-code-examples-3ikc</link>
      <guid>https://forem.com/rakibcloud/exploring-reacts-top-useful-hooks-with-code-examples-3ikc</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
React Hooks are functions that allow functional components in React to use state, lifecycle methods, and other React features that were previously only available in class components. They simplify state management and side effect handling, making code more concise and readable. Hooks promote reusability of component logic through custom hooks, eliminate the need for class components, and provide a consistent way to handle component lifecycle events. They offer a more modern and intuitive approach to building components in React, officially supported by the React team for improved code organization and maintainability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. useState&lt;/strong&gt;&lt;br&gt;
Explain the basics of useState and how it's used for managing component state.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;2. useEffect&lt;/strong&gt;&lt;br&gt;
Discuss the versatility of useEffect for handling side effects in functional components.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;3. useContext&lt;/strong&gt;&lt;br&gt;
Explore how useContext facilitates the sharing of values like themes or user authentication throughout the component tree.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;4. useReducer&lt;/strong&gt;&lt;br&gt;
Discuss the benefits of useReducer for managing complex state logic in a more centralized way.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;5. useRef&lt;/strong&gt;&lt;br&gt;
Explain how useRef can be used to interact with DOM elements or persist values across renders without causing re-renders.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;6. useCallback&lt;/strong&gt;&lt;br&gt;
Explain how useCallback can optimize performance by memoizing callback functions, preventing unnecessary re-renders.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;7. useMemo&lt;/strong&gt;&lt;br&gt;
Discuss how useMemo can optimize performance by memoizing the result of expensive computations.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;8. useLayoutEffect&lt;/strong&gt;&lt;br&gt;
Differentiate between useEffect and useLayoutEffect, emphasizing the use of the latter for interactions that require the DOM to be painted before continuing.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Summarize the additional hooks, highlighting their specific use cases and advantages. Encourage readers to explore these hooks further to enhance their React development skills. Also, mention the importance of staying updated with the React ecosystem as new hooks and patterns may emerge over time.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Make a Invoice with Tailwind CSS</title>
      <dc:creator>Md .Rakibul Islam</dc:creator>
      <pubDate>Wed, 31 May 2023 07:13:23 +0000</pubDate>
      <link>https://forem.com/rakibcloud/make-a-invoice-with-tailwind-css-5c8d</link>
      <guid>https://forem.com/rakibcloud/make-a-invoice-with-tailwind-css-5c8d</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj9j9wlv7hys45r2i26ah.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj9j9wlv7hys45r2i26ah.png" alt=" " width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

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