<?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: Anower Jahan Shofol</title>
    <description>The latest articles on DEV Community by Anower Jahan Shofol (@shofol).</description>
    <link>https://dev.to/shofol</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%2F152212%2F4361eb0d-7780-45c0-8f09-c963957c576e.jpeg</url>
      <title>DEV Community: Anower Jahan Shofol</title>
      <link>https://dev.to/shofol</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shofol"/>
    <language>en</language>
    <item>
      <title>Job hunting is tiring, so I'm developing Jobsy</title>
      <dc:creator>Anower Jahan Shofol</dc:creator>
      <pubDate>Mon, 02 Mar 2026 10:55:32 +0000</pubDate>
      <link>https://dev.to/shofol/job-hunting-is-tiring-so-im-developing-jobsy-2fj4</link>
      <guid>https://dev.to/shofol/job-hunting-is-tiring-so-im-developing-jobsy-2fj4</guid>
      <description>&lt;p&gt;Job hunting is scary nowadays. Endless job descriptions, requirements, and company research can feel overwhelming.&lt;/p&gt;

&lt;p&gt;After checking one job description after another, it becomes really annoying to read through all that text. Sometimes, it’s also hard to filter out the exact requirements and identify the skill gaps compared to our own skill set. That’s why I’m developing Jobsy.&lt;/p&gt;

&lt;p&gt;Users can post any job description and upload their resume. With the help of an LLM API, Jobsy summarizes the job into clear expectations, highlights the skills the user already has, and identifies the skills they need to learn.&lt;/p&gt;

&lt;p&gt;I’ve also added a new feature called Resume Reviewer. It provides an ATS score, section-wise scores, and improvement suggestions.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/lncyvci2WGM"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;I’m still working on it, but I hope to make it live soon.&lt;/p&gt;

&lt;p&gt;If you’re also struggling with this, let us know your story! And, what do you think about this idea?&lt;/p&gt;

</description>
      <category>career</category>
      <category>ai</category>
      <category>productivity</category>
      <category>openai</category>
    </item>
    <item>
      <title>Adding Web Analytics on Vercel Is Easier Than Ever (Free &amp; Built-In)</title>
      <dc:creator>Anower Jahan Shofol</dc:creator>
      <pubDate>Tue, 17 Feb 2026 04:42:56 +0000</pubDate>
      <link>https://dev.to/shofol/adding-web-analytics-on-vercel-is-easier-than-ever-free-built-in-57bl</link>
      <guid>https://dev.to/shofol/adding-web-analytics-on-vercel-is-easier-than-ever-free-built-in-57bl</guid>
      <description>&lt;p&gt;Did you know that &lt;strong&gt;Vercel&lt;/strong&gt; provides built-in web analytics that you can use &lt;strong&gt;even on the free plan&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;In this guide, we’ll learn how to quickly enable &lt;strong&gt;Vercel Web Analytics&lt;/strong&gt; in a &lt;strong&gt;Next.js&lt;/strong&gt; project and start tracking visitors and page views with minimal setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Use Vercel Analytics?
&lt;/h2&gt;

&lt;p&gt;Vercel Analytics allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track page views and visitors&lt;/li&gt;
&lt;li&gt;Monitor traffic trends&lt;/li&gt;
&lt;li&gt;View analytics directly inside the Vercel dashboard&lt;/li&gt;
&lt;li&gt;Avoid third-party analytics tools for basic insights&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Enable Analytics in the Vercel Dashboard
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to your project in the Vercel dashboard&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;Analytics&lt;/strong&gt; tab&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Enable&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&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%2Fzjxfm5ju6fqrb39ain96.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%2Fzjxfm5ju6fqrb39ain96.png" alt="Vercel Web Analytics Screenshot" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Enabling analytics in the dashboard alone is not enough. You must complete the next steps to activate it properly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 2: Install the Vercel Analytics Package
&lt;/h2&gt;

&lt;p&gt;Open your Next.js project and run the following command from the root directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i @vercel/analytics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This installs the official Vercel Analytics library.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Add the Analytics Component to Your App
&lt;/h2&gt;

&lt;p&gt;Now, add the &lt;code&gt;Analytics&lt;/code&gt; component to your root layout file.&lt;/p&gt;

&lt;p&gt;Open &lt;code&gt;app/layout.tsx&lt;/code&gt; and update it like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Analytics&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@vercel/analytics/next&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;RootLayout&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;children&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="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&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="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt; &lt;span class="nx"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;head&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/title&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/head&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;body&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;children&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Analytics&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/body&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/html&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures analytics are loaded across all pages of your app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Deploy Your Changes to Production
&lt;/h2&gt;

&lt;p&gt;Once the setup is complete, you need to deploy your project. You have two options:&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 1: Deploy via GitHub
&lt;/h3&gt;

&lt;p&gt;If your GitHub repository is connected to Vercel:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Commit your changes&lt;/li&gt;
&lt;li&gt;Push to the main branch&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Vercel will automatically deploy your app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 2: Deploy Using the Vercel CLI
&lt;/h3&gt;

&lt;p&gt;If you prefer deploying from the command line:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the Vercel CLI globally:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   npm i &lt;span class="nt"&gt;-g&lt;/span&gt; vercel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Deploy your project:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   vercel deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it! Your app is now live with analytics enabled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Viewing Analytics Data
&lt;/h2&gt;

&lt;p&gt;After deployment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the Vercel dashboard&lt;/li&gt;
&lt;li&gt;Select your project&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;Analytics&lt;/strong&gt; tab&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You’ll start seeing visitor counts and page views as traffic comes in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced Analytics (Pro &amp;amp; Enterprise Plans)
&lt;/h2&gt;

&lt;p&gt;Users on &lt;strong&gt;Pro&lt;/strong&gt; and &lt;strong&gt;Enterprise&lt;/strong&gt; plans can also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track custom events&lt;/li&gt;
&lt;li&gt;Measure button clicks&lt;/li&gt;
&lt;li&gt;Monitor form submissions&lt;/li&gt;
&lt;li&gt;Analyze purchases and user interactions&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vercel</category>
      <category>nextjs</category>
      <category>analytics</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Create Eye-Catching Button Effect with Rotating Glow Animation</title>
      <dc:creator>Anower Jahan Shofol</dc:creator>
      <pubDate>Thu, 12 Dec 2024 05:13:13 +0000</pubDate>
      <link>https://dev.to/shofol/create-eye-catching-button-effect-with-rotating-glow-animation-2a92</link>
      <guid>https://dev.to/shofol/create-eye-catching-button-effect-with-rotating-glow-animation-2a92</guid>
      <description>&lt;p&gt;Ever wondered how websites create those eye-catching buttons with glowing, rotating effects? These effects can captivate users and elevate your website's UI/UX. Let’s explore how to build them step-by-step with CSS and a bit of JavaScript.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 1: Create the Button Layout
&lt;/h2&gt;

&lt;p&gt;Let’s make a simple button at first-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&amp;gt;&lt;/span&gt;WHY CHOOSE US&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;250px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* ... Other styles ... */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will look like this-&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%2Fytduuh30efdsjgsxxa4t.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%2Fytduuh30efdsjgsxxa4t.png" alt="Basic Button" width="640" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Adding a Gradient Effect
&lt;/h2&gt;

&lt;p&gt;Now, let’s talk about a special kind of gradient called a conic gradient. Have you heard of it? While linear gradients smoothly transition colors along a straight line and radial gradients blend colors outward from the center of a circle, conic gradients transition colors around a central point, forming a circular or cone-like pattern. It's a unique way to create dynamic and visually interesting designs.&lt;/p&gt;

&lt;p&gt;See the difference below-&lt;/p&gt;

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

&lt;p&gt;We will use the conic gradient for this effect. Let’s add that to our button-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;  &lt;span class="nt"&gt;background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;conic-gradient&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;transparent&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;white&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="nt"&gt;transparent&lt;/span&gt; &lt;span class="err"&gt;20&lt;/span&gt;&lt;span class="o"&gt;%)&lt;/span&gt;
    &lt;span class="nt"&gt;border-box&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CSS snippet involves a conic gradient and uses border-box for background sizing. Here's a breakdown of what's happening:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conic Gradient Breakdown&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;conic-gradient(from 0, transparent, white 10%, transparent 20%):&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;from 0:&lt;/strong&gt; The gradient starts at an angle of 0 degrees (the top of the circle) and proceeds clockwise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;transparent:&lt;/strong&gt; The gradient begins with a fully transparent color.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;white 10%:&lt;/strong&gt; At 10% of the total gradient's circumference, the color transitions to white.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;transparent 20%:&lt;/strong&gt; At 20% of the gradient's circumference, it transitions back to transparent.&lt;/p&gt;

&lt;p&gt;This pattern creates a "slice" of white surrounded by transparency.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;border-box&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;border-box:&lt;/strong&gt; The gradient applies to the area that includes the content, padding, and border of the element. This means the gradient will cover the entire element's box, up to the outer edge of the border.&lt;/p&gt;

&lt;p&gt;After applying this effect, the button will look like this-&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%2Fnkf41gxfdmsg3y1fr81k.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%2Fnkf41gxfdmsg3y1fr81k.png" alt="Button With Conic Gradient" width="482" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, we will use this conic gradient as our gradient border of the button. How can we do that?&lt;/p&gt;

&lt;p&gt;We will use the power of &lt;code&gt;box-sizing&lt;/code&gt; here. We will make multiple backgrounds for this button. The top background of the button will be a solid background which will have &lt;code&gt;padding-box&lt;/code&gt; as &lt;code&gt;box-sizing&lt;/code&gt; which means that it won’t stretch till the border. See the code below-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;  &lt;span class="nt"&gt;background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;linear-gradient&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;black&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;black&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;padding-box&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
    &lt;span class="nt"&gt;conic-gradient&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;transparent&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;white&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="nt"&gt;transparent&lt;/span&gt; &lt;span class="err"&gt;20&lt;/span&gt;&lt;span class="o"&gt;%)&lt;/span&gt; &lt;span class="nt"&gt;border-box&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, now we have a black background that covers the button, including its content and padding. The conic-gradient we added earlier stretches all the way to the border. Since the border is transparent, we can see the conic gradient's 2px thickness showing through the border. Now, the button looks like this-&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%2F1m8blry2egvknb3uib36.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%2F1m8blry2egvknb3uib36.png" alt="Conic Gradient Border Button" width="572" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Animating the Gradient
&lt;/h2&gt;

&lt;p&gt;We’ve added that shiny glow effect to our button! Now, let’s make it move. To do this, we’ll need a little JavaScript. But first, we’ll update the CSS to make it more flexible and dynamic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;  &lt;span class="nt"&gt;background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;linear-gradient&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;black&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;black&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;padding-box&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
    &lt;span class="nt"&gt;conic-gradient&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
        &lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;--angle&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
        &lt;span class="nt"&gt;transparent&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
        &lt;span class="nt"&gt;white&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt;
        &lt;span class="nt"&gt;transparent&lt;/span&gt; &lt;span class="err"&gt;20&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;
      &lt;span class="o"&gt;)&lt;/span&gt;
      &lt;span class="nt"&gt;border-box&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, the only difference from previous section is that, we have introduced a CSS variable called &lt;code&gt;--angle&lt;/code&gt;. [&lt;code&gt;from var(--angle, 0)&lt;/code&gt; means that if the &lt;code&gt;--angle&lt;/code&gt; value is not defined, the default value will be 0 which was same like before.] And, now we will change this -&lt;code&gt;--angle&lt;/code&gt; value from 0 to 360 by Javascript. As a result, the conic-gradient will move from 0 to 360 degrees and make that glowing rotating effect. Let’s see the JavaScript part now-&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="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="s2"&gt;DOMContentLoaded&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;element&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="s2"&gt;.rotating&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;angle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&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;rotate&lt;/span&gt; &lt;span class="o"&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="nx"&gt;angle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;360&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Increment angle and keep it within 0-360&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;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;--angle&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="nx"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;deg`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nf"&gt;rotate&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;Very simple operation. After the DOM contents are loaded, we are calling a function called &lt;code&gt;rotate()&lt;/code&gt;. This function is incrementing the angle by 1 on each iteration and setting that value to the button’s CSS variable &lt;code&gt;--angle&lt;/code&gt;. That eventually changes the place of the &lt;code&gt;conic-gradient&lt;/code&gt;. We are calling this function iteratively using a built in function called &lt;code&gt;requestAnimationFrame&lt;/code&gt;. This is a special Javascript function like setInterval or setTimeOut. Let’s get into a bit detail of this &lt;code&gt;requestAnimationFrame&lt;/code&gt; function-&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What It Does:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Keeps animations smooth:&lt;/strong&gt; It synchronizes your animations with the screen's refresh rate (usually 60 frames per second) so they don't look choppy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saves power:&lt;/strong&gt; It pauses animations when the user switches to another tab, saving resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Calls your function at the perfect time:&lt;/strong&gt; It tells your animation logic when it's time to update, so everything stays in sync.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How It Works:&lt;/strong&gt;&lt;br&gt;
You give &lt;code&gt;requestAnimationFrame&lt;/code&gt; a function to call (usually your animation logic). It runs this function right before the browser draws the next frame on the screen.&lt;/p&gt;

&lt;p&gt;And, we get the final result. See the Codepen below to get step-by-step changes-&lt;/p&gt;

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

&lt;p&gt;Now you've created a glowing, rotating button using CSS and JavaScript! Feel free to tweak the gradients, animation speed (Any idea how we can do that? Leave it in the comment.), or even add your own custom effects. These techniques are a great way to make your UI stand out.&lt;/p&gt;

&lt;p&gt;Want more ideas for creative Javascript animations or CSS button effects? Let me know in the comments, and stay tuned for the next blog post!&lt;/p&gt;

&lt;h3&gt;
  
  
  If you like my writing and want to support me then you can-
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://buymeacoffee.com/revolab" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buymeacoffee.com%2Fbuttons%2Fdefault-orange.png" alt="Buy me a coffee button for Revolab by Anower Jahan Shofol, the write of this article" width="434" height="100"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also find me here-&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/jahananower" rel="noopener noreferrer"&gt;X Handle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/anower-jahan/" rel="noopener noreferrer"&gt;LinkedIn Handle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>css</category>
      <category>javascript</category>
      <category>animation</category>
      <category>webdev</category>
    </item>
    <item>
      <title>3D Parallax Hover Effect Using TailwindCSS</title>
      <dc:creator>Anower Jahan Shofol</dc:creator>
      <pubDate>Sun, 08 Dec 2024 15:51:57 +0000</pubDate>
      <link>https://dev.to/shofol/3d-parallax-hover-effect-using-tailwindcss-2ff2</link>
      <guid>https://dev.to/shofol/3d-parallax-hover-effect-using-tailwindcss-2ff2</guid>
      <description>&lt;p&gt;Have you ever been mesmerized by those stunning 3D parallax hover effects on cards? They look complex, right? Well, I thought so too, until I came across a simple CodePen demo that showed how easy it is to create one. Do you want to learn it too? Let’s dive in-&lt;/p&gt;

&lt;h2&gt;
  
  
  Some basics
&lt;/h2&gt;

&lt;p&gt;To achieve the 3D effect, we need to know couple of things first. Those are-&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Perspective: The perspective property controls how far the object appears from the viewer. A lower value creates a stronger, more dramatic 3D effect, while a higher value makes the effect more subtle.&lt;/li&gt;
&lt;li&gt;Transform: The transform property lets you apply 2D or 3D changes to an element. You can use it to rotate, scale, move, skew, and more!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Let’s jump to code
&lt;/h2&gt;

&lt;p&gt;Check the final result first, so you will understand what we are trying to build. Hover over the card and see how it looks?&lt;/p&gt;

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

&lt;p&gt;Now, let’s see how it works. I won’t explain every TailwindCSS class here. We will just discuss about the main classes which are doing the effect. First, let’s see the main card’s div’s classes-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"cursor-pointer [transform:perspective(800px)_rotateY(10deg)] hover:[transform:perspective(800px)_rotateY(-10deg)] w-96 sm:w-84 p-5 bg-violet-300 rounded-lg shadow-lg group duration-300"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look at this part here-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;[transform:perspective(800px)_rotateY(10deg)] hover:[transform:perspective(800px)_rotateY(-10deg)]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We are doing two things here. At first, we are rotating the card by its Y axis by 10 degrees. And, also setting the perspective to 800px. As a result, the normal state of the card looks like the image below. It is slightly rotated to the right. And, as we have applied some perspective, you can see that the right side of the card is bit skewed. That’s how real 3D world works!&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%2F9eqgnktseb8jlvrfuwx2.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%2F9eqgnktseb8jlvrfuwx2.png" alt="Normal state of the card" width="800" height="847"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can tweak the perspective to see the changes in the card. And, you will also get an idea how the perspective works-&lt;/p&gt;

&lt;p&gt;This is how it looks if we change the perspective to 100px. The more we lower the perspective value, the more closer the content is - remember?&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%2Fqvtqgiic481mzayl0utx.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%2Fqvtqgiic481mzayl0utx.png" alt="Card state on 100px perspective" width="800" height="892"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And, this is what we get if we set the perspective to 10000px. It is so far that it seems like there’s no rotation at all!&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%2Fgubk2x0tc99168pkdfsu.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%2Fgubk2x0tc99168pkdfsu.png" alt="Card state on 10000px perspective" width="800" height="883"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, we will see how it is having a 3D illusion when we hover it. And, you will be surprised to see that it’s so easy to fool our eye!&lt;/p&gt;

&lt;p&gt;See this part of the code of the img-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"duration-300 group-hover:-translate-x-8"&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When hovering over the card, the image slides 2.5rem to the left, creating a dynamic effect. For this, we are using &lt;a href="https://tailwindcss.com/docs/hover-focus-and-other-states#styling-based-on-parent-state" rel="noopener noreferrer"&gt;Group modifer&lt;/a&gt; of TailwindCSS. And, that’s it! We will have a 3D image rotating card.&lt;/p&gt;

&lt;p&gt;Now it’s your turn! Experiment with these classes, tweak the perspective, or combine this effect with other TailwindCSS utilities to create something unique. Don’t forget to share your creations in the comments or on social media!&lt;/p&gt;

&lt;h3&gt;
  
  
  If you like my writing and want to support me then you can-
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://buymeacoffee.com/revolab" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buymeacoffee.com%2Fbuttons%2Fdefault-orange.png" alt="Buy me a coffee button for Revolab by Anower Jahan Shofol, the write of this article" width="434" height="100"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also find me here-&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/jahananower" rel="noopener noreferrer"&gt;X Handle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/anower-jahan/" rel="noopener noreferrer"&gt;LinkedIn Handle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tailwindcss</category>
      <category>css</category>
      <category>tutorial</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Do I need Unit testing if I use Cypress?</title>
      <dc:creator>Anower Jahan Shofol</dc:creator>
      <pubDate>Tue, 07 Nov 2023 14:00:34 +0000</pubDate>
      <link>https://dev.to/shofol/do-i-need-unit-testing-if-i-use-cypress-1lob</link>
      <guid>https://dev.to/shofol/do-i-need-unit-testing-if-i-use-cypress-1lob</guid>
      <description>&lt;p&gt;I was wondering, do we need Unit testing (Let's say with Jest) if we use Cypress for E2E and Component testing? When I have started writing test codes for a signin page, I see that the validation codes are same in unit test and cypress code. So, if cypress handles the unit test part, then should I add unit testing too? I am not actually finding the difference/importance of separate unit testing here. &lt;/p&gt;

&lt;p&gt;Can you explain this?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>help</category>
    </item>
    <item>
      <title>Github is experimenting with Visual Design</title>
      <dc:creator>Anower Jahan Shofol</dc:creator>
      <pubDate>Thu, 18 Jun 2020 04:48:12 +0000</pubDate>
      <link>https://dev.to/shofol/github-is-experimenting-with-visual-design-3781</link>
      <guid>https://dev.to/shofol/github-is-experimenting-with-visual-design-3781</guid>
      <description>&lt;p&gt;Just noticed today that Github is experimenting with their visual design. Here is the design for repository. Seeing change on regularly used application hits somewhere! :D &lt;/p&gt;

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

&lt;p&gt;You can also check it by enabling them from feature preview. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F246e396frcl2hfxxgpjg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F246e396frcl2hfxxgpjg.png" alt="Alt Text" width="210" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cover image: Github&lt;/p&gt;

</description>
      <category>github</category>
      <category>git</category>
    </item>
    <item>
      <title>Question: How do freelance developers get work without using platforms like UpWork or Fiverr?</title>
      <dc:creator>Anower Jahan Shofol</dc:creator>
      <pubDate>Sat, 06 Jun 2020 08:34:02 +0000</pubDate>
      <link>https://dev.to/shofol/question-how-do-freelance-developers-get-work-without-using-platforms-like-upwork-or-fiverr-49cd</link>
      <guid>https://dev.to/shofol/question-how-do-freelance-developers-get-work-without-using-platforms-like-upwork-or-fiverr-49cd</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hi, all freelance developers or recruiters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I saw many times that Senior freelance developers don't like the platforms like UpWork or Fiverr because of the price cut and low price works. I also face this problem. &lt;/p&gt;

&lt;p&gt;But, without these kinds of platforms, how can a developer meet or find potential clients? (FYI, I am not asking about local clients). What is the process to get clients?&lt;/p&gt;

&lt;p&gt;Thanks in advance.&lt;/p&gt;

&lt;p&gt;Cover Photo by Annie Spratt on Unsplash&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>help</category>
      <category>freelancing</category>
      <category>career</category>
    </item>
    <item>
      <title>Run your Github Actions jobs from a specific directory</title>
      <dc:creator>Anower Jahan Shofol</dc:creator>
      <pubDate>Tue, 26 May 2020 15:02:10 +0000</pubDate>
      <link>https://dev.to/shofol/run-your-github-actions-jobs-from-a-specific-directory-1i9e</link>
      <guid>https://dev.to/shofol/run-your-github-actions-jobs-from-a-specific-directory-1i9e</guid>
      <description>&lt;p&gt;I am working on a current project where the Backend and the Frontend of the application are on the same repository of Github. That's why I faced a situation to run the Github Actions jobs for my React app from a specific directory. And, I find a quick solution to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Specify for all Jobs:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Github actions have a working-directory option to declare on workflow. It specifies the working directory for all run steps.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;defaults&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;working-directory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Documentation: &lt;br&gt;
&lt;a href="https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#defaultsrun" rel="noopener noreferrer"&gt;defaults.run&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Specify for specific Job:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;So, you got the idea. This can be configured for specific jobs too. To set working_directory for a specific job, here is the procedure-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;job1&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;defaults&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;working-directory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;scripts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Documentation: &lt;br&gt;
&lt;a href="https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_iddefaultsrun" rel="noopener noreferrer"&gt;jobs..defaults.run&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a simple Actions for NodeJs build job. The 'web' directory will be used for all jobs run-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Node.js CI&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;frontend-develop&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;frontend-develop&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;defaults&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;working-directory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;matrix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;10.x&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;12.x&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;14.x&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Use Node.js ${{ matrix.node-version }}&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v1&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ matrix.node-version }}&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm ci&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm run build --if-present&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm test&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the first documentation an important note to quote- &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When more than one default setting is defined with the same name, GitHub uses the most specific default setting. For example, a default setting defined in a job will override a default setting that has the same name defined in a workflow.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thanks for checking out the article. I hope it may help someone somehow. Let me know if I missed something or did something wrong. &lt;/p&gt;

&lt;p&gt;Good Luck!&lt;/p&gt;

&lt;p&gt;Cover Image: Github&lt;/p&gt;

&lt;h3&gt;
  
  
  If you like my writing and want to support me then you can-
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://buymeacoffee.com/revolab" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buymeacoffee.com%2Fbuttons%2Fdefault-orange.png" alt="Buy me a coffee button for Revolab by Anower Jahan Shofol, the write of this article" width="434" height="100"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also find me here-&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/jahananower" rel="noopener noreferrer"&gt;X Handle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/anower-jahan/" rel="noopener noreferrer"&gt;LinkedIn Handle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>todayilearned</category>
      <category>github</category>
      <category>webdev</category>
    </item>
    <item>
      <title>What kind of physical exercises do you maintain to be fit and healthy?</title>
      <dc:creator>Anower Jahan Shofol</dc:creator>
      <pubDate>Wed, 11 Mar 2020 12:06:54 +0000</pubDate>
      <link>https://dev.to/shofol/what-kind-of-physical-exercises-do-you-maintain-to-be-fit-and-healthy-4ai6</link>
      <guid>https://dev.to/shofol/what-kind-of-physical-exercises-do-you-maintain-to-be-fit-and-healthy-4ai6</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hi, folks, I was wondering what kind of physical exercises should be considered as a bare minimum to be fit?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I don't want to be a bodybuilder. I just want to be healthy, not to get diabetes, back pain, cancer or heart issues. I try to walk regularly. But, I am getting fat, having back pain and sick on every seasonal change! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, what do you do to be healthy?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/hNkaMEn1KVhcs/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/hNkaMEn1KVhcs/giphy.gif" alt="physcial exercise"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cover Photo by Chander R on Unsplash&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>help</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Is it ethical to work as a shadow developer by hiding identity? (Please read and help me)</title>
      <dc:creator>Anower Jahan Shofol</dc:creator>
      <pubDate>Sat, 22 Feb 2020 05:34:21 +0000</pubDate>
      <link>https://dev.to/shofol/is-it-ethical-to-work-as-a-shadow-developer-by-hiding-identity-please-read-and-help-me-1lkj</link>
      <guid>https://dev.to/shofol/is-it-ethical-to-work-as-a-shadow-developer-by-hiding-identity-please-read-and-help-me-1lkj</guid>
      <description>&lt;p&gt;Hi all, Please have a read on the discussion and help me with your thoughts.&lt;/p&gt;

&lt;p&gt;Today, I have to decline projects from one of my regular clients. We surely had a great number of projects to collaborate with. The declining issue was about the working procedure of him which I came to know yesterday.&lt;/p&gt;

&lt;p&gt;I just came to know that, he contacts potential clients or companies with his resume and apply for remote jobs. And, after that, he takes part in the interview, then delivers the test or project's work by hiring other freelancer developers like me. ( He is also a Frontend developer. So, he passes the interview by answering questions rightly.) He once proposed me to hit APIs from his PC by the remote connection for a future client. I didn't have to do that till now. But, it seemed a little bit of unsettling to me. &lt;/p&gt;

&lt;p&gt;BTW, Today, &lt;strong&gt;I asked him if he clarifies the client that he has a team of developers or he works alone?&lt;/strong&gt; If no, I also requested him not to add me on those projects. And, as I guessed, he is not working with me anymore on these kinds of projects.&lt;/p&gt;

&lt;p&gt;I am feeling that I was right. Because a company hires a developer based on his skills, not his team. And, hiding the identity seemed unethical to me. And, I felt, I am just disrespecting my hard work. &lt;/p&gt;

&lt;p&gt;But, I am also thinking- &lt;strong&gt;Have I done injustice to him?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because, in freelance platforms like Fiverr or Upwork or others, I get offers from other developers from now and then (when I am writing this, I have got another one where he wants help for one of his client's projects). So, how would I do work where many of the orders are like these? &lt;strong&gt;Should I ask all of them if they inform the clients or just hiding it?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I know there are subcontractors on these platforms. That is one thing, and hiding identity is another thing. That's why I had to take a bold decision. But, I am afraid that- &lt;strong&gt;Will I get enough clients if I become this kind of strict?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I am seeking proper and constructive suggestions from you whether I should take these kinds of projects.&lt;/strong&gt; It is the first place I am seeking some real suggestions (not just you have done a good or bad job). &lt;/p&gt;

&lt;p&gt;Cover Photo by Akshar Dave on Unsplash&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
      <category>help</category>
      <category>freelancing</category>
    </item>
    <item>
      <title>What is a good option for a PWA?</title>
      <dc:creator>Anower Jahan Shofol</dc:creator>
      <pubDate>Tue, 21 Jan 2020 03:19:07 +0000</pubDate>
      <link>https://dev.to/shofol/what-is-a-good-option-for-a-pwa-6io</link>
      <guid>https://dev.to/shofol/what-is-a-good-option-for-a-pwa-6io</guid>
      <description>&lt;p&gt;Hi all, I need to start building a PWA for a client. I am bit new to it, so want some suggestion from you. &lt;/p&gt;

&lt;p&gt;What will be a good option for PWA? React, Angular, Vue or Flutter or any other options you want to mention.&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>How to use JetBrainsMono in VSCode (New font in the town)</title>
      <dc:creator>Anower Jahan Shofol</dc:creator>
      <pubDate>Thu, 16 Jan 2020 17:14:16 +0000</pubDate>
      <link>https://dev.to/shofol/how-to-use-jetbrainsmono-in-vscode-jb8</link>
      <guid>https://dev.to/shofol/how-to-use-jetbrainsmono-in-vscode-jb8</guid>
      <description>&lt;p&gt;JetBrains has released a typeface for all of their IDEs and this is opensource!😊 So, VSCode lovers or other IDE guys can also try this! For VSCode users- &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the Font Pack in your computer (Guide is here-&lt;a href="https://www.jetbrains.com/lp/mono/#how-to-install" rel="noopener noreferrer"&gt;https://www.jetbrains.com/lp/mono/#how-to-install&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Go to Preferences-&amp;gt;Settings-&amp;gt;Font and then change the font to JetBrains Mono. You can Follow this gif- &lt;/li&gt;
&lt;/ul&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%2Fjzdxnz2n2uwdcej7af9i.gif" 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%2Fjzdxnz2n2uwdcej7af9i.gif" alt="Gif to show how to set the font" width="600" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use it or not, you should have a look at their site at least. It is great! People are twitting about it! &lt;/p&gt;

&lt;h3&gt;
  
  
  If you like my writing and want to support me then you can-
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://buymeacoffee.com/revolab" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buymeacoffee.com%2Fbuttons%2Fdefault-orange.png" alt="Buy me a coffee button for Revolab by Anower Jahan Shofol, the write of this article" width="434" height="100"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also find me here-&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/jahananower" rel="noopener noreferrer"&gt;X Handle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/anower-jahan/" rel="noopener noreferrer"&gt;LinkedIn Handle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>vscode</category>
    </item>
  </channel>
</rss>
