<?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: Lyumo</title>
    <description>The latest articles on DEV Community by Lyumo (@lyumotech).</description>
    <link>https://dev.to/lyumotech</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%2F1190598%2F511e9ed6-2582-457c-ab84-b24310bce35b.png</url>
      <title>DEV Community: Lyumo</title>
      <link>https://dev.to/lyumotech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lyumotech"/>
    <language>en</language>
    <item>
      <title>Using interactive rebase in Git</title>
      <dc:creator>Lyumo</dc:creator>
      <pubDate>Sun, 09 Jun 2024 20:20:38 +0000</pubDate>
      <link>https://dev.to/lyumotech/using-interactive-rebase-in-git-361d</link>
      <guid>https://dev.to/lyumotech/using-interactive-rebase-in-git-361d</guid>
      <description>&lt;h2&gt;
  
  
  About
&lt;/h2&gt;

&lt;p&gt;An interactive rebase in Git is a process that allows you to edit a sequence of commits. This is typically used to clean up commit history before sharing changes with other members of the team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case study
&lt;/h2&gt;

&lt;p&gt;Let's study an example of making a clear 3-commit history out of the initial 5 commits. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start an interactive rebase:&lt;/strong&gt; Start an interactive rebase for the last 5 commits. If your branch has 5 commits ahead of the base branch, you can use:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   git rebase -i HEAD~5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Interactive rebase editor:&lt;/strong&gt; This command will open your default text editor with a list of the last 5 commits, starting from the oldest commit to the newest. The lines will look something like this:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   pick abc123 Commit message 1
   pick def456 Commit message 2
   pick ghi789 Commit message 3
   pick jkl012 Commit message 4
   pick mno345 Commit message 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Edit the commits:&lt;/strong&gt; Change the word "pick" to specify what you want to do with each commit. To squash commits into one, you can use the word "squash" or "s" for short. For example, if you want to combine commits 2, 3, and 4 into one, you would modify the list like this:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   pick abc123 Commit message 1
   pick def456 Commit message 2
   s ghi789 Commit message 3
   s jkl012 Commit message 4
   pick mno345 Commit message 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Save and close the editor:&lt;/strong&gt; After modifying the list, save and close the editor. Git will start the rebase process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Edit commit messages:&lt;/strong&gt; Git will then reopen the editor to allow you to combine commit messages. You can edit the commit messages to reflect the new commits. For example, you might see something like this:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   # This is a combination of 3 commits.
   # The first commit's message is:

   Commit message 2

   # This is the 2nd commit message:

   Commit message 3

   # This is the 3rd commit message:

   Commit message 4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can edit this to create a new combined commit message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Combined commit message for commits 2, 3, and 4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Complete the rebase:&lt;/strong&gt; Save and close the editor. Git will complete the rebase process.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

&lt;p&gt;Assume your commits are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;abc123&lt;/code&gt; - Initial setup&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;def456&lt;/code&gt; - Added feature A&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ghi789&lt;/code&gt; - Fixed bug in feature A&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;jkl012&lt;/code&gt; - Improved feature A&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mno345&lt;/code&gt; - Added feature B&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You want to have the following commits:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Initial setup&lt;/li&gt;
&lt;li&gt;Feature A (including the fix and improvement)&lt;/li&gt;
&lt;li&gt;Feature B&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your rebase edit list would look 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;pick abc123 Initial setup
pick def456 Added feature A
s ghi789 Fixed bug in feature A
s jkl012 Improved feature A
pick mno345 Added feature B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And after saving the first list, you would combine the messages of the second, third, and fourth commits into something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Feature A (including the fix and improvement)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;The editor used for an interactive rebase in Git is determined by your Git configuration and environment settings. By default, Git uses the default editor configured for your system, such as &lt;code&gt;vi&lt;/code&gt; or &lt;code&gt;nano&lt;/code&gt; on many Unix-like systems, or Notepad on Windows.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By following these steps, you can adjust your commits into three sensible commits with the desired commit messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other commands for interactive rebase
&lt;/h2&gt;

&lt;p&gt;During an interactive rebase in Git, several operations can be performed to modify the commit history. Here’s a short list of the key operations along with their syntax and explanations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;pick&lt;/strong&gt; (or &lt;code&gt;p&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Syntax&lt;/strong&gt;: &lt;code&gt;pick &amp;lt;commit-hash&amp;gt; &amp;lt;commit-message&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explanation&lt;/strong&gt;: Use the commit as-is. This is the default operation and is used to keep a commit unchanged.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;reword&lt;/strong&gt; (or &lt;code&gt;r&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Syntax&lt;/strong&gt;: &lt;code&gt;reword &amp;lt;commit-hash&amp;gt; &amp;lt;commit-message&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explanation&lt;/strong&gt;: Use the commit, but modify the commit message.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;edit&lt;/strong&gt; (or &lt;code&gt;e&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Syntax&lt;/strong&gt;: &lt;code&gt;edit &amp;lt;commit-hash&amp;gt; &amp;lt;commit-message&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explanation&lt;/strong&gt;: Pause the rebase to allow amendments to the commit. This can be used to change the content of the commit or the commit message.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;squash&lt;/strong&gt; (or &lt;code&gt;s&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Syntax&lt;/strong&gt;: &lt;code&gt;squash &amp;lt;commit-hash&amp;gt; &amp;lt;commit-message&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explanation&lt;/strong&gt;: Combine the commit with the previous commit, merging their changes and allowing you to edit the commit message.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fixup&lt;/strong&gt; (or &lt;code&gt;f&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Syntax&lt;/strong&gt;: &lt;code&gt;fixup &amp;lt;commit-hash&amp;gt; &amp;lt;commit-message&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explanation&lt;/strong&gt;: Similar to &lt;code&gt;squash&lt;/code&gt;, but discard the commit message of the commit being combined. The commit message of the previous commit is used.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;exec&lt;/strong&gt; (or &lt;code&gt;x&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Syntax&lt;/strong&gt;: &lt;code&gt;exec &amp;lt;command&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explanation&lt;/strong&gt;: Execute a shell command. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;drop&lt;/strong&gt; (or &lt;code&gt;d&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Syntax&lt;/strong&gt;: &lt;code&gt;drop &amp;lt;commit-hash&amp;gt; &amp;lt;commit-message&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explanation&lt;/strong&gt;: Remove the commit entirely. This can be used to delete unnecessary or undesired commits from the history.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;break&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Syntax&lt;/strong&gt;: &lt;code&gt;break&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explanation&lt;/strong&gt;: Pause the rebase at this point to allow inspection or further manual intervention. This is useful for debugging the state of the repository.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And others.&lt;/p&gt;

&lt;h3&gt;
  
  
  Usage example for some of the commands
&lt;/h3&gt;

&lt;p&gt;Here's an example of what the rebase instructions file might look like when you initiate an interactive rebase:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pick a1b2c3d First commit message
reword b2c3d4e Second commit message
edit c3d4e5f Third commit message
squash d4e5f6g Fourth commit message
fixup e5f6g7h Fifth commit message
drop f6g7h8i Sixth commit message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alternatively, use the first letters to for calling each of the commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p a1b2c3d First commit message
r b2c3d4e Second commit message
e c3d4e5f Third commit message
s d4e5f6g Fourth commit message
f e5f6g7h Fifth commit message
d f6g7h8i Sixth commit message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History"&gt;Git Tools - Rewriting History&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vimsheet.com/"&gt;Vim Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>repository</category>
      <category>github</category>
      <category>versioncontrol</category>
      <category>git</category>
    </item>
    <item>
      <title>My experience with preparation and passing the AWS Cloud Practitioner exam</title>
      <dc:creator>Lyumo</dc:creator>
      <pubDate>Sun, 26 May 2024 20:31:52 +0000</pubDate>
      <link>https://dev.to/lyumotech/my-experience-with-preparation-and-passing-the-aws-cloud-practitioner-exam-pn0</link>
      <guid>https://dev.to/lyumotech/my-experience-with-preparation-and-passing-the-aws-cloud-practitioner-exam-pn0</guid>
      <description>&lt;h2&gt;
  
  
  What is this certification about
&lt;/h2&gt;

&lt;p&gt;AWS Cloud Practitioner Certificate is the entry-level certificate offered by Amazon for their services. While the official recommendation is to have about 6 months of experience with AWS services, many people without any experience and even outside of the technical field successfully passed this exam.&lt;/p&gt;

&lt;p&gt;The focus of the exam is to test a participant on as broad a field as possible. I believe the test itself is not difficult from an understanding point of view but could be challenging if memorization is not your strongest trait.&lt;/p&gt;

&lt;h2&gt;
  
  
  My background
&lt;/h2&gt;

&lt;p&gt;As a native mobile developer, I had zero experience with AWS in particular and the cloud in general.&lt;/p&gt;

&lt;h2&gt;
  
  
  Study plan and resources
&lt;/h2&gt;

&lt;p&gt;I purchased the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.udemy.com/course/aws-certified-cloud-practitioner-new/"&gt;[NEW] Ultimate AWS Certified Cloud Practitioner CLF-C02&lt;/a&gt; is a full preparation course. It includes videos, slide set, practice videos, and short quizzes after each section. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Practice tests: &lt;a href="https://www.udemy.com/course/practice-exams-aws-certified-cloud-practitioner/"&gt;6 Practice Exams | AWS Certified Cloud Practitioner CLF-C02&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;  The benefit of those is the explanation for the answers to each question. Reviewing and analyzing those was one of the most important steps of my preparations. &lt;/p&gt;

&lt;p&gt;Those materials are frequently available on sale (as usual for Udemy) for around ~15 euro each.&lt;/p&gt;

&lt;p&gt;Later, I learned about &lt;a href="https://www.youtube.com/watch?v=NhDYbskXRgc"&gt;the free alternative by freeCodeCamp&lt;/a&gt;. Even though I haven't tried it, many people find this material very useful, so if for some reason Udemy doesn't work, it could have also been a good option.&lt;/p&gt;

&lt;p&gt;There are plenty of exam materials and recommendations for this certification exam from AWS itself. I made the mistake of navigating through AWS's own free courses first, and they were not very useful for me. &lt;/p&gt;

&lt;p&gt;Their official &lt;a href="https://d1.awsstatic.com/training-and-certification/docs-cloud-practitioner/AWS-Certified-Cloud-Practitioner_Exam-Guide.pdf"&gt;exam guide&lt;/a&gt;, while important, is also not particularly helpful, because it just lists pretty much every single service AWS provides.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exam highlights
&lt;/h2&gt;

&lt;p&gt;Preparation process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;As a person who used to dive deep into unknown topics, I had to change my approach to studies to focus more on breadth instead of depth for this exam.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Spreading the preparation throughout multiple days/weeks over shorter (under 1 hour) study sessions was more useful than trying to study long hours.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Going through test exam questions as early as possible to get used to the format and wording helped a lot.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before the exam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I was not ready for the multi-step exam sign-in process and all the hiccups. AWS portal provided a testing function, I made all necessary tests the day before the exam on a separate laptop and didn't touch it until the exam time, yet right before the exam there were still errors with the software. Luckily, everything was resolved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scheduling exams in the morning, not cramming the night before, going to sleep, and getting to the exam with a fresh head helped also.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During the exam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use the elimination principle. Scanning all answers and excluding those that don't fit was one of the most efficient tools.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If don't remember something, mark a question for review and come back to it later. This approach allowed me to save a lot of time.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;As a result of my preparations, I passed from the first attempt.&lt;br&gt;
Preparing for the exam and going through the exam itself has been a valuable experience for me. Now I feel confident working on more similar tests.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/certification/certified-cloud-practitioner/"&gt;Exam starting page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://d1.awsstatic.com/training-and-certification/docs-cloud-practitioner/AWS-Certified-Cloud-Practitioner_Exam-Guide.pdf"&gt;The official exam guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/aws-certified-cloud-practitioner-new/"&gt;[NEW] Ultimate AWS Certified Cloud Practitioner CLF-C02&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/practice-exams-aws-certified-cloud-practitioner/"&gt;6 Practice Exams | AWS Certified Cloud Practitioner CLF-C02&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=NhDYbskXRgc"&gt;Free lectures by freeCodeCamp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>certifications</category>
      <category>cloudpractitioner</category>
    </item>
    <item>
      <title>Multiple Node.js versions - setup memo</title>
      <dc:creator>Lyumo</dc:creator>
      <pubDate>Sun, 19 May 2024 07:14:48 +0000</pubDate>
      <link>https://dev.to/lyumotech/multiple-nodejs-versions-setup-memo-42a3</link>
      <guid>https://dev.to/lyumotech/multiple-nodejs-versions-setup-memo-42a3</guid>
      <description>&lt;p&gt;While a lot of times, installing the latest version of Node.js via preferred package manager is enough, in some cases more flexibility is needed.&lt;br&gt;
For example, sometimes there are several projects to work on, each of which relies on a specific Node.js version. &lt;/p&gt;

&lt;p&gt;This blog post presents an overview of Node.js setup to support the above scenario.&lt;/p&gt;

&lt;p&gt;There are two commonly used tools for managing multiple Node.js versions - &lt;code&gt;nvm&lt;/code&gt; and &lt;code&gt;n&lt;/code&gt;.&lt;br&gt;
In this post, we will use &lt;code&gt;nvm&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Using nvm (Node Version Manager)
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;nvm&lt;/code&gt;, or Node Version Manager, is a solution provided by Node.js team themselves. It is an &lt;a href=""&gt;open source&lt;/a&gt; with straightforward installation and usage flow.&lt;/p&gt;

&lt;p&gt;Install with the package manager of your choice. For macOS, I will use Homebrew:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;nvm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, let's check available Node.js versions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm ls-remote
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's install the first version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm &lt;span class="nb"&gt;install&lt;/span&gt; &amp;lt;version&amp;gt;  &lt;span class="c"&gt;# Replace &amp;lt;version&amp;gt; with the desired version, e.g., 18.16.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Installed versions could be checked with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm &lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To switch between versions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm use &amp;lt;version&amp;gt; &lt;span class="c"&gt;# Replace &amp;lt;version&amp;gt; with the desired version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With that, the setup of multiple Node.js versions has been completed.&lt;/p&gt;

&lt;p&gt;It is also possible to set the version as default one with &lt;code&gt;nvm alias default &amp;lt;version&amp;gt;&lt;/code&gt;.&lt;br&gt;
See &lt;a href="https://stackoverflow.com/a/47787025"&gt;this&lt;/a&gt; answer for more details.&lt;br&gt;
Finally, check the version with &lt;code&gt;node --version&lt;/code&gt; command.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/docs/latest/api/"&gt;Node.js official documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nvm-sh/nvm"&gt;NVM Github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>node</category>
      <category>setup</category>
      <category>guide</category>
    </item>
    <item>
      <title>Tailwind Handbook - Part II</title>
      <dc:creator>Lyumo</dc:creator>
      <pubDate>Sat, 27 Apr 2024 15:00:27 +0000</pubDate>
      <link>https://dev.to/lyumotech/tailwind-handbook-part-ii-3o92</link>
      <guid>https://dev.to/lyumotech/tailwind-handbook-part-ii-3o92</guid>
      <description>&lt;h2&gt;
  
  
  Review
&lt;/h2&gt;

&lt;p&gt;Tailwind CSS is a utility-first CSS framework that provides a set of pre-defined CSS classes. Instead of writing traditional CSS rules, developers assemble layouts and styles directly in HTML using these utility classes. &lt;/p&gt;

&lt;p&gt;In this post, let's go through examples of basic components implemented with the support  of Tailwind CSS. &lt;br&gt;
For more of the basic details, check out &lt;a href="https://dev.to/lyumotech/tailwind-handbook-part-i-1l2d"&gt;part I&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Building common components
&lt;/h2&gt;

&lt;p&gt;Web applications often feature repeating design patterns: navigation bars, hero sections, card layouts, form elements, and more. Instead of writing the same code repeatedly for each instance, it is a good practice to create reusable components. Using custom reusable components provides the following benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Consistency:&lt;/strong&gt; Components ensure a unified look and feel across your entire application, avoiding unintentional variations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficiency:&lt;/strong&gt; Building a component once saves a significant time and effort compared to styling individual elements each time they appear.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainability:&lt;/strong&gt; Changes to a component's style will make future updates easier and reduce the risk of breaking unrelated elements.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Basic structure
&lt;/h3&gt;

&lt;p&gt;Before jumping into components' details, let's get familiar with the basic component structure.&lt;br&gt;
Let's assume we want to have a HelloWorld component with only text in it. Here's the example implementation:&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="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;HelloWorldProps&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;className&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Allows for optional additional styling&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;HelloWorld&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;HelloWorldProps&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&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="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="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`font-bold text-2xl text-center &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="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      Hello World!
    &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;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;HelloWorld&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript Interface:&lt;/strong&gt; We define an optional &lt;code&gt;className&lt;/code&gt; prop in case users want to apply additional Tailwind classes for customization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic Styling:&lt;/strong&gt; The component includes some basic inline styling for font size and centering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSX Structure:&lt;/strong&gt; A simple &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; contains the "Hello World!" text. &lt;code&gt;className&lt;/code&gt; dynamically combines default styles with any provided via the &lt;code&gt;className&lt;/code&gt; prop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, let's see how this component could be used (without and with some customization):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;HelloWorld&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;HelloWorld&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"text-blue-500 underline"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Foundation:&lt;/strong&gt; While basic, this can be expanded with more elaborate styling, dynamic text content, or interactivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customization:&lt;/strong&gt; The optional &lt;code&gt;className&lt;/code&gt; prop allows users to tailor the component's appearance when needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, let's explore how to build the most common components using Tailwind CSS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Navigation bar
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A navigation bar is a core element of most websites. It provides users with a clear and structured way to explore different sections of the web page.&lt;/li&gt;
&lt;li&gt;With Tailwind CSS, you'll build navbars using a combination of utility classes for layout, colors, spacing, typography, and potentially interactive behaviors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When to Use?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Include a navigation bar in almost any website or web application to give users a primary means of orientation.&lt;/li&gt;
&lt;li&gt;The exception might be extremely simple single-page designs (but they would still often have navigation bar, just with navigation to a particular sections on the page).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Short Implementation Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's a basic navigation bar example using Tailwind CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;nav&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;{`flex&lt;/span&gt; &lt;span class="na"&gt;space-x-8&lt;/span&gt; &lt;span class="na"&gt;w-full&lt;/span&gt; &lt;span class="na"&gt;justify-center&lt;/span&gt;&lt;span class="err"&gt;`}&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#home"&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"hover:text-blue-500"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Home
  &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#about"&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"hover:text-blue-500"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    About
  &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#services"&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"hover:text-blue-500"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Services
  &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#contact"&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"hover:text-blue-500"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Contact
  &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Let's break it down:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;nav&lt;/code&gt; element:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;flex&lt;/code&gt;:&lt;/strong&gt; Turns the &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt; element into a flexbox container, allowing flexible arrangement of its children (the navigation links).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;space-x-8&lt;/code&gt;:&lt;/strong&gt; Adds consistent horizontal spacing of 8 units (likely based on your &lt;code&gt;tailwind.config.js&lt;/code&gt; spacing scale) between the navigation links.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;w-full&lt;/code&gt;:&lt;/strong&gt; Forces the navigation bar to take up the full available width of its parent container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;justify-center&lt;/code&gt;:&lt;/strong&gt; Centers the navigation links horizontally within the navbar.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;a&lt;/code&gt; elements (navigation links)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;hover:text-blue-500&lt;/code&gt;:&lt;/strong&gt; Changes the text color of the links to blue (specific blue shade based on &lt;code&gt;tailwind.config.js&lt;/code&gt; setup) when the user hovers over them.&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;&lt;strong&gt;Overall Functionality&lt;/strong&gt;&lt;br&gt;
This code creates a horizontal navigation bar with the following characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full width:&lt;/strong&gt; The navigation bar extends across the entire available width of its container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Centered links:&lt;/strong&gt; The navigation links are horizontally centered within the bar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spacing:&lt;/strong&gt; Adequate spacing is provided between each navigation link.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hover effect:&lt;/strong&gt; The text color of the links changes on hover, providing visual feedback to the user.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note 1:&lt;/strong&gt; The specific spacing value (&lt;code&gt;space-x-8&lt;/code&gt;) and the color (&lt;code&gt;text-blue-500&lt;/code&gt;) can be customized in the &lt;code&gt;tailwind.config.js&lt;/code&gt; file or by using different Tailwind utility classes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note 2:&lt;/strong&gt; This is a very basic example. Real-world navigation bars often involve more complexity like dropdowns, responsive adjustments for different screen sizes, and more elaborate styling.&lt;/p&gt;
&lt;h3&gt;
  
  
  Hero section
&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;What?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A hero section is a prominent banner-like area often placed at the top of a website. It's designed to grab attention and convey a key message about your product, service, or brand.&lt;/li&gt;
&lt;li&gt;Hero sections typically feature a combination of headings, a call to action (CTA) button, and sometimes background images or videos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When to Use?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilize hero sections on landing pages, homepages, or the top of key content sections to make a strong first impression.&lt;/li&gt;
&lt;li&gt;They are perfect for highlighting your most important value propositions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Short Implementation Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's a simple hero section built with Tailwind CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"bg-gray-900 text-white py-20 text-center"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"container mx-auto"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"text-4xl font-bold mb-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Your Product Headline&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"text-lg mb-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      A short and description of the website.
    &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt;
      &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt;
      &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Get Started Now
    &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Let's break it down:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Layout:&lt;/strong&gt; &lt;code&gt;container&lt;/code&gt; and &lt;code&gt;mx-auto&lt;/code&gt; center content horizontally. &lt;code&gt;text-center&lt;/code&gt; aligns elements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Colors:&lt;/strong&gt; &lt;code&gt;bg-gray-900&lt;/code&gt; and &lt;code&gt;text-white&lt;/code&gt; provide a contrasting theme.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spacing:&lt;/strong&gt; &lt;code&gt;py-20&lt;/code&gt; creates vertical padding, &lt;code&gt;mb-4&lt;/code&gt; and &lt;code&gt;mb-8&lt;/code&gt; add spacing to elements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typography:&lt;/strong&gt; &lt;code&gt;text-4xl&lt;/code&gt;, &lt;code&gt;font-bold&lt;/code&gt;, and &lt;code&gt;text-lg&lt;/code&gt; size and style text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Button:&lt;/strong&gt; &lt;code&gt;bg-blue-500&lt;/code&gt;, &lt;code&gt;hover:bg-blue-700&lt;/code&gt;, &lt;code&gt;text-white&lt;/code&gt;, &lt;code&gt;font-bold&lt;/code&gt;, &lt;code&gt;py-3&lt;/code&gt;, &lt;code&gt;px-6&lt;/code&gt;, and &lt;code&gt;rounded&lt;/code&gt; style the call-to-action button.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important Note:&lt;/strong&gt; Hero sections can become much more visually elaborate. You can improve it by adding background images, gradients, split layouts (text on one side, image on the other), and subtle animations with Tailwind's utility classes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Card layouts
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cards are versatile content containers used to present information in a visually organized and digestible way. They often feature an image, title, descriptive text, and sometimes call-to-action elements.&lt;/li&gt;
&lt;li&gt;Tailwind makes it easy to create consistent and flexible card layouts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When to Use?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Display collections of related content: product listings, blog teasers, team member profiles, testimonials... the possibilities are endless!&lt;/li&gt;
&lt;li&gt;Create grid-like layouts to present information in a scannable format.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Short Implementation Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's a basic card layout example using Tailwind CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"bg-white shadow-md rounded-lg p-6"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h2&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"text-xl font-bold mb-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Card Title&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"text-gray-700"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Some descriptive text about this card&lt;span class="ni"&gt;&amp;amp;apos;&lt;/span&gt;s content.
  &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt;
    &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt;
    &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"inline-block bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded mt-4"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Learn More
  &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Let's break it down:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Card Styling:&lt;/strong&gt; &lt;code&gt;bg-white&lt;/code&gt;, &lt;code&gt;shadow-md&lt;/code&gt;, &lt;code&gt;rounded-lg&lt;/code&gt;, and &lt;code&gt;p-6&lt;/code&gt; give individual cards structure and visual definition.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content:&lt;/strong&gt; Images, headings (&lt;code&gt;text-xl&lt;/code&gt;, &lt;code&gt;font-bold&lt;/code&gt;), text (&lt;code&gt;text-gray-700&lt;/code&gt;), and a button (&lt;code&gt;bg-blue-500&lt;/code&gt;, etc.) comprise the card content.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important Note:&lt;/strong&gt; Cards can be customized extensively. Try background colors, different image aspect ratios, variations in content structure, and more to tailor them for specific use cases.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"container mx-auto grid grid-cols-3 gap-6"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;CardLayout&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;CardLayout&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;CardLayout&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;CardLayout&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Layout:&lt;/strong&gt; &lt;code&gt;container&lt;/code&gt;, &lt;code&gt;mx-auto&lt;/code&gt;, &lt;code&gt;grid&lt;/code&gt;, &lt;code&gt;grid-cols-3&lt;/code&gt;, and &lt;code&gt;gap-6&lt;/code&gt; create a responsive three-column card grid.
### Forms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Forms are essential for collecting user input, ranging from simple contact forms to complex registration or checkout processes.&lt;/li&gt;
&lt;li&gt;Tailwind CSS provides the tools to style beautiful and functional forms while keeping your HTML markup clean.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When to Use?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use forms whenever you need to gather information from users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contact forms&lt;/li&gt;
&lt;li&gt;Login and registration forms&lt;/li&gt;
&lt;li&gt;Survey forms&lt;/li&gt;
&lt;li&gt;Search fields&lt;/li&gt;
&lt;li&gt;Checkout forms&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Short Implementation Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's a simple contact form example built with Tailwind CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"bg-white shadow-md rounded px-8 pt-6 pb-8 mb-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"mb-6"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt;
      &lt;span class="na"&gt;htmlFor=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;
      &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"flex text-gray-700 text-sm font-bold mb-2 justify-start"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Game&lt;span class="ni"&gt;&amp;amp;apos;&lt;/span&gt;s name
    &lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt;
      &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline focus:border-blue-500"&lt;/span&gt;
      &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;
      &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;
      &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;
    &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"mb-6"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt;
      &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"flex text-gray-700 text-sm font-bold mb-2 justify-start"&lt;/span&gt;
      &lt;span class="na"&gt;htmlFor=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Game&lt;span class="ni"&gt;&amp;amp;apos;&lt;/span&gt;s description
    &lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;textarea&lt;/span&gt;
      &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline focus:border-blue-500"&lt;/span&gt;
      &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt;
      &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt;
      &lt;span class="na"&gt;rows=&lt;/span&gt;&lt;span class="s"&gt;{7}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"flex items-center justify-center"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt;
      &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline"&lt;/span&gt;
      &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Submit
    &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Let's break it down&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overall Form Styling&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;bg-white&lt;/code&gt;:&lt;/strong&gt; Sets a white background color for the form container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;shadow-md&lt;/code&gt;:&lt;/strong&gt; Adds a subtle drop shadow to the form.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;rounded&lt;/code&gt;:&lt;/strong&gt; Applies a slight rounding to the corners of the form container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;px-8&lt;/code&gt;, &lt;code&gt;pt-6&lt;/code&gt;, &lt;code&gt;pb-8&lt;/code&gt;:&lt;/strong&gt; Adds padding around the form content for visual spacing (horizontal: 8 units, top: 6 units, bottom: 8 units).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;mb-4&lt;/code&gt;:&lt;/strong&gt; Adds a bottom margin to the overall form to separate it from subsequent elements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Input Fields (&lt;code&gt;div&lt;/code&gt; containers)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;mb-6&lt;/code&gt;:&lt;/strong&gt; Adds a bottom margin to each input group (label, input/textarea) creating spacing between them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Labels&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;flex&lt;/code&gt;:&lt;/strong&gt; Makes the label element a flexbox container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;text-gray-700&lt;/code&gt;:&lt;/strong&gt; Sets the label text color to a dark gray.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;text-sm&lt;/code&gt;:&lt;/strong&gt; Makes the label text smaller.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;font-bold&lt;/code&gt;:&lt;/strong&gt; Makes the label text bold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;mb-2&lt;/code&gt;:&lt;/strong&gt; Adds a bottom margin to the label, creating space between the label and the input field.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;justify-start&lt;/code&gt;:&lt;/strong&gt; Ensures the label text is left-aligned within its flex container.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Input and Textarea&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;shadow&lt;/code&gt;:&lt;/strong&gt; Adds a subtle shadow effect to the input fields.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;appearance-none&lt;/code&gt;:&lt;/strong&gt; Resets the default browser styling of form inputs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;border&lt;/code&gt;:&lt;/strong&gt; Adds a border around the input fields.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;rounded&lt;/code&gt;:&lt;/strong&gt; Slightly rounds the corners of the input fields.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;w-full&lt;/code&gt;:&lt;/strong&gt; Forces the input fields to take up the full available width of their container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;py-2&lt;/code&gt;, &lt;code&gt;px-3&lt;/code&gt;:&lt;/strong&gt; Applies padding (vertical: 2 units, horizontal: 3 units) within the input fields.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;text-gray-700&lt;/code&gt;:&lt;/strong&gt; Sets the input text color to dark gray.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;leading-tight&lt;/code&gt;:&lt;/strong&gt; Reduces the line-height (spacing between lines) within the input fields.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;focus:outline-none&lt;/code&gt;:&lt;/strong&gt; Removes the default focus outline when the input fields are selected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;focus:shadow-outline&lt;/code&gt;:&lt;/strong&gt; Adds a subtle shadow outline as a focus indicator when the input fields are selected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;focus:border-blue-500&lt;/code&gt;:&lt;/strong&gt; Changes the border color to blue when the input fields are in focus.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Button&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;bg-blue-500&lt;/code&gt;:&lt;/strong&gt; Sets the background color to blue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;hover:bg-blue-700&lt;/code&gt;:&lt;/strong&gt; Changes the background color to a darker blue on hover.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;text-white&lt;/code&gt;:&lt;/strong&gt; Makes the button text white.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;font-bold&lt;/code&gt;:&lt;/strong&gt; Makes the button text bold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;py-2&lt;/code&gt;, &lt;code&gt;px-4&lt;/code&gt;:&lt;/strong&gt; Adds padding to the button (vertical: 2 units, horizontal: 4 units).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;rounded&lt;/code&gt;:&lt;/strong&gt; Rounds the corners of the button.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;focus:outline-none&lt;/code&gt;:&lt;/strong&gt; Removes the default focus outline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;focus:shadow-outline&lt;/code&gt;:&lt;/strong&gt; Adds a shadow outline as a focus indicator.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Button Alignment&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;flex&lt;/code&gt;, &lt;code&gt;items-center&lt;/code&gt;, &lt;code&gt;justify-center&lt;/code&gt;:&lt;/strong&gt; These classes on the button's container &lt;code&gt;div&lt;/code&gt; center the button horizontally and vertically.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important Note:&lt;/strong&gt; This example focuses only on UI part of the implementation. Interactivity will be covered in the following part of the series.&lt;/p&gt;
&lt;h2&gt;
  
  
  Making your designs responsive
&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;One of the core strengths of Tailwind CSS is the ease with which you can create responsive interfaces that adapt to different screen sizes. &lt;/p&gt;

&lt;h3&gt;
  
  
  Breakpoints system in action
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Tailwind comes with a built-in set of breakpoints (sm: 640px, md: 768px, lg: 1024px, xl: 1280px, 2xl: 1536px). These breakpoints mark the widths at which your design might need modifications for optimal display on various devices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prefixes like &lt;code&gt;sm:&lt;/code&gt;, &lt;code&gt;md:&lt;/code&gt;, &lt;code&gt;lg:&lt;/code&gt; etc., are used before utility classes to apply styles only at or above the specified breakpoint.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a single-column layout on small screens, switching to two columns on medium screens and above, and three columns on large screens and above.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conditional classes
&lt;/h3&gt;

&lt;p&gt;Sometimes, just changing the layout at breakpoints isn't enough. You might need to show or hide elements based on screen size. Tailwind provides special responsive variants to add or remove classes based on breakpoints.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hidden sm:block"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Visible on medium screens and above&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tips for efficient workflow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mobile-First Development:&lt;/strong&gt; Start styling for smaller screens and utilize breakpoints to progressively add styles and complexity as the screen size increases. This often leads to leaner code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customizing Breakpoints:&lt;/strong&gt; If needed, you can adjust the default breakpoints or add your own in the &lt;code&gt;tailwind.config.js&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thinking in Components:&lt;/strong&gt; When building reusable components, consider their responsiveness alongside their styling.
### Extensions and plugins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tailwind's extensibility is powerful. Explore plugins like the aspect-ratio plugin to easily maintain proper image/video ratios across screen sizes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Tailwind CSS offers a powerful and versatile approach to styling web projects. &lt;/p&gt;

&lt;p&gt;In the next and last part of this series, we'll cover themes customization. Stay tuned!&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://react.dev/learn"&gt;https://react.dev/learn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tailwindcss.com/docs/installation"&gt;https://tailwindcss.com/docs/installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.w3schools.com/css/css_navbar.asp"&gt;https://www.w3schools.com/css/css_navbar.asp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.w3schools.com/tags/tag_section.asp"&gt;https://www.w3schools.com/tags/tag_section.asp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.w3schools.com/html/html_forms.asp"&gt;https://www.w3schools.com/html/html_forms.asp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.w3schools.com/tags/att_textarea_rows.asp"&gt;https://www.w3schools.com/tags/att_textarea_rows.asp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/issues/132"&gt;https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/issues/132&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Some popular UI components libraries:

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://mui.com/"&gt;https://mui.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://daisyui.com/"&gt;https://daisyui.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://react-spectrum.adobe.com/react-aria/"&gt;https://react-spectrum.adobe.com/react-aria/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ui.shadcn.com/"&gt;https://ui.shadcn.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://headlessui.com/"&gt;https://headlessui.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://syntax.fm/show/751/ui-components-shadcn-tailwind-ui-headless-react-aria-radix-ui"&gt;&lt;/a&gt;&lt;a href="https://syntax.fm/show/751/ui-components-shadcn-tailwind-ui-headless-react-aria-radix-ui"&gt;https://syntax.fm/show/751/ui-components-shadcn-tailwind-ui-headless-react-aria-radix-ui&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>tailwindcss</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Tailwind Handbook - Part I</title>
      <dc:creator>Lyumo</dc:creator>
      <pubDate>Sat, 13 Apr 2024 07:15:32 +0000</pubDate>
      <link>https://dev.to/lyumotech/tailwind-handbook-part-i-1l2d</link>
      <guid>https://dev.to/lyumotech/tailwind-handbook-part-i-1l2d</guid>
      <description>&lt;h3&gt;
  
  
  What?
&lt;/h3&gt;

&lt;p&gt;Tailwind CSS is a CSS framework.&lt;br&gt;
It takes a utility-first approach to styling web pages and apps. The main difference from CSS frameworks such as Bootstrap is the absence of pre-styled components (buttons, navigation bars, etc.). Instead, Tailwind offers a collection of low-level utility classes, combination of which allows developers to apply styles directly in HTML.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Let's highlight some of the benefits of using Tailwind CSS.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Speed of development. Thanks to utility-first approach of Tailwind and its provided classes, the layouts could be prototyped and built quickly right in HTML file.&lt;/li&gt;
&lt;li&gt;Reducing working with huge CSS files. No more huge stylesheets to deal with.&lt;/li&gt;
&lt;li&gt;Customization. Configuration file provides full control over the framework to adjust it to a project's specific needs.
## Installation and Setup&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tailwind could be installed via npm and requires &lt;code&gt;tailwind.config.js&lt;/code&gt; to be created.&lt;br&gt;
The process is best described on &lt;a href="https://tailwindcss.com/docs/installation"&gt;Get started with Tailwind CSS&lt;/a&gt; page.&lt;/p&gt;
&lt;h2&gt;
  
  
  Core Concepts
&lt;/h2&gt;

&lt;p&gt;There are two concepts to keep in mind while working with Tailwind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utility classes&lt;/li&gt;
&lt;li&gt;Breakpoint prefixes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's check out each.&lt;/p&gt;
&lt;h3&gt;
  
  
  Utility classes
&lt;/h3&gt;

&lt;p&gt;The main concept of Tailwind. Utility class is nothing more than a wrapper for some CSS class. In VSCode with IntelliSense plugin for Tailwind you can hover the mouse over the utility class to see the underlying CSS code. &lt;/p&gt;
&lt;h3&gt;
  
  
  Breakpoint prefixes
&lt;/h3&gt;

&lt;p&gt;Tailwind makes building responsive interfaces using breakpoint prefixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;sm:&lt;/code&gt; (640px and up)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;md:&lt;/code&gt; (768px and up)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lg:&lt;/code&gt; (1024px and up)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;xl:&lt;/code&gt; (1280px and up)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;2xl:&lt;/code&gt; (1536px and up)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-gray-200 md:bg-blue-500 p-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; 
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Customization
&lt;/h2&gt;

&lt;p&gt;Tailwind allows to customize UI themes and values, as well as creating new component classes and utilities, to step aside from already existing classes and fine-tune the UI when needed.&lt;/p&gt;

&lt;p&gt;More details could be found on &lt;a href="https://tailwindcss.com/docs/adding-custom-styles"&gt;Adding Custom Styles&lt;/a&gt; page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;That's it for the first part of the Tailwind handbook. By now, you should have a solid understanding of Tailwind CSS is and why it's become a popular choice for web styling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind's Paradigm:&lt;/strong&gt; We explored Tailwind's utility-first approach and how it differs from traditional CSS methodologies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind's Building Blocks:&lt;/strong&gt; You got introduced to the core of Tailwind—utility classes for spacing, colors, typography, responsive design, and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Already with this knowledge, you can start using Tailwind CSS. In the upcoming parts of the handbook, we'll dive deeper into practical examples, customization techniques, and how to build real-world components.&lt;/p&gt;

</description>
      <category>tailwindcss</category>
      <category>frontend</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Pop_OS Japanese layout</title>
      <dc:creator>Lyumo</dc:creator>
      <pubDate>Sat, 06 Apr 2024 02:55:17 +0000</pubDate>
      <link>https://dev.to/lyumotech/popos-japanese-layout-173o</link>
      <guid>https://dev.to/lyumotech/popos-japanese-layout-173o</guid>
      <description>&lt;p&gt;A note about installation of Japanese layout on Pop_OS system.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Terminal:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;ibus-mozc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Reboot (logging out then back in may be sufficient).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Settings&amp;gt;Region &amp;amp; Languages&amp;gt;Manage Installed Languages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under Install/Remove Languages, make sure Japanese is installed.&lt;/li&gt;
&lt;li&gt;Make sure that "Keyboard input method system:" says "IBUS".&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Settings&amp;gt;Keyboard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add input sources (click on "+"). Under Japanese, you should be able to add "Japanese (Mozc).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Enjoy ⸜( &lt;em&gt;ˊᵕˋ&lt;/em&gt; )⸝&lt;/p&gt;

</description>
      <category>linux</category>
      <category>setup</category>
      <category>tools</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
