<?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: goldenekpendu</title>
    <description>The latest articles on DEV Community by goldenekpendu (@goldenekpendu).</description>
    <link>https://dev.to/goldenekpendu</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%2F766088%2Fc62583cf-8d40-4bca-991c-be3a8caab51d.png</url>
      <title>DEV Community: goldenekpendu</title>
      <link>https://dev.to/goldenekpendu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/goldenekpendu"/>
    <language>en</language>
    <item>
      <title>Stop Mixing Them Up: Tailwind’s Space vs Gap Explained</title>
      <dc:creator>goldenekpendu</dc:creator>
      <pubDate>Sat, 04 Oct 2025 07:23:40 +0000</pubDate>
      <link>https://dev.to/goldenekpendu/stop-mixing-them-up-tailwinds-space-vs-gap-explained-44m7</link>
      <guid>https://dev.to/goldenekpendu/stop-mixing-them-up-tailwinds-space-vs-gap-explained-44m7</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;a href="https://medium.com/@theambi/space-vs-gap-tailwind-css-explained-0f21fdc0fbc4" rel="noopener noreferrer"&gt;Originally published on Medium&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Tailwind is an awesome resource when styling web applications. It’s fast, lightweight, and easy to use once you get used to the class-first syntax. But what do you use when you need to add some spacing between items — &lt;strong&gt;gap&lt;/strong&gt; or &lt;strong&gt;space&lt;/strong&gt;?&lt;br&gt;&lt;br&gt;
Let’s get into it.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;What do I use?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To tackle this question, let’s create a scenario. We’ll be using three boxes represented by &lt;code&gt;div&lt;/code&gt;s in an HTML document.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;section&amp;gt;&lt;/span&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;"w-48 h-48 bg-slate-300"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 1&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&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;"w-48 h-48 bg-slate-400"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 2&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&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;"w-48 h-48 bg-slate-500"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 3&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, there are three boxes we need to add some spacing to. Normally, the way to go about this would be to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use a flex layout on the &lt;code&gt;section&lt;/code&gt; parent element and add a &lt;code&gt;gap&lt;/code&gt; value to create space.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use a margin on each box.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But what happens when there’s no need to use a flex layout or margin? What do we use?&lt;/p&gt;

&lt;p&gt;That’s where the space Tailwind class comes in. Picture it as what &lt;code&gt;gap&lt;/code&gt; is capable of in a grid or flex layout, but without the flex/grid. So let's see a side-by-side comparison.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- with tailwind space --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"space-5"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&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;"w-48 h-48 bg-slate-300"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 1&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&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;"w-48 h-48 bg-slate-400"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 2&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&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;"w-48 h-48 bg-slate-500"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 3&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&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 xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- with tailwind gap --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"flex gap-5"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&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;"w-48 h-48 bg-slate-300"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 1&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&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;"w-48 h-48 bg-slate-400"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 2&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&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;"w-48 h-48 bg-slate-500"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 3&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the first code block, using Tailwind &lt;code&gt;space&lt;/code&gt;creates spacing between the items in the section element. The main difference is that when using &lt;code&gt;gap&lt;/code&gt;, a flex or grid layout is required, whereas when using &lt;code&gt;space&lt;/code&gt;, it's not.&lt;/p&gt;

&lt;p&gt;This is something I discovered earlier when exploring more of what Tailwind CSS can do in my projects.&lt;/p&gt;




&lt;p&gt;Hopefully, this article has helped to simplify the &lt;strong&gt;gap vs. space&lt;/strong&gt; concept in Tailwind. For more detailed documentation, please visit the official Tailwind docs: &lt;a href="https://tailwindcss.com/docs/gap" rel="noopener noreferrer"&gt;&lt;em&gt;Tailwind gap&lt;/em&gt;&lt;/a&gt; &lt;em&gt;vs.&lt;/em&gt; &lt;a href="https://tailwindcss.com/docs/margin#adding-space-between-children" rel="noopener noreferrer"&gt;&lt;em&gt;Tailwind space&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks for reading, and have a great day.&lt;br&gt;&lt;br&gt;
Ciao 👋&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tailwindcss</category>
      <category>frontend</category>
      <category>css</category>
    </item>
    <item>
      <title>The @grok craze: What’s behind the hype?</title>
      <dc:creator>goldenekpendu</dc:creator>
      <pubDate>Sat, 13 Sep 2025 20:34:56 +0000</pubDate>
      <link>https://dev.to/goldenekpendu/the-grok-craze-whats-behind-the-hype-559g</link>
      <guid>https://dev.to/goldenekpendu/the-grok-craze-whats-behind-the-hype-559g</guid>
      <description>&lt;h3&gt;
  
  
  &lt;em&gt;“ &lt;code&gt;@grok&lt;/code&gt; why? &lt;code&gt;@grok&lt;/code&gt; is this true? &lt;code&gt;@grok&lt;/code&gt; who did it better? ”&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;If you’ve been on Twitter (X) lately, you’ve probably seen comments starting with &lt;code&gt;@grok&lt;/code&gt;. It’s the new way people fact-check tweets. &lt;strong&gt;&lt;em&gt;For anyone unfamiliar, Grok is a generative AI chatbot built by Elon Musk’s company, xAI.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’ve noticed Grok getting better, especially at understanding context in threads. It even picks up details from videos and images without users spelling things out — and honestly, that’s impressed me more than once.&lt;/p&gt;

&lt;p&gt;But here’s the issue: people lean on it a little too much. You’ll see posts about trending events with well-known facts, yet someone still tags &lt;code&gt;@grok&lt;/code&gt;. For some, it feels like it’s replaced their own reasoning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Ever caught yourself double-checking something you already knew, just because an AI might say it differently?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When Grok gets it right, it’s amazing. But it’s not perfect — and putting blind trust in any AI is risky.&lt;/p&gt;

&lt;p&gt;Of course, this isn’t just about Grok. Tools like Perplexity and ChatGPT are seeing the same trend. More people are treating AI like fact-checkers, therapists, and even friends. I use ChatGPT myself to explore ideas, but I don’t take its word as final.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;And be honest — have you ever used an AI chatbot just to ‘vent’ or see if it agrees with you?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So, here’s the question: &lt;strong&gt;&lt;em&gt;are we relying too much on AI, too fast?&lt;/em&gt;&lt;/strong&gt; And what can we do to keep that balance?&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts in the comments.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Ciao&lt;/em&gt; 👋&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@theambi/the-grok-why-epidemic-4b7fc11c1500" rel="noopener noreferrer"&gt;&lt;em&gt;Read the original article on Medium&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>socialmedia</category>
      <category>criticalthinking</category>
      <category>xai</category>
    </item>
    <item>
      <title>What's next after the Bolt hackathon</title>
      <dc:creator>goldenekpendu</dc:creator>
      <pubDate>Fri, 01 Aug 2025 03:50:40 +0000</pubDate>
      <link>https://dev.to/goldenekpendu/whats-next-after-the-bolt-hackathon-167o</link>
      <guid>https://dev.to/goldenekpendu/whats-next-after-the-bolt-hackathon-167o</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/wlh"&gt;World's Largest Hackathon Writing Challenge&lt;/a&gt;: After the Hack.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you haven’t read my previous article on my experience during the world’s largest hackathon by Bolt, you can do so &lt;a href="https://dev.to/goldenekpendu/my-journey-building-with-bolt-during-the-worlds-largest-hackathon-2p5b"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It’s been a journey, and like most participants in this hackathon, I plan to continue working on my project, &lt;a href="https://invoyceez.netlify.app/" rel="noopener noreferrer"&gt;Invoyceez&lt;/a&gt;, and to integrate the core features of the application. Some of the features I intend to add include single and batch invoice uploads, auto-reminders when an invoice is about to expire, and possibly a feature to create invoices via voice commands.&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%2Flcilm37qufrmbga1civg.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%2Flcilm37qufrmbga1civg.png" alt="Invoyceez app by Golden Ekpendu" width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ll also be redesigning the UI, which I’m currently working on in Figma. Once that’s done, I’ll apply the updated UI to the app.&lt;/p&gt;

&lt;p&gt;After completing these steps, I’ll begin testing with users. The goal of this application isn’t to be expensive—I want it to be accessible to freelancers and small business owners at an affordable price, while supporting them in creating and tracking their branded invoices.&lt;/p&gt;

&lt;p&gt;Oh, and I also plan to add a few updates to &lt;a href="https://playmyfeelz.netlify.app/" rel="noopener noreferrer"&gt;PlayMyFeelz&lt;/a&gt;, the app that matches a user’s mood to a Spotify playlist.&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%2Fkmn6lqkxl52fcrgk6880.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%2Fkmn6lqkxl52fcrgk6880.png" alt="Play my feelz mood music matching app by Golden Ekpendu" width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Skills Gained
&lt;/h2&gt;

&lt;p&gt;Throughout the hackathon, I’ve been experimenting with different prompting techniques to explore the best ways for an AI tool like Bolt to capture my ideas. I’ll continue using Bolt to rapidly generate mock-ups for product ideas.&lt;/p&gt;

&lt;p&gt;I also used Supabase for the first time during this hackathon! I had been considering it for a future project, and I’m glad I finally gave it a go. As the line between frontend and full-stack development blurs with vibe coding, this might just be the beginning of my exploration into more full-stack projects. How exciting!&lt;/p&gt;

&lt;h2&gt;
  
  
  Career Changes
&lt;/h2&gt;

&lt;p&gt;The frontend development landscape is evolving, and with AI being adopted across teams and industries, it’s important for me to explore how I can leverage it in my projects and career. I’m genuinely optimistic about the future. I currently work as a graphic designer, but coding has been something I’ve admired since childhood.&lt;/p&gt;

&lt;p&gt;With brilliant tools like Bolt, I can now blend these two passions to create meaningful products.&lt;/p&gt;

&lt;p&gt;These are just a few things I plan to focus on now that the hackathon has ended. I’m grateful to Bolt and the sponsors for the opportunity to explore vibe coding for the first time. I’m confident this will grow into something far greater.&lt;/p&gt;

&lt;p&gt;Thanks for reading my little article.&lt;br&gt;&lt;br&gt;
&lt;em&gt;Ciao&lt;/em&gt; 👋&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>wlhchallenge</category>
      <category>career</category>
      <category>entrepreneurship</category>
    </item>
    <item>
      <title>My journey building with Bolt during the World's Largest Hackathon</title>
      <dc:creator>goldenekpendu</dc:creator>
      <pubDate>Thu, 31 Jul 2025 07:48:40 +0000</pubDate>
      <link>https://dev.to/goldenekpendu/my-journey-building-with-bolt-during-the-worlds-largest-hackathon-2p5b</link>
      <guid>https://dev.to/goldenekpendu/my-journey-building-with-bolt-during-the-worlds-largest-hackathon-2p5b</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/wlh"&gt;World's Largest Hackathon Writing Challenge&lt;/a&gt;: Building with Bolt.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What a journey this hackathon has been! But first, let me tell you about my first encounter with Bolt.&lt;/p&gt;

&lt;p&gt;I first heard about Bolt during a Contra livestream, where the Bolt Expert Programme was announced and some experts showcased the product. It blew my mind! The idea of creating websites and applications in a fraction of the usual time was incredibly motivating.&lt;/p&gt;

&lt;p&gt;I followed Bolt on Twitter (X) and turned on all post notifications so I wouldn’t miss any updates. I was thrilled when it was announced that everyone would get a chance to try Bolt—alongside other tools—for free, during the World's Largest Hackathon.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Idea
&lt;/h2&gt;

&lt;p&gt;As soon as I saw this, I registered for the hackathon and received the builder pack (thanks so much for this, Bolt team), and began thinking of product ideas. That's how &lt;a href="https://invoyceez.netlify.app/" rel="noopener noreferrer"&gt;&lt;em&gt;Invoyceez&lt;/em&gt;&lt;/a&gt; came to life.&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%2F0r1mjm1874mxbddfcqtb.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%2F0r1mjm1874mxbddfcqtb.png" alt="A screenshot of Invoyceez homepage by Golden Ekpendu" width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For almost a year, I’d had an idea for an invoice web app that did more than just invoices, and most importantly, was built specifically for freelancers and small businesses. This was very important to me due to my own experiences working on freelance projects and creating invoices.&lt;/p&gt;

&lt;p&gt;I had also begun working on the application's user interface in Figma, though I had to wait for about two weeks before starting due to my schedule. Before I began working on my project, I bookmarked tweets from the Bolt team and other builders that highlighted project setups, prompting techniques and more. The builder/project highlight livestreams on Twitter were incredibly helpful and motivating.&lt;/p&gt;

&lt;p&gt;After redeeming my Bolt coupon code, I began with a prompt to create the essential pages for the application. Within minutes, it was done—truly amazing stuff. I then started tweaking certain elements to fine-tune the landing page (more on this later). The dashboard pages were also edited, while I kept a close eye on my token usage.&lt;/p&gt;

&lt;p&gt;There were challenges in the hackathon linked to sponsors like Supabase, RevenueCat, Expo and more. So I began adding integrations to my project, starting with Supabase. Bolt helped create schemas and tables in Supabase, based on my prompts.&lt;/p&gt;

&lt;p&gt;I’d also like to highlight a literal lifesaver in Bolt—&lt;strong&gt;the discussion feature&lt;/strong&gt;. This is a mode that allows you to chat with the platform for help or suggestions on your project, with optional actionable buttons to fix, implement, or research further. I found this tool extremely useful throughout my hackathon experience.&lt;/p&gt;

&lt;p&gt;Bolt also introduced more tokens over the final weekend—sadly, my schedule didn’t allow me to fully take advantage of this opportunity. Bolt also distributed coupons for sponsor tools. One of these was a free domain name from IONOS. I redeemed mine and applied to purchase a domain name for my application. This was an important step, as I was keen to enter the domain name challenge. Unfortunately, I received an email from the domain provider stating they couldn’t provide the desired domain. That stung 😢&lt;/p&gt;

&lt;h2&gt;
  
  
  The One-Shot Mini Challenge
&lt;/h2&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%2F8ao8le8tewm2nnef5ok8.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%2F8ao8le8tewm2nnef5ok8.png" alt="PlayMyFeelz cover image by Golden Ekpendu" width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Towards the end of the hackathon, Bolt announced a mini challenge—the One-Shot Challenge—where participants had to create something amazing using just one prompt. This was a true challenge given the numerous ideas I had, but I eventually settled on an idea called &lt;a href="https://playmyfeelz.netlify.app/" rel="noopener noreferrer"&gt;&lt;em&gt;PlayMyFeelz&lt;/em&gt;&lt;/a&gt;—an application that matches your current mood to a Spotify playlist.&lt;/p&gt;

&lt;p&gt;The main issue was integrating the Spotify API with my application, which didn’t seem viable given the constraints of a one-prompt challenge (plus the UI). So I explored other options and decided to use a few hardcoded playlists from Spotify. I asked the good ol’ ChatGPT for some help and got a few playlist links, then crafted a prompt using a UI I had previously designed in Figma just for this challenge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Submission Deadline
&lt;/h2&gt;

&lt;p&gt;I started freaking out slightly when the deadline was a day away. I was stuck on a critical part of my project—exporting the generated invoices as an image or PDF. For some reason, the JavaScript libraries I used weren’t compatible with Bolt. I tried multiple fixes, but nothing worked 😫. To top it off, I had fewer than 1 million tokens remaining!&lt;/p&gt;

&lt;p&gt;So I tried a different approach. I made some quick edits to the homepage and then spent most of my tokens trying to fix core issues (still no success). I also discovered that manually editing the files didn’t deduct tokens, which allowed me to keep experimenting—including temporarily breaking the invoice preview screen in the process.&lt;/p&gt;

&lt;p&gt;With only a few hours left, I started to panic. I even considered not submitting the project at all because it was incomplete. But in the end, I decided to submit it anyway.&lt;/p&gt;

&lt;p&gt;I learnt a lot from this hackathon and from the community. Keep an eye out for my next article, where I’ll talk more about that. Until then, thanks for reading.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ciao&lt;/em&gt; 👋&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>wlhchallenge</category>
      <category>bolt</category>
      <category>ai</category>
    </item>
    <item>
      <title>Easily overwrite the Vercel 404 page in ReactJS</title>
      <dc:creator>goldenekpendu</dc:creator>
      <pubDate>Wed, 18 Jun 2025 18:13:39 +0000</pubDate>
      <link>https://dev.to/goldenekpendu/easily-overwrite-the-vercel-404-page-in-reactjs-16p5</link>
      <guid>https://dev.to/goldenekpendu/easily-overwrite-the-vercel-404-page-in-reactjs-16p5</guid>
      <description>&lt;p&gt;I had just deployed a React application to Vercel, complete with routing and a custom 404 error page. I tested the live site in Vercel and tried visiting a non-existent route, but I couldn’t! Vercel’s default &lt;em&gt;404&lt;/em&gt; page was rendered instead of my custom component.&lt;/p&gt;

&lt;h4&gt;
  
  
  Here’s how I fixed it
&lt;/h4&gt;

&lt;p&gt;I needed to find a way to overwrite the default action by Vercel, so I conducted some research. So here’s what was happening - Vercel served its own &lt;em&gt;404&lt;/em&gt; page &lt;em&gt;before&lt;/em&gt; my React app loaded.&lt;/p&gt;

&lt;p&gt;To fix this, first create a &lt;code&gt;vercel.json&lt;/code&gt; file. Use the following code snippet in your file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"rewrites"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/(.*)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That was it! I redeployed the application, and now my &lt;em&gt;404&lt;/em&gt; component was rendered instead of the default one from Vercel.&lt;/p&gt;

&lt;p&gt;I hope this solution helped you. If so, please leave a comment below.&lt;/p&gt;

&lt;p&gt;Thanks for reading, &lt;em&gt;ciao 👋&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;P.S. If your cursor starts acting up in VS Code,&lt;/em&gt; &lt;a href="https://medium.com/@theambi/vs-code-cursor-problem-why-its-deleting-instead-of-inserting-text-fad546c6ca98" rel="noopener noreferrer"&gt;&lt;em&gt;check out this article&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>react</category>
      <category>vercel</category>
    </item>
    <item>
      <title>How to install Tailwind v4 in a Vite project</title>
      <dc:creator>goldenekpendu</dc:creator>
      <pubDate>Sat, 07 Jun 2025 03:56:00 +0000</pubDate>
      <link>https://dev.to/goldenekpendu/how-to-install-tailwind-v4-in-a-vite-project-g3d</link>
      <guid>https://dev.to/goldenekpendu/how-to-install-tailwind-v4-in-a-vite-project-g3d</guid>
      <description>&lt;p&gt;A few days ago, I created a new React project using Vite, and I intended to use Tailwind for styling. However, I ran into some issues — Tailwind just couldn’t be initialised! I used the usual command &lt;code&gt;npx tailwind init -p&lt;/code&gt;, but I got errors in my console.&lt;/p&gt;

&lt;p&gt;So here’s what I did and how you can avoid similar issues when using Tailwind in your next Vite project.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;## &lt;strong&gt;Update NodeJS and NPM&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%2Fno0fer7ifks080o6b5xr.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%2Fno0fer7ifks080o6b5xr.png" alt="Consider updating NodeJS for a smoother experience" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was the first step I took as my Node version was outdated. To check your Node version, use the command &lt;strong&gt;node -v.&lt;/strong&gt; The latest version of Node can be obtained via the &lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;official website.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For NPM update, first check your version using &lt;code&gt;npm -v&lt;/code&gt;, and to update it, use the command &lt;code&gt;npm install -g npm&lt;/code&gt;&lt;strong&gt;.&lt;/strong&gt; If you still encounter issues, let’s head onto the next step.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Use the new Vite installation guide for Tailwind&lt;/strong&gt;
&lt;/h2&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%2Ft9mtijale5qybql0i0js.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%2Ft9mtijale5qybql0i0js.png" alt="Tailwind now has a dedicated tab for installation in Vite" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since Tailwind v4, the process for installing Tailwind in a Vite project has slightly changed. The full guide can be found on &lt;a href="https://tailwindcss.com/docs/installation/using-vite" rel="noopener noreferrer"&gt;the Tailwind website&lt;/a&gt;. &lt;a href="https://tailwindcss.com/docs/installation/using-vite" rel="noopener noreferrer"&gt;&lt;/a&gt;It’s been simplified, and below are the steps.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;// Install tailwindcss via npm
npm &lt;span class="nb"&gt;install &lt;/span&gt;tailwindcss @tailwindcss/vite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// vite.config.ts &lt;/span&gt;
&lt;span class="c1"&gt;// (Configure the Vite plugin)&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="s1"&gt;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;tailwindcss&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;@tailwindcss/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;tailwindcss&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;/div&gt;



&lt;p&gt;You’d notice in the second code block that the configuration is now done in the &lt;strong&gt;vite.config.ts&lt;/strong&gt; and not the &lt;strong&gt;tailwind.config.js&lt;/strong&gt; as in earlier versions. This step is crucial in determining whether your installation is successful or not.&lt;/p&gt;




&lt;p&gt;After taking these steps, my installation was successful, and I could use Tailwind to style my application as I wanted freely.&lt;/p&gt;

&lt;p&gt;In the coming articles, I’ll be writing articles about Tailwind and how to customise themes with the &lt;strong&gt;tailwind.config.js&lt;/strong&gt; now gone in v4. If you appreciate this article, consider leaving a comment below. I’ll swiftly reply to you.&lt;/p&gt;

&lt;p&gt;Thanks for reading and have a good day. Ciao 👋&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>tailwindcss</category>
    </item>
    <item>
      <title>VS Code Cursor Problem: Why It’s Deleting Instead of Inserting Text</title>
      <dc:creator>goldenekpendu</dc:creator>
      <pubDate>Sun, 02 Feb 2025 07:52:57 +0000</pubDate>
      <link>https://dev.to/goldenekpendu/vs-code-cursor-problem-why-its-deleting-instead-of-inserting-text-134a</link>
      <guid>https://dev.to/goldenekpendu/vs-code-cursor-problem-why-its-deleting-instead-of-inserting-text-134a</guid>
      <description>&lt;p&gt;You’re in the flow state, coding up your project when &lt;em&gt;BAM&lt;/em&gt;, your cursor gets thicker than usual and starts deleting characters. How is that possible? And most importantly, how do you fix it?&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%2F75n9ygua214luyt3usi8.jpeg" 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%2F75n9ygua214luyt3usi8.jpeg" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Overtype mode in VS Code — how to toggle &amp;amp; disable it&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Visual Studio Code known simply as VSCode is a top code editor for many around the world. It’s no surprise. It’s easy to work with, has great extensions, and supports many programming languages.&lt;/p&gt;

&lt;p&gt;Now let’s go back to the scenario mentioned in the intro. What causes your cursor to change into a bulldozer, clearing characters in its path instead of modifying it?&lt;/p&gt;

&lt;p&gt;Let’s have a brief look at what’s called the &lt;strong&gt;Overtype Mode&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Overtype Mode&lt;/strong&gt; is a text editing mode where new characters replace existing ones instead of being inserted. When activated, typing a letter will overwrite the character in front of the cursor rather than pushing it forward.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So for the reason you probably clicked on the article — &lt;strong&gt; how do you fix this in VSCode?&lt;/strong&gt; It’s fairly easy. Let’s go over &lt;em&gt;3 different steps&lt;/em&gt; to stop that cursor from ruining your code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Press&lt;/strong&gt;  &lt;strong&gt;Insert Key&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%2Fxbofw51bu7xuv29vsz1c.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%2Fxbofw51bu7xuv29vsz1c.gif" width="800" height="266"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;toggle on/off ovr mode with the insert key&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simply press the Insert key on your keyboard (usually near the Backspace key).&lt;/li&gt;
&lt;li&gt;This toggles between &lt;strong&gt;Insert Mode&lt;/strong&gt; (normal typing) and &lt;strong&gt;Overtype Mode&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Check the Status Bar&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%2F7ssz7vbqxvrhn99nkc1c.jpeg" 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%2F7ssz7vbqxvrhn99nkc1c.jpeg" width="800" height="266"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;VSCode status bar with OVR mode on&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Look at the bottom right corner of VS Code.&lt;/li&gt;
&lt;li&gt;If you see &lt;strong&gt;“OVR”&lt;/strong&gt; , it means &lt;strong&gt;Overtype Mode&lt;/strong&gt; is active.&lt;/li&gt;
&lt;li&gt;Click on it to disable it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Disable Overtype Mode Permanently&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%2F1d1sy97dv7vl4sm5xkhx.jpeg" 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%2F1d1sy97dv7vl4sm5xkhx.jpeg" width="800" height="266"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;how to disable overtype mode in VSCode&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open &lt;strong&gt;Command Palette&lt;/strong&gt; (Ctrl + Shift + P or Cmd + Shift + P on Mac).&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;“Toggle Overtype Mode”&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click it to turn it off.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s that easy! Now you have control over this issue. If you found this article helpful, please share it with your fellow coders and let me know in the comments. Thank you for reading.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Ciao 👋&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>developertools</category>
      <category>coding</category>
      <category>productivity</category>
    </item>
    <item>
      <title>What happened to the constraints tab? | Figma UI3 update</title>
      <dc:creator>goldenekpendu</dc:creator>
      <pubDate>Fri, 06 Sep 2024 03:23:39 +0000</pubDate>
      <link>https://dev.to/goldenekpendu/what-happened-to-the-constraints-tab-figma-ui3-update-457a</link>
      <guid>https://dev.to/goldenekpendu/what-happened-to-the-constraints-tab-figma-ui3-update-457a</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqvbugxv1fv0602ucjjj.jpeg" 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%2Fgqvbugxv1fv0602ucjjj.jpeg" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Constraints on Figma have been useful tools when positioning elements in a frame, especially noticeable when resizing said frame. However, if you have looked closely, the Constraints section vanished after the UI3 update by Figma. &lt;em&gt;Or has it?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I’ll show you a quick way to find this now-hidden gem.&lt;/p&gt;

&lt;p&gt;With an element selected, look at the &lt;strong&gt;top right-hand properties panel, especially the Position tab&lt;/strong&gt;. You should see the usual stuff—&lt;em&gt;alignment tools&lt;/em&gt; and information about the element's &lt;em&gt;position&lt;/em&gt; and &lt;em&gt;angle&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ik6pjbpk90zhnjqobjz.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%2F8ik6pjbpk90zhnjqobjz.png" width="371" height="212"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;a visual of the new constraints position in Figma&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now look very closely to the &lt;strong&gt;right of the X and Y values&lt;/strong&gt;. You should see a rectangle next to it. Click on it, and voila, you found the Constraints section!&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%2Fml1vuyyhjmds83hy36sz.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%2Fml1vuyyhjmds83hy36sz.png" width="248" height="219"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;active constraints section in Figma&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  My thoughts
&lt;/h3&gt;

&lt;p&gt;I am a huge fan of the visual changes after the UI update; things look better and more intuitive. However, some core tools we use have been hidden for a more minimalist look, which may cause some user issues.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;TLDR: To access the Constraints section, select an element in your frame. On the right-hand properties panel, you should see a tiny shape next to the position values. Click on that and you’ve got back constraints.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let me know what you think about the new update. &lt;strong&gt;Are there some tools which have been tucked away?&lt;/strong&gt; Leave a comment below.&lt;/p&gt;

&lt;p&gt;I found this useful resource from &lt;a href="https://forum.figma.com/t/problem-with-constraints-in-the-new-interface/77829" rel="noopener noreferrer"&gt;this Figma forum&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have a splendid day and happy designing!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ciao&lt;/em&gt;&lt;/p&gt;

</description>
      <category>figma</category>
      <category>ui</category>
      <category>userinterface</category>
      <category>uiuxdesign</category>
    </item>
    <item>
      <title>These Figma Shortcuts Have Improved My Workflow, You Should Try Them Too</title>
      <dc:creator>goldenekpendu</dc:creator>
      <pubDate>Tue, 14 May 2024 20:05:37 +0000</pubDate>
      <link>https://dev.to/goldenekpendu/these-figma-shortcuts-have-improved-my-workflow-you-should-try-them-too-34cc</link>
      <guid>https://dev.to/goldenekpendu/these-figma-shortcuts-have-improved-my-workflow-you-should-try-them-too-34cc</guid>
      <description>&lt;h4&gt;
  
  
  Designing interfaces in Figma can become very time-consuming, especially if it’s a large project and things must be done quickly.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8v9q75559m7z57enh8q.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8v9q75559m7z57enh8q.jpeg" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I recently came across these Figma shortcuts that have drastically improved my speed and workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Toggle between Layers and the Assets panels
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjompgg7p788vjdv9yead.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjompgg7p788vjdv9yead.gif" alt="Toggle between Layers and Assets panels in Figma" width="800" height="435"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Toggle between Layers and Assets panels in Figma&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Mousing around toggling the &lt;em&gt;Layers&lt;/em&gt; and &lt;em&gt;Assets&lt;/em&gt; panels could become repetitive and time-consuming, but there’s a faster way to do so — without moving your mouse!&lt;/p&gt;

&lt;p&gt;Just use the shortcuts &lt;strong&gt;Alt + 2&lt;/strong&gt; (or &lt;strong&gt;⌥ + 2&lt;/strong&gt; on Mac) to switch to the assets panel, and &lt;strong&gt;Alt + 1&lt;/strong&gt; ( &lt;strong&gt;⌥ + 1&lt;/strong&gt; on Mac) to switch back to the layers panel. &lt;em&gt;Quick and easy!&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Toggle between the Design and Prototype panels
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3c91voliuwa5h06s7osu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3c91voliuwa5h06s7osu.gif" alt="Toggle between Design and Prototype panels in Figma" width="800" height="435"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Toggle between Design and Prototype panels in Figma&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is almost the same as the previous example, however, you may be using this more often as you prototype your designs.&lt;/p&gt;

&lt;p&gt;So, instead of moving your mouse to the top right of your screen to switch panels, use the shortcut &lt;strong&gt;Alt + 9&lt;/strong&gt; (or &lt;strong&gt;⌥ + 9&lt;/strong&gt; on Mac) to switch to &lt;em&gt;Prototype&lt;/em&gt; and back to the &lt;em&gt;Design&lt;/em&gt; panel with &lt;strong&gt;Alt + 8&lt;/strong&gt; (or &lt;strong&gt;⌥ + 8&lt;/strong&gt; on Mac).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Note&lt;/em&gt;&lt;/strong&gt; : this can also be done using another shortcut &lt;strong&gt;Shift + E.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Easily search for saved plugins
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93qbe7xo6rhee331t8ws.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93qbe7xo6rhee331t8ws.jpeg" alt="Quick search shortcut for plugins in Figma" width="800" height="435"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Quick search shortcut for plugins in Figma&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Before knowing this shortcut to access saved plugins, I’d go to the plugins side menu, and scroll through the list until I found the one I would use. Also, when reusing the plugin, I’d repeat the same process…again.&lt;/p&gt;

&lt;p&gt;However, those days are now officially over with this shortcut. The next time you want to access your saved or recently used plugins, try &lt;strong&gt;Ctrl + /&lt;/strong&gt; (or &lt;strong&gt;⌘ + /&lt;/strong&gt; on Mac). Type in the name of your desired saved plugins and you should see them right there!&lt;/p&gt;

&lt;p&gt;For recently used plugins, use this instead: &lt;strong&gt;Alt + Ctrl + P&lt;/strong&gt; (or &lt;strong&gt;⌘ + ⌥ + P&lt;/strong&gt; on Mac).&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Align selections to any side of a frame
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8r1a7ybfodau4yg9gput.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8r1a7ybfodau4yg9gput.gif" alt="Align a selection to any side of a frame in Figma" width="800" height="435"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Align a selection to any side of a frame in Figma&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When creating frames, shapes, text and components in Figma (within a frame), there is the need to align these selections to either the left, top, right or bottom of a frame.&lt;/p&gt;

&lt;p&gt;The go-to approach is to use the alignment tools in the top right of the Design panel. However, there are faster ways to do so.&lt;/p&gt;

&lt;p&gt;If you game on a computer using a keyboard, you may be familiar with these keys: &lt;strong&gt;&lt;em&gt;W&lt;/em&gt;&lt;/strong&gt; , &lt;strong&gt;&lt;em&gt;A&lt;/em&gt;&lt;/strong&gt; , &lt;strong&gt;&lt;em&gt;S&lt;/em&gt;&lt;/strong&gt; , and  &lt;strong&gt;&lt;em&gt;D.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you don’t game, that’s alright too. Here’s how these keys help to align to any side of a frame:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Alt (&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;or&lt;/em&gt; &lt;strong&gt;⌥&lt;em&gt;) + W&lt;/em&gt;&lt;/strong&gt; — Aligns to the &lt;strong&gt;top&lt;/strong&gt; of the frame&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Alt (&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;or&lt;/em&gt; &lt;strong&gt;⌥&lt;em&gt;) + A&lt;/em&gt;&lt;/strong&gt; — Aligns to the &lt;strong&gt;left&lt;/strong&gt; of the frame&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Alt (&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;or&lt;/em&gt; &lt;strong&gt;⌥&lt;em&gt;) + S&lt;/em&gt;&lt;/strong&gt; — Aligns to the &lt;strong&gt;bottom&lt;/strong&gt; of the frame&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Alt (&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;or&lt;/em&gt; &lt;strong&gt;⌥&lt;em&gt;) + D&lt;/em&gt;&lt;/strong&gt; — Aligns to the &lt;strong&gt;right&lt;/strong&gt; of the frame&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Align horizontally and vertically
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbwhp64lxgwbzhqr1yv20.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbwhp64lxgwbzhqr1yv20.gif" alt="Align selections horizontally and vertically in Figma" width="800" height="435"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Align selections horizontally and vertically in Figma&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This has been a valuable shortcut when aligning horizontally or vertically. Use the shortcuts &lt;strong&gt;Alt + H&lt;/strong&gt; (or &lt;strong&gt;Option + H&lt;/strong&gt; on Mac) to align horizontally and &lt;strong&gt;Alt + V&lt;/strong&gt; (or &lt;strong&gt;Option + V&lt;/strong&gt; on Mac) to align vertically.&lt;/p&gt;

&lt;p&gt;This saves a lot of time when aligning assets in a design, without mousing all over align via the &lt;em&gt;Design&lt;/em&gt; panel.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;These are a few shortcuts that have been a timesaver for me. I hope you find value in this article and if you do, please share and leave me a comment below.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading. &lt;em&gt;Ciao 😀&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ui</category>
      <category>productdesign</category>
      <category>figma</category>
      <category>uiuxdesign</category>
    </item>
    <item>
      <title>How to easily style active link in NextJS</title>
      <dc:creator>goldenekpendu</dc:creator>
      <pubDate>Mon, 06 Nov 2023 06:23:43 +0000</pubDate>
      <link>https://dev.to/goldenekpendu/how-to-easily-style-active-link-in-nextjs-32cl</link>
      <guid>https://dev.to/goldenekpendu/how-to-easily-style-active-link-in-nextjs-32cl</guid>
      <description>&lt;h4&gt;
  
  
  Having a web application without the appropriate styling of active links can be a nightmare for users. In this article, we see how to easily style active links in NextJS
&lt;/h4&gt;

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

&lt;p&gt;Today, we’re be taking a look at how to style active links in NextJS. There’s no worse feeling as a user than having no visual clue to know where you currently are on a webpage. If this was a React app, we could utilise the React Router’s NavLinkcomponent, using the activeclass to style whichever links are active.&lt;/p&gt;

&lt;p&gt;But this is a NextJS app, and we’re certainly not using React Router as Next has it’s own routing. So let’s begin: I’ll be using Tailwind CSS for this example, but you’re free to use whatever you’re comfortable with. Let’s install NextJS alongside TailwindCSS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-next-app@latest active-links --typescript --eslint
cd active-links

npm install -D tailwindcss postcss autoprefixer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set up your tailwind.config.ts as needed, if you’re not using Tailwind, please kindly skip this step. Also, adjust your globals.css according to your preference.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import type { Config } from "tailwindcss";

const config: Config = {
  content: [
    "./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
    "./src/components/**/*.{js,ts,jsx,tsx,mdx}",
    "./src/app/**/*.{js,ts,jsx,tsx,mdx}",
  ],
  theme: {
    extend: {
      backgroundImage: {},
      container: {
        center: true,
        padding: {
          DEFAULT: "1rem",
          sm: "2rem",
          lg: "4rem",
          xl: "5rem",
        },
      },
    },
  },
  plugins: [],
};
export default config;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we’re going to create a simple navbar with 3 links: Page One, Page Two and Page Three. For this, I usually create a &lt;strong&gt;Components&lt;/strong&gt; folder and create a new file titled &lt;strong&gt;Navbar.tsx.&lt;/strong&gt; Once you’ve created this file, please remember to import it into the layout.tsx file so it can be rendered across all pages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// layout.tsx

import type { Metadata } from 'next'
import { Inter } from 'next/font/google'
import './globals.css'
import Navbar from './components/Navbar'

const inter = Inter({ subsets: ['latin'] })

export const metadata: Metadata = {
  title: 'Active Link Test',
  description: 'Easily style active links in NextJS!',
}

export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    &amp;lt;html lang="en"&amp;gt;
      &amp;lt;body className={inter.className}&amp;gt;
        &amp;lt;Navbar /&amp;gt;
        {children}&amp;lt;/body&amp;gt;
    &amp;lt;/html&amp;gt;
  )
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6lwrvagbmtq7gxcpi3ax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6lwrvagbmtq7gxcpi3ax.png" width="304" height="571"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Your file structure should look similar to this&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Navbar.tsx

"use client";
import React from 'react'
import Link from 'next/link'
import { usePathname } from 'next/navigation'

const Navbar = () =&amp;gt; {
    const currentPath = usePathname();
    return (
        &amp;lt;nav className='w-full h-fit mx-auto border-b '&amp;gt;
            &amp;lt;div className="container flex justify-between h-[14vh] items-center"&amp;gt;
                &amp;lt;div className="logo"&amp;gt;
                    &amp;lt;Link href={'/'}&amp;gt;&amp;lt;h4 className='text-2xl tracking-tight font-bold'&amp;gt;active &amp;lt;span className=' text-green-500 uppercase'&amp;gt;Linktest&amp;lt;/span&amp;gt;&amp;lt;/h4&amp;gt;&amp;lt;/Link&amp;gt;
                &amp;lt;/div&amp;gt;

                &amp;lt;div className="links flex gap-10 text-slate-600"&amp;gt;
                    &amp;lt;Link href={'/page-one'} className={currentPath === "/page-one" ? "text-green-500 font-semibold" : "text-slate-600"}&amp;gt;Page One&amp;lt;/Link&amp;gt;
                    &amp;lt;Link href={'/page-two'} className={currentPath === "/page-two" ? "text-green-500 font-semibold" : "text-slate-600"}&amp;gt;Page Two&amp;lt;/Link&amp;gt;
                    &amp;lt;Link href={'/page-three'} className={currentPath === "/page-three" ? "text-green-500 font-semibold" : "text-slate-600"}&amp;gt;Page Three&amp;lt;/Link&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/nav&amp;gt;
    )
}

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

&lt;/div&gt;



&lt;p&gt;In the code snippet above, we’ve created a simple navbar component with 3 pages. To create a page via the app router, create a folder with the desired pathname, e.g, mine is pages-one. Then create a page.tsx inside the folder and customise accordingly. Here’s mine:&lt;/p&gt;

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

&lt;p&gt;In order to know the current path, we’re using the usePathname hook from next/navigation, and since this is a Client Component, we need to declare use client at the top of our file . We have a variable called currentPath which stores the value returned by the usePathname hook.&lt;/p&gt;

&lt;p&gt;We’ve also added a simple logic that checks if our current path matches the path name. For example, if currentPath === "/page-one" then we style the link accordingly. In this case, the styling is text-green-500 font-semibold which is Tailwind for a shade of green and semibold font weight.&lt;/p&gt;

&lt;p&gt;Now, let’s add some content to each page. For simplicity sake, I made the contents the same for all 3 pages. So copy and modify accordingly. I’ll use page one as an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// page one
// page.tsx

import React from 'react'

const PageOne: React.FC = () =&amp;gt; {
    return (
        &amp;lt;section className='container mt-14 rounded-3xl py-10 '&amp;gt;
            &amp;lt;div className=''&amp;gt;
                &amp;lt;h2 className='text-3xl font-semibold lg:text-4xl '&amp;gt;Page One&amp;lt;/h2&amp;gt;
                &amp;lt;div className='py-6'&amp;gt;
                    &amp;lt;p className='text-green-600 max-w-3xl text-xl py-4'&amp;gt;Praesent elementum facilisis leo vel fringilla est ullamcorper eget nulla. Etiam dignissim diam quis enim lobortis. Neque viverra justo nec ultrices. Dui vivamus arcu felis bibendum ut tristique et egestas. Dolor sit amet consectetur adipiscing elit. Purus viverra accumsan in nisl nisi scelerisque.&amp;lt;/p&amp;gt;
                    &amp;lt;p className="text-slate-500 max-w-3xl py-4"&amp;gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pulvinar neque laoreet suspendisse interdum consectetur libero id faucibus. Facilisis mauris sit amet massa vitae tortor condimentum lacinia quis. Id velit ut tortor pretium viverra. Orci dapibus ultrices in iaculis nunc sed. In iaculis nunc sed augue lacus viverra vitae.&amp;lt;/p&amp;gt;
                    &amp;lt;p className="text-slate-500 max-w-3xl py-4"&amp;gt;Tellus integer feugiat scelerisque varius morbi enim. Bibendum at varius vel pharetra vel turpis nunc. Ultrices mi tempus imperdiet nulla malesuada pellentesque..&amp;lt;/p&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/section&amp;gt;
    )
}

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohy8r7bwboxdhaw64ohn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohy8r7bwboxdhaw64ohn.png" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;active link now displaying in green text colour&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now, let’s make the menu responsive.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"use client";
import React, { useState } from 'react'
import Link from 'next/link'
import { usePathname } from 'next/navigation'
import { BiMenuAltRight } from 'react-icons/bi'
import { AiOutlineClose } from 'react-icons/ai'

const Navbar = () =&amp;gt; {
    const currentPath = usePathname();
    const [toggle, setToggle] = useState(false);
    return (
        &amp;lt;nav className='w-full h-fit mx-auto border-b bg-white'&amp;gt;
            &amp;lt;div className="container flex justify-between h-[14vh] items-center"&amp;gt;
                &amp;lt;div className="logo"&amp;gt;
                    &amp;lt;Link href={'/'}&amp;gt;&amp;lt;h4 className='text-2xl tracking-tight font-bold'&amp;gt;active &amp;lt;span className=' text-green-500 uppercase'&amp;gt;Linktest&amp;lt;/span&amp;gt;&amp;lt;/h4&amp;gt;&amp;lt;/Link&amp;gt;
                &amp;lt;/div&amp;gt;

                &amp;lt;div className='text-3xl text-slate-600 cursor-pointer lg:hidden' onClick={() =&amp;gt; setToggle(prev =&amp;gt; !prev)}&amp;gt;
                    {toggle ? &amp;lt;BiMenuAltRight /&amp;gt; : &amp;lt;AiOutlineClose /&amp;gt;}
                &amp;lt;/div&amp;gt;

                &amp;lt;div className="hidden lg:flex links gap-10 text-slate-600"&amp;gt;
                    &amp;lt;Link href={'/page-one'} className={currentPath === "/page-one" ? "text-green-500 font-semibold" : "text-slate-600"}&amp;gt;Page One&amp;lt;/Link&amp;gt;
                    &amp;lt;Link href={'/page-two'} className={currentPath === "/page-two" ? "text-green-500 font-semibold" : "text-slate-600"}&amp;gt;Page Two&amp;lt;/Link&amp;gt;
                    &amp;lt;Link href={'/page-three'} className={currentPath === "/page-three" ? "text-green-500 font-semibold" : "text-slate-600"}&amp;gt;Page Three&amp;lt;/Link&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
            {!toggle &amp;amp;&amp;amp; &amp;lt;div className='w-full lg:hidden'&amp;gt;
                &amp;lt;div className='container flex flex-col gap-6 py-10'&amp;gt;
                    &amp;lt;Link href={'/page-one'} className={`${currentPath === "/page-one" ? "text-white font-semibold px-3 bg-green-500 rounded-md" : "text-slate-600"} py-3 text-center`}&amp;gt;Page One&amp;lt;/Link&amp;gt;
                    &amp;lt;Link href={'/page-two'} className={`${currentPath === "/page-two" ? "text-white font-semibold px-3 bg-green-500 rounded-md" : "text-slate-600"} py-3 text-center`}&amp;gt;Page Two&amp;lt;/Link&amp;gt;
                    &amp;lt;Link href={'/page-three'} className={`${currentPath === "/page-three" ? "text-white font-semibold px-3 bg-green-500 rounded-md" : "text-slate-600"} py-3 text-center`}&amp;gt;Page Three&amp;lt;/Link&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;}
        &amp;lt;/nav&amp;gt;
    )
}

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

&lt;/div&gt;



&lt;p&gt;Two icons have been imported from React Icons, and we’re using a state variable toggle to monitor if the menu has been clicked. If so, it displays the menu for mobile. Let’s see how the mobile menu looks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fna4reyashbt8jx0hsjmo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fna4reyashbt8jx0hsjmo.png" width="483" height="884"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;mobile menu showing active link&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now you have a navbar with styled active links! You can add different active styles that you prefer.&lt;/p&gt;

&lt;p&gt;This is a quick and easy way to help a user when navigating your application. If you’re having troubles with &lt;strong&gt;images not displaying in NextJS&lt;/strong&gt; , &lt;a href="https://dev.to/goldenekpendu/local-image-not-displaying-in-public-folder-easy-fix-nextjs-5974"&gt;have a look at this article.&lt;/a&gt; For a &lt;strong&gt;reusable custom button component in Tailwind&lt;/strong&gt; , please &lt;a href="https://dev.to/goldenekpendu/how-to-create-a-reusable-button-component-in-reactjs-with-tailwindcss-1p16"&gt;read this article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thanks a lot for reading, see you in the next one!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>typescript</category>
      <category>tailwindcss</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>My thoughts after creating a note web app | QuikNote</title>
      <dc:creator>goldenekpendu</dc:creator>
      <pubDate>Sun, 10 Sep 2023 21:56:47 +0000</pubDate>
      <link>https://dev.to/goldenekpendu/my-thoughts-after-creating-a-note-web-app-quiknote-5a2l</link>
      <guid>https://dev.to/goldenekpendu/my-thoughts-after-creating-a-note-web-app-quiknote-5a2l</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fob2kywa0k5fzlzntnlp7.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fob2kywa0k5fzlzntnlp7.jpeg" alt="quiknote web note app built by golden ekpendu" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;QuikNote logo&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A few months ago, I started coding up a project I’ve always wanted to create. Introducing &lt;strong&gt;QuikNote&lt;/strong&gt; , a note web app.&lt;/p&gt;

&lt;p&gt;🌎 &lt;a href="https://quiknote.vercel.app/" rel="noopener noreferrer"&gt;https://quiknote.vercel.app/&lt;/a&gt;   &lt;/p&gt;

&lt;p&gt;QuikNote features user authentication, a rich text editor, and a user-friendly interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The story behind the project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Originally created in React using JavaScript, I switched to Typescript (because this is my first project using Typescript). Though it was challenging at first, migrating from JS to TS, I later found the process to be a good learning opportunity.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The app is powered by Firebase.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenges&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The foremost challenge I faced in this project was creating a note and only displaying it to the owner, not everyone else who uses the app.&lt;/p&gt;

&lt;p&gt;I must admit, I did spend a lot of time trying to fix this. I read the docs, tried stack overflow and other forums but I couldn’t solve the issue.&lt;/p&gt;

&lt;p&gt;Finally, I had a &lt;em&gt;eureka moment&lt;/em&gt;, and discovered the solution was looking me in the face all this time 😂. But that’s why I love taking my time on projects, no matter how small it is. If I try new things, errors are bound to happen but with a methodical approach, I’ll find the solution and learn from the experience!&lt;/p&gt;

&lt;p&gt;Another challenge was using Typescript. I had watched a Typescript video prior but using it in real-time seemed to be very different. Fortunately, I have the internet and I utilized tools like blogs, forums, docs, videos to get a sense of what I needed to do.&lt;/p&gt;

&lt;p&gt;I also utilised a good ol’ AI friend to explain certain Typescript concepts I was unfamiliar with.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Future Plans&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I thoroughly enjoyed every second making this — from the frustration of things not working as they should, to the joyous moments seeing the progress being made.&lt;/p&gt;

&lt;p&gt;From now on, I’ll try my best to use Typescript in most of my projects.&lt;/p&gt;

&lt;p&gt;Also, I plan on using more UI styling libraries/frameworks.&lt;/p&gt;

&lt;p&gt;On a final note, I saw firsthand what lack of planning in a project does to everyone involved. So I’ll continuously push myself to create user interfaces for each project before writing a line of code.&lt;/p&gt;

&lt;p&gt;I can’t count how many times I had to pause because I didn’t have a set user interface beforehand.&lt;/p&gt;

&lt;p&gt;Also, I do enjoy creating user interfaces, so why not combine two things I love?&lt;/p&gt;

&lt;p&gt;_Thanks a lot for reading to this point, I really appreciate you. Be on the lookout for my next project (it’s a secret so I can’t tell you exactly what it is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TOOLS USED IN THIS PROJECT&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
⚛️ React.js&lt;br&gt;&lt;br&gt;
📃 Typescript&lt;br&gt;&lt;br&gt;
💅 Styled-components&lt;br&gt;&lt;br&gt;
📁 React Icons&lt;br&gt;&lt;br&gt;
🔥 Firebase&lt;br&gt;&lt;br&gt;
&lt;a href="https://undraw.co" rel="noopener noreferrer"&gt;undraw.co&lt;/a&gt; for illustrations&lt;/p&gt;

&lt;p&gt;P.S: If you have some feedback or suggestion, please &lt;a href="https://forms.gle/4qJzk6Z86evDS4zx8" rel="noopener noreferrer"&gt;use this form&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>frontend</category>
      <category>projects</category>
      <category>thoughts</category>
    </item>
    <item>
      <title>Project Deep Dive: TAG Designz website</title>
      <dc:creator>goldenekpendu</dc:creator>
      <pubDate>Thu, 13 Jul 2023 20:43:44 +0000</pubDate>
      <link>https://dev.to/goldenekpendu/project-deep-dive-tag-designz-website-3nhb</link>
      <guid>https://dev.to/goldenekpendu/project-deep-dive-tag-designz-website-3nhb</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fze420mpoh4h0jzbicfi2.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fze420mpoh4h0jzbicfi2.jpeg" alt="project deep dive: TAG Designz by Golden Ekpendu" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After delays due to personal activities, I have completed the website for my brand TAG Designz.&lt;/p&gt;

&lt;p&gt;You can visit it here: &lt;a href="https://tag-designz-site.vercel.app/" rel="noopener noreferrer"&gt;https://tag-designz-site.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some weeks back, I posted an update video and today, I’ll give a deep dive of what I’ve learnt from this project.&lt;/p&gt;

&lt;p&gt;Please note: this project isn’t 10/10. I’m still learning new technologies and plan on adding new features later in the future.&lt;/p&gt;

&lt;p&gt;With that being said, let’s take a deep dive into the tools used and lessons learnt.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Next.js
&lt;/h3&gt;

&lt;p&gt;Prior to this project, I had never used Next.js in a project.&lt;/p&gt;

&lt;p&gt;I have come to see the advantages of Next, including having its own routing system, UI and API routes, customization and more.&lt;/p&gt;

&lt;p&gt;For example, previously I didn’t always use an alt tag in my images, but with the next/link component, I was forced to do so. And that’s very helpful because alt tags plays a huge role in SEO and for accessibility features.&lt;/p&gt;

&lt;p&gt;My favourite feature so far has been the Pages routing system. No need for React Router anymore :)&lt;/p&gt;

&lt;h3&gt;
  
  
  2. React Transition Group
&lt;/h3&gt;

&lt;p&gt;I have always been frustrated since I started learning React due to one reason. That was because I didn’t have a way of adding smooth transitions between states.&lt;/p&gt;

&lt;p&gt;As a person who loves adding motion in certain components, I was stuck. Until I read about React Transition Group.&lt;/p&gt;

&lt;p&gt;I used React Transition Group in certain accordion components on the website.&lt;/p&gt;

&lt;p&gt;I’m looking forward to using more of it.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Tailwind CSS
&lt;/h3&gt;

&lt;p&gt;I have been using Tailwind in all but one of my React projects. However, using Tailwind with Next.js was a little bit difficult to set up.&lt;/p&gt;

&lt;p&gt;But with help for various blog articles, I was able to set it up and created some styled components to use throughout the website.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Nodemailer
&lt;/h3&gt;

&lt;p&gt;I don’t use tools like Nodemailer often but I had to for this project.&lt;/p&gt;

&lt;p&gt;Following some tutorials and help from the good ol’ pal, ChatGPT, I was able to make email sending work via Gmail.&lt;/p&gt;

&lt;p&gt;I am aware that Nodemailer might not be the best secure method of sending emails, but until I improve my backend skills, I’ll have to make do with it.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. ChatGPT
&lt;/h3&gt;

&lt;p&gt;What would this list be without the one and only?&lt;/p&gt;

&lt;p&gt;ChatGPT helped me revise my code and suggested changes to make it better.&lt;/p&gt;

&lt;p&gt;It helped a lot with major Nodemailer and React Transition Group issues I had.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Figma
&lt;/h3&gt;

&lt;p&gt;Planning the design in Figma before starting the development process structured my workflow.&lt;/p&gt;

&lt;p&gt;I didn’t have to start guessing layouts, thus extending the time to finish up the project.&lt;/p&gt;

&lt;p&gt;From now on, every project I take on will be planned, designed and prototyped in Figma before developing.&lt;/p&gt;

&lt;p&gt;It also aids with getting exact dimensions for assets used in the project, so the design looks identical to the live version.&lt;/p&gt;

&lt;h3&gt;
  
  
  Personal lessons learnt
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;i. Progress:&lt;/strong&gt; Life happens and this could affect a project. The key is to keep pushing and trying to move forward, learning new things and practising. Also, having an optimistic mindset helps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ii. Procrastination:&lt;/strong&gt; This isn’t new to me, it’s a constant battle. But what helped me reduce procrastinating in this project was looking back at the progress made — not only on this project but also my coding journey. It might not be the most impressive, but personally, I know what it took to reach where I am today.&lt;/p&gt;

&lt;p&gt;From coding almost daily, to losing hope in coding, to needing to restart learning fundamentals, it hasn’t been an easy journey and it also won’t be all smooth sailing going forward. But progress and consistency, to me — is key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;iii. Reading:&lt;/strong&gt; I read lots of articles and documentations during this project, and I’ve come to see firsthand, reading technical articles regularly not only keeps a developer abreast of new trends, but also improves creative thinking and appreciation for code written by others.&lt;/p&gt;

&lt;p&gt;There are other lessons learnt but I think it’s best to stop here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Please let me know in the comments any feedback you have after visiting the site.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;More projects with Next.js and Chakra UI (which I’m excited about) coming soon.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Massive thanks to:&lt;/em&gt; &lt;a href="https://www.linkedin.com/post/edit/7085349668762583040/?author=urn%3Ali%3Afs_miniProfile%3AACoAAC_LCUwBjnNcXgwnDzpxWKs8meAZo5fcgd8#" rel="noopener noreferrer"&gt;&lt;em&gt;freeCodeCamp&lt;/em&gt;&lt;/a&gt; &lt;em&gt;for their Next.js courses.&lt;/em&gt; &lt;a href="https://www.linkedin.com/post/edit/7085349668762583040/?author=urn%3Ali%3Afs_miniProfile%3AACoAAC_LCUwBjnNcXgwnDzpxWKs8meAZo5fcgd8#" rel="noopener noreferrer"&gt;&lt;em&gt;Danny Thompson&lt;/em&gt;&lt;/a&gt;_ ,_ &lt;a href="https://www.linkedin.com/post/edit/7085349668762583040/?author=urn%3Ali%3Afs_miniProfile%3AACoAAC_LCUwBjnNcXgwnDzpxWKs8meAZo5fcgd8#" rel="noopener noreferrer"&gt;&lt;em&gt;David Herbert&lt;/em&gt;&lt;/a&gt; &lt;em&gt;for their inspirational posts.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Thanks for viewing, I appreciate you.&lt;/p&gt;

</description>
      <category>casestudy</category>
      <category>projectbasedlearning</category>
      <category>nextjs</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
