<?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: skidee</title>
    <description>The latest articles on DEV Community by skidee (@skidee).</description>
    <link>https://dev.to/skidee</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%2F481606%2F4a93d5d6-c19f-46c5-a476-3a97f4a47591.jpg</url>
      <title>DEV Community: skidee</title>
      <link>https://dev.to/skidee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/skidee"/>
    <language>en</language>
    <item>
      <title>Debloat OPPO A15s</title>
      <dc:creator>skidee</dc:creator>
      <pubDate>Sat, 22 Nov 2025 17:53:58 +0000</pubDate>
      <link>https://dev.to/skidee/debloat-oppo-a15s-1jed</link>
      <guid>https://dev.to/skidee/debloat-oppo-a15s-1jed</guid>
      <description>&lt;p&gt;This is the list of packages that you can remove safely.&lt;br&gt;
after a year of usage after debloat, my device is working totally fine&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; setup the debloater &lt;a href="https://beebom.com/how-remove-bloatware-android-phone" rel="noopener noreferrer"&gt;https://beebom.com/how-remove-bloatware-android-phone&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; select and remove the following packages&lt;/p&gt;

&lt;p&gt;&lt;code&gt;com.android.fmradio&lt;br&gt;
com.android.providers.partnerbookmarks&lt;br&gt;
com.coloros.gamespace&lt;br&gt;
com.coloros.gamespaceui&lt;br&gt;
com.coloros.musiclink&lt;br&gt;
com.facebook.appmanager&lt;br&gt;
com.facebook.services&lt;br&gt;
com.facebook.system&lt;br&gt;
com.google.android.apps.googleassistant&lt;br&gt;
com.google.android.apps.maps&lt;br&gt;
com.google.android.apps.nbu.files&lt;br&gt;
com.google.android.apps.nbu.paisa.user&lt;br&gt;
com.google.android.apps.photos&lt;br&gt;
com.google.android.calendar&lt;br&gt;
com.google.android.googlequicksearchbox&lt;br&gt;
com.google.android.keep&lt;br&gt;
com.google.android.onetimeinitializer&lt;br&gt;
com.google.android.printservice.recommendation&lt;br&gt;
com.heytap.browser&lt;br&gt;
com.heytap.cloud&lt;br&gt;
com.heytap.mcs&lt;br&gt;
com.heytap.pictorial&lt;br&gt;
com.mediatek.atmwifimeta&lt;br&gt;
com.mediatek.mdmconfig&lt;br&gt;
com.oppo.partnerbrowsercustomizations&lt;br&gt;
com.oppo.quicksearchbox&lt;/code&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>oppo</category>
      <category>mobile</category>
      <category>debloat</category>
    </item>
    <item>
      <title>Debloat Samsung A50</title>
      <dc:creator>skidee</dc:creator>
      <pubDate>Sat, 22 Nov 2025 17:46:45 +0000</pubDate>
      <link>https://dev.to/skidee/debloat-samsung-a50-17e7</link>
      <guid>https://dev.to/skidee/debloat-samsung-a50-17e7</guid>
      <description>&lt;p&gt;This is the list of packages that you can remove safely.&lt;br&gt;
after 2 months of usage after debloat, my device is working totally fine&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; setup the debloater &lt;a href="https://beebom.com/how-remove-bloatware-android-phone" rel="noopener noreferrer"&gt;https://beebom.com/how-remove-bloatware-android-phone&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; select and remove the following packages&lt;/p&gt;

&lt;p&gt;&lt;code&gt;com.android.chrome&lt;br&gt;
com.android.dreams.phototable&lt;br&gt;
com.android.providers.partnerbookmarks&lt;br&gt;
com.aura.oobe.samsung&lt;br&gt;
com.dsi.ant.plugins.antplus&lt;br&gt;
com.dsi.ant.sample.acquirechannels&lt;br&gt;
com.facebook.appmanager&lt;br&gt;
com.facebook.services&lt;br&gt;
com.facebook.system&lt;br&gt;
com.google.android.apps.tachyon&lt;br&gt;
com.google.android.feedback&lt;br&gt;
com.google.android.gms.location.history&lt;br&gt;
com.google.android.googlequicksearchbox&lt;br&gt;
com.google.android.onetimeinitializer&lt;br&gt;
com.google.android.printservice.recommendation&lt;br&gt;
com.google.android.projection.gearhead&lt;br&gt;
com.google.ar.core&lt;br&gt;
com.hiya.star&lt;br&gt;
com.knox.vpn.proxyhandler&lt;br&gt;
com.microsoft.appmanager&lt;br&gt;
com.opera.max.preinstall&lt;br&gt;
com.samsung.android.aircommandmanager&lt;br&gt;
com.samsung.android.app.camera.sticker.facearavatar.preload&lt;br&gt;
com.samsung.android.app.clipboardedge&lt;br&gt;
com.samsung.android.app.cocktailbarservice&lt;br&gt;
com.samsung.android.app.reminder&lt;br&gt;
com.samsung.android.app.routines&lt;br&gt;
com.samsung.android.app.settings.bixby&lt;br&gt;
com.samsung.android.app.simplesharing&lt;br&gt;
com.samsung.android.app.spage&lt;br&gt;
com.samsung.android.app.taskedge&lt;br&gt;
com.samsung.android.app.tips&lt;br&gt;
com.samsung.android.app.watchmanagerstub&lt;br&gt;
com.samsung.android.arzone&lt;br&gt;
com.samsung.android.bixby.agent&lt;br&gt;
com.samsung.android.bixby.agent.dummy&lt;br&gt;
com.samsung.android.bixby.service&lt;br&gt;
com.samsung.android.bixby.wakeup&lt;br&gt;
com.samsung.android.bixbyvision.framework&lt;br&gt;
com.samsung.android.dynamiclock&lt;br&gt;
com.samsung.android.easysetup&lt;br&gt;
com.samsung.android.fmm&lt;br&gt;
com.samsung.android.game.gamehome&lt;br&gt;
com.samsung.android.game.gametools&lt;br&gt;
com.samsung.android.icecone&lt;br&gt;
com.samsung.android.kidsinstaller&lt;br&gt;
com.samsung.android.knox.analytics.uploader&lt;br&gt;
com.samsung.android.knox.attestation&lt;br&gt;
com.samsung.android.livestickers&lt;br&gt;
com.samsung.android.mateagent&lt;br&gt;
com.samsung.android.mdm&lt;br&gt;
com.samsung.android.mdx.kit&lt;br&gt;
com.samsung.android.net.wifi.wifiguider&lt;br&gt;
com.samsung.android.networkdiagnostic&lt;br&gt;
com.samsung.android.privateshare&lt;br&gt;
com.samsung.android.rubin.app&lt;br&gt;
com.samsung.android.samsungpass&lt;br&gt;
com.samsung.android.samsungpassautofill&lt;br&gt;
com.samsung.android.samsungpositioning&lt;br&gt;
com.samsung.android.scloud&lt;br&gt;
com.samsung.android.sdk.handwriting&lt;br&gt;
com.samsung.android.service.peoplestripe&lt;br&gt;
com.samsung.android.setupindiaservicestnc&lt;br&gt;
com.samsung.android.smartcallprovider&lt;br&gt;
com.samsung.android.spaymini&lt;br&gt;
com.samsung.android.stickercenter&lt;br&gt;
com.samsung.android.svcagent&lt;br&gt;
com.samsung.android.svoiceime&lt;br&gt;
com.samsung.android.visionintelligence&lt;br&gt;
com.samsung.knox.securefolder&lt;br&gt;
com.samsung.rcs&lt;br&gt;
com.samsung.storyservice&lt;br&gt;
com.sec.android.app.chromecustomizations&lt;br&gt;
com.sec.android.app.quicktool&lt;br&gt;
com.sec.android.app.ringtoneBR&lt;br&gt;
com.sec.android.diagmonagent&lt;br&gt;
com.sec.android.preloadinstaller&lt;br&gt;
com.sec.android.widgetapp.easymodecontactswidget&lt;/code&gt;&lt;/p&gt;

</description>
      <category>debloat</category>
      <category>android</category>
      <category>samsung</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Set Up Shadcn Canary with Tailwind CSS 4 in a React Vite Project (JavaScript Only)</title>
      <dc:creator>skidee</dc:creator>
      <pubDate>Sun, 16 Feb 2025 09:20:57 +0000</pubDate>
      <link>https://dev.to/skidee/set-up-shadcn-canary-with-tailwind-css-4-in-a-react-vite-project-javascript-only-3hof</link>
      <guid>https://dev.to/skidee/set-up-shadcn-canary-with-tailwind-css-4-in-a-react-vite-project-javascript-only-3hof</guid>
      <description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;create a react project using vite:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm create vite@latest
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;(choose &lt;strong&gt;React&lt;/strong&gt; and then &lt;strong&gt;JavaScript&lt;/strong&gt; in options)&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;install tailwind css&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install tailwindcss @tailwindcss/vite
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;(installs tailwind css v4 by default)&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;add the "tailwind plugin", "resolve" and "path" in the &lt;code&gt;vite.config.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;tailwindcss&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@tailwindcss/vite&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;react&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@vitejs/plugin-react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&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="s2"&gt;vite&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;react&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nf"&gt;tailwindcss&lt;/span&gt;&lt;span class="p"&gt;()],&lt;/span&gt;
  &lt;span class="na"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;alias&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./src&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="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

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

&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;import tailwind at the top of &lt;code&gt;src/index.css&lt;/code&gt; :&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tailwindcss&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;create a file called &lt;code&gt;jsconfig.json&lt;/code&gt; in the root directory&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;compilerOptions&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;baseUrl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;paths&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/*&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./src/*&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;install shadcn canary&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx shadcn@canary init
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;i chose &lt;strong&gt;“zinc”&lt;/strong&gt;, then &lt;strong&gt;“yes”&lt;/strong&gt; for css variables, and then &lt;strong&gt;“use —force”&lt;/strong&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%2Fau26jnnbu6e5egl7u2si.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%2Fau26jnnbu6e5egl7u2si.png" alt="Image description" width="718" height="496"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;checkout the &lt;a href="https://www.shadcndesign.com/blog/difference-between-default-and-new-york-style-in-shadcn-ui" rel="noopener noreferrer"&gt;difference between &lt;strong&gt;Default&lt;/strong&gt; and &lt;strong&gt;New York&lt;/strong&gt; theme in shadcn&lt;/a&gt; and &lt;a href="https://ui.shadcn.com/colors" rel="noopener noreferrer"&gt;colors&lt;/a&gt; it provides.    &lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;now select &lt;strong&gt;“use —force”&lt;/strong&gt; whenever u install a component&lt;br&gt;
 example: &lt;code&gt;npx shadcn@canary add button&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;make sure to replace &lt;code&gt;@latest&lt;/code&gt; with &lt;code&gt;@canary&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;src/App.jsx&lt;/code&gt; :&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
   &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Button&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;./components/ui/button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

   &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&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="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
         &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Button&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
       &lt;span class="p"&gt;&amp;lt;/&amp;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;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;do &lt;code&gt;npm run dev&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%2F2aoli405ysbe9o4udpsn.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%2F2aoli405ysbe9o4udpsn.png" alt="Image description" width="482" height="174"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s how you install and configure Shadcn Canary with Tailwind CSS 4 in a React Vite JavaScript project without TypeScript. Whether you were searching for "How to install Shadcn with Tailwind CSS 4 in a React Vite project (No TypeScript)" or "Shadcn Canary setup with Tailwind CSS 4 and Vite in a React project (JavaScript only)," this guide covers everything you need to get started.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>shadcn</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to use Shadcn with React (JavaScript, No TypeScript)</title>
      <dc:creator>skidee</dc:creator>
      <pubDate>Sun, 16 Feb 2025 09:01:10 +0000</pubDate>
      <link>https://dev.to/skidee/how-to-use-shadcn-with-react-javascript-no-typescript-189i</link>
      <guid>https://dev.to/skidee/how-to-use-shadcn-with-react-javascript-no-typescript-189i</guid>
      <description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;create a react project using vite:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm create vite@latest
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;(choose &lt;strong&gt;React&lt;/strong&gt; and then &lt;strong&gt;JavaScript&lt;/strong&gt; in options)&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;we'll use &lt;strong&gt;tailwind 3.4.1&lt;/strong&gt; coz &lt;strong&gt;tailwind v4 is not properly compatible&lt;/strong&gt; with shadcn yet:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -D tailwindcss@3.4.1 postcss autoprefixer`
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;initialize tailwind config:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx tailwindcss init -p
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;at the top of &lt;code&gt;index.css&lt;/code&gt; add these directives:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;tailwind&lt;/span&gt; &lt;span class="nx"&gt;base&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;tailwind&lt;/span&gt; &lt;span class="nx"&gt;components&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;tailwind&lt;/span&gt; &lt;span class="nx"&gt;utilities&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;edit &lt;code&gt;tailwind.config.js&lt;/code&gt; and make it look like this:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="cm"&gt;/** @type {import('tailwindcss').Config} */&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./index.html&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./src/**/*.{ts,tsx,js,jsx}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;extend&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="na"&gt;plugins&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;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;create a &lt;code&gt;jsconfig.json&lt;/code&gt; file in root directory of project and paste this:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;compilerOptions&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;baseUrl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;paths&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/*&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./src/*&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="p"&gt;}&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;install shadcn&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx shadcn@latest init
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;(i chose &lt;strong&gt;“new york”&lt;/strong&gt;, then &lt;strong&gt;“zinc”&lt;/strong&gt; and then &lt;strong&gt;“use —force”&lt;/strong&gt; option)&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;checkout the &lt;a href="https://www.shadcndesign.com/blog/difference-between-default-and-new-york-style-in-shadcn-ui" rel="noopener noreferrer"&gt;difference between &lt;strong&gt;Default&lt;/strong&gt; and &lt;strong&gt;New York&lt;/strong&gt; theme in shadcn&lt;/a&gt; and &lt;a href="https://ui.shadcn.com/colors" rel="noopener noreferrer"&gt;colors&lt;/a&gt; it provides.    &lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;edit the &lt;code&gt;vite.config.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;react&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@vitejs/plugin-react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&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="s2"&gt;vite&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;react&lt;/span&gt;&lt;span class="p"&gt;()],&lt;/span&gt;
  &lt;span class="na"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;alias&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./src&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="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

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

&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;now u can install shadcn components and use them&lt;/p&gt;

&lt;p&gt;select &lt;strong&gt;“use —force”&lt;/strong&gt; whenever u install a component&lt;/p&gt;

&lt;p&gt;preview:&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%2Fh77kqnfxsk1z5pyea19x.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%2Fh77kqnfxsk1z5pyea19x.png" alt="Image description" width="619" height="279"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;example usage:&lt;br&gt;&lt;br&gt;
&lt;code&gt;src/App.jsx&lt;/code&gt; :&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Button&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;./components/ui/button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&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="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
     &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Button&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&amp;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;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;

&lt;/code&gt;&lt;/pre&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%2F2aoli405ysbe9o4udpsn.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%2F2aoli405ysbe9o4udpsn.png" alt="Image description" width="482" height="174"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s how you install and use Shadcn in a React project (JavaScript only, No TypeScript). Whether you were searching for "How to use Shadcn with React (JavaScript, No TypeScript)" or "Set up Shadcn in a React project without TypeScript," this guide covers everything you need to get started.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Weather widget / component in Next.js</title>
      <dc:creator>skidee</dc:creator>
      <pubDate>Tue, 16 Jul 2024 12:23:30 +0000</pubDate>
      <link>https://dev.to/skidee/weather-widget-component-in-nextjs-3kgo</link>
      <guid>https://dev.to/skidee/weather-widget-component-in-nextjs-3kgo</guid>
      <description>&lt;h2&gt;
  
  
  &lt;a href="https://weather-widget-in-next-js.vercel.app/" rel="noopener noreferrer"&gt;Dynamic Weather Widget&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Follow these steps to integrate a dynamic weather widget into your Next.js project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create an API Route
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Inside your &lt;code&gt;app&lt;/code&gt; folder, create a new folder named &lt;code&gt;api&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Inside the &lt;code&gt;api&lt;/code&gt; folder, create a subfolder for your weather route (e.g., &lt;code&gt;weather&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Add a file named &lt;code&gt;route.js&lt;/code&gt; inside the &lt;code&gt;weather&lt;/code&gt; folder.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can find the code for &lt;code&gt;route.js&lt;/code&gt; &lt;a href="https://github.com/HeySkidee/weather-widget-in-next.js/blob/main/app/api/weather/route.js" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Make sure to change the name of the city in the code as needed:&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%2Ftqjfs9m2j49epo45jee7.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%2Ftqjfs9m2j49epo45jee7.png" alt="City Name Change" width="455" height="32"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Add the Environment Variable
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;a href="https://home.openweathermap.org/users/sign_up" rel="noopener noreferrer"&gt;OpenWeatherMap&lt;/a&gt; website, create an account, and navigate to the &lt;strong&gt;My API keys&lt;/strong&gt; section in your profile to generate an API key.&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%2Fgithub.com%2Fuser-attachments%2Fassets%2F424a3b07-d985-409e-90f9-a31ff98f6b76" 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%2Fgithub.com%2Fuser-attachments%2Fassets%2F424a3b07-d985-409e-90f9-a31ff98f6b76" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It might take a few minutes for the API key to activate and start working.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a file named &lt;code&gt;.env&lt;/code&gt; in your project folder and add the environment variable with your API key:&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%2F6owptkyjpt1dspx3kufb.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%2F6owptkyjpt1dspx3kufb.png" alt="Add Environment Variable" width="449" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are hosting the project on Vercel:&lt;br&gt;
  Add the environment variable during deployment, or if the project is already deployed, add it through the project dashboard&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2Fe92a2c17-ec36-439e-9dd4-94ec01e66eef" 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%2Fgithub.com%2Fuser-attachments%2Fassets%2Fe92a2c17-ec36-439e-9dd4-94ec01e66eef" width="800" height="618"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Create a Weather Component
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create a folder named &lt;code&gt;components&lt;/code&gt; in your project folder.&lt;/li&gt;
&lt;li&gt;Inside the &lt;code&gt;components&lt;/code&gt; folder, create a file named &lt;code&gt;Weather.js&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add the code from &lt;a href="https://github.com/HeySkidee/weather-widget-in-next.js/blob/main/components/Weather.js" rel="noopener noreferrer"&gt;here&lt;/a&gt; to &lt;code&gt;Weather.js&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install the dependencies by running the following command in project folder terminal:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="nx"&gt;swr&lt;/span&gt; &lt;span class="nx"&gt;framer&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;motion&lt;/span&gt; &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;fortawesome&lt;/span&gt;&lt;span class="sr"&gt;/react-fontawesome @fortawesome/&lt;/span&gt;&lt;span class="nx"&gt;free&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;solid&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;svg&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;icons&lt;/span&gt; &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;fortawesome&lt;/span&gt;&lt;span class="sr"&gt;/fontawesome-svg-cor&lt;/span&gt;&lt;span class="err"&gt;e
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Import and Use the Weather Component
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Import the &lt;code&gt;Weather&lt;/code&gt; component in the file where you want to display the widget.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Weather&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;./components/Weather&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Add the &lt;code&gt;Weather&lt;/code&gt; component in your JSX:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Weather&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&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%2Fs7nk1025sii7hz6xkpbg.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%2Fs7nk1025sii7hz6xkpbg.png" alt="Import Weather Component" width="434" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The weather widget should now be integrated and look similar to 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%2Fgithub.com%2Fuser-attachments%2Fassets%2Fa182da38-49c6-453c-b179-1799116da369" 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%2Fgithub.com%2Fuser-attachments%2Fassets%2Fa182da38-49c6-453c-b179-1799116da369" width="468" height="32"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's just straight text, no css around it.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>weather</category>
      <category>webcomponents</category>
    </item>
    <item>
      <title>Markdown file Rendering in Next.js</title>
      <dc:creator>skidee</dc:creator>
      <pubDate>Fri, 16 Feb 2024 19:30:44 +0000</pubDate>
      <link>https://dev.to/skidee/markdown-file-rendering-in-nextjs-4nhb</link>
      <guid>https://dev.to/skidee/markdown-file-rendering-in-nextjs-4nhb</guid>
      <description>&lt;p&gt;First I created the website using &lt;code&gt;npx create-next-app&lt;/code&gt; (with all default options)&lt;/p&gt;

&lt;p&gt;then installed marked by running &lt;code&gt;npm install marked&lt;/code&gt; in the project directory&lt;/p&gt;

&lt;p&gt;then added a README.md file inside public folder &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%2Fvdwb23hwu0rwy7kjlqds.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%2Fvdwb23hwu0rwy7kjlqds.png" alt="Image description" width="209" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;(I tried keeping the readme file in other locations but it didn't worked even after writing the correct path)&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The code for rendering the md file:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"use client"
import React, { useState, useEffect } from "react";
import { marked } from 'marked';
import '@/app/Bookmarks/styles.css'

const Bookmarks = () =&amp;gt; {
  const [readmeContent, setReadmeContent] = useState("");

  useEffect(() =&amp;gt; {
    const fetchReadme = async () =&amp;gt; {
      try {
        const response = await fetch("/README.md");

        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }

        const textContent = await response.text();
        const parsedContent = marked(textContent);

        setReadmeContent(parsedContent);
      } catch (error) {
        console.error("Error fetching README.md:", error);
      }
    };

    fetchReadme();
  }, []);

  return (
    &amp;lt;&amp;gt;
      &amp;lt;div className="mx-auto py-16"&amp;gt;
        &amp;lt;p className="text-start text-5xl px-11"&amp;gt;Read / Watch Laters&amp;lt;/p&amp;gt;
      &amp;lt;/div&amp;gt;

      &amp;lt;div className="px-11 mb-10"&amp;gt;
        &amp;lt;hr className="px-10 w-3/3 mb-10 "&amp;gt;&amp;lt;/hr&amp;gt;
            {/* Render the parsed Markdown content with styling */}
            &amp;lt;div   
            dangerouslySetInnerHTML={{ __html: readmeContent }}   
            className="markdown"&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/&amp;gt;
  );
};

export default Bookmarks;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;since I created a separate CSS file for this page, I linked it by writing &lt;code&gt;import '@/app/Bookmarks/styles.css'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;but if you are writing the CSS in globals.css file, which is inside app folder, then the path will be &lt;code&gt;import '@/app/globals.css'&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  CSS for styling the links, headings, text etc.:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@tailwind base;
@tailwind components;
@tailwind utilities;

body {
  background-color: black;
  color: white;
}

.markdown {
  @apply space-y-4; /* Add vertical space between elements */
}

/* headings */
.markdown h1 {
  @apply text-5xl font-bold; 
}

.markdown h2 {
  @apply text-3xl font-semibold; 
}

.markdown h3 {
  @apply text-2xl font-semibold; 
}

.markdown h4 {
  @apply text-xl font-semibold; 
}

/* links */
.markdown a {
  @apply text-blue-500; 
}

/* paragraphs */
.markdown p {
  @apply leading-relaxed; 
}

/* blockquotes */
.markdown blockquote {
  @apply bg-gray-100 border-l-4 border-blue-500 px-4 py-3 my-4; 
}

/* code blocks */
.markdown pre {
  @apply bg-gray-800 text-gray-200 p-6 rounded-md; 
}

/* horizontal rules */
.markdown hr {
  @apply border-t-2 border-gray-300 my-8; 
}

/* tables */
.markdown table {
  @apply table-auto border-collapse border border-gray-300; 
}

/* table headers */
.markdown th {
  @apply p-4 border border-gray-300 bg-gray-200 font-semibold; 
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;there are better ways to do styling of markdown content using tailwind but I'm going with this method for now. &lt;/p&gt;

&lt;p&gt;do let me know in the comments if there are simpler and efficient methods for it.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>markdown</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Make Linux Mint terminal look like Ubuntu terminal</title>
      <dc:creator>skidee</dc:creator>
      <pubDate>Fri, 22 Sep 2023 17:25:16 +0000</pubDate>
      <link>https://dev.to/skidee/make-linux-mint-terminal-look-like-ubuntu-terminal-34he</link>
      <guid>https://dev.to/skidee/make-linux-mint-terminal-look-like-ubuntu-terminal-34he</guid>
      <description>&lt;p&gt;Here is how to make linux mint terminal look like GNOME terminal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On top left of your terminal go to &lt;strong&gt;Edit → Preferences&lt;/strong&gt;
&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%2Fhrj87r9joo7qduzc3juv.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%2Fhrj87r9joo7qduzc3juv.png" alt="default terminal" width="800" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy these settings:&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%2Fxzx5zimixud4sg1tbn08.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%2Fxzx5zimixud4sg1tbn08.png" alt="custom settings" width="800" height="663"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Color code for the purple background: &lt;code&gt;#2C001E&lt;/code&gt;
&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%2Fuz2i3dgpzvxq0c6l3r97.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%2Fuz2i3dgpzvxq0c6l3r97.png" alt="terminal background color" width="800" height="164"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Final result:&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%2Fw0ueeuwtdzkx7q6bnqi1.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%2Fw0ueeuwtdzkx7q6bnqi1.png" alt="Ubuntu GNOME terminal" width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>ubuntu</category>
      <category>linuxmint</category>
      <category>gnome</category>
    </item>
    <item>
      <title>My Experience with HacktoberFest 2020</title>
      <dc:creator>skidee</dc:creator>
      <pubDate>Sat, 31 Oct 2020 11:00:55 +0000</pubDate>
      <link>https://dev.to/skidee/my-experience-with-hacktoberfest-56mo</link>
      <guid>https://dev.to/skidee/my-experience-with-hacktoberfest-56mo</guid>
      <description>&lt;h3&gt;
  
  
  🌴 About me
&lt;/h3&gt;

&lt;p&gt;Hi I'm Harshit, a self learning computer science beginner who likes creating stuff. 🐢&lt;br&gt;
I joined this beautiful Dev community, It is filled with awesome resources and people who write articles and I also want to share my experiences, cool resources and solutions of some problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  📜 Background
&lt;/h3&gt;

&lt;p&gt;I'm new to this open source community, have been working on some opensource projects since july 2020 :)&lt;/p&gt;

&lt;h3&gt;
  
  
  🐇 Progress
&lt;/h3&gt;

&lt;p&gt;My brother advised me to start learning about open source contribution and he was the person who shared me this awesome HacktoberFest opportunity...and i actually learned a lot about open source stuff and also completed the hacktoberfest.  &lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ Contributions
&lt;/h3&gt;

&lt;p&gt;since I'm a beginner I started with some basics (beginner friendly repos)...here is the list of contributions I have made :&lt;/p&gt;

&lt;h4&gt;
  
  
  1. &lt;a href="https://github.com/do-community/cloud_haiku" rel="noopener noreferrer"&gt;cloud haiku&lt;/a&gt; :
&lt;/h4&gt;

&lt;p&gt;This repository is made by digital ocean organisation where you have to write a unique haiku by yourself.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. &lt;a href="https://github.com/BitByte-TPC/first-bit" rel="noopener noreferrer"&gt;First bit&lt;/a&gt; :
&lt;/h4&gt;

&lt;p&gt;First-Bit is also a beginner friendly repo which teaches you the fork -&amp;gt; clone -&amp;gt; edit -&amp;gt; PR workflow.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. &lt;a href="https://github.com/codeforcauseorg/pledge" rel="noopener noreferrer"&gt;code for cause&lt;/a&gt; :
&lt;/h4&gt;

&lt;p&gt;Another beginner friendly repo to take pledge to code for cause.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. &lt;a href="https://github.com/firstcontributions/first-contributions" rel="noopener noreferrer"&gt;First Contributions&lt;/a&gt; :
&lt;/h4&gt;

&lt;p&gt;A repo with basic tutorial on how to get started with opensource contribution.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎀 Reflections
&lt;/h3&gt;

&lt;p&gt;Overall the experience was nice and exciting. This was my first time participating in hacktoberfest, It helped me a lot in expanding my knowledge about opensource. I'll participate again next year and will try to do some more high quality contributions. &lt;/p&gt;

</description>
      <category>hacktoberfest</category>
    </item>
  </channel>
</rss>
