<?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: Nick Vu</title>
    <description>The latest articles on DEV Community by Nick Vu (@vuthanhnguyen).</description>
    <link>https://dev.to/vuthanhnguyen</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F814179%2Fe5bebba2-3364-44db-9137-f2767c072119.png</url>
      <title>DEV Community: Nick Vu</title>
      <link>https://dev.to/vuthanhnguyen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vuthanhnguyen"/>
    <language>en</language>
    <item>
      <title>Bánh Mì: A Journey in Every Bite — Vietnam Drawn in Pure CSS</title>
      <dc:creator>Nick Vu</dc:creator>
      <pubDate>Sat, 08 Aug 2026 18:06:09 +0000</pubDate>
      <link>https://dev.to/vuthanhnguyen/banh-mi-a-journey-in-every-bite-vietnam-drawn-in-pure-css-m2p</link>
      <guid>https://dev.to/vuthanhnguyen/banh-mi-a-journey-in-every-bite-vietnam-drawn-in-pure-css-m2p</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, CSS Art&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;p&gt;Bánh mì is one of those foods that can make an ordinary moment feel complete. The first crackle of the baguette, the savory layers inside, the brightness of pickled carrot and daikon, the cool cucumber, fresh coriander, and a small flash of chili all arrive in one bite. It is practical, generous, full of contrast, and often the easiest answer to a very familiar question: “What should we eat?”&lt;/p&gt;

&lt;p&gt;That feeling became the starting point for this artwork. I did not want to draw only a sandwich. I wanted the page to feel like a small love letter to Vietnam: something warm, familiar, slightly nostalgic, and immediately recognizable even before a reader notices every detail.&lt;/p&gt;

&lt;p&gt;The central idea is &lt;strong&gt;“A journey in every bite.”&lt;/strong&gt; A large, cut-open bánh mì crosses a north-to-south silhouette of Vietnam. The map is rendered as a dark charcoal-lacquer serving board, while the sandwich sits above it in toasted gold, orange, green, cream, and chili red. The contrast keeps the bread as the focal point while allowing the shape of the country to remain clearly visible behind it.&lt;/p&gt;

&lt;p&gt;The composition borrows the mood of an aged Vietnamese street poster. The background uses warm parchment tones, faint grid lines, tiny imperfections, double borders, corner ornaments, restrained sea-wave marks, and a mixture of serif and compact uppercase typography. I wanted it to feel printed and handled rather than perfectly digital.&lt;/p&gt;

&lt;p&gt;Behind the map is a stationary, &lt;strong&gt;Đông Sơn-inspired&lt;/strong&gt; bronze drum. It is not intended as an exact historical reproduction. Instead, its central multi-ray star, concentric engraved rings, geometric rhythm, and burnished copper palette act as a visual reference to Vietnamese decorative heritage. Earlier versions used a simple orange sun, but the drum gave that large circle a more meaningful role in the story while staying quiet enough to support the sandwich.&lt;/p&gt;

&lt;p&gt;Geography is part of the composition rather than an afterthought. Hà Nội and TP. Hồ Chí Minh appear as red blinking markers, positioned near their locations on the map. Hoàng Sa, Trường Sa, and Phú Quốc are represented with small island forms and visible labels. The ingredients are not presented as claims about regional origins; they form a visual flavor journey inside the bánh mì itself.&lt;/p&gt;

&lt;p&gt;At the bottom left, the page includes a playful dictionary-style definition:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bánh mì · noun&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Vietnam’s crisp, crackly answer to “What should we eat?”—a baguette packed with savory fillings, bright pickles, fresh herbs, and inevitable crumbs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That line captures the tone I wanted for the whole piece: respectful, affectionate, and a little bit fun.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/editor/vuthanhnguyen92/embed/019fe273-96fa-7ca5-aca8-f8943a06a9c2?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;If the embed is not available in your reader, &lt;a href="https://codepen.io/editor/vuthanhnguyen92/pen/019fe273-96fa-7ca5-aca8-f8943a06a9c2" rel="noopener noreferrer"&gt;open the live Bánh Mì CSS artwork on CodePen&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Choosing a strict CSS-art constraint
&lt;/h3&gt;

&lt;p&gt;I built the final artwork with &lt;strong&gt;pure HTML and CSS&lt;/strong&gt;. There is no JavaScript, SVG, canvas, image asset, CSS library, dependency, or external font. Keeping that constraint made every visual decision more interesting: each shape had to come from ordinary browser primitives.&lt;/p&gt;

&lt;p&gt;The Vietnam mainland is a percentage-based &lt;code&gt;clip-path&lt;/code&gt; polygon placed inside a responsive map container. A slightly offset copy creates the shadow, and layered gradients add the charcoal-lacquer depth and grain. Browsers without polygon &lt;code&gt;clip-path&lt;/code&gt; support receive a simpler rounded fallback silhouette instead of a broken composition.&lt;/p&gt;

&lt;p&gt;The bánh mì is assembled from nested elements and pseudo-elements. Gradients form the toasted crust and soft highlights. Rounded borders create the baguette halves. Narrow rotated shapes become crust scores, carrot, and daikon. Repeating radial gradients suggest slices of pork and pâté texture. Conic gradients create cucumber sections. Small circles become chili rings, and groups of rounded leaves create coriander. Even the crumbs and steam are CSS shapes.&lt;/p&gt;

&lt;p&gt;The bronze drum also uses only CSS. Repeating radial and conic gradients produce engraved rings and geometric divisions. A &lt;code&gt;clip-path&lt;/code&gt; polygon forms the central star, while inset shadows and layered copper colors make the disc feel aged rather than flat.&lt;/p&gt;

&lt;h3&gt;
  
  
  Designing the motion
&lt;/h3&gt;

&lt;p&gt;The entrance sequence is deliberately simple. The poster fades in, the map arrives with opacity and a small translation, and the sandwich settles into place. These transforms do not collapse or expand element height, so the composition stays stable during loading.&lt;/p&gt;

&lt;p&gt;After the entrance, the ambient movement is restrained: steam drifts, coriander sways, crumbs fall, and the two city markers pulse. The bronze drum remains stationary. Removing its loop was an important decision because movement in such a large background shape competed with the food.&lt;/p&gt;

&lt;p&gt;For visitors who prefer less motion, &lt;code&gt;prefers-reduced-motion: reduce&lt;/code&gt; shortens animations, removes delays, and limits iteration. Decorative groups are hidden from assistive technology, the page keeps semantic heading order, and the complete artwork has a concise screen-reader description.&lt;/p&gt;

&lt;h3&gt;
  
  
  Making one poster work at several sizes
&lt;/h3&gt;

&lt;p&gt;Responsiveness was one of the hardest parts because this is an illustration, not a normal stack of page sections. The stage uses percentage positioning, &lt;code&gt;clamp()&lt;/code&gt;, viewport-aware sizes, and mobile-specific adjustments. The map keeps its tall aspect ratio, while the bánh mì scales down and recenters so neither end is cut off on a narrow screen. Typography, the definition card, island labels, city markers, and the drum all reduce without losing their hierarchy.&lt;/p&gt;

&lt;p&gt;I repeatedly checked the design at desktop, tablet, and phone proportions. I also removed horizontal overflow and avoided external requests, which keeps the CodePen self-contained.&lt;/p&gt;

&lt;h3&gt;
  
  
  Refining the story by removing things
&lt;/h3&gt;

&lt;p&gt;The final page came from many small corrections. The map silhouette was redrawn to make its north-to-south curve more recognizable. Hà Nội and TP. Hồ Chí Minh were repositioned. Phú Quốc was moved closer to its geographic relationship with the mainland, and the Hoàng Sa, Trường Sa, and Phú Quốc labels were restored after an overly aggressive cleanup.&lt;/p&gt;

&lt;p&gt;Early versions included a yellow dotted route, a cut-looking route marker, pickles, herbs, pork, pâté, and a chili scattered across the map. Individually those details were charming, but together they made the geography feel busy. Removing them gave the map space to breathe and made the bánh mì the unquestioned focal point. The sea marks were also limited to the right and lower areas so they would not visually pull the map westward.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I am proud of
&lt;/h3&gt;

&lt;p&gt;I am most proud that the image reads at two distances. From far away, it is a bold bánh mì crossing Vietnam. Up close, it rewards inspection: the bread scoring, cucumber wedges, tiny seeds, herb leaves, lacquer grain, island clusters, city pulses, crumbs, poster borders, and engraved drum rings all have their own small construction story.&lt;/p&gt;

&lt;p&gt;This project reminded me that effective CSS art is not only about adding clever shapes. It is also about hierarchy, subtraction, cultural care, responsive composition, and knowing when an animation should stop. The most technical solution is not always the best visual solution.&lt;/p&gt;

&lt;p&gt;If I continue the project, I would refine a few intermediate breakpoints and create a short making-of view that separates the map, drum, bread, and fillings into layers. For this challenge, though, I like that the final result remains a single dependency-free poster: Vietnamese comfort, drawn entirely in CSS.&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
    </item>
    <item>
      <title>Make our component's Tailwind class names more understandable in React's JSX</title>
      <dc:creator>Nick Vu</dc:creator>
      <pubDate>Sat, 15 Jun 2024 16:57:58 +0000</pubDate>
      <link>https://dev.to/vuthanhnguyen/make-our-components-tailwind-class-names-more-understandable-in-reacts-html-1e5h</link>
      <guid>https://dev.to/vuthanhnguyen/make-our-components-tailwind-class-names-more-understandable-in-reacts-html-1e5h</guid>
      <description>&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;Have you ever seen a long list of class names with barely knowing which components we try to debug?&lt;/p&gt;

&lt;p&gt;I cannot deny that Tailwind helps our web development faster, especially, with styling, but when we try to use many of its utility class names within a single element. As a result, we cannot see the actual identity of that component and it may become a guessing game.&lt;/p&gt;

&lt;p&gt;One of the solutions is that we can add a unique id or class name to identify that component &lt;/p&gt;

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

&lt;p&gt;but I'd admit as a developer that sometimes, I'm too lazy to put it, or copy/paste components somewhere and forget to change their class name identities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;

&lt;p&gt;To solve the above problem programmatically, I implemented &lt;a href="https://legacy.reactjs.org/docs/higher-order-components.html"&gt;a higher-order component&lt;/a&gt;&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;withComponentClassName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;WrappedComponent&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;WrapperComponent&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="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;componentName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
      &lt;span class="nx"&gt;WrappedComponent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;displayName&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;WrappedComponent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&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;className&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;componentName&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`c-&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;componentName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;className&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;WrappedComponent&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="sr"&gt;/&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;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;WrapperComponent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;And then use it in components&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;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;withComponentClassName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;MyComponent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that, it generates JSX like below&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;div&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;c-MyComponent&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;MyComponent&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="sr"&gt;/&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;/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;Now every single component will have this pattern in DOM. We can clearly see where those elements are from.&lt;/p&gt;

&lt;p&gt;The only trade-off with this approach is that we have an extra &lt;code&gt;div&lt;/code&gt; element wrapping our component that increases our DOM size, but in the long run, it has boosted my team's development as well as UI debugging.&lt;/p&gt;




&lt;p&gt;3 questions I stumped upon when I developed this approach:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We still can forget to place it in our components, how to prevent that? &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We implemented a custom ESLint rule to verify &lt;code&gt;export default&lt;/code&gt; of our components with &lt;code&gt;withComponentClassName&lt;/code&gt; usage (I'll share it with more detail in another post)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can we embed that class name into the component's elements directly instead of adding an extra &lt;code&gt;div&lt;/code&gt;? &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The solution is more complicated and actually, it may make unexpected re-renderings due to class name prop/state updates, so we've accepted this simpler solution&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can we hide that class name addition layer on production? &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yes, we can add a condition in &lt;code&gt;withComponentClassName&lt;/code&gt; like below&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;withComponentClassName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;WrappedComponent&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="c1"&gt;//production variable depends on your codebase setup&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;production&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;true&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="nx"&gt;WrappedComponent&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;WrapperComponent&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="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="nx"&gt;WrapperComponent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

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

&lt;/div&gt;



</description>
      <category>tailwindcss</category>
      <category>react</category>
      <category>javascript</category>
      <category>hoc</category>
    </item>
    <item>
      <title>ReactJS vs SolidJS</title>
      <dc:creator>Nick Vu</dc:creator>
      <pubDate>Sun, 07 Aug 2022 15:52:00 +0000</pubDate>
      <link>https://dev.to/vuthanhnguyen/reactjs-vs-solidjs-25m4</link>
      <guid>https://dev.to/vuthanhnguyen/reactjs-vs-solidjs-25m4</guid>
      <description>&lt;p&gt;I have had experience with &lt;a href="https://github.com/facebook/react"&gt;ReactJS&lt;/a&gt; for a while, and recently, I found a new interesting framework which is &lt;a href="https://www.solidjs.com/"&gt;SolidJS&lt;/a&gt;. Its community is still very small (~21k stars now on &lt;a href="https://github.com/solidjs/solid"&gt;Github&lt;/a&gt;), so I'm not sure it's mature enough for enterprise products.&lt;/p&gt;

&lt;p&gt;Right now I'm standing for ReactJS because of the huge community support but I believe SolidJS will have a bright future too.&lt;/p&gt;

&lt;p&gt;I raised this post to get your opinions about SolidJS vs ReactJS.&lt;/p&gt;

&lt;p&gt;A few questions in my mind&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SolidJS is good enough for real web development?&lt;/li&gt;
&lt;li&gt;Which one is faster in terms of web performance?&lt;/li&gt;
&lt;li&gt;If you choose SolidJS, why?&lt;/li&gt;
&lt;li&gt;Any strong points from SolidJS that can replace ReactJS in the future?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I really appreciate your precious ideas and welcome all open discussions.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>react</category>
      <category>solidjs</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
