<?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: Samir Tahiri</title>
    <description>The latest articles on DEV Community by Samir Tahiri (@samirtahiri).</description>
    <link>https://dev.to/samirtahiri</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%2F1581687%2Fa758f697-2cfe-449e-82e4-c85d1e1f8c60.jpeg</url>
      <title>DEV Community: Samir Tahiri</title>
      <link>https://dev.to/samirtahiri</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/samirtahiri"/>
    <language>en</language>
    <item>
      <title>🚛 Ngarkoje.com – Turning Global Transport into a 1-Click Experience</title>
      <dc:creator>Samir Tahiri</dc:creator>
      <pubDate>Fri, 25 Jul 2025 12:11:39 +0000</pubDate>
      <link>https://dev.to/samirtahiri/ngarkojecom-turning-global-transport-into-a-1-click-experience-2ol1</link>
      <guid>https://dev.to/samirtahiri/ngarkojecom-turning-global-transport-into-a-1-click-experience-2ol1</guid>
      <description>&lt;h1&gt;
  
  
  🌍 Ngarkoje.com – Reinventing Transport &amp;amp; Delivery 🚚✨
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What if booking a driver or transport company was as simple as booking a ride?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
That’s what we’re building with &lt;strong&gt;&lt;a href="https://ngarkoje.com" rel="noopener noreferrer"&gt;Ngarkoje.com&lt;/a&gt;&lt;/strong&gt; – a &lt;strong&gt;next-generation platform&lt;/strong&gt; that makes moving goods &lt;strong&gt;easier, faster, and fully transparent.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Why Ngarkoje.com?
&lt;/h2&gt;

&lt;p&gt;Traditional transport is &lt;strong&gt;slow, outdated, and full of guesswork&lt;/strong&gt; – calling multiple companies, comparing random prices, and hoping everything works out.&lt;br&gt;&lt;br&gt;
Ngarkoje.com changes this by being &lt;strong&gt;the ultimate logistics marketplace&lt;/strong&gt;, built for &lt;strong&gt;people and businesses worldwide.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What We Offer:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Post Any Transport Request&lt;/strong&gt; – Packages, furniture, vehicles, or heavy goods.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get Instant Offers&lt;/strong&gt; – &lt;strong&gt;Drivers and transport companies compete&lt;/strong&gt; to give you the best deal.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Tracking &amp;amp; Status&lt;/strong&gt; – From pickup to delivery, you’re always in control.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trustworthy Ratings &amp;amp; Reviews&lt;/strong&gt; – Work only with top-rated professionals.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Filters&lt;/strong&gt; – Location, price, vehicle type, urgency, and more.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠 The Tech Behind the Magic
&lt;/h2&gt;

&lt;p&gt;To make Ngarkoje.com lightning-fast and secure, we’ve built it on &lt;strong&gt;cutting-edge technology&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Next.js 14 + TypeScript for &lt;strong&gt;ultra-fast performance&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Node.js + Express + Prisma ORM with PostgreSQL for &lt;strong&gt;scalable APIs&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time:&lt;/strong&gt; Powered by &lt;strong&gt;Socket.IO&lt;/strong&gt; for instant offers and communication.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication:&lt;/strong&gt; Role-based access (&lt;code&gt;USER&lt;/code&gt;, &lt;code&gt;DRIVER&lt;/code&gt;, &lt;code&gt;COMPANY&lt;/code&gt;) with &lt;strong&gt;secure JWT&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI/UX:&lt;/strong&gt; TailwindCSS for a &lt;strong&gt;modern, sleek experience&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud-ready:&lt;/strong&gt; Fully containerized and &lt;strong&gt;globally deployable&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌟 Why It Stands Out
&lt;/h2&gt;

&lt;p&gt;Ngarkoje.com isn’t just another logistics app – it’s a &lt;strong&gt;global transport network&lt;/strong&gt; where &lt;strong&gt;clients and drivers connect in seconds&lt;/strong&gt;, built with &lt;strong&gt;speed, transparency, and trust&lt;/strong&gt; as the core pillars.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No more overpaying&lt;/strong&gt; – competitive offers in real time.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No more uncertainty&lt;/strong&gt; – every transport is tracked.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No more hidden players&lt;/strong&gt; – reviews and ratings guarantee quality.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎯 Our Vision
&lt;/h2&gt;

&lt;p&gt;We’re on a mission to &lt;strong&gt;simplify the transport industry globally.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
With Ngarkoje.com, shipping your items or finding work as a driver becomes as simple as clicking a button.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌐 Join the Movement
&lt;/h2&gt;

&lt;p&gt;We’re looking for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Drivers and transport companies&lt;/strong&gt; ready to grow their business.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Individuals and businesses&lt;/strong&gt; who want &lt;strong&gt;fast, reliable, and transparent deliveries.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;Sign up at &lt;a href="https://ngarkoje.com" rel="noopener noreferrer"&gt;Ngarkoje.com&lt;/a&gt; and be part of the future of transport!&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧑‍💻 Follow the Journey
&lt;/h2&gt;

&lt;p&gt;We’re building Ngarkoje.com in public – from &lt;strong&gt;tech stack breakdowns&lt;/strong&gt; to &lt;strong&gt;startup growth strategies.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Follow me here on &lt;strong&gt;Dev.to&lt;/strong&gt; and join the ride! 🚀&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Would you use Ngarkoje.com for your next delivery?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Drop your thoughts, ideas, and features you’d love to see – we’re building this for YOU!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>startup</category>
      <category>logistic</category>
    </item>
    <item>
      <title>Angular Signals vs RxJS: Which Should You Use in 2025?</title>
      <dc:creator>Samir Tahiri</dc:creator>
      <pubDate>Wed, 16 Jul 2025 19:05:45 +0000</pubDate>
      <link>https://dev.to/samirtahiri/angular-signals-vs-rxjs-which-should-you-use-in-2025-4ebf</link>
      <guid>https://dev.to/samirtahiri/angular-signals-vs-rxjs-which-should-you-use-in-2025-4ebf</guid>
      <description>&lt;h1&gt;
  
  
  Angular Signals vs RxJS: Which Should You Use in 2025?
&lt;/h1&gt;

&lt;p&gt;Since the introduction of &lt;strong&gt;Angular Signals&lt;/strong&gt;, the Angular ecosystem has been evolving rapidly toward a simpler, more intuitive way to handle &lt;strong&gt;reactivity&lt;/strong&gt;. Meanwhile, &lt;strong&gt;RxJS&lt;/strong&gt; has been the go-to for reactive programming in Angular for years.&lt;/p&gt;

&lt;p&gt;So, what’s the difference? When should you use Signals, and when is RxJS still the better choice?&lt;/p&gt;

&lt;p&gt;Let’s break it down 👇&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 What Are Angular Signals?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Signals&lt;/strong&gt; are a new reactive primitive introduced in Angular. They're designed to &lt;strong&gt;track dependencies automatically&lt;/strong&gt; and &lt;strong&gt;re-render components efficiently&lt;/strong&gt; when values change.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;signal&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;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signal&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Unlike RxJS, Signals are &lt;strong&gt;pull-based&lt;/strong&gt; and &lt;strong&gt;synchronous&lt;/strong&gt;. That means changes propagate automatically, and you don’t have to manually subscribe/unsubscribe.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔁 What Is RxJS?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;RxJS (Reactive Extensions for JavaScript)&lt;/strong&gt; is a powerful library for working with &lt;strong&gt;streams of data&lt;/strong&gt;. It's &lt;strong&gt;push-based&lt;/strong&gt;, async by design, and perfect for &lt;strong&gt;complex data flows&lt;/strong&gt; like HTTP requests, WebSockets, and time-based operations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;BehaviorSubject&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;rxjs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;count$&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BehaviorSubject&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;count$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With RxJS, you get access to a rich set of operators like &lt;code&gt;map&lt;/code&gt;, &lt;code&gt;filter&lt;/code&gt;, &lt;code&gt;mergeMap&lt;/code&gt;, etc.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Signals: Pros &amp;amp; Cons
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity&lt;/strong&gt;: Easy to use, especially for local state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic tracking&lt;/strong&gt;: No manual subscriptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Great for UI bindings&lt;/strong&gt;: Perfect in templates and components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sync updates&lt;/strong&gt;: No async zone issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Not suitable for streams&lt;/strong&gt;: Can't handle time-based or event-based data well.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limited operators&lt;/strong&gt;: Lacks the powerful stream operators RxJS provides.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ RxJS: Pros &amp;amp; Cons
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Powerful&lt;/strong&gt;: Perfect for complex data flows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mature ecosystem&lt;/strong&gt;: Tons of operators and support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Async-first&lt;/strong&gt;: Great for HTTP, intervals, and async sources.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Steep learning curve&lt;/strong&gt;: Can be overkill for simple state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual cleanup&lt;/strong&gt;: Subscriptions need to be managed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Less intuitive&lt;/strong&gt; for beginners.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤔 When to Use Signals
&lt;/h2&gt;

&lt;p&gt;Use &lt;strong&gt;Angular Signals&lt;/strong&gt; when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managing &lt;strong&gt;component-local state&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Updating UI from &lt;strong&gt;synchronous events&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Building &lt;strong&gt;simple, reactive forms&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You want better &lt;strong&gt;performance with fine-grained reactivity&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔄 When to Use RxJS
&lt;/h2&gt;

&lt;p&gt;Use &lt;strong&gt;RxJS&lt;/strong&gt; when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Working with &lt;strong&gt;async data&lt;/strong&gt; (e.g. HTTP, WebSockets)&lt;/li&gt;
&lt;li&gt;Needing &lt;strong&gt;debouncing&lt;/strong&gt;, &lt;strong&gt;throttling&lt;/strong&gt;, or &lt;strong&gt;merging&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Handling &lt;strong&gt;complex streams&lt;/strong&gt; or &lt;strong&gt;event sources&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Building &lt;strong&gt;highly reactive services&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔥 Can You Use Both?
&lt;/h2&gt;

&lt;p&gt;Yes — and you should!&lt;/p&gt;

&lt;p&gt;Angular doesn't force you to choose one or the other. In fact, using &lt;strong&gt;RxJS for async flows&lt;/strong&gt; and &lt;strong&gt;Signals for reactive UI state&lt;/strong&gt; is often the best of both worlds.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;OnInit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signal&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;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;HttpClient&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;@angular/common/http&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;toSignal&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;@angular/core/rxjs-interop&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Observable&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;rxjs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app-user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`
    &amp;lt;h1&amp;gt;{{ userSignal()?.name }}&amp;lt;/h1&amp;gt;
  `&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyComponent&lt;/span&gt; &lt;span class="k"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;OnInit&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;user$&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Observable&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;userSignal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;toSignal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user$&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;HttpClient&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;The &lt;code&gt;toSignal()&lt;/code&gt; utility helps bridge RxJS Observables to Signals.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Performance Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Signals&lt;/th&gt;
&lt;th&gt;RxJS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;State reactivity&lt;/td&gt;
&lt;td&gt;✅ Blazing fast&lt;/td&gt;
&lt;td&gt;⚠️ Needs &lt;code&gt;async&lt;/code&gt; pipe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Async data handling&lt;/td&gt;
&lt;td&gt;❌ Limited&lt;/td&gt;
&lt;td&gt;✅ Best in class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learning curve&lt;/td&gt;
&lt;td&gt;✅ Beginner-friendly&lt;/td&gt;
&lt;td&gt;❌ Steep&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Template integration&lt;/td&gt;
&lt;td&gt;✅ Seamless&lt;/td&gt;
&lt;td&gt;✅ With &lt;code&gt;async&lt;/code&gt; pipe&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;ul&gt;
&lt;li&gt;If you're building &lt;strong&gt;UI-heavy apps&lt;/strong&gt; with mostly synchronous state, &lt;strong&gt;Signals&lt;/strong&gt; will drastically simplify your code.&lt;/li&gt;
&lt;li&gt;If you're building apps with &lt;strong&gt;data streams, async calls, or complex pipelines&lt;/strong&gt;, stick to &lt;strong&gt;RxJS&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The best apps in 2025 will likely use &lt;strong&gt;both&lt;/strong&gt;, where each shines.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💬 What are you using in your Angular projects? Let me know in the comments 👇&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;#angular #rxjs #signals #webdev #frontend&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
      <category>frontend</category>
      <category>rxjs</category>
    </item>
    <item>
      <title>Single-File Components in React: Genius or Garbage?</title>
      <dc:creator>Samir Tahiri</dc:creator>
      <pubDate>Fri, 11 Jul 2025 09:49:37 +0000</pubDate>
      <link>https://dev.to/samirtahiri/single-file-components-in-react-genius-or-garbage-459h</link>
      <guid>https://dev.to/samirtahiri/single-file-components-in-react-genius-or-garbage-459h</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Let’s start a fight (respectfully)&lt;/strong&gt; 🥊&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Recently, I came across a few React projects where the &lt;strong&gt;entire component&lt;/strong&gt; was written in &lt;strong&gt;one file&lt;/strong&gt; — logic, styles, markup, all jammed together.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Button.jsx&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./Button.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;label&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleClick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Clicked!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleClick&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;They call this "&lt;strong&gt;Single-File Components (SFC)&lt;/strong&gt;". The idea? &lt;strong&gt;Keep everything together&lt;/strong&gt;: no more &lt;code&gt;.js&lt;/code&gt;, &lt;code&gt;.css&lt;/code&gt;, &lt;code&gt;.test.js&lt;/code&gt;, etc.&lt;/p&gt;

&lt;p&gt;But here's where it gets spicy 🔥&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 The Argument &lt;em&gt;For&lt;/em&gt; SFCs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🪄 Easier to &lt;strong&gt;read&lt;/strong&gt; and understand in one glance
&lt;/li&gt;
&lt;li&gt;🚀 Less context switching between files
&lt;/li&gt;
&lt;li&gt;📦 More portable (copy one file, done)
&lt;/li&gt;
&lt;li&gt;🧼 Cleaner when using CSS-in-JS or Tailwind&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  😤 The Argument &lt;em&gt;Against&lt;/em&gt; SFCs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🤯 Can get &lt;strong&gt;bloated&lt;/strong&gt; fast (200+ lines easy)
&lt;/li&gt;
&lt;li&gt;🧪 Tests get ignored or written elsewhere
&lt;/li&gt;
&lt;li&gt;💣 Harder to scale in large teams
&lt;/li&gt;
&lt;li&gt;📁 Violates Separation of Concerns (SoC)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💬 What Do &lt;em&gt;You&lt;/em&gt; Think?
&lt;/h2&gt;

&lt;p&gt;Do you love the simplicity, or do you miss the old-school modularity?&lt;/p&gt;

&lt;p&gt;👇 &lt;strong&gt;Comment below&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you use SFCs in React?&lt;/li&gt;
&lt;li&gt;What are the pros and cons you’ve experienced?&lt;/li&gt;
&lt;li&gt;Would you recommend it to your team?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's debate 👇&lt;/p&gt;




&lt;p&gt;🗳️ &lt;strong&gt;Bonus&lt;/strong&gt;: React devs — should we embrace single-file components like Vue? Or stick to separation?&lt;/p&gt;

&lt;h1&gt;
  
  
  React #WebDev #Frontend #DevOpinion
&lt;/h1&gt;

</description>
      <category>react</category>
      <category>frontend</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>#🚀 React Clean Code Cheatsheet — Visual Guide</title>
      <dc:creator>Samir Tahiri</dc:creator>
      <pubDate>Mon, 07 Jul 2025 16:17:37 +0000</pubDate>
      <link>https://dev.to/samirtahiri/-react-clean-code-cheatsheet-visual-guide-42j8</link>
      <guid>https://dev.to/samirtahiri/-react-clean-code-cheatsheet-visual-guide-42j8</guid>
      <description>&lt;p&gt;Writing clean React code isn't just about making things work — it’s about readability, maintainability, and scaling your components.&lt;/p&gt;

&lt;p&gt;Here’s a simple visual cheatsheet that highlights best practices for building better React components.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Do’s &amp;amp; Don’ts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔸 Props
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;❌ Bad:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MyButton&lt;/span&gt; &lt;span class="na"&gt;txt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Click"&lt;/span&gt; &lt;span class="na"&gt;col&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"blue"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;✅ Good:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MyButton&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Click"&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"primary"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 Use meaningful, descriptive prop names.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🔸 Conditional Rendering
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;❌ Bad:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Data&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;✅ Good:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Spinner&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 Use early returns and avoid nesting where possible.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🔸 Folder Structure
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;❌ Bad:&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;/components
  Button.js
  Card.js
  Modal.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;✅ Good:&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;/components
  /Button
    index.tsx
    styles.module.css
    types.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 Organize by component, not by file type.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🔸 Logic Separation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;❌ Bad:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nf"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&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;&lt;strong&gt;✅ Good:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&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;getUserData&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;@/services/user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getUserData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;setUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 Keep logic in services or hooks. Components should be mostly UI.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🔸 useEffect Usage
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;❌ Bad:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;resize&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;handleResize&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;&lt;strong&gt;✅ Good:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;resize&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;handleResize&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;resize&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;handleResize&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;blockquote&gt;
&lt;p&gt;💡 Always clean up your effects to avoid memory leaks.&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;p&gt;Clean code in React isn’t just for you — it’s for your teammates, your future self, and the community. Refactor small, commit often, and prioritize clarity over cleverness.&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%2Fmedia.licdn.com%2Fdms%2Fimage%2FD4D22AQH6-63qypA0oQ%2Ffeedshare-shrink_800%2F0%2F1719408938424%3Fe%3D1721865600%26v%3Dbeta%26t%3DGOBHkmzD_7U-n8shh_iAlVUd0Onf6Hz_AKMKMU4Eoc0" 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%2Fmedia.licdn.com%2Fdms%2Fimage%2FD4D22AQH6-63qypA0oQ%2Ffeedshare-shrink_800%2F0%2F1719408938424%3Fe%3D1721865600%26v%3Dbeta%26t%3DGOBHkmzD_7U-n8shh_iAlVUd0Onf6Hz_AKMKMU4Eoc0" alt="React Clean Code Guide" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>frontend</category>
    </item>
    <item>
      <title>🔥 The Ultimate Frontend Developer Guide for 2025</title>
      <dc:creator>Samir Tahiri</dc:creator>
      <pubDate>Thu, 03 Jul 2025 07:27:46 +0000</pubDate>
      <link>https://dev.to/samirtahiri/the-ultimate-frontend-developer-guide-for-2025-4ebf</link>
      <guid>https://dev.to/samirtahiri/the-ultimate-frontend-developer-guide-for-2025-4ebf</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;If you want to stay &lt;strong&gt;relevant&lt;/strong&gt;, &lt;strong&gt;hireable&lt;/strong&gt;, and &lt;strong&gt;ahead of the curve&lt;/strong&gt; as a frontend developer in 2025 — this post is your roadmap 🧭&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;ul&gt;
&lt;li&gt;Learn &lt;strong&gt;React&lt;/strong&gt;, &lt;strong&gt;TypeScript&lt;/strong&gt;, &lt;strong&gt;Next.js&lt;/strong&gt;, and &lt;strong&gt;TailwindCSS&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Get familiar with &lt;strong&gt;AI coding tools&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Embrace &lt;strong&gt;component-driven&lt;/strong&gt; and &lt;strong&gt;atomic design&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Explore &lt;strong&gt;micro frontends&lt;/strong&gt;, &lt;strong&gt;server components&lt;/strong&gt;, and &lt;strong&gt;edge rendering&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Master &lt;strong&gt;performance&lt;/strong&gt;, &lt;strong&gt;a11y&lt;/strong&gt;, and &lt;strong&gt;testing&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💻 Core Tech Stack to Master
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ JavaScript
&lt;/h3&gt;

&lt;p&gt;Still the core of the web. Focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modern features: &lt;code&gt;??&lt;/code&gt;, &lt;code&gt;?.&lt;/code&gt;, &lt;code&gt;async/await&lt;/code&gt;, &lt;code&gt;Proxy&lt;/code&gt;, &lt;code&gt;Intl&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Debugging and browser APIs&lt;/li&gt;
&lt;li&gt;Deep DOM understanding&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ TypeScript
&lt;/h3&gt;

&lt;p&gt;2025 is all about type safety:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Advanced typing: &lt;code&gt;infer&lt;/code&gt;, &lt;code&gt;satisfies&lt;/code&gt;, &lt;code&gt;keyof&lt;/code&gt;, mapped types&lt;/li&gt;
&lt;li&gt;Master &lt;code&gt;tsconfig.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Understand strict mode, enums, and generics&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ React
&lt;/h3&gt;

&lt;p&gt;Still top in demand, but now with deeper performance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Server Components (RSC)&lt;/li&gt;
&lt;li&gt;Suspense + lazy loading&lt;/li&gt;
&lt;li&gt;TanStack Query, Zustand, Jotai&lt;/li&gt;
&lt;li&gt;Custom hooks &amp;amp; memoization best practices&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;🧪 &lt;strong&gt;Try this&lt;/strong&gt;: Migrate a small project to use &lt;strong&gt;RSC + Suspense + TailwindCSS&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🎨 Styling in 2025
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TailwindCSS&lt;/strong&gt;: Still the go-to&lt;/li&gt;
&lt;li&gt;CSS features: &lt;code&gt;:has()&lt;/code&gt;, container queries, &lt;code&gt;@layer&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Design tokens + dark mode support&lt;/li&gt;
&lt;li&gt;Avoid over-complicated custom CSS unless necessary&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧱 Modern Architecture Patterns
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Component-Driven Development&lt;/strong&gt; (CDD)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic Design&lt;/strong&gt;: atoms → molecules → organisms&lt;/li&gt;
&lt;li&gt;Folder structure: &lt;code&gt;features/&lt;/code&gt;, &lt;code&gt;entities/&lt;/code&gt;, &lt;code&gt;shared/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Build with reusability in mind&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤖 AI + Frontend = 💡
&lt;/h2&gt;

&lt;p&gt;Use AI to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scaffold code (&lt;code&gt;Copilot&lt;/code&gt;, &lt;code&gt;Codeium&lt;/code&gt;, &lt;code&gt;Cody&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Generate tests&lt;/li&gt;
&lt;li&gt;Convert Figma → JSX&lt;/li&gt;
&lt;li&gt;Explain errors, refactor code, write docs&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Devs using AI &lt;strong&gt;ship 2x faster&lt;/strong&gt; and focus more on UX &amp;amp; logic&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🌐 Frameworks to Learn in 2025
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Why Learn It&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Next.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fullstack, server components, edge rendering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Remix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Forms, nested routes, data mutations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Astro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zero-JS static sites, Markdown focused&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwik&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fastest TTI via resumability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🚀 Trending Skills for 2025
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Web Performance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Core Web Vitals = UX + SEO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Accessibility (a11y)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Legal + Inclusive + User Retention&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Testing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use Vitest + Playwright for fast feedback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GraphQL / REST&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Many teams now build &amp;amp; manage their own APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multiplayer UI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time apps are in demand (CRDTs/WebRTC)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🧰 Recommended Tools
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;VSCode + GitHub Copilot&lt;/li&gt;
&lt;li&gt;Chrome DevTools + React Profiler&lt;/li&gt;
&lt;li&gt;Storybook + Figma + Token Studio&lt;/li&gt;
&lt;li&gt;Vitest + Playwright&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📚 Useful Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/frontend" rel="noopener noreferrer"&gt;📘 roadmap.sh/frontend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://react.dev" rel="noopener noreferrer"&gt;💡 react.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tailwindui.com/" rel="noopener noreferrer"&gt;🎨 Tailwind UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://testing-playground.com/" rel="noopener noreferrer"&gt;🧪 Testing Playground&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://css-tricks.com/" rel="noopener noreferrer"&gt;🌐 CSS Tricks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🗣️ Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The frontend world in 2025 is more powerful and flexible than ever — but it can feel overwhelming.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Don’t chase every trend. Pick a &lt;strong&gt;tech stack&lt;/strong&gt;, &lt;strong&gt;build projects&lt;/strong&gt;, and &lt;strong&gt;share your learnings&lt;/strong&gt;. Growth comes from consistency.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  💬 Let’s connect!
&lt;/h2&gt;

&lt;p&gt;👉 What are &lt;strong&gt;you&lt;/strong&gt; learning in 2025? Drop your stack or goals in the comments!&lt;br&gt;&lt;br&gt;
🔁 Share this post if it helped.&lt;br&gt;&lt;br&gt;
🧠 Follow me for more practical dev content every week.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;#React #JavaScript #Frontend #Webdev #TypeScript&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>typescript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>🔥 The Ultimate Frontend Developer Guide for 2025</title>
      <dc:creator>Samir Tahiri</dc:creator>
      <pubDate>Thu, 03 Jul 2025 07:16:13 +0000</pubDate>
      <link>https://dev.to/samirtahiri/the-ultimate-frontend-developer-guide-for-2025-d75</link>
      <guid>https://dev.to/samirtahiri/the-ultimate-frontend-developer-guide-for-2025-d75</guid>
      <description>&lt;h1&gt;
  
  
  🔥 The Ultimate Frontend Developer Guide for 2025
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want to stay &lt;strong&gt;relevant&lt;/strong&gt;, &lt;strong&gt;hireable&lt;/strong&gt;, and &lt;strong&gt;ahead of the curve&lt;/strong&gt; as a frontend developer in 2025 — this post is your roadmap 🧭&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;ul&gt;
&lt;li&gt;Learn &lt;strong&gt;React&lt;/strong&gt;, &lt;strong&gt;TypeScript&lt;/strong&gt;, &lt;strong&gt;Next.js&lt;/strong&gt;, and &lt;strong&gt;TailwindCSS&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Get familiar with &lt;strong&gt;AI coding tools&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Embrace &lt;strong&gt;component-driven&lt;/strong&gt; and &lt;strong&gt;atomic design&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Explore &lt;strong&gt;micro frontends&lt;/strong&gt;, &lt;strong&gt;server components&lt;/strong&gt;, and &lt;strong&gt;edge rendering&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Master &lt;strong&gt;performance&lt;/strong&gt;, &lt;strong&gt;a11y&lt;/strong&gt;, and &lt;strong&gt;testing&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💻 Core Tech Stack to Master
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ JavaScript
&lt;/h3&gt;

&lt;p&gt;Still the core of the web. Focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modern features: &lt;code&gt;??&lt;/code&gt;, &lt;code&gt;?.&lt;/code&gt;, &lt;code&gt;async/await&lt;/code&gt;, &lt;code&gt;Proxy&lt;/code&gt;, &lt;code&gt;Intl&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Debugging and browser APIs&lt;/li&gt;
&lt;li&gt;Deep DOM understanding&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ TypeScript
&lt;/h3&gt;

&lt;p&gt;2025 is all about type safety:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Advanced typing: &lt;code&gt;infer&lt;/code&gt;, &lt;code&gt;satisfies&lt;/code&gt;, &lt;code&gt;keyof&lt;/code&gt;, mapped types&lt;/li&gt;
&lt;li&gt;Master &lt;code&gt;tsconfig.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Understand strict mode, enums, and generics&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ React
&lt;/h3&gt;

&lt;p&gt;Still top in demand, but now with deeper performance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Server Components (RSC)&lt;/li&gt;
&lt;li&gt;Suspense + lazy loading&lt;/li&gt;
&lt;li&gt;TanStack Query, Zustand, Jotai&lt;/li&gt;
&lt;li&gt;Custom hooks &amp;amp; memoization best practices&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;🧪 &lt;strong&gt;Try this&lt;/strong&gt;: Migrate a small project to use &lt;strong&gt;RSC + Suspense + TailwindCSS&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🎨 Styling in 2025
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TailwindCSS&lt;/strong&gt;: Still the go-to&lt;/li&gt;
&lt;li&gt;CSS features: &lt;code&gt;:has()&lt;/code&gt;, container queries, &lt;code&gt;@layer&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Design tokens + dark mode support&lt;/li&gt;
&lt;li&gt;Avoid over-complicated custom CSS unless necessary&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧱 Modern Architecture Patterns
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Component-Driven Development&lt;/strong&gt; (CDD)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic Design&lt;/strong&gt;: atoms → molecules → organisms&lt;/li&gt;
&lt;li&gt;Folder structure: &lt;code&gt;features/&lt;/code&gt;, &lt;code&gt;entities/&lt;/code&gt;, &lt;code&gt;shared/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Build with reusability in mind&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤖 AI + Frontend = 💡
&lt;/h2&gt;

&lt;p&gt;Use AI to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scaffold code (&lt;code&gt;Copilot&lt;/code&gt;, &lt;code&gt;Codeium&lt;/code&gt;, &lt;code&gt;Cody&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Generate tests&lt;/li&gt;
&lt;li&gt;Convert Figma → JSX&lt;/li&gt;
&lt;li&gt;Explain errors, refactor code, write docs&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Devs using AI &lt;strong&gt;ship 2x faster&lt;/strong&gt; and focus more on UX &amp;amp; logic&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🌐 Frameworks to Learn in 2025
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Why Learn It&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Next.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fullstack, server components, edge rendering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Remix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Forms, nested routes, data mutations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Astro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zero-JS static sites, Markdown focused&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwik&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fastest TTI via resumability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🚀 Trending Skills for 2025
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Web Performance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Core Web Vitals = UX + SEO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Accessibility (a11y)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Legal + Inclusive + User Retention&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Testing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use Vitest + Playwright for fast feedback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GraphQL / REST&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Many teams now build &amp;amp; manage their own APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multiplayer UI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time apps are in demand (CRDTs/WebRTC)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🧰 Recommended Tools
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;VSCode + GitHub Copilot&lt;/li&gt;
&lt;li&gt;Chrome DevTools + React Profiler&lt;/li&gt;
&lt;li&gt;Storybook + Figma + Token Studio&lt;/li&gt;
&lt;li&gt;Vitest + Playwright&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📚 Useful Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/frontend" rel="noopener noreferrer"&gt;📘 roadmap.sh/frontend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://react.dev" rel="noopener noreferrer"&gt;💡 react.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tailwindui.com/" rel="noopener noreferrer"&gt;🎨 Tailwind UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://testing-playground.com/" rel="noopener noreferrer"&gt;🧪 Testing Playground&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://css-tricks.com/" rel="noopener noreferrer"&gt;🌐 CSS Tricks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🗣️ Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The frontend world in 2025 is more powerful and flexible than ever — but it can feel overwhelming.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Don’t chase every trend. Pick a &lt;strong&gt;tech stack&lt;/strong&gt;, &lt;strong&gt;build projects&lt;/strong&gt;, and &lt;strong&gt;share your learnings&lt;/strong&gt;. Growth comes from consistency.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  💬 Let’s connect!
&lt;/h2&gt;

&lt;p&gt;👉 What are &lt;strong&gt;you&lt;/strong&gt; learning in 2025? Drop your stack or goals in the comments!&lt;br&gt;&lt;br&gt;
🔁 Share this post if it helped.&lt;br&gt;&lt;br&gt;
🧠 Follow me for more practical dev content every week.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;#React #JavaScript #Frontend #Webdev #TypeScript&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>typescript</category>
      <category>webdev</category>
      <category>frontend</category>
    </item>
    <item>
      <title>I Compared ChatGPT, Gemini, Claude, and DeepSeek for Coding – Here's What Surprised Me</title>
      <dc:creator>Samir Tahiri</dc:creator>
      <pubDate>Wed, 02 Jul 2025 16:26:11 +0000</pubDate>
      <link>https://dev.to/samirtahiri/i-compared-chatgpt-gemini-claude-and-deepseek-for-coding-heres-what-surprised-me-41m1</link>
      <guid>https://dev.to/samirtahiri/i-compared-chatgpt-gemini-claude-and-deepseek-for-coding-heres-what-surprised-me-41m1</guid>
      <description>&lt;h1&gt;
  
  
  🤖 I Compared ChatGPT, Gemini, Claude, and DeepSeek for Coding – Here's What Surprised Me
&lt;/h1&gt;

&lt;p&gt;As a developer, I’m constantly experimenting with tools to &lt;strong&gt;speed up my workflow&lt;/strong&gt; — and lately, that includes a lot of AI assistants.&lt;/p&gt;

&lt;p&gt;So I tested &lt;strong&gt;ChatGPT&lt;/strong&gt;, &lt;strong&gt;Gemini&lt;/strong&gt;, &lt;strong&gt;Claude&lt;/strong&gt;, and &lt;strong&gt;DeepSeek&lt;/strong&gt; for real-world dev tasks — from debugging to generating code — and here’s my breakdown of what each one did &lt;em&gt;well&lt;/em&gt; (and not so well).&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 1. ChatGPT (GPT-4 / GPT-4o)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistently the most &lt;strong&gt;accurate for code generation&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Great at &lt;strong&gt;understanding context&lt;/strong&gt;, even across multiple prompts&lt;/li&gt;
&lt;li&gt;Plugins &amp;amp; GPTs are useful for docs, UI, testing, etc.&lt;/li&gt;
&lt;li&gt;GPT-4o is fast, smart, and feels conversational&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Needs very specific prompts for edge cases&lt;/li&gt;
&lt;li&gt;Code explanations can get verbose&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Fullstack devs, code refactoring, architecture advice&lt;/p&gt;




&lt;h2&gt;
  
  
  🌐 2. Gemini (by Google)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean UI, integrated into Google ecosystem&lt;/li&gt;
&lt;li&gt;Surprisingly good at &lt;strong&gt;Google search + dev combo tasks&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Works well inside Docs, Gmail, and other Google tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can hallucinate or guess answers&lt;/li&gt;
&lt;li&gt;Sometimes gives &lt;strong&gt;confident but incorrect code&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Fewer dev-specific formatting features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Research-heavy tasks, documentation help&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 3. Claude (by Anthropic)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Super long context window&lt;/strong&gt; — great for pasting entire files&lt;/li&gt;
&lt;li&gt;Responses feel thoughtful, structured, and logical&lt;/li&gt;
&lt;li&gt;Great with explanations and summarizing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sometimes hesitates with full code solutions&lt;/li&gt;
&lt;li&gt;Less “code aggressive” than ChatGPT or DeepSeek&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Reading through long logs, refactoring, understanding legacy code&lt;/p&gt;




&lt;h2&gt;
  
  
  🔧 4. DeepSeek (Open Source-ish Dev AI)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trained specifically for &lt;strong&gt;coding tasks&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Faster and more aggressive than other open-source tools&lt;/li&gt;
&lt;li&gt;Lightweight, solid performance for common patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feels “robotic” — less conversational&lt;/li&gt;
&lt;li&gt;Not as reliable on complex or edge-case logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Auto-generating simple functions, code completions, fast experimentation&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚔️ TL;DR: Which AI Should You Use?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AI Tool&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Rating&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ChatGPT&lt;/td&gt;
&lt;td&gt;Fullstack coding, deep context&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini&lt;/td&gt;
&lt;td&gt;Research + documentation&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude&lt;/td&gt;
&lt;td&gt;Reading + summarizing large code&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;Quick code generation&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  💬 What Do You Think?
&lt;/h2&gt;

&lt;p&gt;Have you tried these tools as a developer?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which AI do &lt;em&gt;you&lt;/em&gt; trust most for real coding work — and why?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Drop your thoughts in the comments 👇 Let's compare experiences!&lt;/p&gt;




&lt;p&gt;👉 &lt;em&gt;Follow me for more developer tool breakdowns, frontend architecture tips, and real-world dev experiments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>developers</category>
    </item>
    <item>
      <title>I Compared ChatGPT, Gemini, Claude, and DeepSeek for Coding – Here's What Surprised Me</title>
      <dc:creator>Samir Tahiri</dc:creator>
      <pubDate>Wed, 02 Jul 2025 13:52:12 +0000</pubDate>
      <link>https://dev.to/samirtahiri/i-compared-chatgpt-gemini-claude-and-deepseek-for-coding-heres-what-surprised-me-4n21</link>
      <guid>https://dev.to/samirtahiri/i-compared-chatgpt-gemini-claude-and-deepseek-for-coding-heres-what-surprised-me-4n21</guid>
      <description>&lt;h1&gt;
  
  
  🤖 I Compared ChatGPT, Gemini, Claude, and DeepSeek for Coding – Here's What Surprised Me
&lt;/h1&gt;

&lt;p&gt;As a developer, I’m constantly experimenting with tools to &lt;strong&gt;speed up my workflow&lt;/strong&gt; — and lately, that includes a lot of AI assistants.&lt;/p&gt;

&lt;p&gt;So I tested &lt;strong&gt;ChatGPT&lt;/strong&gt;, &lt;strong&gt;Gemini&lt;/strong&gt;, &lt;strong&gt;Claude&lt;/strong&gt;, and &lt;strong&gt;DeepSeek&lt;/strong&gt; for real-world dev tasks — from debugging to generating code — and here’s my breakdown of what each one did &lt;em&gt;well&lt;/em&gt; (and not so well).&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 1. ChatGPT (GPT-4 / GPT-4o)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistently the most &lt;strong&gt;accurate for code generation&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Great at &lt;strong&gt;understanding context&lt;/strong&gt;, even across multiple prompts&lt;/li&gt;
&lt;li&gt;Plugins &amp;amp; GPTs are useful for docs, UI, testing, etc.&lt;/li&gt;
&lt;li&gt;GPT-4o is fast, smart, and feels conversational&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Needs very specific prompts for edge cases&lt;/li&gt;
&lt;li&gt;Code explanations can get verbose&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Fullstack devs, code refactoring, architecture advice&lt;/p&gt;




&lt;h2&gt;
  
  
  🌐 2. Gemini (by Google)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean UI, integrated into Google ecosystem&lt;/li&gt;
&lt;li&gt;Surprisingly good at &lt;strong&gt;Google search + dev combo tasks&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Works well inside Docs, Gmail, and other Google tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can hallucinate or guess answers&lt;/li&gt;
&lt;li&gt;Sometimes gives &lt;strong&gt;confident but incorrect code&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Fewer dev-specific formatting features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Research-heavy tasks, documentation help&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 3. Claude (by Anthropic)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Super long context window&lt;/strong&gt; — great for pasting entire files&lt;/li&gt;
&lt;li&gt;Responses feel thoughtful, structured, and logical&lt;/li&gt;
&lt;li&gt;Great with explanations and summarizing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sometimes hesitates with full code solutions&lt;/li&gt;
&lt;li&gt;Less “code aggressive” than ChatGPT or DeepSeek&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Reading through long logs, refactoring, understanding legacy code&lt;/p&gt;




&lt;h2&gt;
  
  
  🔧 4. DeepSeek (Open Source-ish Dev AI)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trained specifically for &lt;strong&gt;coding tasks&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Faster and more aggressive than other open-source tools&lt;/li&gt;
&lt;li&gt;Lightweight, solid performance for common patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weaknesses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feels “robotic” — less conversational&lt;/li&gt;
&lt;li&gt;Not as reliable on complex or edge-case logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Auto-generating simple functions, code completions, fast experimentation&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚔️ TL;DR: Which AI Should You Use?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AI Tool&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Rating&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ChatGPT&lt;/td&gt;
&lt;td&gt;Fullstack coding, deep context&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini&lt;/td&gt;
&lt;td&gt;Research + documentation&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude&lt;/td&gt;
&lt;td&gt;Reading + summarizing large code&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;Quick code generation&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  💬 What Do You Think?
&lt;/h2&gt;

&lt;p&gt;Have you tried these tools as a developer?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which AI do &lt;em&gt;you&lt;/em&gt; trust most for real coding work — and why?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Drop your thoughts in the comments 👇 Let's compare experiences!&lt;/p&gt;




&lt;p&gt;👉 &lt;em&gt;Follow me for more developer tool breakdowns, frontend architecture tips, and real-world dev experiments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>developers</category>
    </item>
    <item>
      <title>10 Subtle React Mistakes I Made – and What They Taught Me</title>
      <dc:creator>Samir Tahiri</dc:creator>
      <pubDate>Tue, 01 Jul 2025 18:12:37 +0000</pubDate>
      <link>https://dev.to/samirtahiri/10-subtle-react-mistakes-i-made-and-what-they-taught-me-bdk</link>
      <guid>https://dev.to/samirtahiri/10-subtle-react-mistakes-i-made-and-what-they-taught-me-bdk</guid>
      <description>&lt;h2&gt;
  
  
  1️⃣ Overusing &lt;code&gt;useEffect&lt;/code&gt; Instead of Thinking in React
&lt;/h2&gt;

&lt;p&gt;🔧 &lt;em&gt;What I did:&lt;/em&gt; Triggered effects for logic that could’ve been derived from props or state.&lt;br&gt;&lt;br&gt;
💡 &lt;em&gt;What I learned:&lt;/em&gt; If you think you need &lt;code&gt;useEffect&lt;/code&gt;, ask yourself: &lt;em&gt;Can I compute this directly from props or state?&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2️⃣ Forgetting the &lt;code&gt;key&lt;/code&gt; Prop in List Rendering
&lt;/h2&gt;

&lt;p&gt;🐞 &lt;em&gt;What it caused:&lt;/em&gt; UI glitches, especially with dynamic lists.&lt;br&gt;&lt;br&gt;
✅ &lt;em&gt;Fix:&lt;/em&gt; Always use a stable, unique key. Avoid using indexes if the list can change.&lt;/p&gt;




&lt;h2&gt;
  
  
  3️⃣ Treating State as Synchronous
&lt;/h2&gt;

&lt;p&gt;📉 &lt;em&gt;The mistake:&lt;/em&gt; Logging &lt;code&gt;console.log(state)&lt;/code&gt; right after &lt;code&gt;setState&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
🧠 &lt;em&gt;Reminder:&lt;/em&gt; State updates are &lt;strong&gt;asynchronous&lt;/strong&gt;. Use effects or callbacks to react to changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  4️⃣ Using Too Many &lt;code&gt;useState&lt;/code&gt; Calls
&lt;/h2&gt;

&lt;p&gt;🎢 &lt;em&gt;What happened:&lt;/em&gt; State spaghetti everywhere.&lt;br&gt;&lt;br&gt;
🔀 &lt;em&gt;Better approach:&lt;/em&gt; When state becomes complex or dependent, reach for &lt;code&gt;useReducer&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  5️⃣ Not Memoizing Expensive Calculations
&lt;/h2&gt;

&lt;p&gt;🐌 &lt;em&gt;Issue:&lt;/em&gt; Slow re-renders.&lt;br&gt;&lt;br&gt;
⚡ &lt;em&gt;Fix:&lt;/em&gt; Wrap expensive operations in &lt;code&gt;useMemo&lt;/code&gt; or functions in &lt;code&gt;useCallback&lt;/code&gt; where necessary.&lt;/p&gt;




&lt;h2&gt;
  
  
  6️⃣ Writing Logic Directly in JSX
&lt;/h2&gt;

&lt;p&gt;🤯 &lt;em&gt;What I did:&lt;/em&gt; Conditionals, array filtering, and more directly inside the return block.&lt;br&gt;&lt;br&gt;
🧹 &lt;em&gt;Fix:&lt;/em&gt; Extract complex logic before the return. JSX should stay clean and declarative.&lt;/p&gt;




&lt;h2&gt;
  
  
  7️⃣ Not Extracting Components Early Enough
&lt;/h2&gt;

&lt;p&gt;😩 &lt;em&gt;Result:&lt;/em&gt; Giant files, hard to reuse or test.&lt;br&gt;&lt;br&gt;
🔧 &lt;em&gt;Lesson:&lt;/em&gt; If a part of the UI feels reusable or has its own logic—split it into its own component.&lt;/p&gt;




&lt;h2&gt;
  
  
  8️⃣ Using Context for All Shared State
&lt;/h2&gt;

&lt;p&gt;🌍 &lt;em&gt;What happened:&lt;/em&gt; Context bloat, unnecessary re-renders.&lt;br&gt;&lt;br&gt;
🛠️ &lt;em&gt;Alternative:&lt;/em&gt; Use lightweight state libraries like &lt;strong&gt;Zustand&lt;/strong&gt;, &lt;strong&gt;Jotai&lt;/strong&gt;, or &lt;strong&gt;Redux Toolkit&lt;/strong&gt; when scaling up.&lt;/p&gt;




&lt;h2&gt;
  
  
  9️⃣ Not Handling Async States Properly
&lt;/h2&gt;

&lt;p&gt;⏳ &lt;em&gt;Mistake:&lt;/em&gt; Ignored loading/error states in fetch requests.&lt;br&gt;&lt;br&gt;
✅ &lt;em&gt;Fix:&lt;/em&gt; Always build in &lt;code&gt;loading&lt;/code&gt;, &lt;code&gt;error&lt;/code&gt;, and &lt;code&gt;success&lt;/code&gt; states for better UX and debugging.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔟 Ignoring Accessibility (a11y)
&lt;/h2&gt;

&lt;p&gt;🧩 &lt;em&gt;Examples:&lt;/em&gt; Using &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; instead of &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;, no keyboard support.&lt;br&gt;&lt;br&gt;
👀 &lt;em&gt;Reminder:&lt;/em&gt; Accessibility matters! Use semantic HTML and test with a keyboard/screen reader.&lt;/p&gt;




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

&lt;p&gt;React is an amazing tool, but small mistakes can snowball. These are just a few lessons I’ve learned the hard way—and I hope they help you write cleaner, faster, and more scalable React apps.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Your Turn!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Have you made any of these mistakes in React?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Which one tripped you up the most?&lt;/p&gt;

&lt;p&gt;Let me know in the comments—I’d love to hear your experience! 👇&lt;/p&gt;




&lt;p&gt;📌 &lt;em&gt;Follow me for more posts on React, frontend architecture, and web development tips.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Builder.io + Qwik: The Slot Problem No One Told You About (And How to Fix It)</title>
      <dc:creator>Samir Tahiri</dc:creator>
      <pubDate>Tue, 10 Jun 2025 09:05:15 +0000</pubDate>
      <link>https://dev.to/samirtahiri/builderio-qwik-the-slot-problem-no-one-told-you-about-and-how-to-fix-it-1953</link>
      <guid>https://dev.to/samirtahiri/builderio-qwik-the-slot-problem-no-one-told-you-about-and-how-to-fix-it-1953</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;👋 Hey Dev. I'm diving into Qwik and Builder.io, and I hit a strange problem that had no clear answers online. If you’re working with custom components and multiple slots in Builder, read this before you lose time.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧩 The Problem: Named Slots Don’t Work in Builder
&lt;/h2&gt;

&lt;p&gt;Qwik supports &lt;strong&gt;named slots&lt;/strong&gt; like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// MyLayout.tsx&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;Slot&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;@builder.io/qwik&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MyLayout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Slot&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"header"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Slot&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* default slot */&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Slot&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"footer"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you’d use it like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MyLayout&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="na"&gt;slot&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"header"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Header content&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Main content (default slot)&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;q&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="na"&gt;slot&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"footer"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Footer content&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;MyLayout&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ❌ The Catch
&lt;/h3&gt;

&lt;p&gt;When using Builder.io’s visual editor, there’s &lt;strong&gt;no way to assign content to named slots&lt;/strong&gt; like &lt;code&gt;q:slot="header"&lt;/code&gt; or &lt;code&gt;q:slot="footer"&lt;/code&gt;. It only supports the &lt;strong&gt;default unnamed slot&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This means your &lt;code&gt;&amp;lt;Slot name="..."&amp;gt;&lt;/code&gt; content won’t show up as intended.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ The Solution: Use Custom Props Instead of Slots
&lt;/h2&gt;

&lt;p&gt;Builder.io &lt;strong&gt;does&lt;/strong&gt; support custom &lt;code&gt;@input&lt;/code&gt; props. So instead of relying on slots, pass content directly via props:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔧 Refactored &lt;code&gt;MyLayout&lt;/code&gt; Component
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// MyLayout.tsx&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;MyLayoutProps&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;headerContent&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;JSX&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Element&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;footerContent&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;JSX&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Element&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;JSX&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Element&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MyLayout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MyLayoutProps&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headerContent&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;footerContent&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now your component still renders cleanly with isolated regions, but it works perfectly inside Builder.io.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 How to Use It in Builder
&lt;/h2&gt;

&lt;p&gt;In the Builder visual editor:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add your &lt;code&gt;MyLayout&lt;/code&gt; component from the components panel&lt;/li&gt;
&lt;li&gt;In the side panel, you’ll see &lt;code&gt;headerContent&lt;/code&gt; and &lt;code&gt;footerContent&lt;/code&gt; as assignable props&lt;/li&gt;
&lt;li&gt;Drag and drop elements or bind other components into those fields&lt;/li&gt;
&lt;li&gt;The default children (&lt;code&gt;main&lt;/code&gt;) still go in the regular content area&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It just works™ — no slot syntax needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ Why This Matters
&lt;/h2&gt;

&lt;p&gt;When building design systems or reusing layouts in Builder, relying on &lt;code&gt;Slot name="..."&lt;/code&gt; will &lt;strong&gt;break your components inside the visual editor&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Using custom input props gives you full control, better integration, and a cleaner editing experience.&lt;/p&gt;




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

&lt;p&gt;I think Qwik is amazing, and Builder.io is incredibly powerful. But small gaps like this can frustrate newcomers or slow down production teams.&lt;/p&gt;

&lt;p&gt;If this post helped you — or if you’ve solved this another way — let me know in the comments.&lt;/p&gt;

&lt;p&gt;Thanks for reading! 🧡&lt;/p&gt;




&lt;p&gt;Follow me for more Qwik + Builder tips soon — I’m just getting started!&lt;/p&gt;

</description>
      <category>qwik</category>
      <category>builderio</category>
      <category>webdev</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Qwik is NOT React — And That’s Exactly Why It’s Fast ⚡</title>
      <dc:creator>Samir Tahiri</dc:creator>
      <pubDate>Sat, 07 Jun 2025 10:48:12 +0000</pubDate>
      <link>https://dev.to/samirtahiri/qwik-is-not-react-and-thats-exactly-why-its-fast-jn</link>
      <guid>https://dev.to/samirtahiri/qwik-is-not-react-and-thats-exactly-why-its-fast-jn</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;What if your frontend could load instantly — even on 3G?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s not a fantasy. That’s &lt;strong&gt;Qwik&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I’ve spent years building React, Angular and Next.js apps, tuning bundle sizes, adding lazy loading, tweaking hydration... and still struggling to make things fast for real users.&lt;/p&gt;

&lt;p&gt;Then I found Qwik — and everything changed.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 What Is Qwik?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Qwik&lt;/strong&gt; is a next-gen web framework designed for &lt;em&gt;instant-loading apps&lt;/em&gt;, even at scale. Unlike React, Qwik &lt;strong&gt;doesn’t hydrate&lt;/strong&gt; your app on load. Instead, it uses a concept called &lt;strong&gt;resumability&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 "Resumability" means the app &lt;em&gt;picks up from where the server left off&lt;/em&gt; — no hydration, no re-running component trees on the client.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧠 The Problem With Hydration
&lt;/h2&gt;

&lt;p&gt;Frameworks like React/Next hydrate apps like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server renders HTML ✅
&lt;/li&gt;
&lt;li&gt;Then loads JS bundles 📦
&lt;/li&gt;
&lt;li&gt;Then re-runs the app to attach listeners 😩
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This delay hurts &lt;strong&gt;Time-to-Interactive (TTI)&lt;/strong&gt;, especially on mobile or low-end devices. Even with code-splitting, you still ship and hydrate large chunks of JS.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Qwik’s Game-Changer: Resumability
&lt;/h2&gt;

&lt;p&gt;Qwik does this instead:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Server renders the app with all state &lt;strong&gt;serialized into HTML&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Only loads the &lt;strong&gt;specific JS&lt;/strong&gt; needed when the user &lt;strong&gt;interacts&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;No re-running of the entire app. No hydration.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Result? 🔥 &lt;strong&gt;Time to Interactive = Time to First Byte&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  👋 My Use Case: Dynamic CMS + MFE Fragments
&lt;/h2&gt;

&lt;p&gt;I had a challenge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;Builder.io&lt;/strong&gt; for dynamic CMS-driven content&lt;/li&gt;
&lt;li&gt;Render &lt;strong&gt;fragments&lt;/strong&gt; of the app in multiple microfrontends (MFE)&lt;/li&gt;
&lt;li&gt;Keep bundle size tiny and performance top-tier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Qwik + Builder.io was a perfect fit.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Real Qwik Code Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tsx
// src/components/HelloWorld.tsx
import { component$, useSignal } from '@builder.io/qwik';

export const HelloWorld = component$(() =&amp;gt; {
  const count = useSignal(0);

  return (
    &amp;lt;button onClick$={() =&amp;gt; count.value++}&amp;gt;
      Clicks: {count.value}
    &amp;lt;/button&amp;gt;
  );
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ No hydration needed&lt;br&gt;
✅ Loads instantly&lt;br&gt;
✅ useSignal is reactive and trackable by Qwik’s optimizer&lt;/p&gt;

&lt;p&gt;🔌 &lt;strong&gt;Builder.io&lt;/strong&gt; Integration&lt;/p&gt;

&lt;p&gt;Builder.io lets me define dynamic pages visually, but I still want control over components. So I register my Qwik components 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;import { builder } from '@builder.io/sdk-qwik';
import { HeroBlock } from './HeroBlock';

builder.registerComponent(HeroBlock, {
  name: 'HeroBlock',
  inputs: [
    { name: 'title', type: 'text' },
    { name: 'subtitle', type: 'text' },
    { name: 'backgroundImage', type: 'file' },
  ],
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now my marketing team can use it visually, but the component is still blazing fast and 100% typed.&lt;/p&gt;

&lt;p&gt;📊 Lighthouse Score?&lt;/p&gt;

&lt;p&gt;💯 Zero hydration. Minimal JS. Instant interactivity.&lt;/p&gt;

&lt;p&gt;If you care about SEO, conversions, or user experience — this matters.&lt;/p&gt;

&lt;p&gt;🧠 Final Thoughts&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qwik&lt;/strong&gt; is not trying to be React. It’s trying to be what React was never built to be:&lt;/p&gt;

&lt;p&gt;Fast-by-default&lt;/p&gt;

&lt;p&gt;Serializable&lt;/p&gt;

&lt;p&gt;Hydration-less&lt;/p&gt;

&lt;p&gt;MFE-friendly&lt;/p&gt;

&lt;p&gt;And it works.&lt;/p&gt;

&lt;p&gt;🗣️ Over to You&lt;br&gt;
Have you tried Qwik yet?&lt;br&gt;
What’s holding you back — or what blew your mind?&lt;/p&gt;

&lt;p&gt;Drop a comment below.&lt;br&gt;
I’d love to hear how others are using Qwik in production or experimenting with it.&lt;/p&gt;

&lt;p&gt;And if you’re curious, I’ll happily share my full Builder + Qwik MFE setup in another post 🔧&lt;/p&gt;

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