<?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: Maxwell Dave Gazo</title>
    <description>The latest articles on DEV Community by Maxwell Dave Gazo (@maksdeb-g).</description>
    <link>https://dev.to/maksdeb-g</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%2F2361269%2Fd294d47e-c62e-464c-9309-9601612e58d2.jpg</url>
      <title>DEV Community: Maxwell Dave Gazo</title>
      <link>https://dev.to/maksdeb-g</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maksdeb-g"/>
    <language>en</language>
    <item>
      <title>Glitch Runner: A Platformer Game with Dynamic Glitch Mechanics Made with Amazon Q CLI</title>
      <dc:creator>Maxwell Dave Gazo</dc:creator>
      <pubDate>Fri, 20 Jun 2025 11:39:56 +0000</pubDate>
      <link>https://dev.to/maksdeb-g/glitch-runner-a-platformer-game-with-dynamic-glitch-mechanics-made-with-amazon-q-cli-28lc</link>
      <guid>https://dev.to/maksdeb-g/glitch-runner-a-platformer-game-with-dynamic-glitch-mechanics-made-with-amazon-q-cli-28lc</guid>
      <description>&lt;p&gt;⚠️ &lt;strong&gt;Disclaimer&lt;/strong&gt;: This project was developed using a prompt-driven, vibe-coding approach via Amazon Q CLI. This approach is not recommended for production-grade systems without thorough understanding of the underlying code generated by your prompts. All generated output should be reviewed, tested, and validated for correctness and security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try Glitch Runner now:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/maksdeb-g/Glitch-Runner" rel="noopener noreferrer"&gt;https://github.com/maksdeb-g/Glitch-Runner&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  The Idea Behind Glitch Runner
&lt;/h1&gt;

&lt;p&gt;Glitch Runner is a 2D platformer game created using Python, Pygame and Amazon Q CLI. I decided to use this idea because the concept of controlled chaos might give another twist to traditional platformer games. In Glitch Runner, the "glitches" are random and require the player to adjust to a new situation every few seconds. &lt;/p&gt;

&lt;p&gt;Every effect changes the difficulty the game plays and can turn the precision platforming into a creative way of parkouring through the glitches. It seemed to be the ideal setting that would test the abilities of Amazon Q to manage both game-logic and rich visuals.&lt;/p&gt;
&lt;h1&gt;
  
  
  Prompting Techniques
&lt;/h1&gt;

&lt;p&gt;I started with prompting the description of the game, giving the Q the concepts and the mechanics that I wanted.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;I&lt;span class="s1"&gt;'m building a 2D platformer called Glitch Runner where the core mechanic is random real-time glitches affecting gameplay.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Break Features into Smaller Tasks
&lt;/h2&gt;

&lt;p&gt;I asked Q to create features one-by-one to increase its efficiency in creating the logic behind those features.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Help me implement reversed gravity &lt;span class="k"&gt;in &lt;/span&gt;my player class.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;I want you to implement a glitch that shakes the user screen and also the platforms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Iteration with Feedback
&lt;/h2&gt;

&lt;p&gt;Once the features where working, I asked Q to improve them and provided my insights on what to improve.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;The pixelation glitch feels like nothing has changed. Can you increase the distortion so it&lt;span class="s1"&gt;'s more noticeable?
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;The background is too visually distracting. Can you make it simpler &lt;span class="k"&gt;while &lt;/span&gt;keeping the difficulty intact?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Debugging using Problem-Solution Format
&lt;/h2&gt;

&lt;p&gt;When I'm trying Q to fix a bug, I first laid out what was wrong and what I am expecting to be the result.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;During reversed gravity glitch, the character floats out of the screen and doesn’t &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; Can you fix that by putting screen boundaries?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  How Amazon Q Handled Classic Programming Challenges
&lt;/h1&gt;

&lt;p&gt;Amazon Q did a great job in developing this whole game by doing all these tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modularity&lt;/strong&gt;: Q helped in breaking down the play classes, game loops, and glitch engines into reusable modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Input Handling&lt;/strong&gt;: The glitches comes with altered inputs for the users, Q did a great job in syncing the supposed inputs with their respective glitches.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prompts That Saved Time
&lt;/h2&gt;

&lt;p&gt;Basically, Amazon Q saved me from creating a project too long. However, there were notable prompts there that were more complicated than the other logics.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sprite Animation States&lt;/strong&gt;: laid out expected animation folders for idle, run, jump, fall, and wall slide, saving me the trouble of guessing file structure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio and event wiring&lt;/strong&gt;: With a single prompt, Q hooked up sound effects to player death, win conditions, and glitch events.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the most surprising automation came when I tested PyInstaller and accidentally built an old version of the game. I asked Q to run the updated version directly and it executed the script from my directory like a local assistant. This deeply integrated behavior highlighted how Q goes beyond code generation to support full project workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples of Smart AI-Generated Solutions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Screen Shake Glitch&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;screen_shake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;activate&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
   &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;activate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
     &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shake_amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
     &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shake_amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
     &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;screen_offset&lt;/span&gt; &lt;span class="o"&gt;=&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="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;update_screen_shake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
   &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shake_amount&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
       &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;screen_offset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
         &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shake_amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shake_amount&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
         &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shake_amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shake_amount&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;Gravity Reversal Glitch&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;reversed_gravity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;activate&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;activate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;        
       &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;velocity_y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;velocity_y&lt;/span&gt; 
       &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gravity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;original_gravity&lt;/span&gt;           
       &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ceiling_enabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
   &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Restore normal gravity
&lt;/span&gt;        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;velocity_y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;velocity_y&lt;/span&gt;  &lt;span class="c1"&gt;# Immediate direction change
&lt;/span&gt;       &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gravity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;original_gravity&lt;/span&gt;
       &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;player&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ceiling_enabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Final Gameplay and Screenshots
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11i7nhe8pgh8p76lip7f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11i7nhe8pgh8p76lip7f.png" alt="Image description" width="798" height="641"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxavrgf3knwumfgpv2s0q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxavrgf3knwumfgpv2s0q.png" alt="Image description" width="797" height="637"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3mmdh5vqx9bljh7m8kc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3mmdh5vqx9bljh7m8kc.png" alt="Image description" width="800" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;The development of Glitch Runner using Amazon Q was a great example of how the present-day AI can be directly beneficial to the entire process of game creation. &lt;/p&gt;

&lt;p&gt;Q was also useful in the brainstorming of features, bug fixing, organization of my assets, and even running scripts. Even the design of the glitch system; features that thrive on randomness was shaped by the constraints of a prompt-driven development process, making its unpredictability a natural outcome of how the game was built.&lt;/p&gt;

&lt;p&gt;This shows that our limited thoughts could, with the proper prompts, turn into a full-fledged game based on your imagination.&lt;/p&gt;

</description>
      <category>awschallenge</category>
      <category>amazonqcli</category>
      <category>ai</category>
      <category>python</category>
    </item>
    <item>
      <title>Less Code, More Flow: Streamline your Frontend Workflow with Shadcn/UI</title>
      <dc:creator>Maxwell Dave Gazo</dc:creator>
      <pubDate>Thu, 24 Apr 2025 10:25:16 +0000</pubDate>
      <link>https://dev.to/up_min_sparcs/less-code-more-flow-streamline-your-frontend-workflow-with-shadcnui-4bbb</link>
      <guid>https://dev.to/up_min_sparcs/less-code-more-flow-streamline-your-frontend-workflow-with-shadcnui-4bbb</guid>
      <description>&lt;p&gt;This article was co-authored by: &lt;a class="mentioned-user" href="https://dev.to/calyx_426"&gt;@calyx_426&lt;/a&gt; Charles Nigel Espiloy&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Every front-end developer knows how dreadful it is to recreate the same UI component across different projects. It might feel great creating a design for elements like  buttons, forms, or header at first but it becomes tedious when we create the exact same thing for future projects. &lt;/p&gt;

&lt;p&gt;Practically speaking, it's time consuming to rebuild the same line of code from a previous project, consuming a lot of resources that should be dedicated for functionality. &lt;/p&gt;

&lt;p&gt;A short building time for a project development is crucial since it saves operation costs from prototyping, revisions, and user testing. This allows us to create different variations of our interface to cater a better end-user experience. &lt;/p&gt;

&lt;p&gt;That’s why most, if not all, front-end developers use component libraries to achieve UI needs in consistency and coherency across various projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are component libraries?
&lt;/h2&gt;

&lt;p&gt;Component libraries are collections of already built, UI components like buttons, cards, and forms that follow a consistent design system. &lt;/p&gt;

&lt;p&gt;These libraries help developers speed up their front-end development process by providing ready-to-use  code components that are functionally robust across various projects.&lt;/p&gt;

&lt;p&gt;The main aim of component libraries is to &lt;strong&gt;reduce code redundancy&lt;/strong&gt;, &lt;strong&gt;standardize project development&lt;/strong&gt;, and &lt;strong&gt;enforce scalability&lt;/strong&gt; among different projects. It improves the developer workflow experience because of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time Saving Capability&lt;/strong&gt;:
As developers we’re faced with very tight deadlines and having tools to make our workflow efficient is vital while also not compromising the web experience of end-users. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Through component libraries we are able to cut time in component creation, giving more time to focus on the finer details of the website.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Less Repetition, More Motivation&lt;/strong&gt;: Repetition, the enemy of frontend developers who hate recreating the same components manually. Repetitiveness tends to make devs become easily bored and out of focus when developing projects, making errors unconsciously in some components affecting the whole project - rebuilding code and thus wasting more resources and time. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Through the use of component libraries that’s centered around the end-user experience, we are able to produce a complete website while also being able to bring more functionality and focus on the technical aspects.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Guideline to Consistency&lt;/strong&gt;:
Component libraries act as style guides. It dictates the color palettes to use, size of text, and how UI elements behave or interact with each other. If we rewrite the components each time, we are bound to increase the likelihood of deviating from the style we want to achieve&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Problem with Traditional UI Libraries
&lt;/h2&gt;

&lt;p&gt;Traditional Component libraries work by installing packages from &lt;strong&gt;NPMs&lt;/strong&gt; (Node Package Managers), importing the components and using them in projects. &lt;/p&gt;

&lt;p&gt;While it’s true that traditional UI Libraries such as Bootstrap or Material-UI provide components that are pre-built that allows users to develop their code quickly, it also has its compromises:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance Overhead&lt;/strong&gt;: Unnecessary styles and scripts are often included in many traditional libraries, using more storage space and may slow down application performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Customization Limitation&lt;/strong&gt;: The libraries mentioned above use a specific design system, focusing more on the ‘out-of-the-box’ components that are already consistent and have a complete feel rather than a base component that the developers can deeply modify. This often time results in developers to override styles or use workarounds to achieve a unique and specific look.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lock-in Dependency&lt;/strong&gt;: Completing a projecting using a traditional library enforces devs to stick with that library forever. The problem? When we try to switch to another framework that provides more functions and new features, it might be challenging to switch libraries since some components are heavily dependent on the traditional library’s framework.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Speed vs Customization
&lt;/h2&gt;

&lt;p&gt;The table down below shows the tradeoffs between speed and customization of traditional UI libraries.&lt;/p&gt;

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

&lt;p&gt;Basically, traditional libraries &lt;strong&gt;may speed up development of projects at first&lt;/strong&gt;, but they &lt;strong&gt;become the bottleneck when scaling the projects&lt;/strong&gt; since extensive modifications may be needed to create a complete, consistent, and coherent product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Customizing NPM Packages Can Be a Hassle
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Complex Web of Dependencies&lt;/strong&gt;: Many NPM packages are built upon layers of dependencies, making it difficult for modifications without breaking functionality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Risk of Version Clashes&lt;/strong&gt;: Updating or modifying a package often triggers compatibility problems with other dependencies, creating unwanted complications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sparse Documentation&lt;/strong&gt;: Some packages offer limited guidance for customization, leaving developers no choice but to delve into the source code to find the answers they need.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rebuild Challenges&lt;/strong&gt;: Customizing a package frequently requires rebuilding it, which can lead to unforeseen errors, adding more complexity to the process.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Shadcn/UI is a Game Changer
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Components are not imported as NPM packages&lt;/strong&gt;&lt;br&gt;
Yes, you heard that right, they are not imported as NPM packages. The components are installed directly into our projects. This will provide you the source code of a component and it lives in your project, allowing you or the developer to have control over the blueprint and can tweak it in any way they want.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It uses Tailwind CSS&lt;/strong&gt; &lt;br&gt;
Tailwind CSS is a utility-first CSS framework that lets us style our JSX by using reusable class names directly to your line of code. It’s fast, consistent, and implementation of Mobile-First Approach in developing a component is easy, and Shadcn uses this framework as its default styling system.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Regular CSS:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frbowkokv7vzdl5c8gg1o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frbowkokv7vzdl5c8gg1o.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tailwind CSS:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdjv2j490yhpvp9req0db.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdjv2j490yhpvp9req0db.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built for React/Next.js Projects&lt;/strong&gt; 
Shadcn/UI is built for React and Next.js applications. Shadcn supports React Server Components which works effectively with Next.js App Router, making it a perfect addition to your modern tech stack. Shadcn’s components are written as .tsx files and come with TypeScript support making it easier to catch type errors and improves developer experience. &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Benefits of Using Shadcn/UI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1.)&lt;/strong&gt; &lt;strong&gt;Full Customization&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom Components&lt;/strong&gt;: Shadcn/UI allows developers to customize pre-built components to match their application's design system while avoiding excessive dependency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS Integration&lt;/strong&gt;: With Tailwind CSS, developers can easily override default styles and create unique designs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility&lt;/strong&gt;: Developers may extend and adapt components for specific design requirements, leading to flexibility and control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS Variables&lt;/strong&gt;: Shadcn/UI provides a theming system using CSS variables to promote flexibility and allow for the easy switch between different themes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2.)&lt;/strong&gt; &lt;strong&gt;Consistent Design&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Unified Design Language&lt;/strong&gt;: By using pre-built components and styles alongside reusable components, Shadcn/UI automatically affords a consistent design language for the application. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modular Consistency&lt;/strong&gt;: Shadcn/UI modular design encourages consistent design, simplifying the maintenance of application-level consistency with large-scale applications. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Beautiful Defaults&lt;/strong&gt;: Shadcn/UI provides good-looking defaults that work on their own design-wise and also form a coherent system with one another.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3.)&lt;/strong&gt; &lt;strong&gt;Streamlined Workflow&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rapid Development&lt;/strong&gt;: Shadcn/UI permits rapid development, thanks to the hundreds of prebuilt components and the utility-first nature of Tailwind CSS. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Efficient&lt;/strong&gt;: Developers can quickly access pre-built components and styling, saving time and effort by not recreating them. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Collaborative Efficiency&lt;/strong&gt;: Shadcn/UI supports collaboration between designers and developers in one UI kit, so everybody speaks the same language. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Streamlined Process&lt;/strong&gt;: Shadcn/UI smoothens the design-to-code process and bridges the gap between design and development. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Built-In Accessibility&lt;/strong&gt;: Shadcn/UI keeps accessibility in mind while providing out-of-the-box solutions to ensure that web apps are accessible to as many users as possible.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Getting Started with Shadcn/UI
&lt;/h2&gt;

&lt;p&gt;To use &lt;strong&gt;Shadcn/UI&lt;/strong&gt; in your React/Next.js project, we need to first run the initialize command of shadcn.&lt;/p&gt;

&lt;p&gt;In this demonstration, we are going to use mainly Next.js examples.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Create a Next.js Project&lt;/strong&gt;
First, create a next.js project using these command:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-next-app@latest shadcn-demo
cd shadcn-demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Make sure to choose Typescript&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Initialize your Shadcn/UI&lt;/strong&gt;
Run shadcn init in your project terminal
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx shadcn@latest init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Adding Components&lt;/strong&gt;
Once the setup of your project is complete, you can start adding Shadcn/UI components by using this command:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Adding of one component:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx shadcn@latest add button
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This will only add the &lt;strong&gt;Button&lt;/strong&gt; component and it will be placed inside the &lt;strong&gt;&lt;em&gt;/app/components/ui&lt;/em&gt;&lt;/strong&gt; directory by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding multiple components in one command&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx shadcn@latest add button card input sheet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This one-liner command installs the &lt;strong&gt;Button, Card, Input, and Sheet&lt;/strong&gt; components all at once in the same directory, then you're all set to start using Shadcn!&lt;/p&gt;
&lt;h2&gt;
  
  
  Building a Modal: Plain CSS vs Shadcn UI Workflow
&lt;/h2&gt;

&lt;p&gt;In this comparison, we'll show the building of a simple modal dialog using these two approaches. This will help highlight their differences in &lt;strong&gt;development speed, and customization.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Modal Dialog Using Plain CSS&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flez2d7qjv4y6rrp8v2qq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flez2d7qjv4y6rrp8v2qq.gif" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Modal Dialog using Shadcn/UI:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75q94m43hytkhrxqq21f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75q94m43hytkhrxqq21f.gif" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Below is a side-by-side look at their differences&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;It's true that making the modal dialog from scratch gives you full control of the CSS. However, it's also clear that Shadcn/UI significantly speeds up the process by providing ready-to-use components.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to Customize a Shadcn/UI Component?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open the component source code in your project.&lt;/strong&gt;&lt;br&gt;
It should be inside the components folder, here's the usual path to your component file &lt;strong&gt;&lt;em&gt;/app/components/ui/button.tsx&lt;/em&gt;&lt;/strong&gt; . We are going to use the button component as an example.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Customize its style&lt;/strong&gt;&lt;br&gt;
Since the code is not precompiled, you can directly modify a component's class names (tailwind css), props/variants, and even their behavior (eg. hover effects, animation).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Inside the code, locate this variant of the button&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg65gwuattatxd7uu5fhn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg65gwuattatxd7uu5fhn.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can see, the default style of the button has &lt;strong&gt;background-primary, text-primary, hover:bg-primary/50&lt;/strong&gt;. We can style the button by modifying these tailwind styles that are already used by the button.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9f5op9wn0exuyje1v8gu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9f5op9wn0exuyje1v8gu.gif" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another way to customize Shadcn components is modifying its tailwind class name when the button is already used, no need to touch the original source file. This is a great way to customize how a button looks in one place, without worrying about breaking or changing the rest of your UI.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Adding Custom Variants&lt;/strong&gt;
If you really want a new variant of a button, you can always add a new one inside the original source code. Props are a way of passing data configuration to a component. And a variant is a type of prop used to change the style of a component.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's start with opening the button.tsx again. Suppose you want to create a yellow button that has jumping animation on hover. Here's how you can create that variant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The variant name is jumpy:&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl32fomxr34fl9rbflo0j.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl32fomxr34fl9rbflo0j.gif" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;To sum up the article we can say how Shadcn/UI:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installs directly into your project&lt;/strong&gt; as simple, ready-to-use components-no more wrestling with external dependencies or heavy theming layers that comes with traditional libraries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uses Tailwind CSS by default&lt;/strong&gt;, so you can leverage your existing utility‑first workflow and design tokens from day one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is built specifically for React and Next.js&lt;/strong&gt;, offering first‑class support for TypeScript, server‑side rendering, and seamless integration with your favorite frameworks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shadcn/UI&lt;/strong&gt; is an amazing tool that's more than another run of the mill UI library–it strikes a balance between flexibility and performance. By integrating headless components with stunning, customizable styles right out of the box, it allows developers to create classy interfaces without compromising control.&lt;/p&gt;

&lt;p&gt;Whether you're rapidly prototyping or refining production-ready apps, Shadcn/UI streamlines your workflow and enables you to focus on what truly matters: building amazing end user experiences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thank you for reading! Happy Coding! 🚀&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can access the source codes of the examples here:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/maksdeb-g" rel="noopener noreferrer"&gt;
        maksdeb-g
      &lt;/a&gt; / &lt;a href="https://github.com/maksdeb-g/shadcndemo" rel="noopener noreferrer"&gt;
        shadcndemo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This is a repository for our article about shadcn/ui
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;ShadCN Demo&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;This repository contains example code used in my article to demonstrate and compare building UI components &lt;strong&gt;from scratch&lt;/strong&gt; versus using &lt;strong&gt;ShadCN UI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It also shows how to &lt;strong&gt;customize ShadCN components&lt;/strong&gt; and &lt;strong&gt;extend them with variants&lt;/strong&gt; to fit real-world design needs.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🔍 What You'll Find Here&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;This repo showcases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A comparison between handcrafted UI components and ShadCN components&lt;/li&gt;
&lt;li&gt;How to customize ShadCN components with Tailwind CSS&lt;/li&gt;
&lt;li&gt;How to add and manage variants using ShadCN's utility-based approach&lt;/li&gt;
&lt;li&gt;Clean and responsive UI patterns using modern frontend tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're following along with the article, this is the companion repo to reference the source code and explore how everything works under the hood.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠️ Tech Stack&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Framework&lt;/strong&gt;: &lt;a href="https://nextjs.org/" rel="nofollow noopener noreferrer"&gt;Next.js&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI Components&lt;/strong&gt;: &lt;a href="https://ui.shadcn.dev/" rel="nofollow noopener noreferrer"&gt;ShadCN UI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling&lt;/strong&gt;: &lt;a href="https://tailwindcss.com/" rel="nofollow noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; for type safety&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Getting Started&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;To run the examples locally:&lt;/p&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Clone the repo&lt;/span&gt;
git clone https://github.com/maksdeb-g/shadcndemo.git
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Navigate into the&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/maksdeb-g/shadcndemo" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>nextjs</category>
      <category>shadcn</category>
    </item>
    <item>
      <title>Deploying WordPress on AWS Lightsail: A Beginner's Guide to Cloud Hosting</title>
      <dc:creator>Maxwell Dave Gazo</dc:creator>
      <pubDate>Mon, 11 Nov 2024 15:07:24 +0000</pubDate>
      <link>https://dev.to/maksdeb-g/deploying-wordpress-on-aws-lightsail-a-beginners-guide-to-cloud-hosting-peh</link>
      <guid>https://dev.to/maksdeb-g/deploying-wordpress-on-aws-lightsail-a-beginners-guide-to-cloud-hosting-peh</guid>
      <description>&lt;p&gt;Let's be real, when we all started learning HTML and CSS for the first time, we all have once wondered on how to make our local repository available for public. On how do all these websites made their way to the internet. Well, worry not, because we will be tackling about how to host your first ever cloud hosted website using WordPress on AWS Lightsail.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What is AWS Lightsail?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AWS Lightsail&lt;/strong&gt; is a cloud platform designed to simplify the deployment and management of web applications, making it an excellent choice for small businesses, developers, and hobbyists looking for a streamlined alternative to more complex AWS services. Here’s a list of what Lightsail has to offer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Virtual Private Servers (VPS):&lt;/strong&gt; Lightsail offers virtual servers that are simple to manage and store your apps in a safe, private setting. Users can choose from a variety of OS options, such as Windows and Linux, or immediately begin a VPS with pre-configured options (such WordPress or other CMS systems).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Containers:&lt;/strong&gt; Developers can easily deploy containerized apps in Lightsail. Lightsail supports Docker containers which can be very helpful to developers who wants to deploy their app with isolated app environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Managed Databases:&lt;/strong&gt; Lightsail enables users to set up MySQL and PostgreSQL databases. By simply allowing the databases to run independently from the server, it improves security and performance of the deployed app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content Delivery Network (CDN):&lt;/strong&gt; Lightsail allows the users to distribute their app globally by using the AWS’ global content delivery network (CDN) and Amazon CloudFront. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Load Balancers:&lt;/strong&gt; Lightsail’s load balancing feature provides high availability and resilience during traffic by distributing incoming traffic to several servers. This improves the dependability of expanding website with changing traffics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SSD-Backed Block Storage:&lt;/strong&gt; Lightsail also offers SSD-backed storage that is quicker and dependable that old conventional drives. Users can add more block storage that can allow apps to manage more files and data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Static IP Addresses:&lt;/strong&gt; Lightsail also give their customers a chance to set their static IP addresses. To make sure that the IP won’t change even if the instance is stopped and restarted. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Domain DNS Management:&lt;/strong&gt; Users can also manage their domain names thanks to Lightsail’s simple DNS management. This integrates smoothly with apps hosted on Lightsail and makes DNS setup much easier without the need of using third-party DNS providers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Low and Predictable Pricing:&lt;/strong&gt; The total cost for all those services is all included in Lightsail’s predictable price structure. This makes it easier for starting developers in managing their budget for their instance.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integrated Backup and Recovery:&lt;/strong&gt; Automated snapshots and backup options help protect your data and enable quick recovery, adding to the reliability of your hosted application.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why use Lightsail?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Easy Set-Up:&lt;/strong&gt; Lightsail's simple user interface makes it easier for beginners to set up websites without the need of in-depth knowledge about AWS.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimized for Small Projects:&lt;/strong&gt; The target market for Lightsail is for those who find other AWS services complex. Which is ideal for starting businesses, bloggers, and personal projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; Even if the developer decided to switch things up by making their project bigger, lightsail has the ability to upgrade the provided services. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost Effective:&lt;/strong&gt; It is perfect for budget-conscious users because of its predictable pricing. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Let's Start Building!&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pre-requisites&lt;/strong&gt; &lt;br&gt;
Before we start the demo, here's what you'll need to get started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS Account&lt;/strong&gt;, if you don't have one head to &lt;a href="https://aws.amazon.com/" rel="noopener noreferrer"&gt;aws website&lt;/a&gt; to sign up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic Knowledge of SSH&lt;/strong&gt; (Optional, but Recommended)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;&lt;br&gt;
Go to your aws &lt;a href="//console.aws.amazon.com"&gt;console&lt;/a&gt; and navigate to Lightsail.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5jdu7djq5eb4rpplikr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5jdu7djq5eb4rpplikr.png" alt="Aws Console" width="600" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Creating your Instance&lt;/strong&gt;&lt;br&gt;
On your Lightsail dashboard, locate and click create instance. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foy8bv8oh77udxhkhlv9v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foy8bv8oh77udxhkhlv9v.png" alt="Click Create Instance" width="720" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Setting up your Instance&lt;/strong&gt;&lt;br&gt;
Set up your instance depending on which region you belong. But in order for you to follow the next steps, I recommend you set up yours the same as this demo: &lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;Singapore or ap-southeast-1&lt;/strong&gt; as your region and &lt;strong&gt;Linux/Unix&lt;/strong&gt; as instance image.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmtmqpnkbhbszo52nwnmq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmtmqpnkbhbszo52nwnmq.png" alt="Select Singapore and Linux/Unix" width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, select &lt;strong&gt;WordPress&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjyczdc5s4zk2enqej10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjyczdc5s4zk2enqej10.png" alt="Image description" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Leave the &lt;strong&gt;SSH key&lt;/strong&gt; as default. You can enable &lt;strong&gt;automatic snapshots&lt;/strong&gt; when creating an instance. But for this demo, to avoid additional charges, do not enable (But this is highly recommended for those who plan to deploy personal projects in the future).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnia07q0umt0rs63lhpx3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnia07q0umt0rs63lhpx3.png" alt="Image description" width="744" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, select &lt;strong&gt;Dual-stack&lt;/strong&gt; as network type and the smallest size Lightsail has to offer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nkph0jqldh21eefdj4i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nkph0jqldh21eefdj4i.png" alt="Image description" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, &lt;strong&gt;name your instance&lt;/strong&gt;. For this demo you may use &lt;strong&gt;"MyFirstWeb-Wordpress"&lt;/strong&gt; as the name.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwp6fty9ete663tnccm3c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwp6fty9ete663tnccm3c.png" alt="Image description" width="561" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Set up your Static IP Address&lt;/strong&gt;&lt;br&gt;
Lightsail &lt;strong&gt;provides you a public IP address&lt;/strong&gt;, however it is not static. We need to set up the static IP address for consistent addressing and improved remote access.&lt;/p&gt;

&lt;p&gt;Go to your instance and click &lt;strong&gt;manage&lt;/strong&gt; and navigate to &lt;strong&gt;networking&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufg054ock2g65aewsxt9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufg054ock2g65aewsxt9.png" alt="Image description" width="524" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the &lt;strong&gt;networking page&lt;/strong&gt;, you can see your &lt;strong&gt;public IP address&lt;/strong&gt; that is not static. Below that is &lt;strong&gt;"Attach static IP"&lt;/strong&gt;, press that to make that IP address static then &lt;strong&gt;identify your static IP&lt;/strong&gt;. You can use the recommended name.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyvcav2fbi8sx5qg3g5q6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyvcav2fbi8sx5qg3g5q6.png" alt="Image description" width="720" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Accessing WordPress Admin&lt;/strong&gt;&lt;br&gt;
In order to customize your WordPress site, you need to access first the admin. &lt;/p&gt;

&lt;p&gt;Navigate to your instance and click &lt;strong&gt;connect&lt;/strong&gt;. This will automatically open &lt;strong&gt;terminal window&lt;/strong&gt; in your browser. This terminal gives you &lt;strong&gt;command-line access&lt;/strong&gt; to your server directly within the Lightsail console. From there, you can run commands, including those to &lt;strong&gt;retrieve your WordPress admin password&lt;/strong&gt; and other configurations. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffuj1dd8qf7leuw1ckrcr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffuj1dd8qf7leuw1ckrcr.png" alt="Image description" width="526" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then, use these commands&lt;/strong&gt;&lt;br&gt;
ls to &lt;strong&gt;look at the directory&lt;/strong&gt;. There should be a file there named &lt;strong&gt;"bitnami_application_password"&lt;/strong&gt; which contains the admin password for your WordPress site.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ ls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F45z97zqn0mc8u6z5v4r5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F45z97zqn0mc8u6z5v4r5.png" alt="Image description" width="551" height="42"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To access the file, use this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ cat bitnami_application_password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now see your &lt;strong&gt;admin password in terminal.&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;This instance is now deleted so you can't use the password below&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhd2b3pt913yzmb1wro2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhd2b3pt913yzmb1wro2.png" alt="Image description" width="674" height="47"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the password by using the remote &lt;strong&gt;clipboard below&lt;/strong&gt; and use it to log in. Type &lt;strong&gt;YourStaticIPAddress/admin&lt;/strong&gt; to access user log in page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User as username&lt;/strong&gt; and paste your password below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5jdapg47hkpfuis8v516.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5jdapg47hkpfuis8v516.png" alt="Image description" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And Voilà! You now have your WordPress site on AWS Lightsail. &lt;br&gt;
&lt;strong&gt;Disclaimer:&lt;/strong&gt; After this demo, &lt;strong&gt;kindly delete your instance to avoid unexpected additional charges&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswu5t2olb1nrmbsmbz4h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswu5t2olb1nrmbsmbz4h.png" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And there you have it! You’ve taken your first step into the &lt;strong&gt;world of cloud hosting&lt;/strong&gt;, deploying a live website accessible to anyone online. With &lt;strong&gt;AWS Lightsail&lt;/strong&gt;, you now have a scalable, secure, and cost-effective platform to build, test, and share your projects with the world. Whether you’re a hobbyist experimenting with ideas or a business owner looking to establish an online presence, Lightsail provides an easy-to-manage solution to bring your vision to life.&lt;/p&gt;

&lt;p&gt;Happy hosting! And remember, this is only the beginning. There’s a whole world of cloud services out there to explore as you grow.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>wordpress</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
