<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Shoaib</title>
    <description>The latest articles on Forem by Shoaib (@shoaibsid).</description>
    <link>https://forem.com/shoaibsid</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%2F3316943%2Fdf0a6b99-271c-45b1-8ec9-afc96c1664fe.jpg</url>
      <title>Forem: Shoaib</title>
      <link>https://forem.com/shoaibsid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/shoaibsid"/>
    <language>en</language>
    <item>
      <title>Motion UI with Framer Motion in 2025 — More Than Just Animations</title>
      <dc:creator>Shoaib</dc:creator>
      <pubDate>Sun, 13 Jul 2025 07:18:49 +0000</pubDate>
      <link>https://forem.com/shoaibsid/building-scalable-ui-systems-with-tailwind-css-v4-and-shadcnui-59o4</link>
      <guid>https://forem.com/shoaibsid/building-scalable-ui-systems-with-tailwind-css-v4-and-shadcnui-59o4</guid>
      <description>&lt;p&gt;✍️ &lt;strong&gt;By Shoaib — A Full-Stack Developer Sharing What Actually Works&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 TL;DR
&lt;/h2&gt;

&lt;p&gt;Framer Motion is not just for pretty effects — it’s a serious tool for delivering smooth, accessible, and performant UI.&lt;/p&gt;

&lt;p&gt;In 2025, micro-interactions, scroll-based animations, and motion feedback aren’t just “cool” — they’re &lt;strong&gt;UX essentials&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I’ll show how I’ve used Framer Motion in real projects (like my portfolio and client work), how to avoid common mistakes, and how to make your animations &lt;strong&gt;production-ready&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Why Motion UI Actually Matters Now
&lt;/h2&gt;

&lt;p&gt;Let’s be honest: I used to think animations were “fluff.”&lt;/p&gt;

&lt;p&gt;But after working on multiple production projects, I’ve realized micro-interactions and intentional motion can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improve user engagement
&lt;/li&gt;
&lt;li&gt;Guide attention (especially in forms, navigation)
&lt;/li&gt;
&lt;li&gt;Add brand identity
&lt;/li&gt;
&lt;li&gt;And yes — make your UI feel alive
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But only when done right.&lt;/p&gt;

&lt;p&gt;That’s where &lt;strong&gt;Framer Motion&lt;/strong&gt; comes in.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠 What Is Framer Motion?
&lt;/h2&gt;

&lt;p&gt;Framer Motion is a &lt;strong&gt;production-ready animation library for React&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It gives you simple primitives like &lt;code&gt;motion.div&lt;/code&gt;, &lt;code&gt;variants&lt;/code&gt;, and &lt;code&gt;AnimatePresence&lt;/code&gt; — all built with &lt;strong&gt;performance and accessibility&lt;/strong&gt; in mind.&lt;/p&gt;

&lt;p&gt;It’s built on the &lt;strong&gt;Popmotion&lt;/strong&gt; engine but feels very “React” to use.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠 How I Use Framer Motion in My Projects
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Subtle Page Transitions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I used &lt;code&gt;AnimatePresence&lt;/code&gt; with &lt;code&gt;motion.div&lt;/code&gt; for smooth transitions between routes — especially in my portfolio and landing pages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;motion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;AnimatePresence&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;framer-motion&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;AnimatePresence&lt;/span&gt; &lt;span class="nx"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wait&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;motion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;
    &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;route&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;initial&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
    &lt;span class="nx"&gt;animate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
    &lt;span class="nx"&gt;exit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
    &lt;span class="nx"&gt;transition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
  &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;YourComponent&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/motion.div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/AnimatePresence&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These 300ms transitions soften the experience without overloading the UI.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Button Feedback &amp;amp; Micro Interactions
&lt;/h3&gt;

&lt;p&gt;Buttons are where users interact the most — yet most devs leave them static.&lt;/p&gt;

&lt;p&gt;I use scale on tap to add tactile feedback:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;motion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;
  &lt;span class="nx"&gt;whileTap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.95&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
  &lt;span class="nx"&gt;whileHover&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.05&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
  &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;btn-primary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It’s subtle, but it makes the experience feel way more responsive.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Scroll Animations Without ScrollTrigger
&lt;/h3&gt;

&lt;p&gt;With whileInView and viewport props, Framer Motion handles scroll-based entrance animations without any extra dependency.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;motion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;
  &lt;span class="nx"&gt;initial&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
  &lt;span class="nx"&gt;whileInView&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
  &lt;span class="nx"&gt;transition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
  &lt;span class="nx"&gt;viewport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;once&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;YourSection&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/motion.div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Way smoother than handling scroll listeners manually.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Performance Tips
&lt;/h2&gt;

&lt;p&gt;A common myth: "&lt;strong&gt;Animations hurt performance.&lt;/strong&gt;"&lt;/p&gt;

&lt;p&gt;Yes, they can — if done poorly. Here’s how I avoid that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Animate only what’s visible (&lt;code&gt;viewport={{ once: true }}&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Use GPU-accelerated properties (&lt;code&gt;transform&lt;/code&gt;, not &lt;code&gt;top&lt;/code&gt; or &lt;code&gt;left&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Debounce exit transitions on route changes&lt;/li&gt;
&lt;li&gt;Keep transition durations short and consistent&lt;/li&gt;
&lt;li&gt;Avoid animating layout shifts that affect CLS (Cumulative Layout Shift)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ♿ Accessibility Considerations
&lt;/h2&gt;

&lt;p&gt;You don’t want animations to make your site feel dizzy.&lt;/p&gt;

&lt;p&gt;Here's what I check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Respect user settings (&lt;code&gt;prefers-reduced-motion&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Avoid overly complex motion that distracts&lt;/li&gt;
&lt;li&gt;Give control over animated components when needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Access user preferences easily:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;shouldReduceMotion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useReducedMotion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💡 When Not to Use Motion
&lt;/h2&gt;

&lt;p&gt;Not every component needs motion. I usually avoid animations on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Loading skeletons (keep them fast and minimal)&lt;/li&gt;
&lt;li&gt;Forms with strict validations (delays can feel laggy)&lt;/li&gt;
&lt;li&gt;Hero sections with big background videos + motion (too heavy)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Remember&lt;/strong&gt;: motion should serve UX, not just aesthetics.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔮 Motion UI in 2025: Where It’s Headed
&lt;/h2&gt;

&lt;p&gt;What I’m seeing now (and building toward):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Component libraries like shadcn/ui and Radix UI integrating Framer Motion out-of-the-box&lt;/li&gt;
&lt;li&gt;Design systems using motion tokens&lt;/li&gt;
&lt;li&gt;AI + personalization deciding when and how animations run (e.g., dark mode, screen size, or emotion tracking)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧑‍💻 My Take as a Developer
&lt;/h2&gt;

&lt;p&gt;I never thought I’d be that guy tweaking animation curves — but once I saw the difference it made in how users feel your product, I couldn’t unsee it.&lt;/p&gt;

&lt;p&gt;And honestly?&lt;br&gt;
It made me enjoy building UIs way more.&lt;/p&gt;




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

&lt;p&gt;Framer Motion isn’t just “nice to have” — it’s becoming a &lt;strong&gt;standard for modern UI development&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you're a React or Next.js developer, I highly recommend learning it with intention, not just copying code.&lt;/p&gt;

&lt;p&gt;It’s the difference between &lt;strong&gt;“working UI” and memorable UI.”&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://motion.dev/docs" rel="noopener noreferrer"&gt;Framer Motion Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.shoaibsid.dev" rel="noopener noreferrer"&gt;My Portfolio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Related Blog: &lt;a href="https://www.shoaibsid.dev/blog/building-scalable-ui-systems-with-tailwind-css-v4-and-shadcn-ui" rel="noopener noreferrer"&gt;Building Scalable UI Systems with shadcn/ui&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>framermotion</category>
      <category>motionui</category>
      <category>frontend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building Scalable UI Systems with Tailwind CSS v4 and shadcn/ui</title>
      <dc:creator>Shoaib</dc:creator>
      <pubDate>Mon, 07 Jul 2025 08:40:20 +0000</pubDate>
      <link>https://forem.com/shoaibsid/building-scalable-ui-systems-with-tailwind-css-v4-and-shadcnui-11g0</link>
      <guid>https://forem.com/shoaibsid/building-scalable-ui-systems-with-tailwind-css-v4-and-shadcnui-11g0</guid>
      <description>&lt;p&gt;Hey Devs 👋&lt;br&gt;&lt;br&gt;
I recently implemented a scalable UI system for one of my projects using Tailwind CSS v4 and shadcn/ui. Here’s a complete breakdown — from setup to best practices.&lt;/p&gt;

&lt;p&gt;In modern web development, speed and scalability are no longer nice-to-haves—they're non-negotiable. As teams grow and applications evolve, maintaining a consistent and efficient design system becomes critical. That’s where Tailwind CSS and shadcn/ui come in—a pairing that enables developers to build beautiful, accessible, and scalable UI systems without reinventing the wheel.&lt;/p&gt;

&lt;p&gt;Whether you’re building a full-scale design system or simply trying to keep your UI components maintainable across projects, this guide will show you how to make the most of Tailwind and shadcn/ui.&lt;/p&gt;
&lt;h2&gt;
  
  
  🧱 Why Build a Scalable UI System?
&lt;/h2&gt;

&lt;p&gt;A UI system is more than a component library—it's a design language backed by consistent patterns and reusable components. A scalable system ensures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster development with prebuilt patterns&lt;/li&gt;
&lt;li&gt;Visual consistency across pages and features&lt;/li&gt;
&lt;li&gt;Easier collaboration between designers and developers&lt;/li&gt;
&lt;li&gt;Cleaner, more maintainable code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without a UI system, your frontend becomes a tangle of inconsistent components, duplicated styles, and guesswork.&lt;/p&gt;
&lt;h2&gt;
  
  
  🎨 Why Tailwind CSS + shadcn/ui?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ Tailwind CSS&lt;/strong&gt;&lt;br&gt;
A utility-first CSS framework that offers maximum control with minimal code bloat.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customizable design tokens (colors, spacing, fonts)&lt;/li&gt;
&lt;li&gt;Responsive by default&lt;/li&gt;
&lt;li&gt;Works seamlessly with any component-based architecture&lt;/li&gt;
&lt;li&gt;Removes the need to write and maintain custom CSS files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;✅ shadcn/ui&lt;/strong&gt;&lt;br&gt;
A modern component library built on top of Tailwind and Radix UI. It offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prebuilt, accessible UI components&lt;/li&gt;
&lt;li&gt;Theme-aware styling (including dark mode)&lt;/li&gt;
&lt;li&gt;Easy customization with global.css&lt;/li&gt;
&lt;li&gt;Clean abstraction without locking you into a framework&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, they provide the perfect foundation for a maintainable, elegant UI system in 2025.&lt;/p&gt;
&lt;h2&gt;
  
  
  🏗️ Getting Started with Tailwind + shadcn/ui
&lt;/h2&gt;

&lt;p&gt;Here’s how to bootstrap your scalable UI system setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔧 Install Tailwind CSS&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-next-app@latest my-project
cd my-project
npm install tailwindcss @tailwindcss/postcss postcss
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;🧩 Add shadcn/ui&lt;/strong&gt;&lt;br&gt;
Follow their setup instructions to integrate into your Next.js project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx shadcn-ui@latest init

// Then add components using:
npx shadcn-ui@latest add button

// You can now use components like:
import { Button } from "@/components/ui/button"; 
export default function Example() { 
    return &amp;lt;Button&amp;gt;Click Me&amp;lt;/Button&amp;gt;; 
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🧠 Tips for Scalability
&lt;/h2&gt;

&lt;p&gt;As you scale your UI system, follow these best practices:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ Use Aliased Component Folders&lt;/strong&gt;&lt;br&gt;
Organize components clearly with folders like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/components/ui/
/components/shared/
/components/forms/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2️⃣ Define Design Tokens with &lt;code&gt;@theme&lt;/code&gt; in Tailwind v4&lt;/strong&gt;&lt;br&gt;
Tailwind CSS v4 embraces a more CSS-native approach to theming. Instead of defining colors, fonts, and spacing in &lt;code&gt;tailwind.config.js&lt;/code&gt;, you can now use the new &lt;code&gt;@theme&lt;/code&gt; directive inside your CSS files — giving you a clean, centralized token system with full IntelliSense support.&lt;/p&gt;

&lt;p&gt;In your &lt;code&gt;globals.css&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@theme { 
    --color-primary: #4A90E2; 
    --color-muted: #A0A0A0; 
    --font-heading: 'Manrope', sans-serif; 
    --font-body: 'Merriweather', serif; 
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, you can use these custom tokens in your Tailwind utilities like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div class="text-primary font-heading"&amp;gt; 
    Welcome to the UI system 
&amp;lt;/div&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This approach aligns with the new standard in Tailwind v4 and gives you complete control over your design system in one place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3️⃣ Create Wrapper Components&lt;/strong&gt;&lt;br&gt;
Avoid repeating props like variants, sizes, and state. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// components/shared/PrimaryButton.jsx 
import { Button } from "@/components/ui/button"; 
export const PrimaryButton = ({ children, ...props }) =&amp;gt; ( 
&amp;lt;Button variant="default" className="rounded-xl px-6" {...props}&amp;gt; 
    {children} 
&amp;lt;/Button&amp;gt; ); 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🌐 Real-World Use Cases
&lt;/h2&gt;

&lt;p&gt;Here are a few ideas where this scalable system thrives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design systems powering client dashboards&lt;/li&gt;
&lt;li&gt;Component marketplaces like your own YumeUI&lt;/li&gt;
&lt;li&gt;Multi-brand web apps with theme overrides&lt;/li&gt;
&lt;li&gt;Landing pages with consistent UX patterns&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;If you're building modern frontends in 2025, creating a scalable UI system with Tailwind CSS and shadcn/ui is more than just smart—it’s essential. You’ll save time, improve consistency, and create user interfaces that are both performant and maintainable.&lt;/p&gt;

&lt;p&gt;Start small, refactor smart, and let the system evolve with your product.&lt;/p&gt;




&lt;p&gt;🧠 Originally published on &lt;a href="https://shoaibsid.dev" rel="noopener noreferrer"&gt;shoaibsid.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’ve built something similar — or have ideas to improve this setup — drop a comment! Let’s learn from each other 🚀&lt;/p&gt;

</description>
      <category>tailwindcss</category>
      <category>nextjs</category>
      <category>ui</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I Just Launched My Developer Portfolio – Built with Next.js, Tailwind &amp; Supabase</title>
      <dc:creator>Shoaib</dc:creator>
      <pubDate>Wed, 02 Jul 2025 15:40:48 +0000</pubDate>
      <link>https://forem.com/shoaibsid/i-just-launched-my-developer-portfolio-built-with-nextjs-tailwind-supabase-4p34</link>
      <guid>https://forem.com/shoaibsid/i-just-launched-my-developer-portfolio-built-with-nextjs-tailwind-supabase-4p34</guid>
      <description>&lt;p&gt;🚀 &lt;strong&gt;Hey Devs!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After weeks of refining design, optimizing performance, and integrating cool tools — I’m excited to officially launch my personal &lt;strong&gt;developer portfolio website&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔗 Visit here:&lt;/strong&gt; &lt;a href="https://shoaibsid.dev" rel="noopener noreferrer"&gt;https://shoaibsid.dev&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💻 Built With:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Next.js, Tailwind CSS, Framer Motion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Supabase (for blog views), Express (project-based)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Features:&lt;/strong&gt;
✅ Fast, minimal, and responsive design
✅ SEO-optimized blog using Ghost CMS
✅ View tracking via Supabase
✅ Designed to scale with my journey&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧩 Why I Built It
&lt;/h2&gt;

&lt;p&gt;As a Full Stack Developer, I wanted a space that not only showcases my projects but also lets me write and share what I learn. The site is built to be a living portfolio that evolves with my skills.&lt;/p&gt;




&lt;h2&gt;
  
  
  📝 What's Inside:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A glance at my latest projects&lt;/li&gt;
&lt;li&gt;Developer blogs focused on frontend performance &amp;amp; real-world learnings&lt;/li&gt;
&lt;li&gt;A clean UI with fast load times and device responsiveness&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🙌 Let’s Connect
&lt;/h2&gt;

&lt;p&gt;Feel free to check it out and drop any feedback, suggestions, or bugs I missed!&lt;/p&gt;

&lt;p&gt;📩 &lt;a href="//mailto:hi@shoaibsid.dev"&gt;hi@shoaibsid.dev&lt;/a&gt;&lt;br&gt;&lt;br&gt;
🌐 &lt;a href="https://shoaibsid.dev" rel="noopener noreferrer"&gt;https://shoaibsid.dev&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Thanks for reading, and happy building!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>portfolio</category>
      <category>nextjs</category>
    </item>
  </channel>
</rss>
