<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Alexandru Paduraru - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Alexandru Paduraru - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 22:19:56 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/author/alexpaduraru/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ How to Build a Login Page with the Material Tailwind Framework – Step by Step Guide ]]>
                </title>
                <description>
                    <![CDATA[ Login pages are like the front doors to our web apps. They should be inviting, easy to use, and safe. If you're looking to create one that combines both style and function, you're in the right place. In this guide, we'll explore how to build a login ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-build-a-login-page-with-material-tailwind-framework/</link>
                <guid isPermaLink="false">66c375a9b737bb2ce7073268</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tailwind ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Alexandru Paduraru ]]>
                </dc:creator>
                <pubDate>Mon, 29 Apr 2024 14:21:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2024/04/how-to-build-a-login-page-with-the-material-tailwind-framework-1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Login pages are like the front doors to our web apps. They should be inviting, easy to use, and safe. If you're looking to create one that combines both style and function, you're in the right place.</p>
<p>In this guide, we'll explore how to build a login page with <a href="https://material-tailwind.com/" target="_blank">Material Tailwind</a> and Tailwind CSS that not only looks great but also works seamlessly across devices. </p>
<p>Whether you're new to web design or just curious about these tools, we'll walk you through each step. Let's dive in and start building! </p>
<p>Happy coding 🤘🏼</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<p>Check out the article chapters:</p>
<ol>
<li><a class="post-section-overview" href="#heading-1-introduction-to-tailwind-css-and-material-tailwind">Introduction to Tailwind CSS and Material Tailwind</a> </li>
<li><a class="post-section-overview" href="#heading-2-how-to-set-up-your-development-environment">How to Set Up Your Development Environment</a> </li>
<li><a class="post-section-overview" href="#heading-3-how-to-install-necessary-dependencies-for-your-login-page">How to Install Necessary Dependencies for your Login Page</a> </li>
<li><a class="post-section-overview" href="#heading-4-how-to-design-the-login-page-layout-with-tailwind-css">How to Design the Layout with Tailwind CSS</a>  </li>
<li><a class="post-section-overview" href="#heading-5-how-to-integrate-material-tailwind-components">How to Integrate Material Tailwind Components</a> </li>
<li><a class="post-section-overview" href="#heading-6-how-to-style-input-fields-and-buttons">How to Style Input Fields and Buttons</a>  </li>
<li><a class="post-section-overview" href="#heading-7-how-to-implement-responsive-design">How to Implement Responsive Design</a>  </li>
<li><a class="post-section-overview" href="#heading-8-how-to-add-interactivity-and-validation">How to Add Interactivity and Validation</a></li>
<li><a class="post-section-overview" href="#heading-9-security-and-best-practices-for-login-pages">Security and Best Practices for Login Pages</a> </li>
<li><a class="post-section-overview" href="#heading-conclusion">Conclusions</a> </li>
</ol>
<h2 id="heading-1-introduction-to-tailwind-css-and-material-tailwind">1. Introduction to Tailwind CSS and Material Tailwind</h2>
<p>Web design has many tools to help make good-looking and easy-to-use websites. </p>
<p>Two useful tools are <a href="https://tailwindcss.com/" target="_blank">Tailwind CSS</a> and <a href="https://material-tailwind.com/" target="_blank">Material Tailwind</a>. Tailwind CSS helps web designers make websites quickly without writing a lot of extra code. Material Tailwind adds nice-looking designs that are easy to change. Together, they can help you make a <a href="https://www.material-tailwind.com/blocks/authentication" target="_blank">Tailwind CSS login page</a> that looks good and works well. </p>
<p>In this section, you can see more details about these tools and why they're useful.</p>
<h3 id="heading-what-is-tailwind-css">What is <a href="https://tailwindcss.com/" target="_blank">Tailwind CSS</a>?</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/04/tailwind-css.jpg" alt="tailwind css" width="600" height="400" loading="lazy">
<em>Tailwind CSS homepage</em></p>
<p>Tailwind is a utility-first CSS framework. Instead of pre-designed components, it provides low-level utility classes that let you build custom designs without leaving your HTML. </p>
<p>Since its launch, Tailwind CSS has taken the web development community by storm. By 2023, the framework had gained over <a href="https://github.com/tailwindlabs/tailwindcss" target="_blank">400 million downloads on Github</a>, a proof of its growing adoption among developers. Several popular companies and platforms also started adopting Tailwind, for example: <a href="https://vercel.com/" target="_blank">Vercel</a>, <a href="https://www.algolia.com/" target="_blank">Algolia</a>, <a href="https://www.netlify.com/" target="_blank">Netlify</a>, and others. The Github statistics show over 74,000 stars, which indicates a strong community backing. </p>
<p><strong>Why use Tailwind CSS:</strong></p>
<ul>
<li>Speed: Quickly build UIs with utility classes instead of writing custom CSS.</li>
<li>Flexibility: You can customize designs without restrictions.</li>
<li>Responsiveness: Easily make designs that work on all device sizes.</li>
</ul>
<p>Example: Instead of writing custom CSS for a button, use utility classes directly in your HTML.</p>
<pre><code>&lt;button <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"</span>&gt;
   View More
&lt;/button&gt;
</code></pre><h3 id="heading-what-is-material-tailwind">What is <a href="https://material-tailwind.com/" target="_blank">Material Tailwind</a>?</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/04/material-tailwind.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Material Tailwind homepage</em></p>
<p>Material Tailwind is a components library for Tailwind CSS that implements Google's Material Design guidelines. It combines the best of both worlds: the utility-first approach of Tailwind and the design philosophy of Material Design.</p>
<p><strong>Why use Material Tailwind:</strong></p>
<ul>
<li>Consistency: Follows Material Design guidelines, ensuring familiar <a href="https://www.material-tailwind.com/roots-of-ui-ux-design" target="_blank">UI/UX patterns</a>.</li>
<li>Customizable: Being built on Tailwind, it's highly customizable.</li>
<li>Component-rich: Comes with pre-built components that speed up development.</li>
</ul>
<p>Example: Imagine you want a Material Design inspired <a href="https://www.material-tailwind.com/docs/react/button" target="_blank">button</a>. With Material Tailwind, it's straightforward.</p>
<pre><code>&lt;button
  <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"middle none center rounded-lg bg-pink-500 py-3 px-6 font-sans text-xs font-bold uppercase text-white shadow-md shadow-pink-500/20 transition-all hover:shadow-lg hover:shadow-pink-500/40 focus:opacity-[0.85] focus:shadow-none active:opacity-[0.85] active:shadow-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none"</span>
  data-ripple-light=<span class="hljs-string">"true"</span>
&gt;
  View More
&lt;/button&gt;
</code></pre><p>If you are a React fan too, let me tell you that Material Tailwind also comes with Tailwind CSS + React components. For more details, check out the <a href="https://www.material-tailwind.com/docs/react/installation" target="_blank">Material Tailwind React documentation</a>.</p>
<p>Now let’s see how you can use these two amazing tools to create your desired Login Page.</p>
<h2 id="heading-2-how-to-set-up-your-development-environment">2. How to Set Up Your Development Environment</h2>
<p>Creating a development environment tailored for your web project ensures smooth and efficient workflow. For our <a href="https://www.material-tailwind.com/docs/html/card#login-card" target="_blank">Tailwind CSS login page</a>, we’ll start from scratch.</p>
<p>Prerequisites:</p>
<ul>
<li>Node.js and npm (Node Package Manager): These are essential for installing and managing libraries we’ll be using.</li>
<li>A Text Editor or IDE: While any text editor will work, Visual Studio Code (VS Code) is recommended due to its extensive library of extensions beneficial for web development.</li>
<li>Terminal or Command Prompt: We'll be running commands to set up and manage our project.</li>
</ul>
<h3 id="heading-install-nodejs-and-npm">Install Node.js and npm</h3>
<p>To start, visit the <a href="https://nodejs.org/" target="_blank">Node.js official website</a> and download the recommended version for your OS.</p>
<p>After installation, verify that Node.js and npm are correctly installed by running the following commands:</p>
<pre><code>node -v
npm -v
</code></pre><h3 id="heading-set-up-a-new-project">Set up a new project</h3>
<p>Create a new directory for your project:</p>
<pre><code>mkdir tailwind-material-login
cd tailwind-material-login
</code></pre><p>Then initialize a new npm project:</p>
<pre><code>npm init -y
</code></pre><h3 id="heading-text-editoride-setup-vs-code">Text Editor/IDE Setup (VS Code)</h3>
<p>If you haven’t already, download and install <a href="https://code.visualstudio.com/" target="_blank">VS Code</a>. Then go ahead and open your project directory in VS Code.</p>
<p>Optionally, you can install extensions that enhance Tailwind CSS development:</p>
<ul>
<li>Tailwind CSS IntelliSense: Offers class name autocompletions, linting, and more.</li>
<li>Live Server: Allows you to see live changes without manually refreshing the browser.</li>
</ul>
<h3 id="heading-terminal-in-vs-code">Terminal in VS Code</h3>
<p>VS Code offers an integrated terminal. This means you can run commands directly within your editor.</p>
<p>To open it, go to the top menu: View &gt; Terminal or press Ctrl + a backtick.</p>
<h3 id="heading-basic-project-structure">Basic Project Structure</h3>
<p>Create a basic structure for your project:</p>
<pre><code>mkdir src
touch src/index.html
touch src/styles.css
touch src/main.js
</code></pre><p>This creates a src directory with an HTML file, a CSS file, and a JavaScript file.</p>
<h2 id="heading-3-how-to-install-necessary-dependencies-for-your-login-page">3. How to Install Necessary Dependencies for your Login Page</h2>
<p>Setting up your libraries and frameworks is crucial to build upon a solid foundation. For our Tailwind CSS login page, we'll be primarily using Tailwind CSS and Material Tailwind. </p>
<p>Here’s a step-by-step guide to installing and configuring these dependencies.</p>
<h3 id="heading-how-to-install-tailwind-css">How to install Tailwind CSS</h3>
<p>First, you'll need to install the Tailwind CSS package. Using npm, install the Tailwind CSS package with:</p>
<pre><code>npm install tailwindcss
</code></pre><p>Then, integrate Tailwind into your CSS. Inside your src/styles.css file, add the following Tailwind directives:</p>
<pre><code>@<span class="hljs-keyword">import</span> <span class="hljs-string">'tailwindcss/base'</span>;
@<span class="hljs-keyword">import</span> <span class="hljs-string">'tailwindcss/components'</span>;
@<span class="hljs-keyword">import</span> <span class="hljs-string">'tailwindcss/utilities'</span>;
</code></pre><p>Next, you'll need to generate a configuration file. While Tailwind works out of the box, a configuration file (tailwind.config.js) provides customization capabilities. </p>
<p>To generate it:</p>
<pre><code>npx tailwindcss init
</code></pre><p>This creates a minimal config file in your root directory. You can extend this file as needed.</p>
<p>Finally, to process your CSS and apply Tailwind’s transformations, add a script in your package.json under the "scripts" section:</p>
<pre><code><span class="hljs-string">"scripts"</span>: {
<span class="hljs-string">"build-css"</span>: <span class="hljs-string">"tailwind build src/styles.css -o src/output.css"</span>
}
</code></pre><p>Run the script with:</p>
<pre><code>npm run build-css
</code></pre><p>This will generate an output.css containing all Tailwind's styles. Include this file in your HTML.</p>
<h3 id="heading-how-to-install-material-tailwind">How to install Material Tailwind</h3>
<p>First, install the Material Tailwind package. Again, you can use npm:</p>
<pre><code>npm i @material-tailwind/html
</code></pre><p>Now you need to integrate it into your project. Material Tailwind provides components with styles applied. You can use them directly in your HTML or customize them further in your CSS.</p>
<p>For instance, to use a Material Tailwind button:</p>
<pre><code>&lt;button
  <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"middle none center rounded-lg bg-pink-500 py-3 px-6 font-sans text-xs font-bold uppercase text-white shadow-md shadow-pink-500/20 transition-all hover:shadow-lg hover:shadow-pink-500/40 focus:opacity-[0.85] focus:shadow-none active:opacity-[0.85] active:shadow-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none"</span>
  data-ripple-light=<span class="hljs-string">"true"</span>
&gt;
  View More
&lt;/button&gt;
</code></pre><p>Next, install the required fonts and icons. Material Design recommends specific fonts and icons. Include these in your <code>src/index.html</code>:</p>
<pre><code>&lt;!-- Material Icons Link --&gt;
<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://fonts.googleapis.com/icon?family=Material+Icons"</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet"</span>/&gt;</span></span> 

&lt;!-- Font Awesome Link --&gt;
<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/all.min.css"</span> <span class="hljs-attr">integrity</span>=<span class="hljs-string">"sha512-HK5fgLBL+xu6dm/Ii3z4xhlSUyZgTT9tuc/hSrtw6uzJOvgRr2a9jyxxT1ely+B+xFAmJKVSTbpM/CuL7qxO8w=="</span> <span class="hljs-attr">crossorigin</span>=<span class="hljs-string">"anonymous"</span>/&gt;</span></span>
</code></pre><h3 id="heading-postcss-and-autoprefixer-recommended">PostCSS and Autoprefixer (Recommended)</h3>
<p>Install PostCSS and Autoprefixer:</p>
<pre><code>npm install postcss postcss-cli autoprefixer
</code></pre><p>Go ahead and configure them by creating a postcss.config.js in your root directory:</p>
<pre><code><span class="hljs-built_in">module</span>.exports = {
  <span class="hljs-attr">plugins</span>: [
    <span class="hljs-built_in">require</span>(<span class="hljs-string">'tailwindcss'</span>),
    <span class="hljs-built_in">require</span>(<span class="hljs-string">'autoprefixer'</span>),
  ]
};
</code></pre><p>Modify your build-css script in package.json to:</p>
<pre><code><span class="hljs-string">"build-css"</span>: <span class="hljs-string">"postcss src/styles.css -o src/output.css"</span>
</code></pre><p>This ensures your Tailwind CSS styles are vendor-prefixed, making them compatible across different browsers.</p>
<p>Add into your project’s <code>&lt;head&gt;</code> the output.css styling file.</p>
<pre><code>&lt;link rel=<span class="hljs-string">"stylesheet"</span> href=<span class="hljs-string">"pathTo/output.css"</span> /&gt;
</code></pre><h2 id="heading-4-how-to-design-the-login-page-layout-with-tailwind-css">4. How to Design the Login Page Layout with Tailwind CSS</h2>
<p>A <a href="https://www.material-tailwind.com/docs/html/card#login-card" target="_blank">login page</a> typically consists of a logo or branding, input fields (like username and password), a submit button, and often some secondary options or links, such as "Forgot Password" or "Sign Up".</p>
<h3 id="heading-main-container">Main Container:</h3>
<p>Start with a main container that centers its content both vertically and horizontally.</p>
<pre><code>&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"min-h-screen flex items-center justify-center bg-gray-100"</span>&gt;
&lt;!-- Login Card Content Will Go Here --&gt;
&lt;/div&gt;
</code></pre><h3 id="heading-login-card">Login Card:</h3>
<p>Create a centered card layout that will house the login form. Introduce the necessary input fields for the login process, typically an email/username and password.</p>
<pre><code>&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"relative flex flex-col text-gray-700 bg-white shadow-md w-96 rounded-xl bg-clip-border"</span>&gt;
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>
    <span class="hljs-attr">class</span>=<span class="hljs-string">"relative grid mx-4 mb-4 -mt-6 overflow-hidden text-white shadow-lg h-28 place-items-center rounded-xl bg-gradient-to-tr from-gray-900 to-gray-800 bg-clip-border shadow-gray-900/20"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h3</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"block font-sans text-3xl antialiased font-semibold leading-snug tracking-normal text-white"</span>&gt;</span>
      Sign In
    <span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"flex flex-col gap-4 p-6"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"relative h-11 w-full min-w-[200px]"</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">input</span>
        <span class="hljs-attr">class</span>=<span class="hljs-string">"w-full h-full px-3 py-3 font-sans text-sm font-normal transition-all bg-transparent border rounded-md peer border-blue-gray-200 border-t-transparent text-blue-gray-700 outline outline-0 placeholder-shown:border placeholder-shown:border-blue-gray-200 placeholder-shown:border-t-blue-gray-200 focus:border-2 focus:border-gray-900 focus:border-t-transparent focus:outline-0 disabled:border-0 disabled:bg-blue-gray-50"</span>
        <span class="hljs-attr">placeholder</span>=<span class="hljs-string">" "</span> /&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">label</span>
        <span class="hljs-attr">class</span>=<span class="hljs-string">"before:content[' '] after:content[' '] pointer-events-none absolute left-0 -top-1.5 flex h-full w-full select-none !overflow-visible truncate text-[11px] font-normal leading-tight text-gray-500 transition-all before:pointer-events-none before:mt-[6.5px] before:mr-1 before:box-border before:block before:h-1.5 before:w-2.5 before:rounded-tl-md before:border-t before:border-l before:border-blue-gray-200 before:transition-all after:pointer-events-none after:mt-[6.5px] after:ml-1 after:box-border after:block after:h-1.5 after:w-2.5 after:flex-grow after:rounded-tr-md after:border-t after:border-r after:border-blue-gray-200 after:transition-all peer-placeholder-shown:text-sm peer-placeholder-shown:leading-[4.1] peer-placeholder-shown:text-blue-gray-500 peer-placeholder-shown:before:border-transparent peer-placeholder-shown:after:border-transparent peer-focus:text-[11px] peer-focus:leading-tight peer-focus:text-gray-900 peer-focus:before:border-t-2 peer-focus:before:border-l-2 peer-focus:before:!border-gray-900 peer-focus:after:border-t-2 peer-focus:after:border-r-2 peer-focus:after:!border-gray-900 peer-disabled:text-transparent peer-disabled:before:border-transparent peer-disabled:after:border-transparent peer-disabled:peer-placeholder-shown:text-blue-gray-500"</span>&gt;</span>
        Email
      <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"relative h-11 w-full min-w-[200px]"</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">input</span>
        <span class="hljs-attr">class</span>=<span class="hljs-string">"w-full h-full px-3 py-3 font-sans text-sm font-normal transition-all bg-transparent border rounded-md peer border-blue-gray-200 border-t-transparent text-blue-gray-700 outline outline-0 placeholder-shown:border placeholder-shown:border-blue-gray-200 placeholder-shown:border-t-blue-gray-200 focus:border-2 focus:border-gray-900 focus:border-t-transparent focus:outline-0 disabled:border-0 disabled:bg-blue-gray-50"</span>
        <span class="hljs-attr">placeholder</span>=<span class="hljs-string">" "</span> /&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">label</span>
        <span class="hljs-attr">class</span>=<span class="hljs-string">"before:content[' '] after:content[' '] pointer-events-none absolute left-0 -top-1.5 flex h-full w-full select-none !overflow-visible truncate text-[11px] font-normal leading-tight text-gray-500 transition-all before:pointer-events-none before:mt-[6.5px] before:mr-1 before:box-border before:block before:h-1.5 before:w-2.5 before:rounded-tl-md before:border-t before:border-l before:border-blue-gray-200 before:transition-all after:pointer-events-none after:mt-[6.5px] after:ml-1 after:box-border after:block after:h-1.5 after:w-2.5 after:flex-grow after:rounded-tr-md after:border-t after:border-r after:border-blue-gray-200 after:transition-all peer-placeholder-shown:text-sm peer-placeholder-shown:leading-[4.1] peer-placeholder-shown:text-blue-gray-500 peer-placeholder-shown:before:border-transparent peer-placeholder-shown:after:border-transparent peer-focus:text-[11px] peer-focus:leading-tight peer-focus:text-gray-900 peer-focus:before:border-t-2 peer-focus:before:border-l-2 peer-focus:before:!border-gray-900 peer-focus:after:border-t-2 peer-focus:after:border-r-2 peer-focus:after:!border-gray-900 peer-disabled:text-transparent peer-disabled:before:border-transparent peer-disabled:after:border-transparent peer-disabled:peer-placeholder-shown:text-blue-gray-500"</span>&gt;</span>
        Password
      <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"-ml-2.5"</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"inline-flex items-center"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">htmlFor</span>=<span class="hljs-string">"checkbox"</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"relative flex items-center p-3 rounded-full cursor-pointer"</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"checkbox"</span>
            <span class="hljs-attr">class</span>=<span class="hljs-string">"before:content[''] peer relative h-5 w-5 cursor-pointer appearance-none rounded-md border border-blue-gray-200 transition-all before:absolute before:top-2/4 before:left-2/4 before:block before:h-12 before:w-12 before:-translate-y-2/4 before:-translate-x-2/4 before:rounded-full before:bg-blue-gray-500 before:opacity-0 before:transition-opacity checked:border-gray-900 checked:bg-gray-900 checked:before:bg-gray-900 hover:before:opacity-10"</span>
            <span class="hljs-attr">id</span>=<span class="hljs-string">"checkbox"</span> /&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">span</span>
            <span class="hljs-attr">class</span>=<span class="hljs-string">"absolute text-white transition-opacity opacity-0 pointer-events-none top-2/4 left-2/4 -translate-y-2/4 -translate-x-2/4 peer-checked:opacity-100"</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">svg</span> <span class="hljs-attr">xmlns</span>=<span class="hljs-string">"http://www.w3.org/2000/svg"</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"h-3.5 w-3.5"</span> <span class="hljs-attr">viewBox</span>=<span class="hljs-string">"0 0 20 20"</span> <span class="hljs-attr">fill</span>=<span class="hljs-string">"currentColor"</span>
              <span class="hljs-attr">stroke</span>=<span class="hljs-string">"currentColor"</span> <span class="hljs-attr">stroke-width</span>=<span class="hljs-string">"1"</span>&gt;</span>
              <span class="hljs-tag">&lt;<span class="hljs-name">path</span> <span class="hljs-attr">fill-rule</span>=<span class="hljs-string">"evenodd"</span>
                <span class="hljs-attr">d</span>=<span class="hljs-string">"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"</span>
                <span class="hljs-attr">clip-rule</span>=<span class="hljs-string">"evenodd"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">path</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">svg</span>&gt;</span>
          <span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"mt-px font-light text-gray-700 cursor-pointer select-none"</span> <span class="hljs-attr">htmlFor</span>=<span class="hljs-string">"checkbox"</span>&gt;</span>
          Remember Me
        <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"p-6 pt-0"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">button</span>
      <span class="hljs-attr">class</span>=<span class="hljs-string">"block w-full select-none rounded-lg bg-gradient-to-tr from-gray-900 to-gray-800 py-3 px-6 text-center align-middle font-sans text-xs font-bold uppercase text-white shadow-md shadow-gray-900/10 transition-all hover:shadow-lg hover:shadow-gray-900/20 active:opacity-[0.85] disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none"</span>
      <span class="hljs-attr">type</span>=<span class="hljs-string">"button"</span>&gt;</span>
      Sign In
    <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"flex justify-center mt-6 font-sans text-sm antialiased font-light leading-normal text-inherit"</span>&gt;</span>
      Don't have an account?
      <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#signup"</span>
        <span class="hljs-attr">class</span>=<span class="hljs-string">"block ml-1 font-sans text-sm antialiased font-bold leading-normal text-blue-gray-900"</span>&gt;</span>
        Sign up
      <span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
&lt;/div&gt;
</code></pre><h3 id="heading-login-button">Login Button:</h3>
<p>Place the primary action button (Login) below the input fields.</p>
<pre><code>&lt;button
  <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"block w-full select-none rounded-lg bg-gradient-to-tr from-gray-900 to-gray-800 py-3 px-6 text-center align-middle font-sans text-xs font-bold uppercase text-white shadow-md shadow-gray-900/10 transition-all hover:shadow-lg hover:shadow-gray-900/20 active:opacity-[0.85] disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none"</span>
  type=<span class="hljs-string">"button"</span>&gt;
  Sign In
&lt;/button&gt;
</code></pre><h3 id="heading-secondary-options">Secondary Options:</h3>
<p>Beneath the login button, offer options such as "Forgot Password" or "Sign Up".</p>
<h2 id="heading-5-how-to-integrate-material-tailwind-components">5. How to Integrate Material Tailwind Components</h2>
<p>Material Design, initiated by Google, is a design system that combines classic principles of good design with innovative technologies. When fused with the utility-first approach of Tailwind CSS via <a href="https://www.material-tailwind.com" target="_blank">Material Tailwind</a>, it provides a powerful toolkit to create interactive and visually appealing user interfaces.</p>
<p>Material Tailwind provides styled components that adhere to Material Design guidelines but harness the utility of Tailwind. This means that while most of the styling is pre-configured, you can still utilize Tailwind classes for customization.</p>
<ul>
<li><strong><a href="https://www.material-tailwind.com/docs/html/input" target="_blank">Input Fields</a></strong></li>
</ul>
<p>Instead of the standard Tailwind-styled inputs, you can introduce Material-styled input fields for a more tactile and animated experience:</p>
<pre><code>&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"relative h-10 w-full min-w-[200px]"</span>&gt;
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span>
    <span class="hljs-attr">class</span>=<span class="hljs-string">"peer h-full w-full rounded-[7px] border border-blue-gray-200 border-t-transparent bg-transparent px-3 py-2.5 font-sans text-sm font-normal text-blue-gray-700 outline outline-0 transition-all placeholder-shown:border placeholder-shown:border-blue-gray-200 placeholder-shown:border-t-blue-gray-200 focus:border-2 focus:border-pink-500 focus:border-t-transparent focus:outline-0 disabled:border-0 disabled:bg-blue-gray-50"</span>
    <span class="hljs-attr">placeholder</span>=<span class="hljs-string">" "</span>
    <span class="hljs-attr">type</span>=<span class="hljs-string">"email"</span>
    <span class="hljs-attr">name</span>=<span class="hljs-string">"email"</span>
  /&gt;</span></span>
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"before:content[' '] after:content[' '] pointer-events-none absolute left-0 -top-1.5 flex h-full w-full select-none text-[11px] font-normal leading-tight text-blue-gray-400 transition-all before:pointer-events-none before:mt-[6.5px] before:mr-1 before:box-border before:block before:h-1.5 before:w-2.5 before:rounded-tl-md before:border-t before:border-l before:border-blue-gray-200 before:transition-all after:pointer-events-none after:mt-[6.5px] after:ml-1 after:box-border after:block after:h-1.5 after:w-2.5 after:flex-grow after:rounded-tr-md after:border-t after:border-r after:border-blue-gray-200 after:transition-all peer-placeholder-shown:text-sm peer-placeholder-shown:leading-[3.75] peer-placeholder-shown:text-blue-gray-500 peer-placeholder-shown:before:border-transparent peer-placeholder-shown:after:border-transparent peer-focus:text-[11px] peer-focus:leading-tight peer-focus:text-pink-500 peer-focus:before:border-t-2 peer-focus:before:border-l-2 peer-focus:before:border-pink-500 peer-focus:after:border-t-2 peer-focus:after:border-r-2 peer-focus:after:border-pink-500 peer-disabled:text-transparent peer-disabled:before:border-transparent peer-disabled:after:border-transparent peer-disabled:peer-placeholder-shown:text-blue-gray-500"</span>&gt;</span>
    Email
  <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span></span>
&lt;/div&gt;

<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"relative h-10 w-full min-w-[200px]"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">input</span>
    <span class="hljs-attr">class</span>=<span class="hljs-string">"peer h-full w-full rounded-[7px] border border-blue-gray-200 border-t-transparent bg-transparent px-3 py-2.5 font-sans text-sm font-normal text-blue-gray-700 outline outline-0 transition-all placeholder-shown:border placeholder-shown:border-blue-gray-200 placeholder-shown:border-t-blue-gray-200 focus:border-2 focus:border-pink-500 focus:border-t-transparent focus:outline-0 disabled:border-0 disabled:bg-blue-gray-50"</span>
    <span class="hljs-attr">placeholder</span>=<span class="hljs-string">" "</span>
    <span class="hljs-attr">type</span>=<span class="hljs-string">"password"</span>
    <span class="hljs-attr">name</span>=<span class="hljs-string">"password"</span>
  /&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"before:content[' '] after:content[' '] pointer-events-none absolute left-0 -top-1.5 flex h-full w-full select-none text-[11px] font-normal leading-tight text-blue-gray-400 transition-all before:pointer-events-none before:mt-[6.5px] before:mr-1 before:box-border before:block before:h-1.5 before:w-2.5 before:rounded-tl-md before:border-t before:border-l before:border-blue-gray-200 before:transition-all after:pointer-events-none after:mt-[6.5px] after:ml-1 after:box-border after:block after:h-1.5 after:w-2.5 after:flex-grow after:rounded-tr-md after:border-t after:border-r after:border-blue-gray-200 after:transition-all peer-placeholder-shown:text-sm peer-placeholder-shown:leading-[3.75] peer-placeholder-shown:text-blue-gray-500 peer-placeholder-shown:before:border-transparent peer-placeholder-shown:after:border-transparent peer-focus:text-[11px] peer-focus:leading-tight peer-focus:text-pink-500 peer-focus:before:border-t-2 peer-focus:before:border-l-2 peer-focus:before:border-pink-500 peer-focus:after:border-t-2 peer-focus:after:border-r-2 peer-focus:after:border-pink-500 peer-disabled:text-transparent peer-disabled:before:border-transparent peer-disabled:after:border-transparent peer-disabled:peer-placeholder-shown:text-blue-gray-500"</span>&gt;</span>
    Password
  <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
</code></pre><p>These components offer a floating label effect and subtle focus animations out of the box.</p>
<ul>
<li><strong><a href="https://www.material-tailwind.com/docs/html/button" target="_blank">Buttons</a></strong></li>
</ul>
<p>Material Tailwind offers a set of button styles that fit within the Material Design paradigm:</p>
<pre><code>&lt;button
  <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"middle none center rounded-lg bg-pink-500 py-3 px-6 font-sans text-xs font-bold uppercase text-white shadow-md shadow-pink-500/20 transition-all hover:shadow-lg hover:shadow-pink-500/40 focus:opacity-[0.85] focus:shadow-none active:opacity-[0.85] active:shadow-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none"</span>
  data-ripple-light=<span class="hljs-string">"true"</span>
&gt;
  Login
&lt;/button&gt;
</code></pre><p>This renders a raised button with Material's signature ripple effect on click.</p>
<ul>
<li><strong><a href="https://www.material-tailwind.com/docs/html/tooltip" target="_blank">Tooltips</a></strong></li>
</ul>
<p>To enhance user guidance, you can add tooltips to your components:</p>
<pre><code>&lt;button
  data-ripple-light=<span class="hljs-string">"true"</span>
  data-tooltip-target=<span class="hljs-string">"tooltip"</span>
  <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"middle none center rounded-lg bg-gradient-to-tr from-pink-600 to-pink-400 py-3 px-6 font-sans text-xs font-bold uppercase text-white shadow-md shadow-pink-500/20 transition-all hover:shadow-lg hover:shadow-pink-500/40 active:opacity-[0.85] disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none"</span>
&gt;
  Show Tooltip
&lt;/button&gt;
<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>
  <span class="hljs-attr">data-tooltip</span>=<span class="hljs-string">"tooltip"</span>
  <span class="hljs-attr">class</span>=<span class="hljs-string">"absolute z-50 whitespace-normal break-words rounded-lg bg-black py-1.5 px-3 font-sans text-sm font-normal text-white focus:outline-none"</span>
&gt;</span>
  Login Form
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
</code></pre><p>When users hover over the element, they'll see a tooltip providing additional information.</p>
<ul>
<li><strong>Incorporating <a href="https://www.material-tailwind.com/docs/html/icon-button" target="_blank">Material Icons</a></strong></li>
</ul>
<p>Material Design also has a rich set of icons. Material Tailwind makes it easy to incorporate these:</p>
<pre><code>&lt;button
  <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"item-center middle none center flex justify-center rounded-lg bg-pink-500 p-3 font-sans text-xs font-bold uppercase text-white shadow-md shadow-pink-500/20 transition-all hover:shadow-lg hover:shadow-pink-500/40 focus:opacity-[0.85] focus:shadow-none active:opacity-[0.85] active:shadow-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none"</span>
  data-ripple-light=<span class="hljs-string">"true"</span>
&gt;
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">i</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"fas fa-heart text-lg leading-none"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">i</span>&gt;</span></span>
&lt;/button&gt;
</code></pre><p>Make sure you've already linked to Material icons in your HTML as instructed earlier.</p>
<ul>
<li><strong><a href="https://www.material-tailwind.com/docs/html/theming" target="_blank">Customizing Material Components</a></strong></li>
</ul>
<p>While Material Tailwind components come pre-styled, you can still leverage Tailwind utility classes for customizations:</p>
<pre><code>&lt;button 
  <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"button button-pink !bg-blue-500 px-4"</span> 
  data-ripple-light=<span class="hljs-string">"true"</span>
&gt;
  Button
&lt;/button&gt;
</code></pre><p>Here, we've overridden the default primary color with a custom shade of purple from Tailwind's color palette.</p>
<p>Incorporating Material Tailwind components provides an elegant touch to the login page, combining the efficiency of Tailwind CSS with the visual and interactive richness of Material Design. The result is a responsive, user-friendly, and visually cohesive login experience. </p>
<p>Also, you can check the components library’s <a href="https://www.material-tailwind.com/blocks/authentication" target="_blank">Tailwind CSS login page templates</a>.</p>
<h2 id="heading-6-how-to-style-input-fields-and-buttons">6. How to Style Input Fields and Buttons</h2>
<p>The appearance and feel of input fields and buttons play a pivotal role in user experience. They're the primary interaction points. Let's focus on giving them a sleek, user-friendly design using Material Tailwind and Tailwind CSS.</p>
<ol>
<li><strong><a href="https://www.material-tailwind.com/docs/html/input" target="_blank">Material Tailwind Input Fields</a>:</strong></li>
</ol>
<p>Material Tailwind offers a more polished look for input fields out of the box. Here's how you can integrate them:</p>
<pre><code>&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"relative h-11 w-full min-w-[200px]"</span>&gt;
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span>
    <span class="hljs-attr">class</span>=<span class="hljs-string">"peer h-full w-full border-b border-blue-gray-200 bg-transparent pt-4 pb-1.5 font-sans text-sm font-normal text-blue-gray-700 outline outline-0 transition-all placeholder-shown:border-blue-gray-200 focus:border-pink-500 focus:outline-0 disabled:border-0 disabled:bg-blue-gray-50"</span>
    <span class="hljs-attr">placeholder</span>=<span class="hljs-string">" "</span>
    <span class="hljs-attr">type</span>=<span class="hljs-string">"email"</span>
    <span class="hljs-attr">name</span>=<span class="hljs-string">"email"</span>
  /&gt;</span></span>
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"after:content[' '] pointer-events-none absolute left-0 -top-1.5 flex h-full w-full select-none text-[11px] font-normal leading-tight text-blue-gray-500 transition-all after:absolute after:-bottom-1.5 after:block after:w-full after:scale-x-0 after:border-b-2 after:border-pink-500 after:transition-transform after:duration-300 peer-placeholder-shown:text-sm peer-placeholder-shown:leading-[4.25] peer-placeholder-shown:text-blue-gray-500 peer-focus:text-[11px] peer-focus:leading-tight peer-focus:text-pink-500 peer-focus:after:scale-x-100 peer-focus:after:border-pink-500 peer-disabled:text-transparent peer-disabled:peer-placeholder-shown:text-blue-gray-500"</span>&gt;</span>
    Email
  <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span></span>
&lt;/div&gt;

<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"relative h-11 w-full min-w-[200px]"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">input</span>
    <span class="hljs-attr">class</span>=<span class="hljs-string">"peer h-full w-full border-b border-blue-gray-200 bg-transparent pt-4 pb-1.5 font-sans text-sm font-normal text-blue-gray-700 outline outline-0 transition-all placeholder-shown:border-blue-gray-200 focus:border-pink-500 focus:outline-0 disabled:border-0 disabled:bg-blue-gray-50"</span>
    <span class="hljs-attr">placeholder</span>=<span class="hljs-string">" "</span>
    <span class="hljs-attr">type</span>=<span class="hljs-string">"password"</span>
    <span class="hljs-attr">name</span>=<span class="hljs-string">"password"</span>
  /&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"after:content[' '] pointer-events-none absolute left-0 -top-1.5 flex h-full w-full select-none text-[11px] font-normal leading-tight text-blue-gray-500 transition-all after:absolute after:-bottom-1.5 after:block after:w-full after:scale-x-0 after:border-b-2 after:border-pink-500 after:transition-transform after:duration-300 peer-placeholder-shown:text-sm peer-placeholder-shown:leading-[4.25] peer-placeholder-shown:text-blue-gray-500 peer-focus:text-[11px] peer-focus:leading-tight peer-focus:text-pink-500 peer-focus:after:scale-x-100 peer-focus:after:border-pink-500 peer-disabled:text-transparent peer-disabled:peer-placeholder-shown:text-blue-gray-500"</span>&gt;</span>
    Password
  <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
</code></pre><p>These fields come with improved focus effects and an overall refined look, making them more engaging.</p>
<ol start="2">
<li><strong><a href="https://www.material-tailwind.com/docs/html/icon-button" target="_blank">Enhancing with Icons</a>:</strong></li>
</ol>
<p>Integrating Material icons can guide users and enhance visual cues:</p>
<pre><code>&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"relative h-10 w-full min-w-[200px]"</span>&gt;
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"absolute top-2/4 right-3 grid h-5 w-5 -translate-y-2/4 place-items-center text-blue-gray-500"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">i</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"fas fa-heart"</span> <span class="hljs-attr">aria-hidden</span>=<span class="hljs-string">"true"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">i</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span>
    <span class="hljs-attr">class</span>=<span class="hljs-string">"peer h-full w-full rounded-[7px] border border-blue-gray-200 border-t-transparent bg-transparent px-3 py-2.5 !pr-9 font-sans text-sm font-normal text-blue-gray-700 outline outline-0 transition-all placeholder-shown:border placeholder-shown:border-blue-gray-200 placeholder-shown:border-t-blue-gray-200 focus:border-2 focus:border-pink-500 focus:border-t-transparent focus:outline-0 disabled:border-0 disabled:bg-blue-gray-50"</span>
    <span class="hljs-attr">placeholder</span>=<span class="hljs-string">" "</span>
  /&gt;</span></span>
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"before:content[' '] after:content[' '] pointer-events-none absolute left-0 -top-1.5 flex h-full w-full select-none text-[11px] font-normal leading-tight text-blue-gray-400 transition-all before:pointer-events-none before:mt-[6.5px] before:mr-1 before:box-border before:block before:h-1.5 before:w-2.5 before:rounded-tl-md before:border-t before:border-l before:border-blue-gray-200 before:transition-all after:pointer-events-none after:mt-[6.5px] after:ml-1 after:box-border after:block after:h-1.5 after:w-2.5 after:flex-grow after:rounded-tr-md after:border-t after:border-r after:border-blue-gray-200 after:transition-all peer-placeholder-shown:text-sm peer-placeholder-shown:leading-[3.75] peer-placeholder-shown:text-blue-gray-500 peer-placeholder-shown:before:border-transparent peer-placeholder-shown:after:border-transparent peer-focus:text-[11px] peer-focus:leading-tight peer-focus:text-pink-500 peer-focus:before:border-t-2 peer-focus:before:border-l-2 peer-focus:before:border-pink-500 peer-focus:after:border-t-2 peer-focus:after:border-r-2 peer-focus:after:border-pink-500 peer-disabled:text-transparent peer-disabled:before:border-transparent peer-disabled:after:border-transparent peer-disabled:peer-placeholder-shown:text-blue-gray-500"</span>&gt;</span>
    Input With Icon
  <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span></span>
&lt;/div&gt;
</code></pre><p>The email field now includes a mail icon on the left, giving users a clear indication of the input type.</p>
<ol start="3">
<li><strong><a href="https://www.material-tailwind.com/docs/html/button" target="_blank">Material Tailwind Buttons</a>:</strong></li>
</ol>
<p>Material Tailwind buttons come pre-styled with Material aesthetics. However, you can further customize their appearance with Tailwind utility classes:</p>
<pre><code>&lt;button
  <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"middle none center rounded-lg bg-pink-500 py-3 px-6 font-sans text-xs font-bold uppercase text-white shadow-md shadow-pink-500/20 transition-all hover:shadow-lg hover:shadow-pink-500/40 focus:opacity-[0.85] focus:shadow-none active:opacity-[0.85] active:shadow-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none"</span>
  data-ripple-light=<span class="hljs-string">"true"</span>
&gt;
  Login
&lt;/button&gt;
</code></pre><p>In this example, the button has a primary blue background color with different shades on hover and active states.</p>
<ol start="4">
<li><strong><a href="https://www.material-tailwind.com/docs/html/button" target="_blank">Button Variations</a>:</strong></li>
</ol>
<p>Offering secondary or tertiary actions? You can use outlined or text buttons:</p>
<ul>
<li>Gradient Button:</li>
</ul>
<pre><code>&lt;button
  <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"middle none center mr-3 rounded-lg bg-gradient-to-tr from-pink-600 to-pink-400 py-3 px-6 font-sans text-xs font-bold uppercase text-white shadow-md shadow-pink-500/20 transition-all hover:shadow-lg hover:shadow-pink-500/40 active:opacity-[0.85] disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none"</span>
  data-ripple-light=<span class="hljs-string">"true"</span>
&gt;
  Gradient Button
&lt;/button&gt;
</code></pre><ul>
<li>Outlined Button:</li>
</ul>
<pre><code>&lt;button
  <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"middle none center mr-3 rounded-lg border border-pink-500 py-3 px-6 font-sans text-xs font-bold uppercase text-pink-500 transition-all hover:opacity-75 focus:ring focus:ring-pink-200 active:opacity-[0.85] disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none"</span>
  data-ripple-dark=<span class="hljs-string">"true"</span>
&gt;
  Outlined Button
&lt;/button&gt;
</code></pre><ul>
<li>Text Button:</li>
</ul>
<pre><code>&lt;button
  <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"middle none center rounded-lg py-3 px-6 font-sans text-xs font-bold uppercase text-pink-500 transition-all hover:bg-pink-500/10 active:bg-pink-500/30 disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none"</span>
  data-ripple-dark=<span class="hljs-string">"true"</span>
&gt;
  Text Button
&lt;/button&gt;
</code></pre><ol start="5">
<li><strong>Responsiveness and Sizing:</strong></li>
</ol>
<p>Remember to consider different device sizes. Tailwind's responsive utilities can help:</p>
<pre><code>&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"relative h-10 w-full md:w-50 lg:w-24"</span>&gt;
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span>
    <span class="hljs-attr">class</span>=<span class="hljs-string">"peer h-full w-full rounded-[7px] border border-blue-gray-200 border-t-transparent bg-transparent px-3 py-2.5 font-sans text-sm font-normal text-blue-gray-700 outline outline-0 transition-all placeholder-shown:border placeholder-shown:border-blue-gray-200 placeholder-shown:border-t-blue-gray-200 focus:border-2 focus:border-pink-500 focus:border-t-transparent focus:outline-0 disabled:border-0 disabled:bg-blue-gray-50"</span>
    <span class="hljs-attr">placeholder</span>=<span class="hljs-string">" "</span>
    <span class="hljs-attr">type</span>=<span class="hljs-string">"email"</span>
  /&gt;</span></span>
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"before:content[' '] after:content[' '] pointer-events-none absolute left-0 -top-1.5 flex h-full w-full select-none text-[11px] font-normal leading-tight text-blue-gray-400 transition-all before:pointer-events-none before:mt-[6.5px] before:mr-1 before:box-border before:block before:h-1.5 before:w-2.5 before:rounded-tl-md before:border-t before:border-l before:border-blue-gray-200 before:transition-all after:pointer-events-none after:mt-[6.5px] after:ml-1 after:box-border after:block after:h-1.5 after:w-2.5 after:flex-grow after:rounded-tr-md after:border-t after:border-r after:border-blue-gray-200 after:transition-all peer-placeholder-shown:text-sm peer-placeholder-shown:leading-[3.75] peer-placeholder-shown:text-blue-gray-500 peer-placeholder-shown:before:border-transparent peer-placeholder-shown:after:border-transparent peer-focus:text-[11px] peer-focus:leading-tight peer-focus:text-pink-500 peer-focus:before:border-t-2 peer-focus:before:border-l-2 peer-focus:before:border-pink-500 peer-focus:after:border-t-2 peer-focus:after:border-r-2 peer-focus:after:border-pink-500 peer-disabled:text-transparent peer-disabled:before:border-transparent peer-disabled:after:border-transparent peer-disabled:peer-placeholder-shown:text-blue-gray-500"</span>&gt;</span>
    Required
  <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span></span>
&lt;/div&gt;
</code></pre><p>This input field takes the full width on smaller screens, but only half the width on larger ones.</p>
<h2 id="heading-7-how-to-implement-responsive-design">7. How to Implement Responsive Design</h2>
<p>A significant strength of Tailwind CSS lies in its mobile-first approach to responsive design. Ensuring your login page looks good and functions well on all devices is crucial for user experience.</p>
<p>Tailwind CSS is built with a mobile-first mindset. This means that by default, the classes you apply are for mobile views. To target larger screens, you utilize breakpoints. For instance:</p>
<pre><code>.text-sm md:text-base lg:text-xl
</code></pre><p>On mobile, the text size would be sm, on medium-sized screens (like tablets) it would be base, and on large screens (like desktops) it would be xl.</p>
<ul>
<li>Responsive Card Layout: While our login card may look great on desktop, it might be too narrow on mobile. You can adjust this:</li>
</ul>
<pre><code>&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"relative flex flex-col text-gray-700 bg-white shadow-md w-96 rounded-xl bg-clip-border"</span>&gt;
&lt;!-- Login Content --&gt;
&lt;/div&gt;
</code></pre><p>Here, we're using less padding (p-4) and taking full width (w-full) on mobile, but increasing the padding (md:p-8) and setting a fixed width (md:w-96) on medium screens and above.</p>
<ul>
<li>Adapting Input Fields and Buttons: Ensure that interactive elements are easily accessible on touch devices:</li>
</ul>
<pre><code>&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"relative h-10 w-full mb-4 md:mb-0"</span>&gt;
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span>
    <span class="hljs-attr">class</span>=<span class="hljs-string">"peer h-full w-full rounded-[7px] border border-blue-gray-200 border-t-transparent bg-transparent px-3 py-2.5 font-sans text-sm font-normal text-blue-gray-700 outline outline-0 transition-all placeholder-shown:border placeholder-shown:border-blue-gray-200 placeholder-shown:border-t-blue-gray-200 focus:border-2 focus:border-pink-500 focus:border-t-transparent focus:outline-0 disabled:border-0 disabled:bg-blue-gray-50"</span>
    <span class="hljs-attr">placeholder</span>=<span class="hljs-string">" "</span>
    <span class="hljs-attr">type</span>=<span class="hljs-string">"email"</span>
  /&gt;</span></span>
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"before:content[' '] after:content[' '] pointer-events-none absolute left-0 -top-1.5 flex h-full w-full select-none text-[11px] font-normal leading-tight text-blue-gray-400 transition-all before:pointer-events-none before:mt-[6.5px] before:mr-1 before:box-border before:block before:h-1.5 before:w-2.5 before:rounded-tl-md before:border-t before:border-l before:border-blue-gray-200 before:transition-all after:pointer-events-none after:mt-[6.5px] after:ml-1 after:box-border after:block after:h-1.5 after:w-2.5 after:flex-grow after:rounded-tr-md after:border-t after:border-r after:border-blue-gray-200 after:transition-all peer-placeholder-shown:text-sm peer-placeholder-shown:leading-[3.75] peer-placeholder-shown:text-blue-gray-500 peer-placeholder-shown:before:border-transparent peer-placeholder-shown:after:border-transparent peer-focus:text-[11px] peer-focus:leading-tight peer-focus:text-pink-500 peer-focus:before:border-t-2 peer-focus:before:border-l-2 peer-focus:before:border-pink-500 peer-focus:after:border-t-2 peer-focus:after:border-r-2 peer-focus:after:border-pink-500 peer-disabled:text-transparent peer-disabled:before:border-transparent peer-disabled:after:border-transparent peer-disabled:peer-placeholder-shown:text-blue-gray-500"</span>&gt;</span>
    Email
  <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span></span>
&lt;/div&gt;
<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">button</span>
  <span class="hljs-attr">class</span>=<span class="hljs-string">"middle none center mr-3 rounded-lg border border-pink-500 py-3 px-6 font-sans text-xs font-bold uppercase text-pink-500 transition-all hover:opacity-75 focus:ring focus:ring-pink-200 active:opacity-[0.85] disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none"</span>
  <span class="hljs-attr">data-ripple-dark</span>=<span class="hljs-string">"true"</span>
&gt;</span>
  Login
<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></span>
</code></pre><p>On mobile, the input fields and buttons take up the full width for easier touch access but adapt to more spacious designs on larger screens.</p>
<ul>
<li>Handling Landscape Mode: Sometimes, especially on mobile devices, landscape mode can drastically alter layouts. Consider adding specific styles for this using Tailwind's landscape plugin (if you've added it to your configuration):</li>
</ul>
<pre><code>&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"mt-10 landscape:mt-4"</span>&gt;
&lt;!-- Login Content --&gt;
&lt;/div&gt;
</code></pre><p>In landscape mode, the top margin is reduced to accommodate the shorter viewport height.</p>
<ul>
<li><a href="https://www.material-tailwind.com/docs/html/typography" target="_blank">Typography</a> Adjustments: Optimal readability is essential. Ensure text sizes are appropriate for various devices:</li>
</ul>
<pre><code>&lt;h2 
  <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"block font-sans text-4xl font-semibold leading-[1.3] tracking-normal text-inherit antialiased"</span>
&gt;
  Sign In to Your Account
&lt;/h2&gt;
</code></pre><p>On mobile, the title is slightly smaller, but it scales up on medium and larger screens.</p>
<ul>
<li>Testing Responsiveness:  While Tailwind offers the tools to create responsive designs, always test your layouts on actual devices or using browser tools. This ensures a consistent experience across devices and resolutions.</li>
</ul>
<h2 id="heading-8-how-to-add-interactivity-and-validation">8. How to Add Interactivity and Validation</h2>
<p>A successful login page isn't just about looks – it must provide feedback, handle user input gracefully, and validate that input to ensure security and functionality.</p>
<p>Material Tailwind components come with built-in animations and feedback mechanisms. For instance, when you click a Material Tailwind button, you'll see a ripple effect, providing immediate feedback to the user.</p>
<h3 id="heading-toggle-password-visibility">Toggle Password Visibility:</h3>
<p>A common feature in login forms is the ability to toggle password visibility. This improves user experience, especially on mobile devices where typing mistakes are more frequent. Using Material icons and some simple JavaScript:</p>
<pre><code>
&lt;form id=<span class="hljs-string">"loginForm"</span>&gt;
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"relative mb-4"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"relative h-10 w-full min-w-[200px]"</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"absolute top-2/4 right-3 grid h-5 w-5 -translate-y-2/4 place-items-center text-blue-gray-500"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">i</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"fas fa-heart"</span> <span class="hljs-attr">aria-hidden</span>=<span class="hljs-string">"true"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">i</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">input</span>
        <span class="hljs-attr">class</span>=<span class="hljs-string">"peer h-full w-full rounded-[7px] border border-blue-gray-200 border-t-transparent bg-transparent px-3 py-2.5 !pr-9 font-sans text-sm font-normal text-blue-gray-700 outline outline-0 transition-all placeholder-shown:border placeholder-shown:border-blue-gray-200 placeholder-shown:border-t-blue-gray-200 focus:border-2 focus:border-pink-500 focus:border-t-transparent focus:outline-0 disabled:border-0 disabled:bg-blue-gray-50"</span>
        <span class="hljs-attr">placeholder</span>=<span class="hljs-string">" "</span>
        <span class="hljs-attr">type</span>=<span class="hljs-string">"password"</span>
        <span class="hljs-attr">id</span>=<span class="hljs-string">"password"</span>
      /&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"before:content[' '] after:content[' '] pointer-events-none absolute left-0 -top-1.5 flex h-full w-full select-none text-[11px] font-normal leading-tight text-blue-gray-400 transition-all before:pointer-events-none before:mt-[6.5px] before:mr-1 before:box-border before:block before:h-1.5 before:w-2.5 before:rounded-tl-md before:border-t before:border-l before:border-blue-gray-200 before:transition-all after:pointer-events-none after:mt-[6.5px] after:ml-1 after:box-border after:block after:h-1.5 after:w-2.5 after:flex-grow after:rounded-tr-md after:border-t after:border-r after:border-blue-gray-200 after:transition-all peer-placeholder-shown:text-sm peer-placeholder-shown:leading-[3.75] peer-placeholder-shown:text-blue-gray-500 peer-placeholder-shown:before:border-transparent peer-placeholder-shown:after:border-transparent peer-focus:text-[11px] peer-focus:leading-tight peer-focus:text-pink-500 peer-focus:before:border-t-2 peer-focus:before:border-l-2 peer-focus:before:border-pink-500 peer-focus:after:border-t-2 peer-focus:after:border-r-2 peer-focus:after:border-pink-500 peer-disabled:text-transparent peer-disabled:before:border-transparent peer-disabled:after:border-transparent peer-disabled:peer-placeholder-shown:text-blue-gray-500"</span>&gt;</span>
      Password
      <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">button</span>
      <span class="hljs-attr">class</span>=<span class="hljs-string">"middle none center mr-3 rounded-lg border border-pink-500 py-3 px-6 font-sans text-xs font-bold uppercase text-pink-500 transition-all hover:opacity-75 focus:ring focus:ring-pink-200 active:opacity-[0.85] disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none"</span>
      <span class="hljs-attr">data-ripple-dark</span>=<span class="hljs-string">"true"</span>
      <span class="hljs-attr">id</span>=<span class="hljs-string">"togglePassword"</span>
    &gt;</span>
      Submit
    <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
&lt;/form&gt;

<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
    <span class="hljs-keyword">const</span> passwordField = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'password'</span>);
    <span class="hljs-keyword">const</span> togglePasswordBtn = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'togglePassword'</span>);

    togglePasswordBtn.addEventListener(<span class="hljs-string">'click'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-keyword">if</span> (passwordField.type === <span class="hljs-string">"password"</span>) {
            passwordField.type = <span class="hljs-string">"text"</span>;
        } <span class="hljs-keyword">else</span> {
            passwordField.type = <span class="hljs-string">"password"</span>;
        }
    });
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></span>
</code></pre><p>Clicking the visibility icon will now toggle the password field between visible and obscured states.</p>
<h3 id="heading-client-side-validation">Client-Side Validation:</h3>
<p>While never a replacement for server-side validation, client-side validation provides immediate feedback:</p>
<pre><code>&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"relative h-10 w-full min-w-[200px]"</span>&gt;
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"absolute top-2/4 right-3 grid h-5 w-5 -translate-y-2/4 place-items-center text-blue-gray-500"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">i</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"fas fa-heart"</span> <span class="hljs-attr">aria-hidden</span>=<span class="hljs-string">"true"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">i</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">input</span>
    <span class="hljs-attr">class</span>=<span class="hljs-string">"peer h-full w-full rounded-[7px] border border-blue-gray-200 border-t-transparent bg-transparent px-3 py-2.5 !pr-9 font-sans text-sm font-normal text-blue-gray-700 outline outline-0 transition-all placeholder-shown:border placeholder-shown:border-blue-gray-200 placeholder-shown:border-t-blue-gray-200 focus:border-2 focus:border-pink-500 focus:border-t-transparent focus:outline-0 disabled:border-0 disabled:bg-blue-gray-50"</span>
    <span class="hljs-attr">placeholder</span>=<span class="hljs-string">" "</span>
    <span class="hljs-attr">type</span>=<span class="hljs-string">"email"</span>
    <span class="hljs-attr">id</span>=<span class="hljs-string">"email"</span>
    <span class="hljs-attr">name</span>=<span class="hljs-string">"email"</span>
    <span class="hljs-attr">required</span>
    <span class="hljs-attr">pattern</span>=<span class="hljs-string">"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$"</span>
  /&gt;</span></span>
  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"before:content[' '] after:content[' '] pointer-events-none absolute left-0 -top-1.5 flex h-full w-full select-none text-[11px] font-normal leading-tight text-blue-gray-400 transition-all before:pointer-events-none before:mt-[6.5px] before:mr-1 before:box-border before:block before:h-1.5 before:w-2.5 before:rounded-tl-md before:border-t before:border-l before:border-blue-gray-200 before:transition-all after:pointer-events-none after:mt-[6.5px] after:ml-1 after:box-border after:block after:h-1.5 after:w-2.5 after:flex-grow after:rounded-tr-md after:border-t after:border-r after:border-blue-gray-200 after:transition-all peer-placeholder-shown:text-sm peer-placeholder-shown:leading-[3.75] peer-placeholder-shown:text-blue-gray-500 peer-placeholder-shown:before:border-transparent peer-placeholder-shown:after:border-transparent peer-focus:text-[11px] peer-focus:leading-tight peer-focus:text-pink-500 peer-focus:before:border-t-2 peer-focus:before:border-l-2 peer-focus:before:border-pink-500 peer-focus:after:border-t-2 peer-focus:after:border-r-2 peer-focus:after:border-pink-500 peer-disabled:text-transparent peer-disabled:before:border-transparent peer-disabled:after:border-transparent peer-disabled:peer-placeholder-shown:text-blue-gray-500"</span>&gt;</span>
  Email
  <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span></span>
&lt;/div&gt;
</code></pre><p>The required attribute ensures the field is not left empty, and the pattern attribute uses a basic regex to validate email structure.</p>
<h3 id="heading-handling-form-submission">Handling Form Submission:</h3>
<p>When the user attempts to log in, you can provide feedback using JavaScript:</p>
<pre><code><span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'loginForm'</span>).addEventListener(<span class="hljs-string">'submit'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">event</span>) </span>{
    event.preventDefault();

    <span class="hljs-comment">// Fetch input values</span>
    <span class="hljs-keyword">const</span> email = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'email'</span>).value;
    <span class="hljs-keyword">const</span> password = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'password'</span>).value;

    <span class="hljs-comment">// Example: Check if credentials are empty</span>
    <span class="hljs-keyword">if</span> (!email || !password) {
        alert(<span class="hljs-string">'Please fill in all fields.'</span>);
        <span class="hljs-keyword">return</span>;
    }

    <span class="hljs-comment">// <span class="hljs-doctag">TODO:</span> Handle actual submission to server</span>

    <span class="hljs-comment">// On success:</span>
    <span class="hljs-comment">// alert('Logged in successfully!');</span>

    <span class="hljs-comment">// On failure:</span>
    <span class="hljs-comment">// alert('Invalid credentials. Please try again.');</span>
});
</code></pre><p>The code above prevents the default form submission and provides feedback depending on the input. This is a simplistic approach, and in real-world scenarios, you'd interact with server endpoints to authenticate the user.</p>
<h3 id="heading-handling-errors-and-feedback">Handling Errors and Feedback:</h3>
<p>It's crucial to provide clear feedback in the event of errors or successful actions. Consider using modals, snack bars, or simple inline messages to communicate the status of actions to users.</p>
<p>For example, using Tailwind:</p>
<pre><code>&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"bg-red-500 text-white p-4 rounded-md mt-4"</span> id=<span class="hljs-string">"errorMessage"</span> style=<span class="hljs-string">"display: none;"</span>&gt;
Invalid credentials. Please <span class="hljs-keyword">try</span> again.
&lt;/div&gt;
</code></pre><p>Then, using JavaScript, you can show or hide this error message based on the authentication result.</p>
<h2 id="heading-9-security-and-best-practices-for-login-pages">9. Security and Best Practices for Login Pages</h2>
<p>Security is paramount when dealing with user authentication. A well-designed login page not only enhances user experience but also acts as the first line of defense against potential threats.</p>
<h3 id="heading-https-and-encryption">HTTPS and Encryption:</h3>
<p>Before any other consideration, ensure your website uses HTTPS. This encrypts data transmitted between the user's browser and your server, protecting it from eavesdropping and tampering.</p>
<h3 id="heading-password-security">Password Security:</h3>
<p>Client-Side:</p>
<ul>
<li>Never store passwords in plain text or local storage.</li>
<li>Use password input fields (type="password") to hide password characters.</li>
</ul>
<p>Server-Side:</p>
<ul>
<li>Always hash and salt passwords before storing them in your database.</li>
<li>Consider using proven libraries like bcrypt for hashing.</li>
</ul>
<h3 id="heading-avoid-verbose-error-messages">Avoid Verbose Error Messages:</h3>
<p>If authentication fails, avoid specifying whether it was the username or password that was incorrect. Instead, use generic messages:</p>
<pre><code>alert(<span class="hljs-string">'Invalid login credentials. Please try again.'</span>);
</code></pre><p>This prevents attackers from determining if a particular email or username is registered with your site.</p>
<ul>
<li><strong>Limit Login Attempts:</strong> Implement a system to track failed login attempts and consider locking out users or implementing CAPTCHAs after a certain threshold is reached. This helps prevent brute-force attacks.</li>
<li><strong>Implement CAPTCHAs:</strong> Tools like Google's reCAPTCHA can help ensure that login attempts are made by humans, not automated scripts. This further protects against brute-force and bot-driven attacks.</li>
<li><strong>Secure Password Reset</strong> - If you provide a "Forgot Password" option:<ul>
<li>Use one-time tokens that expire after a short duration.</li>
<li>Send the reset link to the registered email instead of allowing password changes directly from the login page.</li>
<li>Always ask security questions or verify user identity before allowing password resets.</li>
</ul>
</li>
<li><strong>Cross-Site Scripting (XSS) and SQL Injection</strong>: Always sanitize and validate input data to protect against XSS attacks and SQL injections. Utilize parameterized queries or prepared statements to prevent SQL injections.</li>
<li><strong>Keep Libraries and Dependencies Updated</strong>: Regularly update your server software, libraries, and other dependencies to ensure you're protected against known vulnerabilities.</li>
<li><strong>Use Content Security Policy (CSP)</strong>: A CSP helps prevent a wide range of attacks, including XSS. It limits the sources of executable scripts, ensuring that only trusted sources are allowed.</li>
<li><strong>Logging and Monitoring</strong>: Keep logs of authentication attempts, especially failed ones. Monitoring these can alert you to potential attacks or suspicious activities.</li>
<li><strong>Two-Factor Authentication (2FA)</strong>: Consider implementing 2FA for added user account protection. This requires users to provide two distinct forms of identification before gaining access.</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Building a login page might seem easy, but there's a lot to think about. It should look good, work well, be easy to use on any device, and be safe. Thanks to tools like <a href="https://tailwindcss.com/" target="_blank">Tailwind CSS</a> and <a href="https://material-tailwind.com/" target="_blank">Material Tailwind</a>, you can make great login pages without too much hassle.</p>
<p>In this guide, we started from scratch and ended up with a ready-to-use login page. By combining Tailwind CSS's easy style tools and Material Design's nice looks, users get a great experience every time they log in.</p>
<p>But remember, technology keeps changing. So, always keep learning and updating your skills.</p>
<h3 id="heading-useful-links">Useful links:</h3>
<ul>
<li><a href="https://tailwindcss.com/" target="_blank">Tailwind CSS Website</a></li>
<li><a href="https://github.com/tailwindlabs/tailwindcss" target="_blank">Tailwind CSS Github</a></li>
<li><a href="https://material-tailwind.com/" target="_blank">Material Tailwind Website</a></li>
<li><a href="https://github.com/creativetimofficial/material-tailwind" target="_blank">Material Tailwind Github</a></li>
<li><a href="https://www.material-tailwind.com/docs/html/installation" target="_blank">Material Tailwind Documentation</a></li>
<li><a href="https://www.creative-tim.com/templates/tailwind" target="_blank">Free Tailwind CSS Website Templates</a></li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ UI/UX Design Guide: What Are UI Designers, and How Are They Different Than UX Designers? ]]>
                </title>
                <description>
                    <![CDATA[ Have you noticed how User Interface and User Experience design are considered different topics nowadays?  You're not the only one. We live in a beautiful era of design, with new techniques and trends coming and going. Frontend development is also gai... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/ui-ux-design-guide/</link>
                <guid isPermaLink="false">66c375aef278f15f931a3422</guid>
                
                    <category>
                        <![CDATA[ Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ UI Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ UI UX ]]>
                    </category>
                
                    <category>
                        <![CDATA[ ux design ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Alexandru Paduraru ]]>
                </dc:creator>
                <pubDate>Tue, 13 Jul 2021 02:14:52 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/07/cover.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Have you noticed how User Interface and User Experience design are considered different topics nowadays? </p>
<p>You're not the only one.</p>
<p>We live in a beautiful era of design, with new techniques and trends coming and going. Frontend development is also <a target="_blank" href="https://2020.stateofcss.com/en-US/">gaining increased momentum</a>, with more and more developers getting involved in UI/UX design.</p>
<p>While both UI and UX design are often placed on the same pedestal, they are fundamentally different, and beginners should understand the difference between the two.</p>
<p>Knowing this, my team from <a target="_blank" href="https://creative-tim.com">Creative Tim</a> and I have done a lot of research and created a comprehensive guide on the most important parts of these two huge domains:</p>
<ol>
<li><a class="post-section-overview" href="#heading-ui-design-how-things-look"><strong>UI Design — How Things Look</strong></a></li>
<li><a class="post-section-overview" href="#heading-ux-design-how-things-work"><strong>UX Design — How Things Work</strong></a></li>
<li><a class="post-section-overview" href="#heading-what-are-the-key-differences-between-ui-and-ux-design"><strong>What Are the Key Differences Between UI and UX Design?</strong></a></li>
<li><a class="post-section-overview" href="#heading-what-do-uiux-designers-do"><strong>What Do UI/UX Designers Do?</strong></a></li>
<li><a class="post-section-overview" href="#heading-what-are-the-disadvantages-of-a-combined-uiux-role"><strong>What Are the Disadvantages of a Combined UI/UX Role?</strong></a></li>
<li><a class="post-section-overview" href="#heading-how-do-uiux-designers-work-together"><strong>How Do UI/UX Designers Work Together?</strong></a></li>
<li><a class="post-section-overview" href="#heading-what-are-the-salaries-of-ui-and-ux-designers"><strong>What Are the Salaries of UI and UX Designers?</strong></a></li>
<li><a class="post-section-overview" href="#heading-how-do-you-become-a-ui-or-ux-expert-what-kind-of-design-coursestutorials-should-you-take"><strong>How Do You Become a UI or UX Expert? What Kind of Design Courses/Tutorials Should You Take?</strong></a></li>
<li><a class="post-section-overview" href="#heading-which-should-you-specialize-in-ui-or-ux-design"><strong>Which Should You Specialize In? UI or UX Design?</strong></a></li>
</ol>
<h2 id="heading-ui-design-how-things-look"><strong>UI Design — How Things Look</strong></h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/07/quote-martin-leblac-1.jpg" alt="Image with the quote &quot;A User interface is like a joke. If you have to explain it, it's not that good.&quot; — Martin LeBlac" width="600" height="400" loading="lazy"></p>
<p>A UI (User Interface) deals with the application's graphical layout, which includes buttons, screen layout, animations, transitions, micro-interactions, and so on. In short, UI is all about how things look.</p>
<p>UI design includes the following formats:</p>
<ul>
<li><strong><a target="_blank" href="https://en.wikipedia.org/wiki/Graphical_user_interface">Graphical User Interface (GUI)</a></strong>: GUI design involves how users interact with the visuals and digital control panels of a system. The computer's desktop is an example of a GUI.</li>
<li><strong><a target="_blank" href="https://en.wikipedia.org/wiki/Voice_user_interface">Voice-controlled Interface (VUI)</a></strong>: VUI design deals with the interaction between a user and a system using voice. Smart assistants like Bixby for Samsung mobile devices and Siri for iPhones are examples of VUIs.</li>
<li><strong><a target="_blank" href="https://en.wikipedia.org/wiki/Gesture_recognition">Gesture-based Interface</a></strong>: This is mostly used in virtual reality (VR) and other gesture-based design scenarios, which deal with the engagement of users within 3D spaces. Here is an example of our fully coded simulation of the <a target="_blank" href="https://www.creative-tim.com/product/soft-ui-dashboard-pro">Soft UI Admin Dashboard</a> in VR:</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/07/soft-vr-2-1.gif" alt="Example of a gesture-based interface." width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://demos.creative-tim.com/soft-ui-dashboard-pro/pages/dashboards/default.html">Source</a></em></p>
<p>For good UI design, you should take these characteristics into consideration:</p>
<ul>
<li>The design should be focused on helping users complete tasks quickly with minimum effort. Completing tasks should be a seamless experience.</li>
<li>It should be enjoyable, satisfactory, and free from frustration.</li>
<li>The UI design should communicate the brand value of the company/organization.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/07/10-design-pinciples-1.jpg" alt="A list of principles for good design." width="600" height="400" loading="lazy"></p>
<h2 id="heading-ux-design-how-things-work"><strong>UX Design — How Things Work</strong></h2>
<p>UX (User Experience) design deals with how users interact with the system. Logical navigation and how smooth and intuitive the experience is all fall under UX design. In short, this type of design helps users have a positive experience.</p>
<p>To get a feeling of the UX process, here are the main steps:</p>
<ul>
<li><strong>Interaction Design</strong> deals with how users can complete their tasks effortlessly by using the interactive components of a system (page transitions, animations, buttons, and so on).</li>
<li><strong>User Research</strong> involves conducting extensive research, collecting feedback and ideas from new or existing customers, understanding end user needs, and making design decisions based on these parameters.</li>
<li><strong>Information Architecture</strong> involves the organization of information and content that users need to do their tasks. This requires a UX designer to understand the relationship between different sets of content and present them in the most understandable way possible.</li>
</ul>
<p>For good UX design, you should follow these practices:</p>
<ul>
<li>The product should be easily usable, logical, and self-explanatory.</li>
<li>The product should solve users's problems.</li>
<li>The product should be accessible and usable to a wide range of people.</li>
<li>The product should create a positive experience for the user, allowing them to complete tasks without frustration.</li>
</ul>
<h3 id="heading-cognitive-biases"><strong>Cognitive Biases</strong></h3>
<p>Great UX designers must be aware of the cognitive biases that we all have, as this can affect the interaction between the user and interfaces. Many marketing strategies are based on these biases:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/07/Cognitive_bias_codex_en.svg" alt="A codex of cognitive biases" width="600" height="400" loading="lazy">
_<a target="_blank" href="https://upload.wikimedia.org/wikipedia/commons/6/65/Cognitive_bias_codex_en.svg">Source</a>_</p>
<h2 id="heading-what-are-the-key-differences-between-ui-and-ux-design"><strong>What Are the Key Differences Between UI and UX Design?</strong></h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/07/ui-vs-ux-1.jpg" alt="Image of a branching walking path and dirt path." width="600" height="400" loading="lazy"></p>
<p>UI and UX design have often been used as interchangeable terms.</p>
<p>While the end product requires consideral input from both design methodologies, the process of designing UI and UX is very different.</p>
<p>UX design mostly deals with the user’s entire journey to solve a problem. </p>
<p>On the other hand, UI design is focused on how the product looks and feels when the problem is being solved.</p>
<p>Here are the main differences between UI and UX design:</p>
<ul>
<li><strong>Main focus:</strong> The main focus of UI designers is to deal with the quality and visuals of the end product, and use hi-fi models as prototypes. UX designers focus more on the purpose and functionality of the end product, and care more about logic. Additionally, UI designers deal with the technicalities of the product design, while UX designers focus more on project management and analysis of the project.</li>
<li><strong>Use of color:</strong> UI designers design prototypes in full color while UX designers do so in black, white, or grey.</li>
<li><strong>Tools:</strong> UI designers use tools like <a target="_blank" href="https://www.sketch.com/">Sketch</a>, <a target="_blank" href="https://www.flinto.com/">Flinto</a>, <a target="_blank" href="https://principleformac.com/">Principle</a>, and <a target="_blank" href="https://www.invisionapp.com/">InVision</a> for collaborative image designing. UX designers use wireframe-based prototyping tools like <a target="_blank" href="https://www.mockplus.com/">Mockplus</a>.</li>
<li><strong>Artistic Component:</strong> UI designers have to include an artistic component in their design since it is related to what the end user sees, hears, and feels. UX design has more of a social component, as it needs to understand what a user wants to experience in the end product.</li>
</ul>
<p>Here is an example of UX and UI prototypes for the same end product:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/07/soft-ui-design-system-1.jpg" alt="A simple UX design wireframe and a hi-fi UI prototype for the same web page." width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://www.creative-tim.com/product/soft-ui-design-system-pro">Source</a></em></p>
<h2 id="heading-what-do-uiux-designers-do"><strong>What Do UI/UX Designers Do?</strong></h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/07/table-1.jpg" alt="A table showing the differences between UI and UX designers." width="600" height="400" loading="lazy"></p>
<p>If you want to become a greate <strong>UI designer</strong>, you should develop the following skills/responsibilities:</p>
<ul>
<li>Working in agile teams.</li>
<li>Creating user flows, wireframes, prototypes and so on.</li>
<li>Visualization tools such as <a target="_blank" href="https://www.invisionapp.com/">InVision</a>,<a target="_blank" href="https://www.sketch.com/"> Sketch</a>,<a target="_blank" href="https://www.photoshop.com/"> Photoshop</a>,<a target="_blank" href="https://www.figma.com/"> Figma</a>, etc. For more details about which tool to choose, check out our research in this article: <a target="_blank" href="https://www.freecodecamp.org/news/adobe-xd-vs-sketch-vs-figma-vs-invision/">InVision vs Sketch vs Figma vs Photoshop</a></li>
<li>Frontend programming languages such as HTML5, CSS3, and JavaScript.</li>
<li>Executing visual design stages from inception to final hand-off.</li>
<li>Collaborating with UX designers, developers, QA, and product managers to design and implement innovative visual ideas for products.</li>
<li>Communicating the branding and style of the company to users through design.</li>
<li>Creating the look and feel of the product using customer analysis and research.</li>
<li>Managing the responsiveness, interactivity, and animation of a product and making it adaptive to all device screen sizes.</li>
</ul>
<p>If you want to become a great <strong>UX designer</strong>, you should develop these skills/responsibilities:</p>
<ul>
<li>Working in agile teams.</li>
<li>A strong understanding of the UX process.</li>
<li>Prototyping tools like <a target="_blank" href="https://www.adobe.com/creativecloud.html">Adobe Creative Suite</a>, <a target="_blank" href="https://www.sketch.com/">Sketch</a>,<a target="_blank" href="https://www.invisionapp.com/"> InVision</a>, <a target="_blank" href="https://www.axure.com/">Axure</a>, etc.</li>
<li>Problem solving skills and curiosity about everything related to design, people, life and technology.</li>
<li>Stakeholder management and client interaction.</li>
<li>Creating process flows, wireframes, sitemaps, prototypes, and UX deliverables.</li>
<li>Collaborating closely with developers, product managers, UI designers, external stakeholders, and QA Engineers to iterate designs based on market dynamics, user feedback, and tech constraints.</li>
<li>Analyzing customer needs, competitors, product structure, and strategies for designing the experience of a product.</li>
<li>Creating seamless design and interaction strategies for mobile, web, desktop, and other hardware endpoints.</li>
</ul>
<h2 id="heading-what-are-the-disadvantages-of-a-combined-uiux-role"><strong>What Are the Disadvantages of a Combined UI/UX Role?</strong></h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/07/Artboard--4--1.jpg" alt="A concept seat belt design from the 1960s which went around people's necks." width="600" height="400" loading="lazy"></p>
<p>Having a combined UI/UX role is almost like wearing two different hats at the same time.</p>
<p>While most organizations advertize a UI/UX role as a single, combined role, a UI and UX designers have different skill sets. Their main focus, way of thinking, and method of prototyping a product differ greatly.</p>
<p>A combined UI/UX role requires constant switching between conceptualization and visualization, which is often difficult and can reduce the amount of attention that each discipline requires.</p>
<h2 id="heading-how-do-uiux-designers-work-together"><strong>How Do UI/UX Designers Work Together?</strong></h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/07/Artboard-Copy-4--1--1.jpg" alt="Designers working together." width="600" height="400" loading="lazy"></p>
<p>While UI design and UX design require very different skill sets, they are both important components that must work in harmony to give the best experience to end users.</p>
<p>A UI design might be beautiful, but it can be clunky and confusing to navigate without a good UX design. On the other hand, the user experience of a product can be flawless, but it is nothing without a good looking user interface.</p>
<p>Any frontend development and design process should start with understanding the needs of the user. UX and UI designers should work in collaboration with other developers, managers, and product owners to understand what the end product should be able to do, how it should feel, and what it should look like.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/07/quote-steve-jobs-1.jpg" alt="A quote from Steve Jobs that reads, &quot;Design is not just what it looks like and feels like. Design is how it works.&quot;" width="600" height="400" loading="lazy"></p>
<p>UX designers are generally involved in the earlier phases of a product design since they need to design the flow of activities that take place when a user needs to solve a problem. This involves analytic and project management activities.</p>
<p>Later, a UI designer builds on the aesthetics and interactions based on the models provided by the UX designer.</p>
<p>Given this, it is safe to state that UX and UI go hand in hand. And while there are instances when the same person does both, one design principle cannot exist without the other.</p>
<h2 id="heading-what-are-the-salaries-of-ui-and-ux-designers"><strong>What Are the Salaries of UI and UX Designers?</strong></h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/07/ux-salary-1.jpg" alt="A map showing different UI/UX designer salaries in different parts of the world." width="600" height="400" loading="lazy"></p>
<p>UI designers earn an average of 50k worldwide, with the average salary in the USA being 91k, Germany being 57k, France being 47k, and 67k in the UK.</p>
<p>UX designers earn slightly more, with an average of 52k worldwide. UX designers in the US earn 102k on average, with Germany paying 53k, 49k in France, and 68k in the UK. (Source: <a target="_blank" href="http://www.glassdoor.com/">Glassdoor</a>)</p>
<p>Note: All the salaries listed above are an average for the area, and are in USD.</p>
<h2 id="heading-how-do-you-become-a-ui-or-ux-expert-what-kind-of-design-coursestutorials-should-you-take"><strong>How Do You Become a UI or UX Expert? What Kind of Design Courses/Tutorials Should You Take?</strong></h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/07/tutorials--1--1.jpg" alt="Animated people using laptops." width="600" height="400" loading="lazy"></p>
<p>Becoming a UI or UX expert starts with being genuinely interested in UI/UX design. Once you know you're interested, you should find resources and take design courses that help prepare you for the job market.</p>
<p>There are online courses like the <a target="_blank" href="https://careerfoundry.com/en/courses/become-a-ui-designer/">UI Design Program</a> and <a target="_blank" href="https://learnui.design/">Learning UI Design</a> that can help you kickstart your journey towards becoming a UI designer.</p>
<p>For UX design, you can study online,<a target="_blank" href="https://www.interaction-design.org/courses"> paid courses</a>, or courses from<a target="_blank" href="https://online.rmit.edu.au/course/sc-user-experience-design-dtr105"> online universities</a>. You can also look at the<a target="_blank" href="https://uxplanet.org/30-best-online-course-websites-to-learn-ui-ux-updated-6b104762731a"> best online course websites to learn UI/UX</a> so you can see which websites offer courses for free and the user feedback on these websites.</p>
<p>For UX design, there are a number of <a target="_blank" href="https://www.interaction-design.org/courses">paid courses</a>, of courses from <a target="_blank" href="https://online.rmit.edu.au/course/sc-user-experience-design-dtr105">online universities</a>. You can also check out a list of the <a target="_blank" href="https://uxplanet.org/30-best-online-course-websites-to-learn-ui-ux-updated-6b104762731a">best online courses to learn UI/UX design</a> so you can see which websites offer courses for free, and read user feedback.</p>
<p>Suppose you already have some of the required skills to be a UI/UX designer. In that case, you can also take a look at articles like the <a target="_blank" href="https://uxdesign.cc/10-essential-cognitive-behavior-patterns-for-ux-design-7f0cc2e00d31">behavior patterns for UX design</a>, <a target="_blank" href="https://uxdesign.cc/65-ux-methods-and-when-to-use-them-73e70c742d12">UX methods that you can use</a>, <a target="_blank" href="https://dribbble.com/tags/article">inspirational graphic designs from the world's best designers</a>, and <a target="_blank" href="https://uxdesign.cc/5-academic-research-papers-every-designer-should-read-f24b170db295">academic research papers that designers should read</a>.</p>
<h3 id="heading-which-should-you-specialize-in-ui-or-ux-design"><strong>Which Should You Specialize In? UI or UX Design?</strong></h3>
<p>Specializing in UI or UX design is a personal preference that depends on your particular skillset. </p>
<p>However, there are a huge number of companies that advertise a combined UI/UX designer role. </p>
<p>While the roles and responsibilities of both these vary differently, there is still a niche market for UI/UX design, making it a good idea to have adequate knowledge about both.</p>
<p>While difficult to implement, a combined UI/UX career can prove fruitful in terms of salary compensation and importance in the company.</p>
<p>However, a combined UI/UX designer role is difficult to perform since it needs constant switching from one mindset to the other. So it is often a better option to specialize in one role instead.</p>
<p>For example, if you are artistic, know effective color combinations, and understand how products can be visually enhanced, UI design is a good choice for you.</p>
<p>On the other hand, if you are good with managing user and stakeholder needs, have excellent analysis skills, and understand how user experiences can be improved, UX design would be more suited to you.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/07/quote-joe-sparano-1.jpg" alt="A quote from Joe Sparano that reads, &quot;Good design is obvious. Great design is transparent.&quot;" width="600" height="400" loading="lazy"></p>
<h2 id="heading-final-thoughts"><strong>Final Thoughts</strong></h2>
<p>User Interface and User Experience design both require an understanding of what users need.</p>
<p>Once you have this understanding, frontend development and design do not have to be a complex affair — there are a lot of ready-made components, tools, and kits that can make design easier and more effective.</p>
<p><a target="_blank" href="https://www.creative-tim.com/">Creative Tim</a> offers you a huge number of free and premium, fully coded UI tools like Templates, Dashboards, and Design Systems.</p>
<p>If you want to build your illustrations using hand-drawn sketch components in a scalable manner, look no further than Creative Tim’s product: <a target="_blank" href="https://iradesign.io/">IRA Design</a>.</p>
<p>And let's keep in touch on <a target="_blank" href="https://twitter.com/CreativeTim">Twitter</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Adobe XD vs Sketch vs Figma vs InVision - How to Pick the Best Design Software ]]>
                </title>
                <description>
                    <![CDATA[ Comparing Adobe XD vs Sketch vs Figma vs InVision studio is a very common topic among designers who are looking for the best design software. Sketch has long been the application of choice for UX and UI designers. But in the last four years, we have ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/adobe-xd-vs-sketch-vs-figma-vs-invision/</link>
                <guid isPermaLink="false">66c375a2e912451bdfbe18cf</guid>
                
                    <category>
                        <![CDATA[ Design Process ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Design Tools ]]>
                    </category>
                
                    <category>
                        <![CDATA[ designer ]]>
                    </category>
                
                    <category>
                        <![CDATA[ graphic design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Product Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ UI Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Applications ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ website development, ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Alexandru Paduraru ]]>
                </dc:creator>
                <pubDate>Wed, 05 Feb 2020 08:21:51 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/02/Adobe-xd-vs-Sketch-1024x576.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Comparing <strong>Adobe XD vs Sketch vs Figma vs InVision studio</strong> is a very common topic among designers who are looking for the best design software.</p>
<p>Sketch has long been the application of choice for UX and UI designers. But in the last four years, we have seen many new contenders for Sketch’s crown. Three of them that have made the biggest strides are Figma, Adobe XD, and InVision Studio.</p>
<p>These four tools have many pros in common but there are some differences too. For example, the first comparison, Adobe XD vs Sketch, makes sense especially since both have a similar interface which is user-friendly and has a minimalistic style.</p>
<p>In this article, I analyze how the most used design apps compete and what their unique features are using my experience acquired while working at <a target="_blank" href="https://www.creative-tim.com/?ref=freecodecamp">Creative Tim</a>.</p>
<p><img src="https://creativetimblog.com/blog/wp-content/uploads/2020/01/adobe-xd.png" alt="adobe xd" width="600" height="400" loading="lazy"></p>
<h3 id="heading-adobe-xdhttpswwwadobecomproductsxddetailshtml"><a target="_blank" href="https://www.adobe.com/products/xd/details.html"><strong>Adobe XD</strong></a></h3>
<p>Adobe XD was developed and published by Adobe Inc. XD, released on 18 October 2017. It is a vector-based user experience design tool for web apps, mobile apps, and voice apps available for macOS and Windows. There are versions for iOS and Android as well that help you preview the result of your work directly on mobile devices.</p>
<p>XD also support website wireframing and creating simple interactive click-through prototypes. With the character and layout tools of Adobe XD, Elements can be easily created and individual objects can be exported.</p>
<p>The interface is kept relatively simple, with a toolbar that is aligned at the side, as well as the large artboard area.</p>
<p>Comparing Adobe XD vs Sketch makes sense especially because of this similar interface which is user-friendly and has a minimalistic style.</p>
<p><img src="https://creativetimblog.com/blog/wp-content/uploads/2020/01/sketch.png" alt="sketch" width="600" height="400" loading="lazy"></p>
<h3 id="heading-sketchhttpswwwsketchcom"><a target="_blank" href="https://www.sketch.com/"><strong>Sketch</strong></a></h3>
<p>Sketch is a <a target="_blank" href="https://en.wikipedia.org/wiki/Vector_graphics_editor">vector graphics editor</a>, developed by the <a target="_blank" href="https://en.wikipedia.org/wiki/Netherlands">Dutch</a> company Bohemian Coding. Sketch was first released on 7 September 2010 for <a target="_blank" href="https://en.wikipedia.org/wiki/MacOS">macOS</a>. It won an <a target="_blank" href="https://en.wikipedia.org/wiki/Apple_Design_Awards">Apple Design Award</a> in 2012.</p>
<p>A key difference between Sketch and other vector graphics editors is that Sketch does not include print design features. Sketch is only available on macOS. This problem is partially solved by third party and handoff tools.</p>
<p>When Sketch first came out it completely disrupted the interface design space, but Adobe XD and Figma have recently come forward as new challengers. They offer unique functionality like prototyping and live collaboration.</p>
<p>I’ve recently been researching these tools for my side project, <a target="_blank" href="http://uxtools.co/">uxtools.co</a>, and wanted to share what I believe the be the most noteworthy decision points. Also, from my point of view, <a target="_blank" href="https://ahrefs.com/keywords-explorer/google/us/overview?keyword=learning%20to%20sketch">learning to sketch</a> is very useful and it does not take to much to become a Pro.</p>
<p><img src="https://creativetimblog.com/blog/wp-content/uploads/2020/01/figma.png" alt="figma" width="600" height="400" loading="lazy"></p>
<h3 id="heading-figmahttpswwwfigmacom"><a target="_blank" href="https://www.figma.com/"><strong>Figma</strong></a></h3>
<p>Figma came to the stage in 2016 <a target="_blank" href="https://techcrunch.com/2015/12/03/figma-vs-goliath/">with initial funding of $14M</a>.</p>
<p>With its seamless user interface and sleek feature palette, the tool quickly became a notorious competitor to similar solutions in the field.</p>
<p>Designers from brands like Twitter, Microsoft, GitHub, and Dropbox swear by Figma as the ultimate UI design tool.</p>
<p><img src="https://creativetimblog.com/blog/wp-content/uploads/2020/01/invision.png" alt="InVision Studio" width="600" height="400" loading="lazy"></p>
<h3 id="heading-invision-studiohttpswwwinvisionappcomstudio"><a target="_blank" href="https://www.invisionapp.com/studio"><strong>InVision Studio</strong></a></h3>
<p>InVision Studio is a new piece of software, released in 2019, that allows designers to build more advanced animation and micro-interactions. Studio also integrated with InVision’s link to Sketch via its Craft plugin.</p>
<p><strong>InVision Studio has got a nice dark UI by default</strong>, that helps developers focus on the work to be done in the evening. However, with macOS Mojave, every app can look like this quite easily. When they created it, they were inspired by another design tool - I am thinking about the Sketch app.</p>
<h2 id="heading-apps-comparison"><strong>Apps Comparison</strong></h2>
<h3 id="heading-1-pricing"><strong>1. Pricing</strong></h3>
<p>Budget can be a big deal when you’re working with your own resources. Some of these licenses have educational and promotional pricing (often 50% off), so don’t miss that part. For example, Figma will get you there for free as long as you're not working on a team.</p>
<ul>
<li><p><strong>Figma</strong>: Free for individuals! You can have 3 projects for free, or you can upgrade to unlimited projects and team functionality for $12/month (billed annually).</p>
</li>
<li><p><strong>Sketch</strong>: $99 per license that gets you the Mac App for life and access to the next production versions of the app.</p>
</li>
<li><p><strong>Adobe XD</strong>: It offers free and paid plans, depending on an individual's or team's needs. Paid plans start at $9.99/month.</p>
</li>
<li><p><strong>InVision Studio:</strong> Free right now.</p>
</li>
</ul>
<h3 id="heading-2-platform"><strong>2. Platform</strong></h3>
<p>Though Sketch has been immensely popular, it forces designers to only use Mac, which alienates developers from accessing design files.</p>
<ul>
<li><p><strong>Figma</strong>: Browser! Figma recently released a <a target="_blank" href="http://figma.com/downloads">Mac app</a> and <a target="_blank" href="https://www.figma.com/downloads">Windows app</a> (not offline-capable, though).</p>
</li>
<li><p><strong>Sketch</strong>: Mac only.</p>
</li>
<li><p><strong>Adobe XD</strong>: Mac and Windows. Subject to the same limitations as the CC suite.</p>
</li>
<li><p><strong>InVision Studio:</strong> Mac and Windows.</p>
</li>
</ul>
<h3 id="heading-3-live-collaboration"><strong>3. Live Collaboration</strong></h3>
<p>Nobody likes to send at the end of the day “version 3.0”, “version3.0.final”, “version3.0.final.final”. Live Collaboration can help us, especially live comments.</p>
<p>I imagine these were the same concerns that surrounded the release of the highly innovative Google Docs suite. Google Docs, however, turned the Microsoft Suite on its head with live collaboration, and now Figma is seeking to do the same thing with UI design.</p>
<ul>
<li><p><strong>Figma</strong>: Yes! Not to mention being browser-based, it allows Windows and even Linux users to have a very polished design tool.</p>
</li>
<li><p><strong>Sketch</strong>: Not natively, but a plugin, <a target="_blank" href="http://picnic.design/">Picnic</a>, is looking to change that. Also, they have <a target="_blank" href="https://www.sketch.com/teams/">Sketch for Teams</a>.</p>
</li>
<li><p><strong>Adobe XD</strong>: It offers real-time Coediting, launched at Adobe MAX 2019.</p>
</li>
<li><p><strong>InVision Studio:</strong> Not currently possible, but can generate share links.</p>
</li>
</ul>
<p><img src="https://i.imgur.com/Sy3UzVS.png" alt="Live Collaboration" width="2864" height="1594" loading="lazy"></p>
<p><em>Image: Figma -</em> <a target="_blank" href="https://www.creative-tim.com/product/argon-design-system-pro?ref=freecodecamp"><em>Argon Design System Pro</em></a></p>
<h3 id="heading-4-handoff"><strong>4. Handoff</strong></h3>
<p>Recently a few apps have been developed specifically to deliver specs (sizing, spacing, color) to developers, but design tools are starting to integrate this functionality natively.</p>
<ul>
<li><p><strong>Figma</strong>: Because of live collaboration, developers can easily jump in (regardless of OS) and access the designs. Figma now neatly prints the handoff code for CSS, iOS, or Android in the right panel.</p>
</li>
<li><p><strong>Sketch</strong>: They've recently launched their own native developer handoff feature — Cloud Inspector. There’s even an entirely free alternative called Sketch measure that works just as well.</p>
</li>
<li><p><strong>Adobe XD</strong>: It offers design specs that allow a designer to create a shared link that contains measurements, assets, and automatically-generated CSS code snippets.</p>
</li>
<li><p><strong>InVision Studio:</strong> They have “Inspect Now”.</p>
</li>
</ul>
<p><img src="https://i.imgur.com/5zY7ixi.png" alt="Handoff" width="2870" height="1494" loading="lazy"></p>
<p><em>Image: Figma -</em> <a target="_blank" href="https://www.creative-tim.com/product/argon-design-system-pro?ref=freecodecamp"><em>Argon Design System Pro</em></a></p>
<h3 id="heading-5-offline"><strong>5. Offline</strong></h3>
<p>This is so important. Some online apps can protect your information when Wifi goes down, but you need full access to open, use, and save from the app offline.</p>
<ul>
<li><p><strong>Figma</strong>: No, in an AMA they stated they don't have any current plans to add it.</p>
</li>
<li><p><strong>Sketch</strong>: Sure.</p>
</li>
<li><p><strong>Adobe XD</strong>: Yep.</p>
</li>
<li><p><strong>InVision Studio:</strong> Yes.</p>
</li>
</ul>
<p><img src="https://i.imgur.com/PY9NsKh.png" alt="Offline" width="2866" height="1596" loading="lazy"></p>
<p><em>Image: AdobeXD -</em> <a target="_blank" href="https://www.creative-tim.com/product/argon-dashboard?ref=freecodecamp"><em>Argon Dashboard Free</em></a></p>
<h3 id="heading-6-prototyping"><strong>6. Prototyping</strong></h3>
<p>There are literally dozens of these apps nowadays, but they might become extinct as Adobe XD brings prototyping directly to the design tool. Keep your eye on these.</p>
<ul>
<li><p><strong>Figma</strong>: Yes! It's very basic but feels like Adobe XD without the transitions. Also, there's a nice <a target="_blank" href="https://medium.com/figma-design/introducing-figmas-integration-with-framer-c69a747aeee2">Framer</a> integration.</p>
</li>
<li><p><strong>Sketch</strong>: Yes!</p>
</li>
<li><p><strong>Adobe XD</strong>: Yes, native prototyping within the app. Adobe XD also supports voice prototyping and keyboard/gamepad support.</p>
</li>
<li><p><strong>InVision Studio:</strong> Yes, you can create prototypes and animations.</p>
</li>
</ul>
<p><img src="https://i.imgur.com/5QZ8Rt1.png" alt="Prototyping" width="2812" height="1522" loading="lazy"></p>
<p><em>Image: InVision Studio -</em> <a target="_blank" href="https://www.creative-tim.com/product/argon-react-native?ref=freecodecamp"><em>Argon React Native</em></a></p>
<h3 id="heading-7-symbols"><strong>7. Symbols</strong></h3>
<p>Symbols can make your work easier. These have completely changed the design process. Forget building and duplicating list items over and over, let symbols do the work for you.</p>
<ul>
<li><p><strong>Figma</strong>: Good to go. Symbols now have states, constraints, and overrides.</p>
</li>
<li><p><strong>Sketch</strong>: The symbol functionality in Sketch is very impressive, and continues to improve. Symbols can be updated across entire documents and can resize responsively (that means less work for you when changing screen sizes).</p>
</li>
<li><p><strong>Adobe XD</strong>: It offers components that can be used throughout a document as well as linked across documents. It also allows designers to create variations of a component for different interactions, known as component states.</p>
</li>
<li><p><strong>InVision Studio:</strong> they have components that are a close approximation to the symbol conventions found in other applications. Components in their final form will honor a broad, scalable hierarchy that allows designers to quickly build-up, mix, and match components intelligently across their designs.</p>
</li>
</ul>
<p><img src="https://i.imgur.com/9lfwDD5.png" alt="Symbols" width="2874" height="1600" loading="lazy"></p>
<p><em>Image: Sketch -</em> <a target="_blank" href="https://www.creative-tim.com/product/material-kit-pro?ref=freecodecamp"><em>Material Kit Pro</em></a></p>
<h2 id="heading-conclusion"><strong>Conclusion</strong></h2>
<p>Sketch has a big disadvantage here because it is only available for Mac users. And as such, it lets tools like Figma and Adobe XD innovate beyond the basic necessities.</p>
<p>Also, in terms of design tools, Adobe XD provides a robust set of responsive while the Sketch doesn’t have this feature built-in (but it has many plugins). If your tool does something better than the other, it is often enough of a reason to switch over. The browser-based approach that Figma has taken is also something to behold.</p>
<p>When talking about Adobe XD vs Sketch, the first one’s future is looking very bright and will win over many Sketch users. InVision’s change of focus may ensure its survival but one thing is for certain - Adobe XD is here to stay. The Adobe powerhouse is strong, and smaller companies like InVision and Sketch will have to work hard to stay relevant in the future.</p>
<p>People usually prefer to design and work in just one place. If you’re a part of a team, then Figma is undoubtedly for you.</p>
<p><img src="https://i.imgur.com/YaMctAr.png" alt="conclusions" width="2522" height="1932" loading="lazy"></p>
<p><strong>After all of that: first is Figma, second is Sketch, third is Adobe XD and fourth is InVision Studio.</strong></p>
<p>Overall, when talking about the best design software, these four tools are extremely well-suited for modern designer needs.</p>
<p>Try all four out to see which one is better for your use cases. I hope this comparison - Adobe XD vs Sketch vs Figma vs InVision - helped you decide which design tool is better for you.</p>
<p>Resources:</p>
<p><a target="_blank" href="https://www.figma.com/figma-vs-sketch/">https://www.figma.com/figma-vs-sketch/</a></p>
<p><a target="_blank" href="https://uxtools.co/blog/sketch-vs-adobe-xd-vs-figma/">https://uxtools.co/blog/sketch-vs-adobe-xd-vs-figma/</a></p>
<p><a target="_blank" href="https://www.codeinwp.com/blog/figma-vs-sketch-vs-adobe-xd/">https://www.codeinwp.com/blog/figma-vs-sketch-vs-adobe-xd/</a></p>
<p><a target="_blank" href="https://support.invisionapp.com/hc/en-us/sections/360004450191-Studio">https://support.invisionapp.com/hc/en-us/sections/360004450191-Studio</a></p>
<p><a target="_blank" href="https://helpx.adobe.com/ro/xd/help/components.html">https://helpx.adobe.com/ro/xd/help/components.html</a></p>
<p><a target="_blank" href="https://www.sketch.com/docs/">https://www.sketch.com/docs/</a></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ We made $1,052,000 in 2018 selling UI Tools. Here is what we learned. ]]>
                </title>
                <description>
                    <![CDATA[ _Kanye West is great! Image by [https://unsplash.com/@karinacarvalho](https://unsplash.com/@karinacarvalho" rel="noopener" target="blank" title=") It sounds cliché, but having a great product is crucial. I said this many times, and we’ve been followi... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/we-made-1-052-000-in-2018-selling-ui-tools-here-is-what-we-learned-38920d86a296/</link>
                <guid isPermaLink="false">66c375b240438b5931fe0a04</guid>
                
                    <category>
                        <![CDATA[ Entrepreneurship ]]>
                    </category>
                
                    <category>
                        <![CDATA[ startup ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Alexandru Paduraru ]]>
                </dc:creator>
                <pubDate>Mon, 29 Apr 2019 17:32:24 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*8Z9W2ggInqi2ywLDODxu5w.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><img src="https://cdn-media-1.freecodecamp.org/images/eIgwxIODLmNTp5VX7z2OWyL5jYY029dBdk1w" alt="Image" width="800" height="533" loading="lazy">
_Kanye West is great! Image by [https://unsplash.com/@karinacarvalho](https://unsplash.com/@karinacarvalho" rel="noopener" target="<em>blank" title=")</em></p>
<p>It sounds cliché, but having a great product is crucial. I said this many times, and we’ve been following this rule since the beginning of Creative Tim. For us, a Great Product = Great Design + Great Customer Support + Great User Experience.</p>
<p>If you want to learn more about how we started everything 5 years ago, from a Starbucks, please check this article: <a target="_blank" href="https://medium.freecodecamp.org/growing-a-side-project-into-a-17-000-month-business-46024d2aa87f">How my friends and I grew our side project into a $17.000/month business</a>. That article was written exactly 2 years ago, and I would recommend you to read it before proceeding to this one so you can better understand the whole journey.</p>
<p>A lot of the strategies that we will present here can be applied to other online businesses, and you will see an example of how somebody created a successful startup based on the other article that we published.</p>
<h4 id="heading-why-do-we-share-all-these-secrets">Why do we share “all these secrets”?</h4>
<p><img src="https://cdn-media-1.freecodecamp.org/images/PgqkKfsAEjnw5lrNzChH8Wn41eKHqkULEG4y" alt="Image" width="800" height="376" loading="lazy"></p>
<p>Everything that we built was based on free information and free resources that were found on the web and I think it is in our responsibility to give back. There are a lot of entrepreneurs who want to start a business or want to scale one, but they don’t know how to acquire new users without using a paid channel. We want to help these people so they can apply some of the techniques and spend less time doing experiments.</p>
<p>In this case study, I will present how we grew monthly revenue ~5x, from $17.000 to $106.000 while being in a very crowded market (Themes and Templates). Here is an overview of the article:</p>
<ol>
<li>Partnership strategies (The moment you quit is the moment you lose)</li>
<li>If you want to be great, stay near great companies</li>
<li>Growth Hacking: from trending on Github’s front page to continuous launches on Product Hunt</li>
<li>How different we are from our competitors and why this worked for us</li>
<li>Give Back: Education, Sponsorships, and Tutorials</li>
<li>Can people apply our strategies to different businesses?</li>
<li>What’s next?</li>
</ol>
<h4 id="heading-lets-begin">Let’s begin! :-)</h4>
<h3 id="heading-1-partnership-strategies">1. Partnership strategies</h3>
<p>If you’ve read the other article, you know that after some trial and error in different fields, from giving design components to our users and some growth hacking, we finally found the <a target="_blank" href="https://en.wikipedia.org/wiki/Product/market_fit">Product Market Fit</a>. We had around 226.000 visits made by 77.000 people, and we were grossing $22.000 from about 400 paying customers. While we continued to launch new products, we realized that there is a limited amount of money that those people can spend.</p>
<p>That means that if you have 10 premium products with an average value of $55 there will be 400 people who will buy. But if you push 10 more premium products those 400 people will still buy only 1 product as they need 1 product for their project, not 2 or 3. It’s the same thing as going to a supermarket with $10 to buy 1 bottle of milk, it doesn’t matter if the supermarket brings in 25 more types of milk, you will not spend $30 to buy 3 bottles of milk just because there is a lot of milk there.</p>
<p>It was painful for us to find this, as we were thinking like “ahh…the business it’s pretty simple, we launch more, we make more”. So the next thing that we had to do, while we were launching new products, was to find new partners that wanted to join us and help with the delivery of our free and paid products to a bigger audience.</p>
<blockquote>
<p>“Shoot for the moon. Even if you miss, you will land among the stars.”</p>
</blockquote>
<p>We started to look for websites that had 3–10–20 or even 100x the traffic that we had. Since we based all our business on the most popular framework for front end, <a target="_blank" href="https://getbootstrap.com/">Bootstrap</a>, we started looking for all the websites that were related to Bootstrap. After a lot of emails and requests and rejection we though it was cool and crazy enough to try to do a partnership with the creators of Bootstrap. Most of the time people think like this: “There were a lot of people who ignored us, I will not ask them because they are too big and they will ignore us. It’s better to stay in my corner.”</p>
<p>So on 7 June 2017, we contacted the <a target="_blank" href="https://github.com/orgs/twbs/people">creators of Bootstrap</a> and presented them with what we were doing, what we wanted to achieve with the Bootstrap Templates, and what was our mission.</p>
<p>We’ve got pretty shocked when we got their response. Why?</p>
<ol>
<li>It was a positive response saying that something would happen in the future and they would come back with some ideas.</li>
<li>We were thrilled that they considered our business. There were basically thousands of other companies/people doing Bootstrap Templates.</li>
<li>They actually came back. Usually, 99% of people will not respond to your proposals.</li>
</ol>
<p>Later that year, they contacted us and told us that they would launch an official <a target="_blank" href="https://themes.getbootstrap.com/">Bootstrap Marketplace</a> and they wanted to have us in the first batch of 5–7 companies.</p>
<p>The most important part here wasn’t the fact that we would start making more money and would deliver to more people with this partnership. It was the fact that we began to talk directly with the creators of Bootstrap and we got feedback about how we should improve and work on top of Bootstrap. That’s way more valuable than money and came as another validation for us, that we were providing high-quality products.</p>
<blockquote>
<p>“The creators of a framework are the most qualified to give you the best feedback about how you should work with their product.”</p>
</blockquote>
<p><strong>Next partnership: WordPress.</strong> During the years we knew that <a target="_blank" href="https://venturebeat.com/2018/03/05/wordpress-now-powers-30-of-websites/">WordPress is powering around 30%</a> of all the websites around the world, but we never did anything on this side. We have in our target range developers and web agencies who know how to code. When you do something for WordPress you know that it is possible to have somebody who is not technical who will try to “1-Click install” your product and it will have problems. Then they’ll come to your support being angry about his experience.</p>
<p>Since we never did anything for WordPress but wanted to see our design on WordPress themes we were looking for a solid partner in this field. We found <a target="_blank" href="https://themeisle.com/">ThemeIsle</a>, the company who built one of the most the popular WordPress themes, <a target="_blank" href="https://wordpress.org/themes/zerif-lite/">Zerif</a>. They are from the same country as we are so we started to talk about ways of collaborating.</p>
<p>We realized that a great combo would be to migrate our most popular <a target="_blank" href="https://www.creative-tim.com/product/material-kit">UI Kit, Material Kit</a>, to WordPress. In this way, we created <a target="_blank" href="https://wordpress.org/themes/hestia/">Hestia</a>, a WordPress Theme that was using our design.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/R5Yt5478iTNwYwHuV57WJlmCEEeVA9rxZwEp" alt="Image" width="800" height="517" loading="lazy"></p>
<p>Hestia was a great success. It was downloaded hundred of thousands of times and currently it has 100,000+ active installs. More, it is in the <a target="_blank" href="https://wordpress.org/themes/browse/popular/">top 10 most popular</a> WordPress themes of all time. We also made another product, <a target="_blank" href="https://wordpress.org/themes/orfeo/">Orfeo</a>, which was built on top of <a target="_blank" href="https://www.creative-tim.com/product/paper-kit-2">Paper Kit 2</a> and is in the top 50 most popular themes for WordPress. Having this partner was really important for us as we entered a new world that we couldn’t do on our own.</p>
<p>The next partnership we created was something that we’ve been working on for around two years. Unfortunately, it’s an exclusive partnership, so we cannot give details about who is behind this. I will show you why it took us two years to build it. If you look at the first email that I sent you will notice some mistakes that I made:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/gv3VuFT2gVortr6Kxh2Kcw8qmJbUO3zOI4Z6" alt="Image" width="800" height="546" loading="lazy"></p>
<ol>
<li>I only talked about my company and me, and I never told him what he could achieve from this partnership (exposure, money, experience, etc.)</li>
<li>I didn’t give any details, like “we expect to have 10.000 downloads from your source” or “we think your users will download 2x more products because of the high quality” etc.</li>
<li>I didn’t tell anything about what we could do for him to help in his business</li>
</ol>
<p>So it took me <strong>26 emails over 21 months</strong> to understand that I had to change my messages to give something to a possible partner before getting something from it. Sometimes you have to learn it the hard way. ??‍♂️</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/NbV4j3SHJgdamOoDbrJqzbRiKafrxhZYcYq1" alt="Image" width="800" height="345" loading="lazy"></p>
<p>In the end, our partner was pleased with the new collaboration, and I’m feeling good that I continued to “spam him” and never gave up.</p>
<blockquote>
<p>“We learnt an important lesson here, that you have to give something before you get something!”</p>
</blockquote>
<h3 id="heading-2-if-you-want-to-be-great-stay-close-to-great-companies">2. If you want to be great, stay close to great companies</h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/J7fWA4r5xyeX4bAz-SwKpFlWMigAK9nf9EUe" alt="Image" width="576" height="600" loading="lazy"></p>
<p>We always had the philosophy of learning and getting inspired by other more prominent companies that have tens of years of experience in a field. In the past, we’ve got inspiration from Apple, Rolls Royce, Heroku, Invision, Airbnb, Stripe, Dribbble, etc. I think that if you learn from these companies, you can create a rock-solid foundation. Then when you have all the skills and knowledge, you can start playing with them and create something new and unique, as Pablo Picasso said.</p>
<p>We wrote more about how we build a product and how is the strategy and implementation in this article: “<a target="_blank" href="https://medium.freecodecamp.org/the-anatomy-of-a-bootstrap-dashboard-that-earns-1-000s-each-month-ed3404010d25">The Anatomy of a Bootstrap Dashboard</a>.”</p>
<p>Looking for sources of inspiration and then following <a target="_blank" href="https://www.freecodecamp.org/news/we-made-1-052-000-in-2018-selling-ui-tools-here-is-what-we-learned-38920d86a296/undefined">InVision</a> for many years, we decided to take inspiration from one of their most popular UI Kits called <a target="_blank" href="https://www.invisionapp.com/inside-design/design-resources/now/">Now UI</a>, which was launched in 2015 and was available only for designers. We wanted to use it as the core foundation for a new UI Kit made for developers.</p>
<p>We’ve got Invision’s approval, and we were allowed to build the coded version for developers on 8 November 2016. After 4–5 months of researching, planning based on Invision’s principles, and developing, we released the <a target="_blank" href="https://www.creative-tim.com/product/now-ui-kit">HTML version based on Bootstrap</a>.</p>
<p>The result and the way our developers received the new product was incredibly good. The design was great because Invision made it, and the code was very well structured and followed the Bootstrap 4 principles. That was a great combo in terms of Design + Code + Documentation. Later we found out that the success of this product was because we took <strong>one of the best UI Kits that was available and made it better</strong> by coming with the coded version and new elements/pages.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/fXtjL5rXUkv8p9g7p72q8TVwINe81jOFBMNj" alt="Image" width="800" height="657" loading="lazy"></p>
<blockquote>
<p>“Take the best that exists and make it better.” — Henry Royce (co-founder of Rolls Royce)</p>
</blockquote>
<h3 id="heading-3-growth-hacking-from-continuous-launches-on-product-hunt-to-trending-on-githubs-front-page-or-features-in-our-country-press">3. Growth Hacking: from continuous launches on Product Hunt to trending on Github’s front page or features in our country press</h3>
<p>Since the initial boost for <a target="_blank" href="https://www.creative-tim.com/">creative-tim.com</a> came from Product Hunt, we decided to continue to launch products there. The difference between launching in 2014–2015 and launching in 2018 was pretty big as the community grew a lot and there are a lot of new products launches daily. That makes it really hard to stand out of the crowd.</p>
<p>The strategy of launching on Product Hunt became really complicated, and we work for around one week before doing an actual post there. Everything needs to be set and a lot of people have to be involved. Some things that you have to think of:</p>
<ol>
<li>You need to prepare all the images, product descriptions, links, and social profiles before actually starting the post. That will save you a lot of time. Here we usually do a draft of the future post and then discuss internally with the whole team the text and images.</li>
<li>You have to make sure your website will not break as there will be a boost in traffic. We usually send people to static generated content, so fewer server resources are needed.</li>
<li>Try to post at the beginning of the Week (Monday) around 10:15 AM GMT+2, that is 00:15 AM San Francisco time, basically when the Product Hunt Servers start a new day. In this way, you make sure you have 24hours full exposure and get as many upvotes as you can.</li>
<li>If you already have a base of people that are using your product, make sure you send them an email to let them know that you are on Product Hunt and if they enjoyed using the product they can upvote it.</li>
<li>Make sure you let your social fans (Facebook, Twitter, Instagram) know that you are on Product Hunt.</li>
<li>If you are posting a paid product, make sure you create some coupons that can be used by the Product Hunt community. They love them :D</li>
</ol>
<p>Using these steps we successfully launched some products that were well received by the community:</p>
<ul>
<li><a target="_blank" href="https://www.producthunt.com/posts/material-dashboard">Material Dashboard Free</a> — 756 upvotes</li>
<li><a target="_blank" href="https://www.producthunt.com/posts/now-ui-kit">Now UI Kit</a> — 1.556 upvotes</li>
<li><a target="_blank" href="https://www.producthunt.com/posts/material-dashboard-v2">Material Dashboard All Technologies (Bootstrap, React, Vuejs, Angular)</a> — 505 upvotes</li>
</ul>
<p>While we were looking for new ways of showing our products to a bigger audience, we found this article written by Diana from Froala: <a target="_blank" href="https://medium.freecodecamp.org/how-to-get-up-to-3500-github-stars-in-one-week-339102b62a8f">How to get up to 3500+ GitHub stars in one week</a>. It was pretty exciting, and we were thinking that if they did that, maybe we can also be trending on GitHub, as we already have open source products and the developer community loves them.</p>
<p>We followed all the steps that were written in the article and also applied the strategies that we used on Product Hunt. We prepared a friendly <a target="_blank" href="https://github.com/creativetimofficial/material-dashboard">Readme page for Material Dashboard</a> and added all the technologies that were available for Material Dashboard (Bootstrap, React, Vuejs, Angular). We posted on social media and then sent a newsletter to 90.000 developers who were using Material Dashboard. After this initial boost, we were trending in All Languages for one day.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/Cn51ANpan91Ny-7Hv5iW5Jraxp9NSwExhx6s" alt="Image" width="800" height="450" loading="lazy"></p>
<p>Since we boosted it to top 5 for a day, we started to announce to our audience that we are trending on Github, and that helped us get more people involved. We added a Banner on our website which was viewed by over 50,000 people, and then we posted that repo on Hacker News where the magic happened. It was featured on the first page, <a target="_blank" href="https://news.ycombinator.com/item?id=17373465">upvoted by around 430 people</a>, and 9,800 people came to the GitHub where they gave us around 2,000 stars.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/sIHXBeDwcgkNgy9OEz5FPwItMID5rZ1yggSF" alt="Image" width="800" height="450" loading="lazy"></p>
<p>So we were in front of Facebook, Google, and Microsoft for that week.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/QQim8blSJ2Uj7rgesjuqgrhBfPXxqTFsailO" alt="Image" width="800" height="596" loading="lazy"></p>
<p>Launching on Product Hunt, Hacker News, or being on local Press is not a sustainable growth channel, as Product Hunt’s <strong>founder Ryan said,</strong> but it’s an excellent strategy to employ at the beginning of your business.</p>
<h3 id="heading-4-how-different-we-are-from-our-competitors-and-why-this-worked-for-us">4. How different we are from our competitors and why this worked for us</h3>
<p>We are running our business in a very competitive space: themes &amp; templates. Most of the entrepreneurs that I’ve met thought that this was a dead place and that we couldn’t create something relevant. We wanted to prove that things can be done in any space, no matter how crowded it is, if you have your secret weapon. If you read the first article, you know that our secret weapon is <strong>to deliver great products combined with great user experience and great customer support</strong>.</p>
<p>Let’s have a look at most of our competitors who sell their products in different marketplaces. Of course, there are some exceptions, as we are not unique in our field, but let’s have a look at 95% of the companies who create similar products with ours.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/mJfN4H0PTYuD0eo1LUQl80qFkxcg3E2jTw2W" alt="Image" width="800" height="353" loading="lazy"></p>
<p>Now, let’s have a look at our curve and have a little overview of each point:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/sF1fbgFGF6xeQ9HowdoLAoxaQtoHnYKFKOwK" alt="Image" width="800" height="356" loading="lazy"></p>
<ol>
<li><strong>Pricing:</strong> when we started our business we found that most HTML templates/themes/kits/dashboards were priced between $3 and $19, while Wordpress templates were priced between $49 and $69. Things changed during the years, and HTML templates started to cost more. We made some calculations, and we couldn’t sustain our business if we started in the same price range $3–$19. We also read in some business books that <strong>if the price is your only differentiator, then you are in big trouble</strong>. So we decided to charge more for our products so we could have the flexibility to build products that have top quality and customer experience.</li>
<li><strong>Quality:</strong> on a scale from low to high, most of our competitors deliver medium quality. This is because they invest most of their resources, which are a combination of money + time, into building more pages, more plugins and more updates for all those plugins and pages. These things combined with the pressure of releasing new products gives them less time to invest in the quality and the attention to details of their products.</li>
</ol>
<p><img src="https://cdn-media-1.freecodecamp.org/images/VOGbEc76OtaozyBJDbpxkqZBXzmIkBrt1zWk" alt="Image" width="800" height="376" loading="lazy"></p>
<ol start="3">
<li><p>The number <strong>of pages/examples</strong>: if you look at all the marketplaces you will see that everybody is building products that have hundreds or thousands of pages. The problem here is that each product is coming with multiple examples of the same page that serve only one purpose. For instance, you will find products with five examples of a Contact Us page. Why should you create five good pages instead of building one that is great and simple for the client to use?</p>
</li>
<li><p><strong>The number of updates:</strong> because the distribution is made on a platform that is not controlled by the creator, when you do an update, your product gets some more visibility. So people just do a lot of updates, no matter if the product needs one or not, only to appear in front of others. The problem here is that if you don’t have anything to update, you start to add more pages (<strong>point 3</strong>) or more plugins (<strong>point 5</strong>).</p>
</li>
<li><p>The number <strong>of plugins:</strong> the same story can be seen in the external 3rd party plugins. For example, most of our competitors have, let’s say, 5–7 different JavaScript plugins that do the same thing. Your customer will use only 1, so it is hard for them to remove the other 4–6 to start building what they need.</p>
</li>
<li><p><strong>Distribution costs:</strong> since we are talking about companies selling products on popular marketplaces, they have to pay 30–55% of their revenue to the owners of the marketplace. This depends on the terms that each marketplace has. In our case, the distribution is made straight on <a target="_blank" href="https://www.creative-tim.com">our website</a>.</p>
</li>
<li><p><strong>Development costs:</strong> taking into consideration point 2, 3 and 5, we understand that these companies invest a lot in building their products. But the investment is made into quantity, not quality. In our case, we created some internal tools where we write code one time, and that is building more products based on the same design rules. In this way the hard part (writing the product code) is handled by the tools, while we spent most of the time in researching, testing new and different ideas, and giving a lot of attention to details.</p>
</li>
</ol>
<p>If you still think that the attention to details is not so important, let’s have a look at some basic alignment on Samsung Galaxy S7 (top) and Apple iPhone 6S (bottom).</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/U7EXJrRig1oA3efPUefJRxE1GtifI7aXyeX3" alt="Image" width="800" height="600" loading="lazy"></p>
<ol start="8">
<li><strong>Distribution control:</strong> since our competitors are selling their products on channels that they don’t control, basically they cannot do much, and they depend on the owner of the marketplace. If the owner decides to send less traffic to somebody or move the products away from the featured areas, you can’t change that. Or if we think at another case that happened with a popular marketplace a couple of weeks ago, the owner stopped paying the creators and didn’t respond for three months… What can you do in that situation?</li>
</ol>
<p>In our case, we can do basically anything that is good for our users. Also during the years we changed and updated our platform hundreds of times based on our customers’ feedback.</p>
<ol start="9">
<li><strong>Access to customers:</strong> in our competitors’ examples, it’s hard to have direct access to the persons who purchased the products. In most of the cases, you get access to your customer only when they are contacting you for support requests. Because of this, they cannot do custom email campaigns; they cannot bundle their products; they cannot announce to all their customers when they launch something new, etc.</li>
</ol>
<p>What we presented here is an overview of a Blue Ocean Strategy. If you want to learn more about the way you can create a new space for your business and not try to compete in a Red Ocean, please check the <a target="_blank" href="https://www.amazon.com/Blue-Ocean-Strategy-Uncontested-Competition/dp/1591396190">Blue Ocean Strategy Book</a>.</p>
<h3 id="heading-5-give-back-sponsorships-education-and-tutorials">5. Give Back: Sponsorships, Education and Tutorials</h3>
<p>At <a target="_blank" href="https://www.creative-tim.com/presentation">Creative Tim</a> we believe in the power of giving back! We are proud to sponsor schools, universities, hackathons and be part of events where we can teach people how to become better developers, designers, and entrepreneurs.</p>
<p>Over the years, we’ve used a lot of the Free and Open Source content made by other companies and developers, so it is our responsibility to give back. We used to sponsor with licenses of our paid products, and the feedback from the people who used the products at the events and from the organizers was excellent. Sponsoring is something good to do, even if it takes a lot of time for us to talk and to prepare everything for the participants. We also get customer support requests after each event.</p>
<p><strong>At this moment we have over 150 global events sponsored, and we add 5–10 each month.</strong> If you host an event for developers, contact us at hello@creative-tim.com, and we will be more than happy to work with you.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/LIwpf8o0GWqKTsnQClXVt6Srcwl0Pn8tegPj" alt="Image" width="800" height="431" loading="lazy">
<em>Some photos from events sponsored by us and training sessions</em></p>
<p>While we were at different events, we realized that we could only help a limited number of participants. So if we wanted to help millions we needed to do something online that would grow in parallel with our offline activities. So we started to make tutorials for different topics that were requested by our users. We decided that it was good to test written versions and also recorded videos. Some examples:</p>
<ul>
<li>[article] <a target="_blank" href="https://medium.freecodecamp.org/how-to-use-reactjs-with-webpack-4-babel-7-and-material-design-ff754586f618">How to use ReactJS with WebPack Babel and Material Design</a> — <strong>3.9k claps</strong></li>
<li>[article] <a target="_blank" href="https://medium.freecodecamp.org/how-to-use-redux-in-reactjs-with-real-life-examples-687ab4441b85">How to use Redux in ReactJS with Real Life Examples</a> — <strong>1k claps</strong></li>
<li>[videos] <a target="_blank" href="https://www.youtube.com/channel/UCVyTG4sCw-rOvB9oHkzZD1w/videos">Tutorials about front end development</a> — <strong>280k views</strong></li>
<li>[casestudy] <a target="_blank" href="https://medium.freecodecamp.org/the-anatomy-of-a-bootstrap-dashboard-that-earns-1-000s-each-month-ed3404010d25">The anatomy of a Bootstrap Dashboard that earns $1,000seach month</a> — <strong>14k claps</strong></li>
</ul>
<p>We are also very proud that, through our affiliation, we managed to support a lot of creators for different frameworks and plugins that we used. For example, when this article was written, we contributed in the past 12 months $71,555 to the popular Material UI library.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1mi0tK3cA29TqFvLs6xqp5CPaapvJuZN47Mu" alt="Image" width="800" height="450" loading="lazy">
_Image from Open Collective: [https://opencollective.com/material-ui#contributors](https://opencollective.com/material-ui#contributors" rel="noopener" target="<em>blank" title=")</em></p>
<h3 id="heading-6-can-people-apply-our-strategies-to-different-businesses">6. Can people apply our strategies to different businesses?</h3>
<p>We believe that there is enough space for each company to create value, generate good profits, and also give back to the community, so we are not afraid of sharing all these strategies.</p>
<blockquote>
<p>“The secret to creativity is knowing how to hide your sources.” — Albert Einstein</p>
</blockquote>
<p>Some people were inspired by <a target="_blank" href="https://medium.freecodecamp.org/growing-a-side-project-into-a-17-000-month-business-46024d2aa87f">the first article that I wrote</a> and managed to create similar businesses in different environments. <a target="_blank" href="https://www.freecodecamp.org/news/we-made-1-052-000-in-2018-selling-ui-tools-here-is-what-we-learned-38920d86a296/undefined">William Candillon</a> is a great example. You can read the <a target="_blank" href="https://www.indiehackers.com/interview/how-transparency-and-good-timing-helped-me-capitalize-on-new-tech-d8032b8929">full interview with him on Indie Hackers.</a></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/osHhA6cI9IuQl7CqgdxIV8STTSGYawhFCEOd" alt="Image" width="800" height="351" loading="lazy"></p>
<p>If you apply any of our strategies, feel free to share them with the community in the comments.</p>
<h3 id="heading-7-whats-next">7. What’s next?</h3>
<p>In past years, we managed to become known in the Front End ecosystem for the quality that we deliver, and we are proud to see that we have over 700.000 developers who have used our products for different projects. We are still a tiny player in this game, and we have a lot of things to learn and improve. We always build all our products and start migrating on a new framework based on our customer requests.</p>
<ol>
<li>[<strong>Backend</strong>] Starting this year we are happy to let you know that we released the first batch of ready to be used <a target="_blank" href="https://www.creative-tim.com/search?utf8=%E2%9C%93&amp;q=backend&amp;button="><strong>Front End + Back End</strong></a> solutions. It will now be easier for our customers and users to launch something. You can check the <a target="_blank" href="https://www.creative-tim.com/search?utf8=%E2%9C%93&amp;q=node&amp;button=">Node.js</a> and <a target="_blank" href="https://www.creative-tim.com/search?utf8=%E2%9C%93&amp;q=laravel&amp;button=">Laravel</a> examples on our website. We will release more Back End solutions based on the requests that we have.</li>
<li>[<strong>Mobile</strong>] We also migrated one of our most popular products, <a target="_blank" href="https://www.creative-tim.com/product/material-kit">Material Kit</a>, to React Native, and so far <a target="_blank" href="https://www.creative-tim.com/product/material-kit-react-native/reviews">the reviews are excellent (4.9/5</a>). You <a target="_blank" href="https://www.creative-tim.com/product/material-kit-react-native">can check it out and download it for free here</a>. This is something new for us, and we learned that building a Mobile First app is very different than building a Responsive Website. We will release React Native versions for all of our designs.</li>
<li>[<strong>Illustrations</strong>] We’ve seen a lot of people and companies starting to add illustrations on their websites so they can express better what they want to share. We also used illustrations in some of our products, so we decided to create more and give them for free to the community. This is how an internal project called <a target="_blank" href="https://iradesign.io/">Ira Design</a> was born. We will continue to add more illustrations and customizations to this project.</li>
</ol>
<p>Here is an overview of how the company has grown during the years. We usually net around 75% of that annual amount after paying affiliates, vendor fees, collected VAT, and other taxes for doing e-commerce between countries.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/ce62av83vOAEsK7BvfjZH1rTLQVbHSfO4c1f" alt="Image" width="800" height="580" loading="lazy"></p>
<h3 id="heading-thank-you-for-reading">Thank you for reading!</h3>
<p>I hope this article has given you some ideas on how to test or apply new strategies in your business, or even to create a new one. Let’s continue the discussion in the comments and if you have questions, suggestions, or want to work with us, feel free to contact our team or me.</p>
<p>Find me and our team:</p>
<ul>
<li>Email: <a target="_blank" href="mailto:alex@creative-tim.com">alex@creative-tim.com</a></li>
<li>Instagram: <a target="_blank" href="https://www.instagram.com/alexandru__paduraru/">https://www.instagram.com/alexandru__paduraru/</a></li>
<li>Twitter: <a target="_blank" href="https://twitter.com/axelut">https://twitter.com/axelut</a></li>
<li>Official Website: <a target="_blank" href="http://www.creative-tim.com/?utm_source=indie-hackers">https://www.creative-tim.com</a></li>
<li>Our Github: <a target="_blank" href="https://github.com/creativetimofficial">https://github.com/creativetimofficial</a></li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The anatomy of a Bootstrap dashboard that earns $1,000s each month ]]>
                </title>
                <description>
                    <![CDATA[ We at Creative Tim have always wanted to deliver great tools to all the web developers who are using our products. If you want to read more about how we’ve built our business and what is our drive, you can check this article: Growing a side project i... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/the-anatomy-of-a-bootstrap-dashboard-that-earns-1-000s-each-month-ed3404010d25/</link>
                <guid isPermaLink="false">66c375ace912451bdfbe18d1</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ startup ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Alexandru Paduraru ]]>
                </dc:creator>
                <pubDate>Mon, 28 Aug 2017 14:31:58 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*oNcZnFrvQFeINnPcWVI6VA.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>We at <a target="_blank" href="https://www.creative-tim.com/">Creative Tim</a> have always wanted to deliver great tools to all the web developers who are using our products. If you want to read more about how we’ve built our business and what is our drive, you can check this article: <a target="_blank" href="https://medium.freecodecamp.com/growing-a-side-project-into-a-17-000-month-business-46024d2aa87f">Growing a side project into a $17,000 month business</a>.</p>
<p>We want to see better websites and web apps on the internet. So we decided to share some of the “secret ingredients” that form the base of one of our most popular dashboards: <a target="_blank" href="http://demos.creative-tim.com/light-bootstrap-dashboard/dashboard">Light Bootstrap Dashboard</a>. Of course, they won’t be a secret anymore, because we’re going to share them with you. ?</p>
<p>In this case study, I will share how we got the idea to create a dashboard, where we got inspiration, how we implemented everything, how it was used inside <strong>Stanford</strong>’s internal tools and how we financed the development and the support of it. Here is an overview of the article:</p>
<ol>
<li>The basic structure and core functionality</li>
<li>How the design was created</li>
<li>Built on top of open source and why you should stand on shoulders of giants</li>
<li>Launch, Rise and Shine</li>
<li>How we finance the support and solve the requests of the developers</li>
<li>Future development plans</li>
</ol>
<p>I will try to give as much information as I can, with hopes that this tutorial won’t be like this:</p>
<h3 id="heading-1-the-basic-structure-and-core-functionality">1. The basic structure and core functionality</h3>
<p>You should think of the process behind creating the dashboard as a test that you have to take after you learn a lot. Of course you will learn a lot during the development of the product. But first, you need to have strong knowledge of what is “that” and how it “is used”. Before writing the first line of code you should do some research, make plans, create to-do lists and sketches, and try to visualize what you will want to have in the end.</p>
<p>Since you are not reinventing the wheel, you need to look around at companies that create great products to get inspiration (such as <a target="_blank" href="https://dashboard.heroku.com/">Heroku</a>, <a target="_blank" href="https://slack.com/">Slack</a>, <a target="_blank" href="https://mailchimp.com/">Mailchimp</a>, <a target="_blank" href="https://stripe.com/">Stripe</a>). Also look at your competition. You will get a lot of information. And when you start, it will be easier to develop the product because you did your homework. You have to sharpen your ax, before starting to cut:</p>
<blockquote>
<p>“If I had eight hours to chop down a tree, I’d spend six hours sharpening my ax.” — Abraham Lincoln</p>
</blockquote>
<p>We did our homework and we’ve got a huge list of over 100 free dashboards as examples from which we can get inspiration. Here are some of them:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*xR1NimY3i5LO1lxM9SL2RQ.jpeg" alt="Image" width="800" height="533" loading="lazy"></p>
<p>You have a huge list of dashboards, with a lot of colors, animations, beautiful icons, small charts, big charts, static or fixed sidebar and hundreds of different features. How do you know which is the best option for your audience?</p>
<p>Since we didn’t know what people want inside a dashboard, we decided to write down all the features that these dashboards contain and use only the most common. We realized that the <strong>core features</strong> solve around 95% of the cases where you need a dashboard. The remaining 5% solve very specific problems.</p>
<p>The basic elements are buttons, icons, typography, sidebar, main panel, navbars and dropdowns. The core features in most of the dashboards are:</p>
<ol>
<li>Tables</li>
<li>Notifications</li>
<li>Tasks Lists</li>
<li>Cards (for different type of forms and easier visualization of the information)</li>
<li>Charts (donut chart, line chart, bar chart)</li>
<li>Google Maps</li>
</ol>
<p>With small visual adjustments, you can reproduce 95% of any dashboard from any company in the world just by using the core elements. Then you have the remaining 5%, which is always different depending on the company and the problems it solves. Here we can find:</p>
<ol>
<li><a target="_blank" href="https://en.wikipedia.org/wiki/Kanban">Kanban System Cards</a></li>
<li><a target="_blank" href="https://en.wikipedia.org/wiki/Drag_and_drop">Drag &amp; Drop</a> functionality</li>
<li>Timeline components</li>
<li>WYSIWYG Editor</li>
<li>8-Level Navigation Sidebar Menu</li>
<li>Multi File Uploader + Drag &amp; Drop File Uploader</li>
<li>Form X-Editable</li>
<li>Morris Chart, Google Chart, Flot Chart, amChart, Flows Chart and many other types of charts</li>
<li>And the list can continue to more than 200 features</li>
</ol>
<p>The problem is that each of these new plugins adds extra CSS, JavaScript or jQuery libraries, and HTML. We’ve built the product on plain HTML, no frameworks or modular tricks, so all the CSS/JavaScript would be in a single file.</p>
<p>Don’t get me wrong, I’m not saying that the features were not good. These are great plugins developed by awesome people. But it wasn’t something that we wanted to have in our simple dashboard.</p>
<p>So we decided to keep the product as light as possible (remember the name?). <strong>Light Bootstrap Dashboard</strong>. And we decided to implement only the features that were solving the core 95%.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*G0F-0tf2aAVrevfgCdih0w.jpeg" alt="Image" width="650" height="250" loading="lazy"></p>
<h3 id="heading-2-how-the-design-was-created">2. How the design was created</h3>
<p>After we made our plan for the elements that the product would have, we had to think of a design that would be outstanding. A user-friendly design that would make people want to have this dashboard inside their content management system. We already had the famous Bootstrap <a target="_blank" href="http://demos.creative-tim.com/get-shit-done/index.html">Get Shit Done Kit</a>. Web developers loved it and it has been downloaded more than 30,000 times. So we decided to use that as the core design for basic elements like Buttons, Navbars, Inputs, etc.</p>
<p>We realized that we need more than that though, to make an impact and to make people badly want our product. We didn’t want to be “another dashboard based on Bootstrap”. <strong>Where do you go when you want great design resource?</strong></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*ruqs_QCLXE8wX6XpCufnEg.png" alt="Image" width="400" height="300" loading="lazy"></p>
<p>If you search “<a target="_blank" href="https://dribbble.com/search?q=dashboard">dashboard</a>” on Dribbble, you will find a lot of incredibly beautiful dashboards and admin panels. Actually, for those who don’t know, <a target="_blank" href="https://dribbble.com/">Dribbble</a> is like visual cocaine. Check some of these examples made by <a target="_blank" href="https://dribbble.com/radium">Cosmin Capitanu</a> and <a target="_blank" href="https://dribbble.com/creativemints">Mike from CreativeMints</a>:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*JQV190Vy6Yx69mv4sJg7tg.jpeg" alt="Image" width="800" height="600" loading="lazy">
_[https://dribbble.com/shots/1423171-Some-Analytics](https://dribbble.com/shots/1423171-Some-Analytics" rel="noopener" target="<em>blank" title=")</em></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*EJeWQQxhA0lRYvao9sqZog.jpeg" alt="Image" width="800" height="600" loading="lazy">
_[https://dribbble.com/shots/1592816-Probability-theory](https://dribbble.com/shots/1592816-Probability-theory" rel="noopener" target="<em>blank" title=")</em></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*BG1kjWkGjIoJZoUKE5FO2g.jpeg" alt="Image" width="800" height="600" loading="lazy">
_[https://dribbble.com/shots/1738453-Xonom](https://dribbble.com/shots/1738453-Xonom" rel="noopener" target="<em>blank" title=")</em></p>
<p>Seeing all these beautiful examples made us realize that if we build something like that we will definitely stand out of the crowd. Also, even if the dashboards or the charts are looking very good, they will be very hard or impossible for us to actually code in HTML, CSS and JavaScript. Or they are solving a very specific problem, like the latest dashboard with Body Measurements.</p>
<p>It was impossible 2 years ago, because our level of knowledge and experience with HTML/CSS wasn’t so high. I’m sure that if we‘d like to implement them today, we’d have a good chance of creating something very similar. Also, the technology and browser capacities will help us more.</p>
<p>We wanted to build something that can be used by many people from diverse business fields. There were some simple and beautiful dashboards too, but we didn’t want to use them as inspiration because we wanted something different.</p>
<p>I can’t explain exactly what we wanted, but we didn’t feel comfortable with any of the examples. So we continued to do our research until we found something that we really liked:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*5RdaH9YoQG-K-QKHl08Zlg.png" alt="Image" width="800" height="528" loading="lazy">
<em>Heroku Dashboard in 2015</em></p>
<p>It wasn’t perfect nor as outstanding as we wanted it to be. But we felt that it is the right choice and it is a very good example from which we can build our dashboard. Even Pablo Picasso said that great designers steal and Apple respected his word:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Cz3GzYXXv4Hwx23qeXyFBA.jpeg" alt="Image" width="570" height="591" loading="lazy"></p>
<p>We couldn’t do that. The dashboard from Heroku was good enough that it gave us that spark. So we decided to use it only for inspiration and not for the final result. Here is the first iteration:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*IqdqX0EyCAfRFbaQ8EC8nQ.png" alt="Image" width="800" height="513" loading="lazy">
<em>Iteration #1</em></p>
<p>It’s a pretty good start. To have a better view of how it will look, we just have to populate the right area with some cards with charts:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Sg4Mv-PM0dPndSRVyC8ldw.png" alt="Image" width="800" height="513" loading="lazy">
<em>Iteration #2</em></p>
<p>The cards’ colors didn’t look so good. They were too bright for how the left sidebar was looking. So we started to test different combinations of colors for the charts and the sidebar.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*ZGOomWV2jePE1-U1f0t1ng.png" alt="Image" width="800" height="500" loading="lazy">
<em>Iteration #3</em></p>
<p>At this point we realized that we don’t have to keep only 1 color for the sidebar’s background. And we should let our users choose which color they want. We knew that Apple had some beautiful gradients for their Fitness App, so we decided to use those gradients as the base for our future gradients.</p>
<p>We’ve always thought that if we are watching what the best companies in the world are doing in terms of Design and UX, we will set very high standards for our interfaces. In this way, more and more web developers will have free access to high-quality products.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*ShULysSXSDmqIhjETzgB-w.jpeg" alt="Image" width="800" height="450" loading="lazy">
<em>Apple’s Fitness App</em></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Mf08D8vG-nCAO1nlP_TQYw.jpeg" alt="Image" width="800" height="391" loading="lazy"></p>
<p>While we were doing all these different combinations of colors, gradients, cards and charts we saw that the guys from <a target="_blank" href="http://www.metalab.co">Metalab</a>, who built the interface for Slack, wrote an article: <a target="_blank" href="https://medium.com/@awilkinson/slack-s-2-8-billion-dollar-secret-sauce-5c5ec7117908#.h63snwe27">Slack’s 2.8 Billion Dollar Secret Sauce</a>. This ended up being an inspiration for the next steps. The overall idea of the article was that Slack’s secret sauce is created by the combination of a great and playful interface with small interactions, which makes the product more user-friendly.</p>
<blockquote>
<p>“It looks different, it feels different and it sounds different.”</p>
</blockquote>
<p>We wanted to add something that <strong>none of the other dashboards</strong> had. I’ve always loved how a gradient with some transparency can look over an image. And I’ve started to play with different images and gradient’s opacity. By the way, the Duotone Gradient Image that we used in 2015 (we didn’t even know that it has a name) seems to be one of the <a target="_blank" href="https://thenextweb.com/dd/2016/12/22/web-design-trends-can-expect-see-2017/#.tnw_bdot2Bdf">trends in web design for 2017</a>. This is pretty cool, isn’t it? ?</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Azvsp9VybyIELu5tujGYmA.png" alt="Image" width="800" height="502" loading="lazy">
<em>Iteration #4</em></p>
<p>Not fully satisfied…</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*vs9QCRMn4U3sj5BfND-9IQ.png" alt="Image" width="800" height="500" loading="lazy">
<em>Final iteration</em></p>
<p>This was the view that made us feel happy, it was just perfect for us ?. We also added small interactions like the opening dropdown animation or the show effect of the notification:</p>
<p>Adding the image with the gradients over and the small animations made us feel like this guy:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*zF1jGXJhQHO7fglF9Rn2tQ.gif" alt="Image" width="365" height="365" loading="lazy">
_[https://www.instagram.com/nusr_et](https://www.instagram.com/nusr_et" rel="noopener" target="<em>blank" title=")</em></p>
<h3 id="heading-3-built-on-top-of-open-source-and-why-you-should-stand-on-the-shoulders-of-giants">3. Built on top of open source and why you should stand on the shoulders of giants</h3>
<p>As we said in the beginning, we didn’t want to reinvent the wheel. Nor did we have the money to contract experts capable of building the elements needed for the dashboard. We decided that the best option for us is to use what other people created and <strong>shared for free</strong> or <strong>open source</strong>.</p>
<p>We recently discovered that what we actually did was stand on the shoulders of giants. That means we used as much as we could from tools that are already powerful and well maintained by big communities. For more about this and why you should use this technique when you want to build something from scratch read this awesome article, written by <a target="_blank" href="https://twitter.com/ossia">Quincy Larson</a>: <a target="_blank" href="https://medium.freecodecamp.com/how-to-stand-on-shoulders-16e8cfbc127b#.iyojaorb8">How to stand on shoulders of giants</a>.</p>
<h4 id="heading-lets-have-a-look-at-what-is-actually-under-the-hood">Let’s have a look at what is actually under the hood.</h4>
<ul>
<li>Framework: <a target="_blank" href="http://getbootstrap.com/">Bootstrap</a> — Bootstrap is the most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web.</li>
<li>Design Layer: <a target="_blank" href="http://demos.creative-tim.com/get-shit-done/index.html">Get Shit Done Kit</a> — Free Bootstrap 3 User Interface Kit. This is the best starting point for any online project you are building. It has become a trademark for the online community of a clean and nice looking interface.</li>
<li>Font: <a target="_blank" href="https://fonts.google.com/specimen/Roboto">Roboto</a> — a Google Font that has a dual nature. It has a mechanical skeleton and the forms are largely geometric.</li>
<li>Small icons: <a target="_blank" href="http://fontawesome.io/">Font Awesome</a> — Font Awesome gives you scalable vector icons that can be customized using CSS.</li>
<li>Large icons: <a target="_blank" href="http://www.pixeden.com/icon-fonts/stroke-7-icon-font-set">Stroke 7 Icons</a> — This is a complete set of 202 thin stroke icons inspired by iOS 7.</li>
<li>Charts: <a target="_blank" href="https://gionkunz.github.io/chartist-js/">Chartist.js</a> — Chartist.js is the product of a community that was disappointed about the abilities provided by other charting libraries.</li>
<li>Notifications: <a target="_blank" href="http://bootstrap-notify.remabledesigns.com/">Bootstrap Notify</a> — This plugin helps you turn standard bootstrap alerts into “growl” like notifications.</li>
<li>Maps: <a target="_blank" href="https://developers.google.com/maps/">Google Maps</a> — Plugin for viewing maps.</li>
<li>Photos: <a target="_blank" href="https://unsplash.com/">Unsplash</a> — Free (<a target="_blank" href="https://unsplash.com/license">do whatever you want</a>) high-resolution photos.</li>
</ul>
<blockquote>
<p>“There is no such thing as something for nothing. Everything, including your personal success, has a price that must be paid” — Napoleon Hill</p>
</blockquote>
<p>Since we used a lot from the community it would be fair to give back to the community. So we decided a couple of weeks ago to release it <a target="_blank" href="https://github.com/creativetimofficial/light-bootstrap-dashboard/blob/master/LICENSE.md">under MIT License</a>. In this way, more developers can contribute and use it without any legal constraints, for personal and commercial projects.</p>
<h3 id="heading-4-launch-rise-and-shine">4. Launch, Rise and Shine</h3>
<p>Doing the research for around 50-60 days (sharpening the ax) gave us the possibility to develop the dashboard in just 15 days (chopping the tree). ?</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*MjHrLjPnk2DkClh34OB94w.png" alt="Image" width="800" height="408" loading="lazy"></p>
<p>What do you do after you launch a project? You need to see what the feedback for it is, if people would like to use it and if the simple dashboard you created is solving a problem for them. If they don’t want to use it, then, you don’t have a business. We submitted it on different communities and it was doing very well. For example, it got:</p>
<ul>
<li><a target="_blank" href="https://news.ycombinator.com/item?id=10184982">170 upvotes</a> on Hacker News, peak to position 9 and over 88.000 views for that week</li>
<li><a target="_blank" href="https://www.reddit.com/r/webdev/comments/3jyyye/light_bootstrap_dashboard_an_useful_freebie_for/">247 upvotes</a> on /r/webdev subreddit</li>
<li><a target="_blank" href="https://www.reddit.com/r/webdev/comments/3jyyye/light_bootstrap_dashboard_an_useful_freebie_for/">80 upvotes</a> on /r/web_design subreddit (blocked at 80 because it got the “spam” tag, we had some subscribe popups… which we later removed?)</li>
</ul>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*s2t5EiBh6omkaJVO1dJEKA.png" alt="Image" width="800" height="452" loading="lazy"></p>
<p>The community validated the idea. We’ve also got a lot of feedback, to add the SASS files for easier customization or post it on GitHub.</p>
<p>Then we’ve seen that there were a lot of beginners who just wanted to learn how to use this dashboard. It was so beautiful that people who didn’t interact with something like that wanted to learn how to work with it.</p>
<p>We spent around 3 weeks developing a series of video tutorials on how to replicate the WordPress dashboard using our product. We chose to use the WordPress dashboard because it is a very popular dashboard. And we wanted to let people understand that they can build anything using our product.</p>
<p>The tutorials were very well received and have over 78,000 views as of today. Here is the first video on <a target="_blank" href="https://www.youtube.com/watch?v=c3M3NQtFyqM">How to create a responsive admin template using Light Bootstrap Dashboard 1/3</a>.</p>
<h3 id="heading-5-how-we-finance-the-support-and-requests-from-the-web-developers">5. How we finance the support and requests from the web developers</h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*ozYKavzDtpbWrnOw34kKBg.jpeg" alt="Image" width="800" height="391" loading="lazy">
_[https://youtu.be/sz_LgBAGYyo?list=PL5q_lef6zVkaTY_cT1k7qFNF2TidHCe-1](https://youtu.be/sz_LgBAGYyo?list=PL5q_lef6zVkaTY_cT1k7qFNF2TidHCe-1" rel="noopener" target="<em>blank" title=")</em></p>
<p>Building a product it easy, keeping it alive is hard.</p>
<p>There are a lot of great plugins/template out there which are dying because their creators don’t have enough cash or they don’t make enough revenue in order to continue the development or to fix the issues.</p>
<p>We didn’t want the same case for our product. The best option to keep the product alive was to create a PRO version which can generate enough revenue to support to continuous development.</p>
<p>We used the feedback from web developers and decided to create a Premium version with more elements and plugins. We wanted to help also some of the guys who wanted specific features and were in the 5% category. Choosing the right plugins which can help as much as we could from the 5% category was very hard for us.</p>
<p>We started again to do research on the premium dashboard. And we added plugins like <a target="_blank" href="https://fullcalendar.io/">Full Calendar</a>, <a target="_blank" href="https://datatables.net/">DataTables.net</a>, <a target="_blank" href="https://limonte.github.io/sweetalert2/">Sweet Alert</a>, <a target="_blank" href="http://vinceg.github.io/twitter-bootstrap-wizard/">Bootstrap Wizard</a> and some extra pages like <a target="_blank" href="http://demos.creative-tim.com/light-bootstrap-dashboard-pro/examples/pages/login.html">Login Page</a>, <a target="_blank" href="http://demos.creative-tim.com/light-bootstrap-dashboard-pro/examples/pages/register.html">Register Page</a>, <a target="_blank" href="http://demos.creative-tim.com/light-bootstrap-dashboard-pro/examples/pages/lock.html">Lock Page</a>.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*D8XWOYaGPt019gwke0EiCg.jpeg" alt="Image" width="800" height="600" loading="lazy"></p>
<p>Here is the <a target="_blank" href="http://demos.creative-tim.com/light-bootstrap-dashboard-pro/examples/dashboard.html">live preview</a> of the PRO version. You will see that we kept the same structure and wanted to make it light, without too many options and features.</p>
<p>Having the revenue from the PRO version made us not only support the product but also create new file types like the <a target="_blank" href="http://www.pixelsvibe.com/product/light-dashboard">PSD/Sketch version</a> or <a target="_blank" href="https://www.creative-tim.com/product/light-bootstrap-dashboard-angular2">Angular 2 version</a>. Both are shared for free.</p>
<h3 id="heading-6-future-development-plans">6. Future development plans</h3>
<p>Here are some stats about the dashboard:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*el4d2GAaEt9A9yTJrrpA8Q.jpeg" alt="Image" width="800" height="333" loading="lazy"></p>
<p>It is very easy to customize it to match your brand. It was used in internal tools like Stanford’s Department of Emergency Medicine Catalog:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*fJgKUWlS4RBv_OXME1wLAQ.png" alt="Image" width="800" height="444" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*99B_ST6PqMpj6DhNf7fX0Q.png" alt="Image" width="800" height="410" loading="lazy"></p>
<p>We’ve got many requests from web developers who want to have the Dashboard built on different frameworks like <a target="_blank" href="https://angular.io/">Angular 2</a>, <a target="_blank" href="https://cli.angular.io/">Angular CLI</a>, <a target="_blank" href="https://facebook.github.io/react/">React</a>, <a target="_blank" href="https://www.meteor.com/">Meteor</a>, <a target="_blank" href="https://vuejs.org/">VueJS</a> or as a Rails Gem. Creating all these versions and supporting them for free under MIT license will work only if we will have PRO versions for each one. We started with Angular 2 and we’ve seen a lot of people who use it and we’ve got a lot of feedback on how to improve it. So if you want to get involved for the other frameworks or if you have any ideas on how to make these products better, we would be glad to talk more.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*poZ5puqDlTWowjhJrdLwMg.jpeg" alt="Image" width="800" height="333" loading="lazy"></p>
<p>It took a lot of courage to show our sources and the process that we had behind building <a target="_blank" href="http://www.creative-tim.com/product/light-bootstrap-dashboard">Light Bootstrap Dashboard</a>. Hope you will learn something from this and if you have any feedback or suggestions, I would be glad to talk to you in the comments.</p>
<p>Useful links:</p>
<ul>
<li>Download HTML version from <a target="_blank" href="https://www.creative-tim.com/product/light-bootstrap-dashboard">www.creative-tim.com</a></li>
<li>Download Angular version from <a target="_blank" href="https://www.creative-tim.com/product/light-bootstrap-dashboard-angular2">www.creative-tim.com</a></li>
<li>Download PSD/Sketch version from <a target="_blank" href="http://www.pixelsvibe.com/product/light-dashboard">www.pixelsvibe.com</a></li>
<li>Play with it on the <a target="_blank" href="http://demos.creative-tim.com/light-bootstrap-dashboard/dashboard">live preview</a></li>
<li>Contribute and report issues on the <a target="_blank" href="https://github.com/creativetimofficial/light-bootstrap-dashboard">GitHub repository</a></li>
<li>Check our blog: <a target="_blank" href="http://blog.creative-tim.com/">http://blog.creative-tim.com/</a></li>
</ul>
<p>Find me on:</p>
<ul>
<li>Email: <a target="_blank" href="mailto:alex@creative-tim.com">alex@creative-tim.com</a></li>
<li>Facebook: <a target="_blank" href="https://www.facebook.com/axelut">https://www.facebook.com/axelut</a></li>
<li>Twitter: <a target="_blank" href="https://twitter.com/axelut">https://twitter.com/axelut</a></li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How my friends and I grew our side project into a $17,000/month business ]]>
                </title>
                <description>
                    <![CDATA[ In 2014, my friends and I set out to build the best possible web design tools. We built UI kits, Admin Dashboards, Templates, and Plugins. We’ve always tried to create products that are helpful in the development process, and that we ourselves would ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/growing-a-side-project-into-a-17-000-month-business-46024d2aa87f/</link>
                <guid isPermaLink="false">66c375a5f278f15f931a3420</guid>
                
                    <category>
                        <![CDATA[ business ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Entrepreneurship ]]>
                    </category>
                
                    <category>
                        <![CDATA[ startup ]]>
                    </category>
                
                    <category>
                        <![CDATA[ UX ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Alexandru Paduraru ]]>
                </dc:creator>
                <pubDate>Mon, 20 Feb 2017 00:56:42 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*NUS8qMfEvmD6N2dHc_3d5A.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>In 2014, my friends and I set out to build the best possible web design tools. We built <a target="_blank" href="http://www.creative-tim.com/bootstrap-themes/ui-kit">UI kits</a>, <a target="_blank" href="http://www.creative-tim.com/bootstrap-themes/admin-dashboard">Admin Dashboards</a>, <a target="_blank" href="http://www.creative-tim.com/bootstrap-themes/free">Templates</a>, and <a target="_blank" href="http://www.creative-tim.com/bootstrap-themes/components">Plugins</a>. We’ve always tried to create products that are helpful in the development process, and that we ourselves would use for building websites for clients.</p>
<p>From a revenue’s perspective, if we don’t take into consideration the Black Friday sales (which doubled the amount that we made in November 2016), we are grossing around $22,000 per month. Part of that goes toward paying our affiliates’ commissions, collected VAT, payment vendors’ taxes, and other expenses. We end up netting around $17,000 each month.</p>
<p>In this case study, I’ll share exactly how we built our products and grew our business. You’ll hear all about:</p>
<ol>
<li>What motivated us to start our startup, <a target="_blank" href="https://www.creative-tim.com/">Creative Tim</a>, and how we built our initial product</li>
<li>How we got our first users</li>
<li>Marketing strategies we used to grow</li>
<li>How our business model works</li>
<li>The story behind our revenue sources</li>
<li>Biggest lessons we’ve learned so far</li>
</ol>
<p><img src="https://cdn-media-1.freecodecamp.org/images/glM3O9p0pt4EjhWJL7E3vPUCDd2ZPMfCW-5b" alt="Image" width="800" height="449" loading="lazy"></p>
<h3 id="heading-1-what-motivated-us-to-get-started-with-creative-tim-and-how-we-built-the-initial-product">1. What motivated us to get started with Creative Tim and how we built the initial product</h3>
<p>We started out as a two-person agency in Romania with no funding from third parties. We didn’t have enough cash to rent an office — even desks at a co-working space —so we just worked out of a Starbucks. We were barely able to pay our daily living expenses by doing work for clients.</p>
<p><a target="_blank" href="http://www.creative-tim.com">Creative Tim</a> was a side project that we thought would come in handy to web developers like ourselves. We noticed that we were always “reinventing the wheel” when working with clients, and creating the same items over and over again for their websites. So we wanted to create a few standard components, like login and register modals, calendars, wizards, headers, and footers.</p>
<p>Over the span of a few months, we dedicated our time to implementing the platform and a few freebies (alongside the agency work). In the beginning, we didn’t have any Twitter followers, Facebook fans, or email list subscribers. We posted a lot of stuff about our freebies on various design forums and we used the “stalk web developers on Twitter” technique to spread the word about our products.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/5VHqKFjppkXzyhXKfW7ATcrulzgnvSvLLxbs" alt="Image" width="800" height="533" loading="lazy"></p>
<h3 id="heading-2-how-we-got-our-first-users">2. How we got our first users</h3>
<p>At first, nobody really understood what we wanted to do. They didn’t understand the value we could provide by helping them improve their businesses. We decided that it would be better to create a more complex product that would help people understand what we were doing ?</p>
<p>We launched the <a target="_blank" href="http://demos.creative-tim.com/get-shit-done/index.html">Get Shit Done Kit</a>, a UI Kit based on <a target="_blank" href="http://getbootstrap.com/">Bootstrap</a>. It was featured <a target="_blank" href="https://www.designernews.co/stories/24249-get-shit-done-bootstrap3-ui-kit">on Designer News</a>, and it was quite popular. We got over 11,000 users from that source, which was a huge spike for our business.</p>
<p>Then two weeks later our startup <a target="_blank" href="https://www.producthunt.com/posts/creative-tim">was featured on Product Hunt</a>. That gave us another spike with over 5,000 users. After that, the situation was stable, and we graduated from 0 users/week to a consistent 2,000 to 3,000 users/week.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/cxAUmh-GmlXCzqKEe9i5HPfytvzLPIy24i4y" alt="Image" width="800" height="353" loading="lazy"></p>
<p>A couple of months later, motivated by the success of free Get Shit Done Kit, we released <a target="_blank" href="http://gsdk.creative-tim.com">Get Shit Done Kit PRO</a> the premium version of GSDK, with more components and ready-to-use example pages.</p>
<p>Initially, we only made a few sales. The product was generating about $200/week, which was not nearly enough to sustain our business. At the same time we were working on a web project for one of our clients.</p>
<p>Then in December, we got published on <a target="_blank" href="http://expo.getbootstrap.com/">Bootstrap Expo</a>, the most popular gallery for showcasing websites created with Bootstrap. This was another important spike for our business. Since all of the people who go to Bootstrap Expo for inspiration already know Bootstrap or have previously worked with it, they were the perfect audience for our business.</p>
<p>Later, we discovered that getting traffic on your website is not enough to create a long term relationship with your users, and most of them forgot all about us after their first interaction. We did some research and discovered what most marketers probably already know: people forget things that they aren’t reminded of. Then we implemented the “Remember us email system” following the rules from the <a target="_blank" href="https://en.wikipedia.org/wiki/Forgetting_curve">forgetting curve</a>.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/qAh4xjOxFvirt93nrxTLPQoMCVsQ8VR15uqY" alt="Image" width="800" height="409" loading="lazy"></p>
<p>We wanted to give our users a reminder that we still existed and that we’re a valuable resource for their projects or their clients’ projects.</p>
<p>Currently, we send emails at the following schedule:</p>
<ol>
<li>After 3 days from their first download, we send an email with other recommended products.</li>
<li>On day 10 we send an email requesting feedback and asking if they need help.</li>
<li>On day 15 we remind them that they can upgrade to PRO.</li>
<li>On day 30 we ask them again for feedback and offer to promote something they’ve built in our gallery and social media.</li>
<li>We send a final reminder on day 60.</li>
</ol>
<h3 id="heading-3-marketing-strategies-we-used-to-grow">3. Marketing strategies we used to grow</h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/d0y5IS6VRtUa8uAyWDipZiGfD0uniSWD0XVJ" alt="Image" width="622" height="477" loading="lazy"></p>
<p>Most of our marketing strategies consisted of submitting our content to different communities like Reddit, Product Hunt, Designer News, Hacker News, and GitHub. Some important subreddits that work well in our area include <a target="_blank" href="https://www.reddit.com/r/web_design">/r/web_design</a>, <a target="_blank" href="https://www.reddit.com/r/html5">/r/html5</a>, <a target="_blank" href="https://www.reddit.com/r/frontend">/r/frontend</a>, and <a target="_blank" href="https://www.reddit.com/r/webdev">/r/webdev</a>.</p>
<p>We also paid between $100–200 for newsletter campaigns a couple of times. Even though the ROI ratio matched the amount we invested, the campaigns did not meet the expectations. (Maybe this was just in our case, that wasn’t profitable and it works better for others.)</p>
<p>Then we paid $400 for Get Shit Done Kit PRO to appear in the <a target="_blank" href="http://sidebar.io/">Sidebar.io</a> newsletter, a curated list of the 5 best design links made by <a target="_blank" href="https://www.freecodecamp.org/news/growing-a-side-project-into-a-17-000-month-business-46024d2aa87f/undefined">Sacha Greif</a>. This was a very rewarding newsletter for us, generating about $1,500 in sales.</p>
<p>Then we purchased the “Review + Newsletter” package ($550) from <a target="_blank" href="https://ewebdesign.com/giveaway-quality-bootstrap-components">eWebDesign</a>. There were about 5,000 users who participated in the giveaway, and the total sales amounted $2,800.</p>
<p>We also thought about different places where we could find web developers who could use our products, and we realized that hackathons were exactly what we needed.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/6nTzVkfu7bGay7hxOGvSMSfqJCbmdjK-hNfX" alt="Image" width="800" height="600" loading="lazy">
<em>Presenting how our tools can help during the Hackathon</em></p>
<p>Subsequently we started talking to people that were organizing hackathons to offer them free licenses for our “premium products.” We sponsored over 20 hackathons in different cities around the world (you can check them <a target="_blank" href="http://www.creative-tim.com/sponsorships">here</a>).</p>
<p>All the developers were happy to get free licenses, which made us happy that we could help them create better projects faster and they also found out who we are, so a win-win situation.</p>
<p>Critically, being physically present at some of the hackathons also gave us a lot of information about how the developers were using our products and how we could improve them in order to make them more user-friendly.</p>
<p>In March 2015, we finished the agency’s contracts and we switched from “<strong>Agency mode</strong>” to “<strong>Startup mode</strong>.” With some revenue in the bank and a few monthly sales, our team moved to working full time for our startup. As we put everything together and constantly launched new products, our sources of traffic and revenue grew.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/3Fz0BLMqGqgJ1bCIQt18Bftvki4D3Lxlspcf" alt="Image" width="800" height="423" loading="lazy"></p>
<h3 id="heading-4-how-the-business-model-works">4. How the business model works</h3>
<p>We realized that the best business model for Creative Tim was <a target="_blank" href="https://en.wikipedia.org/wiki/Freemium">freemium</a>: we create high quality freebies that help web developers build great websites, then release the PRO versions for those freebies, which contain more elements, sections, plugins, and example pages.</p>
<p>At this moment, we have 8 premium products, each of which have their own freebies. Their prices range from $19 to $599, depending on the license and archive type (HTML, HTML + PSD, HTML + Sketch). The freebies appear everywhere on different communities, blog posts, newsletters, and social websites — and they are driving all of our traffic.</p>
<blockquote>
<p><strong>Our business model</strong>: create high quality freebies that help web developers build great websites, then release the PRO versions for those freebies which contain more elements. ??</p>
</blockquote>
<p>The basic idea is that those freebies <em>are always</em> appearing on top 10 lists in these big communities. Each post that’s in the top 10 (depending on how big is the community) gives us between 1,000 and 15,000 targeted users in one day. You can imagine how much that would cost if you wanted to do a regular targeted marketing campaign. ?</p>
<p>Some examples:</p>
<ul>
<li>Paper Kit — <a target="_blank" href="https://www.reddit.com/r/webdev/comments/3kwb16/paper_kit_bootstrap_ui_kit_ps_the_examples_are">380 upvotes on Reddit</a></li>
<li>Material Kit — <a target="_blank" href="https://www.reddit.com/r/web_design/comments/4t6qcv/material_kit_a_badass_bootstrap_ui_kit_based_on">560 upvotes on Reddit</a></li>
<li>Light Bootstrap Dashboard Angular — <a target="_blank" href="https://www.reddit.com/r/web_design/comments/5ihjco/bootstrap_dashboard_for_angular_2_free_admin">210 upvotes on Reddit</a></li>
<li>Material Kit — <a target="_blank" href="https://news.ycombinator.com/item?id=12099876">180 uvpotes on Hacker News</a> (peak position 9 with over 14,000 users coming to our website in 1 day)</li>
<li>Material Kit — <a target="_blank" href="https://www.producthunt.com/tech/material-kit">860 upvotes on Product Hunt</a></li>
<li>etc… you got the idea</li>
</ul>
<h3 id="heading-5-the-story-behind-our-revenue-sources">5. The story behind our revenue sources</h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/AfYuWuko6bKZPtOiiGroLzlJCfnWENgBy3vl" alt="Image" width="800" height="838" loading="lazy"></p>
<h4 id="heading-direct-product-sales"><strong>Direct Product Sales</strong></h4>
<p>Here we have the regular sales that are done on our website, which are worth about 24% of our overall sales. This doesn’t include the <a target="_blank" href="http://www.creative-tim.com/product/buy/bundle">Big Bundle</a>.</p>
<p><strong>What is this Big Bundle, and how did we create it?</strong> We noticed that some of our users were downloading all our free products. (When I say all, I literally mean all of them in about 2–3 minutes after they have created an account.) We also noticed that some of our clients were purchasing all the products that were premium.</p>
<p>So we decided to test a new product called the “<strong>Big Bundle</strong>” which gives you access to all our products with huge discounts (over 60%). This big package was getting around 6–8 purchases per month. Since the prices for this Big Bundle is $299 (instead of $500) for the personal license and $669 (instead of $2,127) for the developer license, it’s a good source of revenue and a great deal for the web designers and agencies who are using our products for multiple clients. It’s a win-win situation.</p>
<h4 id="heading-affiliates-sales"><strong>Affiliates Sales</strong></h4>
<p>We’ve created an affiliate network, and our affiliates are very happy because they get 50% to themselves from each transaction. For example, one of our most important affiliations is done through a very popular GitHub Repo: <a target="_blank" href="http://fezvrasta.github.io/bootstrap-material-design">Bootstrap Material Design</a> (17,000+ stars on GitHub). Currently, affiliates account for around 25% of our overall revenue.</p>
<h4 id="heading-organic-search-seo"><strong>Organic Search (SEO)</strong></h4>
<p>We saw that we were also getting around 22% of our revenue from SEO. So we decided to invest more in SEO, we brought on an SEO consultant, whom we pay around $500/month to improve our products’ ranks in Google.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/A9RI8DVHbCvesQOu6tLe-8jpAKxOKi2focMe" alt="Image" width="800" height="338" loading="lazy"></p>
<h4 id="heading-other-revenue"><strong>Other revenue</strong></h4>
<p>The remainder of our monthly revenue comes from Facebook, Twitter, and our newsletter. Here’s how our revenue has evolved over time, along with some historically important moments, so you can understand why it has grown in some months:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/IIsCPjboAdnIrM2w8mzCDywEN30Ygde4GM14" alt="Image" width="642" height="431" loading="lazy"></p>
<p>And here’s a breakdown of how we burn cash:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/8amWaEM8AKY0Q8wJVFk6OSrBrJ4dBuSmLnrd" alt="Image" width="800" height="613" loading="lazy"></p>
<h3 id="heading-6-the-biggest-lessons-weve-learned-so-far">6. The biggest lessons we’ve learned so far</h3>
<h4 id="heading-it-sounds-cliche-but-having-a-great-product-is-crucial"><strong><em>It sounds cliché, but having a great product is crucial.</em></strong></h4>
<p>A lot of founders <em>really</em> struggle trying to market and sell something that people don’t want or don’t need. If your product is crap, there is no marketing strategy — and no source of investment — that can keep it alive for long.</p>
<p>At the moment, our products are used by over 134,000 web developers around the world. We have people from Microsoft, Ubisoft, Vodafone, Orange, Harvard University, Stanford University, and governmental institutions downloading and using them as different internal tools, and we’ve sponsored more than <a target="_blank" href="http://www.creative-tim.com/sponsorships">20 global hackathons</a> from 14 countries.</p>
<h4 id="heading-dont-look-to-be-the-next-facebook-try-to-solve-a-real-problem-instead"><strong><em>Don’t look to be the next Facebook. Try to solve a real problem instead.</em></strong></h4>
<p>Every step in our development seemed like the natural thing to do at the time. Looking back at our evolution, we wouldn’t change anything. But with all we’ve learned, we could definitely do everything faster the second time around.</p>
<p>We’ve always created and improved our products based on our customers’ feedback, and that is the best way to develop a business. It doesn’t matter what you personally like — you need to make sure you solve a real problem for a real customer.</p>
<h4 id="heading-read-read-read"><strong><em>Read, read, read.</em></strong></h4>
<p>In the past three years, I’ve read more than I’d read in my entire life, and this makes me feel great. Here are some of my favorite books, which I recommend to everybody:</p>
<ul>
<li><a target="_blank" href="https://www.amazon.com/How-Friends-Influence-People-Revised/dp/067142517X/">How to Win Friends and Influence People — Dale Carnegie</a></li>
<li><a target="_blank" href="https://www.amazon.com/Zero-One-Notes-Startups-Future-ebook/dp/B00J6YBOFQ/">Zero to One — Peter Thiel</a></li>
<li><a target="_blank" href="https://www.amazon.com/Hard-Thing-About-Things-Building-ebook/dp/B00DQ845EA/">The Hard Thing About Hard Things — Ben Horowitz</a></li>
<li><a target="_blank" href="https://www.amazon.com/Law-Success-Napoleon-Hill-ebook/dp/B004J8HV74/">Law of Success — Napoleon Hill</a></li>
<li><a target="_blank" href="https://www.amazon.com/Think-Grow-Rich-Napoleon-Hill/dp/1514698137/">Think and Grow Rich — Napoleon Hill</a></li>
<li><a target="_blank" href="https://www.amazon.com/Good-Great-Some-Companies-Others/dp/0066620996/">Good to Great — Jim Collins</a></li>
<li><a target="_blank" href="https://www.amazon.com/Lean-Startup-Entrepreneurs-Continuous-Innovation/dp/0307887898">The Lean Startup — Eric Ries</a></li>
<li><a target="_blank" href="https://www.amazon.com/Charisma-Myth-Science-Personal-Magnetism/dp/1591845947/">The Charisma Myth — Olivia Fox Cabane</a></li>
<li><a target="_blank" href="https://www.amazon.com/Lean-Analytics-Better-Startup-Faster/dp/1449335675/">Lean Analytics: Use Data to Build a Better Startup Faster — Alistair Croll</a></li>
</ul>
<blockquote>
<p>I really do think that the secret weapon is to deliver great products combined with a great user experience and a great customer support.</p>
</blockquote>
<p>The best decision that we made was to put our customer in the first row, and make sure that they were receiving a great UI kit/Dashboard that really solved their problems. That guided us through the whole journey. Our secret weapon is that we deliver great products combined with a great user experience and great customer support.</p>
<h4 id="heading-everything-is-possible"><strong><em>Everything is possible</em></strong>.</h4>
<p>We are living in a world where anybody can become anything they want as long as they want to invest the amount of time that is needed. I’m saying time, and not money, because we all have time. I want to recommend two books that talk about this: <a target="_blank" href="https://www.amazon.com/Karaoke-Capitalism-Management-22Financial-Financial/dp/0273687476">Karaoke Capitalism by Jonas Ridderstråle and Kjell Nordstrom</a>, and <a target="_blank" href="https://www.amazon.com/Zero-One-Notes-Startups-Future-ebook/dp/B00J6YBOFQ">Zero to One by Peter Thiel</a> (a PayPal co-founder).</p>
<p>At this point, there are no limits. You can go anywhere on the planet and you can talk with whomever you want just by contacting them through social media. Today an ordinary person can achieve more influence than the president of a small country. Think of those Instagram accounts with millions of followers. If I — a regular guy from Romania — can build a profitable business in 2.5 years that is making 60x my country’s monthly minimum monthly wage, then boy, just about anything is possible.</p>
<h3 id="heading-thanks-for-reading-if-you-have-feedback-or-suggestions-you-can-find-me-here">Thanks for reading! If you have feedback or suggestions, you can find me here:</h3>
<ul>
<li>Official Website: <a target="_blank" href="http://www.creative-tim.com/?utm_source=indie-hackers">http://www.creative-tim.com</a></li>
<li>Our Blog: <a target="_blank" href="http://blog.creative-tim.com/?utm_source=indie-hackers">http://blog.creative-tim.com</a></li>
<li>Email: <a target="_blank" href="mailto:alex@creative-tim.com">alex@creative-tim.com</a></li>
<li>Facebook: <a target="_blank" href="https://www.facebook.com/axelut">https://www.facebook.com/axelut</a></li>
<li>Twitter: <a target="_blank" href="https://twitter.com/axelut">https://twitter.com/axelut</a></li>
</ul>
<p>Also, <a target="_blank" href="https://www.indiehackers.com/businesses/creative-tim">here is my IndieHackers interview</a> that I based this article off of.</p>
<p>I Hope this motivates you to start your own business. Just drop me a message if you have any questions — I would be glad to help you!</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
