Building responsive websites fast: A Float UI tutorial

In this article, we’ll introduce Float UI, a set of pre-made templates that leverage the power of Tailwind CSS to help developers create professional websites quickly. We’ll also walk through a tutorial for putting it to use.

What is Float UI?

float ui tutorial

Introducing Float UI, your savior. As the website states, Float UI is “a collection of modern UI components and website templates, built on top of React/Next.js with Tailwind CSS. The components are beautifully designed, expertly crafted, and allow you to build beautiful websites.”

It’s free, open source, and has pretty much everything a modern website needs – from fully-fledged components to useful parts like modals, navbars, and tabs.

Float UI integrates natively with React and Next.js, so many developers are already familiar with it. Since it uses Tailwind CSS, it provides a fast way to build websites with ready-made components while remaining highly customizable; you can modify whatever you want in the code since it’s just Tailwind CSS at its core.

And since it’s open source, it is license-free, meaning any organization of any size can use it for free.

How does Float UI work?

Float UI provides developers with ready-made templates written in Tailwind CSS. To use it, you need a React/Next.js app with Tailwind CSS installed. After that, you can simply grab any component you like, tweak it to your liking, and use it.

One important point to emphasize is that Float UI components are fully responsive, which removes a significant burden from developers’ shoulders.

On the left side of the Float UI page, components are categorized into two main sections: Marketing UI and Application UI.

The Marketing UI section consists of landing pages and business-style components like Hero sections, FAQs, and Testimonials, while Application UI focuses more on usability elements such as cards, pagination, modals, and menus. It’s entirely possible to build a fully functional web app using Float UI.

Of course, you’ll need to write your own logic, but the UI is taken care of.

They also provide fully-built templates, which are free at the time of writing. These templates are well-made, can be previewed as they are already deployed on Vercel, and can significantly speed up the development process.

Float UI tutorial: Our real-world use case

We will build a fully functional business page for a hypothetical coffee brewery called SmartBrew. For this, I ask you to imagine the following scenario:

You’re a freelance developer or an agency owner. One of your clients (SmartBrew) has asked you to build their website. It’s urgent—they need it today, and they want you to come up with a good business page. You don’t have enough time to code everything from scratch, but you also can’t use any other template builder.

The client insists on using Tailwind CSS and React because their internal developer, Greg, only works with Tailwind. Greg is on holiday, so the client has turned to you to develop their page. You want to retain this client, so you must be fast and efficient. You need to build a good business page today. You’re already behind schedule. What do you do?

  1. Drink 2 liters of coffee and lock in for the whole day—no breaks allowed. Eat ramen in front of your computer
  2. Use Float UI to build the website in a couple of hours

You decide to choose the second option.

Building the app

To build the app, we will do the following:

  • Install React.js with Vite
  • Install Tailwind CSS for React, as Float UI uses Tailwind
  • Prepare our app

You can check out the preview of what we’re going to build before we dive in.

Let’s start by creating our React app using the npm create vite@latest command and selecting the appropriate options. For this tutorial, we’ll use JavaScript, not TypeScript, so choose accordingly.

Next, follow this guide to install Tailwind CSS:

After completing the installation, delete everything inside the index.css file and add the following:

import "tailwindcss";

We will also delete everything in the App.css file. Since we are using Float UI, we won’t be utilizing CSS files at all.

App structure

When developing React applications, it is best to use separate components for different sections of the web app instead of placing everything in a single file. We will create a components folder to organize our components. Our folder structure will look like this:

- main.jsx
- App.jsx
- components
    - Hero.jsx
    - Features.jsx
    - CTA.jsx
    - Testimonials.jsx
    - FAQ.jsx
    - Contact.jsx
    - Footer.jsx

Each file inside the components folder will correspond to a specific section, and we will import them into our App.jsx file as follows:

import Hero from "./components/Hero.jsx";
import Features from "./components/Features.jsx";
import CTA from "./components/CTA.jsx";
import Testimonials from "./components/Testimonials.jsx";
import FAQ from "./components/FAQ.jsx";
import Contact from "./components/Contact.jsx";
import Footer from "./components/Footer.jsx";

function App() {
  return (
    <>
      <Hero />
      <Features />
      <CTA />
      <Testimonials />
      <FAQ />
      <Contact />
      <Footer />
    </>
  );
}

export default App;

If you’re following along with this tutorial, I recommend commenting out the imports for now and adding them as we go. At this stage, the app won’t compile since the files don’t exist yet.

Hero section

Now that we understand the app’s structure, we can proceed with confidence. We’ll start by creating the Hero section, which serves as the first impression for users.

Since we’re short on time and using Float UI, we don’t need to write the entire section from scratch. Instead, we’ll visit the components page on the Float UI website. This section falls under the Marketing UI category.

We’ll select the Hero template called Secondary Hero Section:secondary hero section template float ui

Now, if we click on the Code section on the top right, we will have the template ready:code from secondary hero section

We will make some modifications to the template. Since our client is in the coffee business, brownish tones will be more suitable. Additionally, we’ll adjust the text and add an image.

Pro tip: It’s 2025, and I highly recommend integrating AI into your development workflow—for example, to generate royalty-free images or logos. The logo and image used here were created with AI.

Now we’ll generate our hero section:hero section for sample project generated by float ui

Simple and beautiful, isn’t it?

Click the dropdown to see the code for the Hero section:
import React from "react";
import { useState } from "react";

const Hero = () => {
  const [state, setState] = useState(false);

  // Updated navigation items for SmartBrew
  const navigation = [
    { title: "Menu", path: "javascript:void(0)" },
    { title: "Locations", path: "javascript:void(0)" },
    { title: "Rewards", path: "javascript:void(0)" },
    { title: "Baristas", path: "javascript:void(0)" },
    { title: "About Us", path: "javascript:void(0)" },
  ];

  return (
    <>
      <header>
        <nav className="relative items-center pt-5 px-4 mx-auto max-w-screen-xl sm:px-8 sm:flex sm:space-x-6">
          <div className="flex justify-between">
            <a href="javascript:void(0)">
              {/* Inline SmartBrew SVG logo */}
              <svg
                xmlns="http://www.w3.org/2000/svg"
                viewBox="0 0 240 100"
                width={120}
                height={50}
              >
                {/* Coffee Cup */}
                <path
                  d="M65 20 H115 V70 Q115 85 100 85 H80 Q65 85 65 70 Z"
                  fill="#8B4513"
                />

                {/* Cup Handle */}
                <path
                  d="M115 30 Q130 30 130 45 Q130 60 115 60"
                  fill="none"
                  stroke="#8B4513"
                  strokeWidth="6"
                />

                {/* Steam */}
                <path
                  d="M80 15 Q85 5 90 15 Q95 5 100 15"
                  fill="none"
                  stroke="#8B4513"
                  strokeWidth="3"
                  strokeLinecap="round"
                />

                {/* S */}
                <path
                  d="M140 35 Q150 30 160 35 Q170 40 160 50 Q150 60 160 65 Q170 70 180 65"
                  fill="none"
                  stroke="#8B4513"
                  strokeWidth="6"
                  strokeLinecap="round"
                />

                {/* Text */}
                <text
                  x="120"
                  y="95"
                  fontFamily="Arial"
                  fontSize="14"
                  fontWeight="bold"
                  fill="#8B4513"
                  textAnchor="middle"
                >
                  SMARTBREW
                </text>
              </svg>
            </a>
            <button
              className="text-gray-500 outline-none sm:hidden"
              onClick={() => setState(!state)}
            >
              {state ? (
                <svg
                  xmlns="http://www.w3.org/2000/svg"
                  className="h-6 w-6"
                  fill="none"
                  viewBox="0 0 24 24"
                  stroke="currentColor"
                >
                  <path
                    strokeLinecap="round"
                    strokeLinejoin="round"
                    strokeWidth={2}
                    d="M6 18L18 6M6 6l12 12"
                  />
                </svg>
              ) : (
                <svg
                  xmlns="http://www.w3.org/2000/svg"
                  className="h-6 w-6"
                  fill="none"
                  viewBox="0 0 24 24"
                  stroke="currentColor"
                >
                  <path
                    strokeLinecap="round"
                    strokeLinejoin="round"
                    strokeWidth={2}
                    d="M4 6h16M4 12h16M4 18h16"
                  />
                </svg>
              )}
            </button>
          </div>
          <ul
            className={`bg-white shadow-md rounded-md p-4 flex-1 mt-12 absolute z-20 top-8 right-4 w-64 border sm:shadow-none sm:block sm:border-0 sm:mt-0 sm:static sm:w-auto ${
              state ? "" : "hidden"
            }`}
          >
            <div className="order-1 justify-end items-center space-y-5 sm:flex sm:space-x-6 sm:space-y-0">
              {navigation.map((item, idx) => (
                <li className="text-gray-500 hover:text-amber-800" key={idx}>
                  <a href={item.path}>{item.title}</a>
                </li>
              ))}
            </div>
          </ul>
        </nav>
      </header>
      {/* Changed blue section to amber-800 (coffee brown) */}
      <section className="mt-24 mx-auto max-w-screen-xl pb-4 px-4 items-center lg:flex md:px-8">
        <div className="space-y-4 flex-1 sm:text-center lg:text-left">
          <h1 className="text-gray-800 font-bold text-4xl xl:text-5xl">
            Mobile Ordering Made
            <span className="text-amber-800"> Simple</span>
          </h1>
          <p className="text-gray-500 max-w-xl leading-relaxed sm:mx-auto lg:ml-0">
            Enjoy your favorite coffee without the wait. Our new app lets you
            order ahead and skip the line, saving you valuable time during your
            busy day.
          </p>
          <div>
            <p className="text-gray-800 py-3">
              Download our app and get your first coffee free
            </p>
            <form className="items-center space-y-3 sm:justify-center sm:space-x-3 sm:space-y-0 sm:flex lg:justify-start">
              <input
                type="text"
                placeholder="Enter your email"
                className="text-gray-500 border outline-none p-3 rounded-md w-full sm:w-72"
              />
              <button className="outline-none bg-amber-800 text-white text-center px-4 py-3 rounded-md shadow w-full ring-offset-2 ring-amber-800 focus:ring-2 sm:w-auto">
                Download Now
              </button>
            </form>
          </div>
        </div>
        <div className="flex-1 text-center mt-4 lg:mt-0 lg:ml-3">
          {/* Coffee roastery SVG illustration */}
          <svg
            xmlns="http://www.w3.org/2000/svg"
            viewBox="0 0 800 500"
            className="w-full mx-auto sm:w-10/12 lg:w-full"
          >
            {/* Background */}
            <rect width="800" height="500" fill="#f9f3e5" />

            {/* Wooden floor */}
            <rect y="400" width="800" height="100" fill="#8b5a2b" />
            <rect y="410" width="800" height="10" fill="#74461f" />
            <rect y="440" width="800" height="10" fill="#74461f" />
            <rect y="470" width="800" height="10" fill="#74461f" />

            {/* Wall elements */}
            <rect x="0" y="100" width="800" height="300" fill="#e6d5b8" />
            <rect x="50" y="150" width="200" height="150" fill="#d4b995" />
            <rect x="550" y="150" width="200" height="150" fill="#d4b995" />

            {/* Large coffee roaster */}
            <ellipse cx="400" cy="380" rx="120" ry="30" fill="#555" />
            <rect
              x="340"
              y="200"
              width="120"
              height="180"
              rx="10"
              fill="#8B4513"
            />
            <rect
              x="330"
              y="190"
              width="140"
              height="20"
              rx="5"
              fill="#6b3811"
            />
            <rect x="370" y="160" width="60" height="30" fill="#6b3811" />
            <rect x="390" y="130" width="20" height="30" fill="#6b3811" />
            <ellipse cx="400" cy="130" rx="20" ry="10" fill="#555" />

            {/* Roaster door and details */}
            <ellipse cx="400" cy="250" rx="40" ry="40" fill="#333" />
            <ellipse cx="400" cy="250" rx="35" ry="35" fill="#222" />
            <ellipse cx="400" cy="250" rx="20" ry="20" fill="#111" />

            {/* Temperature gauge */}
            <circle
              cx="420"
              cy="320"
              r="15"
              fill="#ddd"
              stroke="#333"
              strokeWidth="3"
            />
            <line
              x1="420"
              y1="320"
              x2="430"
              y2="315"
              stroke="#f00"
              strokeWidth="2"
            />

            {/* Coffee beans in baskets */}
            <ellipse cx="200" cy="400" rx="70" ry="20" fill="#6b3811" />
            <ellipse cx="200" cy="390" rx="65" ry="15" fill="#8B4513" />

            <ellipse cx="600" cy="400" rx="70" ry="20" fill="#6b3811" />
            <ellipse cx="600" cy="390" rx="65" ry="15" fill="#8B4513" />

            {/* Scattered coffee beans */}
            <circle cx="150" cy="380" r="5" fill="#5e2c04" />
            <circle cx="170" cy="385" r="5" fill="#5e2c04" />
            <circle cx="190" cy="375" r="5" fill="#5e2c04" />
            <circle cx="210" cy="385" r="5" fill="#5e2c04" />
            <circle cx="230" cy="380" r="5" fill="#5e2c04" />

            <circle cx="550" cy="380" r="5" fill="#5e2c04" />
            <circle cx="570" cy="385" r="5" fill="#5e2c04" />
            <circle cx="590" cy="375" r="5" fill="#5e2c04" />
            <circle cx="610" cy="385" r="5" fill="#5e2c04" />
            <circle cx="630" cy="380" r="5" fill="#5e2c04" />

            {/* Steam from roaster */}
            <path
              d="M390 130 Q380 110 390 100 Q400 90 410 100 Q420 110 410 130"
              fill="#f9f3e5"
              fillOpacity="0.7"
            />

            {/* Barista silhouette */}
            <ellipse cx="520" cy="300" rx="30" ry="80" fill="#333" />
            <circle cx="520" cy="210" r="20" fill="#333" />

            {/* Burlap sacks of coffee */}
            <path d="M80 350 L130 350 L120 400 L90 400 Z" fill="#b89162" />
            <path d="M85 355 L125 355 L117 395 L93 395 Z" fill="#aa8657" />
            <text
              x="105"
              y="380"
              fontFamily="Arial"
              fontSize="12"
              textAnchor="middle"
              fill="#5e2c04"
            >
              COFFEE
            </text>

            <path d="M700 350 L750 350 L740 400 L710 400 Z" fill="#b89162" />
            <path d="M705 355 L745 355 L737 395 L713 395 Z" fill="#aa8657" />
            <text
              x="725"
              y="380"
              fontFamily="Arial"
              fontSize="12"
              textAnchor="middle"
              fill="#5e2c04"
            >
              COFFEE
            </text>

            {/* Ambient lighting effect */}
            <ellipse
              cx="400"
              cy="250"
              rx="300"
              ry="150"
              fill="#f9b572"
              fillOpacity="0.1"
            />
          </svg>
        </div>
      </section>
    </>
  );
};

export default Hero;

I’ve hosted it on GitHub because it looks rather lengthy.

While it looks like a lot of code, we didn’t write much at all! We used the template given by Float UI, changed the color, added the images, and tweaked the text. It didn’t take more than a couple minutes to build. Now, that is some serious speed.

You’ll need to know Tailwind classes. At least that was the case in the past; now, you can just use AI to get help.

Pro tip: I’d suggest that you do not ask the AI to give you the whole code or component, as it will not give you what you have in mind in most cases, and you’ll spend more time debugging.

I typically ask the AI the smallest, laser-focused questions, like, “what is the class that changes the color in Tailwind CSS?” or, “how can I add margin in Tailwind CSS?”. These divided questions will give you what you want, make you faster, and stop you from losing so much time in debugging.

Now, if you import this Hero section to App.jsx (assuming you already have, and commented out the non-existing ones), npm run dev command will present you with this simple yet elegant Hero section.

Now that we understand how we will be working, we can continue adding the other sections. This process will make us so fast that a whole landing page like this won’t take us more than an hour or so.

Features section

For the features section, we go to the Feature Sections part of the Float UI and choose Feature Sections with cards shown here:features section with cards float ui

We will again make some small changes, and it will look like this:adjustments to features section

You see, only the colors and text have been changed. It is also responsive by default, how cool is this?:responsive float ui design

Click the dropdown to see the code for the Features section:
import React from "react";

const Features = () => {
  const features = [
    {
      icon: (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth={1.5}
          stroke="currentColor"
          className="w-6 h-6"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M3.75 13.5l10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75z"
          />
        </svg>
      ),
      title: "Fast Ordering",
      desc: "Place your order in seconds with our intuitive app interface. Customize your drink exactly how you like it.",
    },
    {
      icon: (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth={1.5}
          stroke="currentColor"
          className="w-6 h-6"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z"
          />
        </svg>
      ),
      title: "Loyalty Rewards",
      desc: "Earn points with every purchase and redeem them for free drinks, pastries, and exclusive SmartBrew merchandise.",
    },
    {
      icon: (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth={1.5}
          stroke="currentColor"
          className="w-6 h-6"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z"
          />
        </svg>
      ),
      title: "Customized Favorites",
      desc: "Save your favorite drinks and easily reorder them with just one tap on your next visit.",
    },
    {
      icon: (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth={1.5}
          stroke="currentColor"
          className="w-6 h-6"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M9 12.75L11.25 15 15 9.75m-3-7.036A11.959 11.959 0 013.598 6 11.99 11.99 0 003 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285z"
          />
        </svg>
      ),
      title: "Mobile Payment",
      desc: "Securely store payment methods and check out faster than ever before.",
    },
    {
      icon: (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth={1.5}
          stroke="currentColor"
          className="w-6 h-6"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M6.429 9.75L2.25 12l4.179 2.25m0-4.5l5.571 3 5.571-3m-11.142 0L2.25 7.5 12 2.25l9.75 5.25-4.179 2.25m0 0L21.75 12l-4.179 2.25m0 0l4.179 2.25L12 21.75 2.25 16.5l4.179-2.25m11.142 0l-5.571 3-5.571-3"
          />
        </svg>
      ),
      title: "Store Locator",
      desc: "Find the nearest SmartBrew location and check current wait times before you arrive.",
    },
    {
      icon: (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth={1.5}
          stroke="currentColor"
          className="w-6 h-6"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09z"
          />
        </svg>
      ),
      title: "Order History",
      desc: "Easily reorder your favorite drinks from your purchase history with just one tap.",
    },
  ];

  return (
    <section className="py-14">
      <div className="max-w-screen-xl mx-auto px-4 text-gray-600 md:px-8">
        <div className="relative max-w-2xl mx-auto sm:text-center">
          <div className="relative z-10">
            <h3 className="text-gray-800 text-3xl font-semibold sm:text-4xl">
              Skip the line and order ahead with our new mobile app
            </h3>
            <p className="mt-3">
              Perfect for busy mornings or your afternoon coffee break.
            </p>
          </div>
          <div
            className="absolute inset-0 max-w-xs mx-auto h-44 blur-[118px]"
            style={{
              background:
                "linear-gradient(152.92deg, rgba(192, 132, 252, 0.2) 4.54%, rgba(232, 121, 249, 0.26) 34.2%, rgba(192, 132, 252, 0.1) 77.55%)",
            }}
          ></div>
        </div>
        <div className="relative mt-12">
          <ul className="grid gap-8 sm:grid-cols-2 lg:grid-cols-3">
            {features.map((item, idx) => (
              <li
                key={idx}
                className="bg-white space-y-3 p-4 border rounded-lg"
              >
                <div className="text-amber-800 pb-3">{item.icon}</div>
                <h4 className="text-lg text-gray-800 font-semibold">
                  {item.title}
                </h4>
                <p>{item.desc}</p>
              </li>
            ))}
          </ul>
        </div>
      </div>
    </section>
  );
};

export default Features;

Like the Hero section, we import this section to our App.jsx and use it.

CTA (Call to action) section

Every good landing page needs to have a CTA section which beckons the user. We will follow our previous steps and choose a template from the CTA Sections part of the Float UI website. I chose CTA with Blue background and made some small changes to it.

The original:original cta section from float ui

Our version:updated cta section with float ui

The code can be found here:

import React from "react";

const CTA = () => {
  return (
    <div>
      {" "}
      <section className="py-28 relative bg-amber-600">
        <div className="relative z-10 max-w-screen-xl mx-auto px-4 md:text-center md:px-8">
          <div className="max-w-xl md:mx-auto">
            <p className="text-white text-3xl font-semibold sm:text-4xl">
              Brewing a Better Coffee Experience{" "}
            </p>
            <p className="text-amber-100 mt-3">
              We've combined our passion for quality coffee with modern
              technology to create a seamless experience for our valued
              customers.
            </p>
          </div>
          <div className="mt-4">
            <a
              href="javascript:void(0)"
              className="inline-block py-2 px-4 text-gray-800 font-medium bg-white duration-150 hover:bg-gray-100 active:bg-gray-200 rounded-full"
            >
              Get started
            </a>
          </div>
        </div>
        <div
          className="absolute top-0 w-full h-full"
          style={{
            background:
              "linear-gradient(268.24deg, rgba(59, 130, 246, 0.76) 50%, rgba(59, 130, 246, 0.545528) 80.61%, rgba(55, 48, 163, 0) 117.35%)",
          }}
        ></div>
      </section>
    </div>
  );
};

export default CTA;

You see, we only change the color and the text. Everything is ready-made.

Now that we’ve understood how we’re working, I will keep it short from now on.

Testimonials section

Here’s the code for the Testimonials section:

import React from "react";

const Testimonials = () => {
  return (
    <div>
      <section className="py-14">
        <div className="max-w-screen-xl mx-auto px-4 md:px-8">
          <div className="max-w-3xl mx-auto">
            <figure>
              <blockquote>
                <p className="text-gray-800 text-xl text-center font-semibold sm:text-2xl">
                  "SmartBrew has completely changed my morning routine. I order
                  on my way to work and my perfectly crafted latte is waiting
                  when I arrive. No more standing in line!"
                </p>
              </blockquote>
              <div className="flex justify-center items-center gap-x-4 mt-6">
                <img
                  src="https://api.uifaces.co/our-content/donated/xZ4wg2Xj.jpg"
                  className="w-16 h-16 rounded-full"
                />
                <div>
                  <span className="block text-gray-800 font-semibold">
                    Martin escobar
                  </span>
                  <span className="block text-gray-600 text-sm mt-0.5">
                    Daily Customer{" "}
                  </span>
                </div>
              </div>
            </figure>
          </div>
        </div>
      </section>
    </div>
  );
};

export default Testimonials;

FAQ section

Here’s the code for FAQ section:

import React from "react";

const FAQ = () => {
  const faqsList = [
    {
      q: "How do I download the SmartBrew app?",
      a: "The SmartBrew app is available for free download on both the Apple App Store and Google Play Store. Simply search 'SmartBrew' and look for our logo.",
    },
    {
      q: "Can I customize my drink orders?",
      a: "Absolutely! Our app offers all the same customization options available in-store. Adjust milk type, espresso shots, flavors, and more with easy tap controls.",
    },
    {
      q: "How does the loyalty program work?",
      a: "You earn 1 point for every dollar spent through the app. Once you reach 50 points, you'll receive a free drink of your choice. Additional rewards unlock at higher point levels.",
    },
    {
      q: "Is mobile ordering available at all SmartBrew locations?",
      a: "Yes, mobile ordering is available at all SmartBrew locations. The app will show you nearby cafes and their current wait times.",
    },
    {
      q: "How far in advance can I place an order?",
      a: "You can place orders up to 24 hours in advance. Perfect for scheduling your morning coffee pickup or organizing a coffee run for your office.",
    },
    {
      q: "What payment methods are accepted in the app?",
      a: "We accept all major credit and debit cards, SmartBrew gift cards, Apple Pay, and Google Pay for secure, contactless payment.",
    },
  ];

  return (
    <section className="leading-relaxed max-w-screen-xl mt-12 mx-auto px-4 md:px-8">
      <div className="space-y-3 text-center">
        <h1 className="text-3xl text-gray-800 font-semibold">
          Frequently Asked Questions
        </h1>
        <p className="text-gray-600 max-w-lg mx-auto text-lg">
          Everything you need to know about our new mobile ordering app.
        </p>
      </div>
      <div className="mt-14 gap-4 sm:grid sm:grid-cols-2 lg:grid-cols-3">
        {faqsList.map((item, idx) => (
          <div className="space-y-3 mt-5" key={idx}>
            <h4 className="text-xl text-gray-700 font-medium">{item.q}</h4>
            <p className="text-gray-500">{item.a}</p>
          </div>
        ))}
      </div>
    </section>
  );
};

export default FAQ;

Contact section

Click the dropdown to see the code for the Contact section:
import React from "react";

const Contact = () => {
  const contactMethods = [
    {
      icon: (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth={1.5}
          stroke="currentColor"
          className="w-6 h-6"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M12 21a9.004 9.004 0 008.716-6.747M12 21a9.004 9.004 0 01-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 017.843 4.582M12 3a8.997 8.997 0 00-7.843 4.582m15.686 0A11.953 11.953 0 0112 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0121 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0112 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 013 12c0-1.605.42-3.113 1.157-4.418"
          />
        </svg>
      ),
      title: "Join our community",
      desc: "Stay updated on seasonal specials and coffee events near you.",
      link: {
        name: "Join our Discord",
        href: "javascript:void(0)",
      },
    },
    {
      icon: (
        <svg
          className="w-6 h-6"
          viewBox="0 0 48 48"
          fill="none"
          xmlns="http://www.w3.org/2000/svg"
        >
          <g clip-path="url(#clip0_17_80)">
            <path
              d="M15.1003 43.5C33.2091 43.5 43.1166 28.4935 43.1166 15.4838C43.1166 15.0619 43.1072 14.6307 43.0884 14.2088C45.0158 12.815 46.679 11.0886 48 9.11066C46.205 9.90926 44.2993 10.4308 42.3478 10.6575C44.4026 9.42588 45.9411 7.491 46.6781 5.21159C44.7451 6.35718 42.6312 7.16528 40.4269 7.60128C38.9417 6.02318 36.978 4.97829 34.8394 4.62816C32.7008 4.27803 30.5064 4.64216 28.5955 5.66425C26.6846 6.68635 25.1636 8.30947 24.2677 10.2827C23.3718 12.2559 23.1509 14.4693 23.6391 16.5807C19.725 16.3842 15.8959 15.3675 12.4 13.5963C8.90405 11.825 5.81939 9.33893 3.34594 6.29909C2.0888 8.46655 1.70411 11.0314 2.27006 13.4722C2.83601 15.9131 4.31013 18.047 6.39281 19.44C4.82926 19.3904 3.29995 18.9694 1.93125 18.2119V18.3338C1.92985 20.6084 2.7162 22.8132 4.15662 24.5736C5.59704 26.334 7.60265 27.5412 9.8325 27.99C8.38411 28.3863 6.86396 28.4441 5.38969 28.1588C6.01891 30.1149 7.24315 31.8258 8.89154 33.0527C10.5399 34.2796 12.5302 34.9613 14.5847 35.0025C11.0968 37.7423 6.78835 39.2283 2.35313 39.2213C1.56657 39.2201 0.780798 39.1719 0 39.0769C4.50571 41.9676 9.74706 43.5028 15.1003 43.5Z"
              fill="currentColor"
            />
          </g>
          <defs>
            <clipPath id="clip0_17_80">
              <rect width="48" height="48" fill="white" />
            </clipPath>
          </defs>
        </svg>
      ),

      title: "Follow us on Twitter",
      desc: "Share your SmartBrew experience and connect with other coffee lovers.",
      link: {
        name: "Send us DMs",
        href: "javascript:void(0)",
      },
    },
  ];
  return (
    <section className="py-14">
      <div className="max-w-screen-xl mx-auto px-4 text-gray-600 gap-12 md:px-8 lg:flex">
        <div className="max-w-md">
          <h3 className="text-gray-800 text-3xl font-semibold sm:text-4xl">
            Let's connect
          </h3>
          <p className="mt-3">
            We love hearing from our customers! Reach out with questions,
            feedback, or just to say hello.
          </p>
        </div>
        <div>
          <ul className="mt-12 gap-y-6 gap-x-12 items-center md:flex lg:gap-x-0 lg:mt-0">
            {contactMethods.map((item, idx) => (
              <li
                key={idx}
                className="space-y-3 border-t py-6 md:max-w-sm md:py-0 md:border-t-0 lg:border-l lg:px-12 lg:max-w-none"
              >
                <div className="w-12 h-12 rounded-full border flex items-center justify-center text-gray-700">
                  {item.icon}
                </div>
                <h4 className="text-gray-800 text-lg font-medium xl:text-xl">
                  {item.title}
                </h4>
                <p>{item.desc}</p>
                <a
                  href={item.link.href}
                  className="flex items-center gap-1 text-sm text-amber-800 duration-150 hover:text-indigo-400 font-medium"
                >
                  {item.link.name}
                  <svg
                    xmlns="http://www.w3.org/2000/svg"
                    viewBox="0 0 20 20"
                    fill="currentColor"
                    className="w-5 h-5"
                  >
                    <path
                      fillRule="evenodd"
                      d="M5 10a.75.75 0 01.75-.75h6.638L10.23 7.29a.75.75 0 111.04-1.08l3.5 3.25a.75.75 0 010 1.08l-3.5 3.25a.75.75 0 11-1.04-1.08l2.158-1.96H5.75A.75.75 0 015 10z"
                      clipRule="evenodd"
                    />
                  </svg>
                </a>
              </li>
            ))}
          </ul>
        </div>
      </div>
    </section>
  );
};

export default Contact;
  const features = [
    {
      icon: (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth={1.5}
          stroke="currentColor"
          className="w-6 h-6"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M3.75 13.5l10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75z"
          />
        </svg>
      ),
      title: "Fast Ordering",
      desc: "Place your order in seconds with our intuitive app interface. Customize your drink exactly how you like it.",
    },
    {
      icon: (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth={1.5}
          stroke="currentColor"
          className="w-6 h-6"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z"
          />
        </svg>
      ),
      title: "Loyalty Rewards",
      desc: "Earn points with every purchase and redeem them for free drinks, pastries, and exclusive SmartBrew merchandise.",
    },
    {
      icon: (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth={1.5}
          stroke="currentColor"
          className="w-6 h-6"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z"
          />
        </svg>
      ),
      title: "Customized Favorites",
      desc: "Save your favorite drinks and easily reorder them with just one tap on your next visit.",
    },
    {
      icon: (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth={1.5}
          stroke="currentColor"
          className="w-6 h-6"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M9 12.75L11.25 15 15 9.75m-3-7.036A11.959 11.959 0 013.598 6 11.99 11.99 0 003 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285z"
          />
        </svg>
      ),
      title: "Mobile Payment",
      desc: "Securely store payment methods and check out faster than ever before.",
    },
    {
      icon: (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth={1.5}
          stroke="currentColor"
          className="w-6 h-6"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M6.429 9.75L2.25 12l4.179 2.25m0-4.5l5.571 3 5.571-3m-11.142 0L2.25 7.5 12 2.25l9.75 5.25-4.179 2.25m0 0L21.75 12l-4.179 2.25m0 0l4.179 2.25L12 21.75 2.25 16.5l4.179-2.25m11.142 0l-5.571 3-5.571-3"
          />
        </svg>
      ),
      title: "Store Locator",
      desc: "Find the nearest SmartBrew location and check current wait times before you arrive.",
    },
    {
      icon: (
        <svg
          xmlns="http://www.w3.org/2000/svg"
          fill="none"
          viewBox="0 0 24 24"
          strokeWidth={1.5}
          stroke="currentColor"
          className="w-6 h-6"
        >
          <path
            strokeLinecap="round"
            strokeLinejoin="round"
            d="M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09z"
          />
        </svg>
      ),
      title: "Order History",
      desc: "Easily reorder your favorite drinks from your purchase history with just one tap.",
    },
  ];

  return (
    <section className="py-14">
      <div className="max-w-screen-xl mx-auto px-4 text-gray-600 md:px-8">
        <div className="relative max-w-2xl mx-auto sm:text-center">
          <div className="relative z-10">
            <h3 className="text-gray-800 text-3xl font-semibold sm:text-4xl">
              Skip the line and order ahead with our new mobile app
            </h3>
            <p className="mt-3">
              Perfect for busy mornings or your afternoon coffee break.
            </p>
          </div>
          <div
            className="absolute inset-0 max-w-xs mx-auto h-44 blur-[118px]"
            style={{
              background:
                "linear-gradient(152.92deg, rgba(192, 132, 252, 0.2) 4.54%, rgba(232, 121, 249, 0.26) 34.2%, rgba(192, 132, 252, 0.1) 77.55%)",
            }}
          ></div>
        </div>
        <div className="relative mt-12">
          <ul className="grid gap-8 sm:grid-cols-2 lg:grid-cols-3">
            {features.map((item, idx) => (
              <li
                key={idx}
                className="bg-white space-y-3 p-4 border rounded-lg"
              >
                <div className="text-amber-800 pb-3">{item.icon}</div>
                <h4 className="text-lg text-gray-800 font-semibold">
                  {item.title}
                </h4>
                <p>{item.desc}</p>
              </li>
            ))}
          </ul>
        </div>
      </div>
    </section>
  );
};

export default Features;

Footer section

Click the dropdown to see the code for the Footer section:
import React from "react";

const Footer = () => {
  const footerNavs = [
    {
      label: "Resources",
      items: [
        {
          href: "javascript:void()",
          name: "contact",
        },
        {
          href: "javascript:void()",
          name: "Support",
        },
        {
          href: "javascript:void()",
          name: "Documentation",
        },
        {
          href: "javascript:void()",
          name: "Pricing",
        },
      ],
    },
    {
      label: "About",
      items: [
        {
          href: "javascript:void()",
          name: "Terms",
        },
        {
          href: "javascript:void()",
          name: "License",
        },
        {
          href: "javascript:void()",
          name: "Privacy",
        },
        {
          href: "javascript:void()",
          name: "About US",
        },
      ],
    },
    {
      label: "Explore",
      items: [
        {
          href: "javascript:void()",
          name: "Showcase",
        },
        {
          href: "javascript:void()",
          name: "Roadmap",
        },
        {
          href: "javascript:void()",
          name: "Languages",
        },
        {
          href: "javascript:void()",
          name: "Blog",
        },
      ],
    },
    {
      label: "Company",
      items: [
        {
          href: "javascript:void()",
          name: "Partners",
        },
        {
          href: "javascript:void()",
          name: "Team",
        },
        {
          href: "javascript:void()",
          name: "Careers",
        },
      ],
    },
  ];
  return (
    <footer className="pt-10">
      <div className="max-w-screen-xl mx-auto px-4 md:px-8">
        <div className="justify-between items-center gap-12 md:flex">
          <div className="flex-1 max-w-lg">
            <h3 className="text-2xl font-bold">
              Get our beautiful newsletter straight to your inbox.
            </h3>
          </div>
          <div className="flex-1 mt-6 md:mt-0">
            <form
              onSubmit={(e) => e.preventDefault()}
              className="flex items-center gap-x-3 md:justify-end"
            >
              <div className="relative">
                <svg
                  className="w-6 h-6 text-gray-400 absolute left-3 inset-y-0 my-auto"
                  xmlns="http://www.w3.org/2000/svg"
                  fill="none"
                  viewBox="0 0 24 24"
                  strokeWidth={1.5}
                  stroke="currentColor"
                >
                  <path
                    strokeLinecap="round"
                    strokeLinejoin="round"
                    d="M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75"
                  />
                </svg>
                <input
                  type="email"
                  required
                  placeholder="Enter your email"
                  className="w-full pl-12 pr-3 py-2 text-gray-500 bg-white outline-none border focus:border-amber-600 shadow-sm rounded-lg"
                />
              </div>
              <button className="block w-auto py-3 px-4 font-medium text-sm text-center text-white bg-amber-600 hover:bg-amber-500 active:bg-amber-700 active:shadow-none rounded-lg shadow">
                Subscribe
              </button>
            </form>
          </div>
        </div>
        <div className="flex-1 mt-16 space-y-6 justify-between sm:flex md:space-y-0">
          {footerNavs.map((item, idx) => (
            <ul className="space-y-4 text-gray-600" key={idx}>
              <h4 className="text-gray-800 font-semibold sm:pb-2">
                {item.label}
              </h4>
              {item.items.map((el, idx) => (
                <li key={idx}>
                  <a
                    href={el.href}
                    className="hover:text-gray-800 duration-150"
                  >
                    {el.name}
                  </a>
                </li>
              ))}
            </ul>
          ))}
        </div>
        <div className="mt-10 py-10 border-t items-center justify-between sm:flex">
          <p className="text-gray-600">
            © 2025 SmartBrew. All rights reserved.
          </p>
          <div className="flex items-center gap-x-6 text-gray-400 mt-6">
            <a href="javascript:void()">
              <svg
                className="w-6 h-6 hover:text-gray-500 duration-150"
                fill="none"
                viewBox="0 0 48 48"
              >
                <g clip-path="url(#a)">
                  <path
                    fill="currentColor"
                    d="M48 24C48 10.745 37.255 0 24 0S0 10.745 0 24c0 11.979 8.776 21.908 20.25 23.708v-16.77h-6.094V24h6.094v-5.288c0-6.014 3.583-9.337 9.065-9.337 2.625 0 5.372.469 5.372.469v5.906h-3.026c-2.981 0-3.911 1.85-3.911 3.75V24h6.656l-1.064 6.938H27.75v16.77C39.224 45.908 48 35.978 48 24z"
                  />
                </g>
                <defs>
                  <clipPath id="a">
                    <path fill="#fff" d="M0 0h48v48H0z" />
                  </clipPath>
                </defs>
              </svg>
            </a>
            <a href="javascript:void()">
              <svg
                className="w-6 h-6 hover:text-gray-500 duration-150"
                fill="none"
                viewBox="0 0 48 48"
              >
                <g clip-path="url(#clip0_17_80)">
                  <path
                    fill="currentColor"
                    d="M15.1 43.5c18.11 0 28.017-15.006 28.017-28.016 0-.422-.01-.853-.029-1.275A19.998 19.998 0 0048 9.11c-1.795.798-3.7 1.32-5.652 1.546a9.9 9.9 0 004.33-5.445 19.794 19.794 0 01-6.251 2.39 9.86 9.86 0 00-16.788 8.979A27.97 27.97 0 013.346 6.299 9.859 9.859 0 006.393 19.44a9.86 9.86 0 01-4.462-1.228v.122a9.844 9.844 0 007.901 9.656 9.788 9.788 0 01-4.442.169 9.867 9.867 0 009.195 6.843A19.75 19.75 0 010 39.078 27.937 27.937 0 0015.1 43.5z"
                  />
                </g>
                <defs>
                  <clipPath id="clip0_17_80">
                    <path fill="#fff" d="M0 0h48v48H0z" />
                  </clipPath>
                </defs>
              </svg>
            </a>
            <a href="javascript:void()">
              <svg
                className="w-6 h-6 hover:text-gray-500 duration-150"
                fill="none"
                viewBox="0 0 48 48"
              >
                <g fill="currentColor" clip-path="url(#clip0_910_44)">
                  <path
                    fill-rule="evenodd"
                    d="M24 1A24.086 24.086 0 008.454 6.693 23.834 23.834 0 00.319 21.044a23.754 23.754 0 003.153 16.172 23.98 23.98 0 0012.938 10.29c1.192.221 1.641-.518 1.641-1.146 0-.628-.024-2.45-.032-4.442-6.676 1.443-8.087-2.817-8.087-2.817-1.089-2.766-2.663-3.493-2.663-3.493-2.178-1.478.163-1.45.163-1.45 2.413.17 3.68 2.461 3.68 2.461 2.138 3.648 5.616 2.593 6.983 1.976.215-1.545.838-2.596 1.526-3.193-5.333-.6-10.937-2.647-10.937-11.791a9.213 9.213 0 012.472-6.406c-.246-.6-1.069-3.026.234-6.322 0 0 2.015-.64 6.602 2.446a22.904 22.904 0 0112.017 0c4.583-3.086 6.594-2.446 6.594-2.446 1.307 3.288.484 5.714.238 6.322a9.194 9.194 0 012.476 6.414c0 9.163-5.615 11.183-10.957 11.772.859.742 1.626 2.193 1.626 4.421 0 3.193-.028 5.762-.028 6.548 0 .636.433 1.38 1.65 1.146a23.98 23.98 0 0012.938-10.291 23.754 23.754 0 003.151-16.175A23.834 23.834 0 0039.56 6.69 24.086 24.086 0 0024.009 1H24z"
                    clip-rule="evenodd"
                  />
                  <path d="M9.089 35.264c-.052.119-.243.154-.398.071-.155-.083-.27-.237-.214-.36.056-.122.242-.154.397-.07.155.082.274.24.215.359zM10.063 36.343a.4.4 0 01-.493-.11c-.155-.167-.187-.396-.068-.499.12-.102.334-.055.489.11.155.167.19.396.072.499zM11.008 37.714c-.147.103-.397 0-.536-.206a.395.395 0 010-.569c.147-.098.397 0 .537.202.139.202.143.47 0 .573zM12.292 39.042c-.131.146-.397.106-.616-.091-.219-.198-.27-.467-.139-.609.131-.142.397-.102.624.091.226.194.27.466.131.609zM14.092 39.816c-.06.186-.33.269-.6.19-.27-.08-.449-.3-.397-.49.051-.19.326-.277.6-.19.274.087.449.297.397.49zM16.056 39.95c0 .194-.223.36-.509.364-.286.004-.52-.154-.52-.348 0-.193.222-.36.508-.363.286-.004.52.15.52.347zM17.884 39.646c.036.194-.163.395-.45.443-.285.047-.536-.067-.572-.257-.035-.19.171-.395.45-.447.278-.05.536.068.572.261z" />
                </g>
                <defs>
                  <clipPath id="clip0_910_44">
                    <path fill="#fff" d="M0 0h48v48H0z" />
                  </clipPath>
                </defs>
              </svg>
            </a>
            <a href="javascript:void()">
              <svg
                className="w-6 h-6 hover:text-gray-500 duration-150"
                fill="currentColor"
                viewBox="0 0 48 48"
              >
                <g clip-path="url(#clip0_17_63)">
                  <path d="M24 4.322c6.413 0 7.172.028 9.694.14 2.343.104 3.61.497 4.453.825 1.116.432 1.922.957 2.756 1.791.844.844 1.36 1.64 1.79 2.756.329.844.723 2.12.826 4.454.112 2.53.14 3.29.14 9.693 0 6.413-.028 7.172-.14 9.694-.103 2.344-.497 3.61-.825 4.453-.431 1.116-.957 1.922-1.79 2.756-.845.844-1.642 1.36-2.757 1.791-.844.328-2.119.722-4.453.825-2.532.112-3.29.14-9.694.14-6.413 0-7.172-.028-9.694-.14-2.343-.103-3.61-.497-4.453-.825-1.115-.431-1.922-.956-2.756-1.79-.844-.844-1.36-1.641-1.79-2.757-.329-.844-.723-2.119-.826-4.453-.112-2.531-.14-3.29-.14-9.694 0-6.412.028-7.172.14-9.694.103-2.343.497-3.609.825-4.453.431-1.115.957-1.921 1.79-2.756.845-.844 1.642-1.36 2.757-1.79.844-.329 2.119-.722 4.453-.825 2.522-.113 3.281-.141 9.694-.141zM24 0c-6.516 0-7.331.028-9.89.14-2.55.113-4.304.526-5.822 1.116-1.585.619-2.926 1.435-4.257 2.775-1.34 1.332-2.156 2.672-2.775 4.247C.666 9.806.253 11.55.141 14.1.028 16.669 0 17.484 0 24s.028 7.331.14 9.89c.113 2.55.526 4.304 1.116 5.822.619 1.585 1.435 2.925 2.775 4.257a11.732 11.732 0 004.247 2.765c1.528.591 3.272 1.003 5.822 1.116 2.56.112 3.375.14 9.89.14 6.516 0 7.332-.028 9.891-.14 2.55-.113 4.303-.525 5.822-1.116a11.732 11.732 0 004.247-2.765 11.732 11.732 0 002.766-4.247c.59-1.528 1.003-3.272 1.115-5.822.113-2.56.14-3.375.14-9.89 0-6.516-.027-7.332-.14-9.891-.112-2.55-.525-4.303-1.115-5.822-.591-1.594-1.407-2.935-2.747-4.266a11.732 11.732 0 00-4.247-2.765C38.194.675 36.45.262 33.9.15 31.331.028 30.516 0 24 0z" />
                  <path d="M24 11.672c-6.806 0-12.328 5.522-12.328 12.328 0 6.806 5.522 12.328 12.328 12.328 6.806 0 12.328-5.522 12.328-12.328 0-6.806-5.522-12.328-12.328-12.328zm0 20.325a7.998 7.998 0 010-15.994 7.998 7.998 0 010 15.994zM39.694 11.184a2.879 2.879 0 11-2.878-2.878 2.885 2.885 0 012.878 2.878z" />
                </g>
                <defs>
                  <clipPath id="clip0_17_63">
                    <path d="M0 0h48v48H0z" />
                  </clipPath>
                </defs>
              </svg>
            </a>
          </div>
        </div>
      </div>
    </footer>
  );
};

export default Footer;

Pros and cons of Float UI

Let’s look at the pros and cons of using Float UI in your workflow.

Pros

    • Enables devs to build UIs quickly
    • Open source
    • Free
    • Easy to grasp if you know Tailwind CSS
    • Fully customizable
    • Works with React/Next.js, Vue.js, Svelte.js
    • Actively maintained

Cons

    • Requires knowledge of Tailwind
    • Doesn’t work with more niche frameworks

Conclusion

In today’s fast-paced development landscape, meeting tight deadlines while delivering professional, responsive websites is no longer a daunting task, thanks to tools like Float UI.

By leveraging pre-built, customizable components powered by Tailwind CSS, developers can rapidly assemble polished interfaces without compromising quality or maintainability. As demonstrated in building SmartBrew’s business page, Float UI streamlines the process: from Hero sections to FAQs, each component integrates seamlessly into a React project, saving hours of manual coding.

The result? A fully functional, mobile-friendly website tailored to client specifications — completed in a fraction of the time it would take to build from scratch. While Float UI does require familiarity with Tailwind CSS, its open-source nature and flexibility make it an invaluable asset for developers tackling urgent projects or agencies aiming to scale efficiently.

By combining Float UI’s template library with strategic customization, developers can focus on unique branding and user experience rather than reinventing the wheel.

The final deployed app (viewable here) stands as a testament to how modern tools empower teams to deliver exceptional results under pressure.

Whether you’re a freelancer, part of an agency, or an in-house developer, Float UI proves that speed and quality can coexist—no caffeine-fueled coding marathons required.


The post Building responsive websites fast: A Float UI tutorial appeared first on LogRocket Blog.

 

This post first appeared on Read More