Build a Business Landing Page with React, Tailwind CSS and Framer Motion

A landing page is often the first thing visitors see when they discover your business.

A good landing page should:

  • Look professional
  • Work perfectly on mobile devices
  • Load quickly
  • Clearly explain your services
  • Build trust
  • Encourage users to take action

In this tutorial, we’ll build a modern landing page using:

  • React
  • Tailwind CSS
  • Framer Motion
  • Responsive Design
  • SEO-friendly HTML

The page will include:

✅ Hero Section

✅ Features / Services Section

✅ About Section

✅ Testimonials Section

✅ Call To Action Section

✅ Smooth Scrolling

✅ Framer Motion Animations

✅ Mobile Responsive Design

Project Structure

src/
├── components/
│ ├── Hero.jsx
│ ├── Features.jsx
│ ├── About.jsx
│ ├── Testimonials.jsx
│ └── CTA.jsx
├── App.jsx
└── index.css

Step 1: Create React Project

npx create-react-app landing-page
cd landing-page

Install dependencies:

npm install framer-motion
npm install -D tailwindcss

package.json
{
"name": "landing-page",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/dom": "^10.4.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.1",
"@testing-library/user-event": "^13.5.0",
"framer-motion": "^12.40.0",
"react": "^19.2.3",
"react-dom": "^19.2.3",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"tailwindcss": "^3.4.19",
"autoprefixer": "^10.5.0"
}
}

Step 2: Configure Tailwind

tailwind.config.js

module.exports = {
content: [
"./src/**/*.{js,jsx}"
],
theme: {
extend: {},
},
plugins: [],
}

postcss.config.js

module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};

src/index.css

@tailwind base;
@tailwind components;
@tailwind utilities;
html {
scroll-behavior: smooth;
}

Step 3: Hero Section

components/Hero.jsx

import { motion } from 'framer-motion';
export default function Hero() {
return (
<section id="hero" className='min-h-screen flex items-center justify-center bg-slate-900 text-white'>
<div className='text-center px-6'>
<motion.h1
initial={{ opacity: 0, y: -40 }}
animate={{ opacity: 1, y: 0}}
transition={{ duration: 0.8 }}
className="text-5xl font-bold">
Grow Your Business Faster
</motion.h1>
<motion.p
initial={{ opacity: 0 }}
animate={{ opacity: 1}}
transition={{ delay: 0.3 }}
className='mt-6 text-xl'>
Modern digital solutions for growing companies.
</motion.p>
<a href='#cta' className='inline-block mt-8 bg-blue-600 px-8 py-3 rounded-lg'>
Get Started
</a>
</div>
</section>
)
}

Step 4: Features Section

components/Features.jsx

import { motion } from 'framer-motion';
const features = [
"Web Development",
"Mobile Apps",
"SEO Optimization",
"Cloud Solutions"
];
export default function Features () {
return (
<section id="features" className='py-20 bg-gray-100'>
<div className='max-w-6xl mx-auto px-6'>
<h2 className='text-4xl font-bold text-center'>
Services
</h2>
<div className='grid md:grid-cols-2 gap-8 mt-12'>
{
features.map((item) => (
<motion.div
whileHover={{ scale: 1.05 }}
key={item}
className='bg-white p-6 rounded-xl shadow'>
<h3 className='text-xl font-semibold'>{item}</h3>
</motion.div>
))
}
</div>
</div>
</section>
)
}

Step 5: About Section

components/About.jsx

export default function About() {
return (
<section id='about' className="py-20">
<div className="max-w-4xl mx-auto px-6 text-center">
<h2 className="text-4xl font-bold">
About Us
</h2>
<p className="mt-6 text-lg">
We help business build modern
digital products that increase
growth and customer engagement.
</p>
</div>
</section>
)
}

Step 6: Testimonials Section

components/Testimonials.jsx

export default function Testimonials() {
const testimonials = [
{
name: "John",
text: "Amazing service and support."
},
{
name: "Sarah",
text: "Helped our company grow rapidly."
}
];
return (
<section id='testimonials' className="bg-gray-100 py-20">
<div className="max-w-6xl mx-auto px-6">
<h2 className="text-4xl font-bold text-center">
Testimonials
</h2>
<div className="grid md:grid-cols-2 gap-8 mt-12">
{testimonials.map((item) => (
<div
key={item.name}
className="bg-white p-6 rounded-xl shadow">
<p>{item.text}</p>
<h4 className="mt-4 font-bold">{item.name}</h4>
</div>
))}
</div>
</div>
</section>
)
}

Step 7: CTA Section

components/CTA.jsx

export default function CTA() {
return (
<section id="cta" className="py-20 bg-blue-600 text-white">
<div className="text-center px-6">
<h2 className="text-4xl font-bold">Ready To Grow?</h2>
<p className="mt-4">Let's discuss your next project.</p>
<button className="mt-8 bg-white text-blue-600 px-8 py-3 rounded-lg">
Contact Us
</button>
</div>
</section>
);
}

Step 8: Main App Component

App.jsx

import Hero from './components/Hero';
import Features from './components/Features';
import About from './components/About';
import Testimonials from './components/Testimonials';
import CTA from './components/CTA';
function App() {
return (
<>
<Hero />
<Features />
<About />
<Testimonials />
<CTA />
</>
);
}
export default App;

Step 9: SEO Optimization

public/index.html

<title>
Modern Business Landing Page
</title>
<meta
name="description"
content="Professional business landing page built using React and Tailwind CSS."
/>
<meta
name="keywords"
content="React, Tailwind CSS, Landing Page"
/>

Use semantic tags:

<header>
<section>
<main>
<footer>

instead of unnecessary divs.

Step 10: Deploy to Vercel

Install:

npm install -g vercel

Build project:

npm run build

Deploy:

vercel

Follow prompts.

You will receive:

https://your-project.vercel.app

Performance Tips

Lazy Load Components

const Hero = React.lazy(() =>
import("./Hero")
);

Optimize Images

Use:

WebP
AVIF

formats whenever possible.

Reduce Bundle Size

Remove unused libraries.

Use Tailwind Utility Classes

Avoid large custom CSS files.

What Makes a Landing Page Convert Better?

A high-converting landing page should:

✅ Clear headline

✅ Strong value proposition

✅ Social proof

✅ Testimonials

✅ Mobile-friendly layout

✅ Fast loading speed

✅ Clear call-to-action

Final Result

After completing this tutorial, you’ll have:

  • Fully Responsive Landing Page
  • Mobile-First Design
  • Smooth Scrolling
  • Framer Motion Animations
  • SEO-Friendly Structure
  • Production Deployment on Vercel
  • Clean React Component Architecture

This foundation can be used for:

  • Agency Websites
  • Startup Landing Pages
  • SaaS Products
  • Consulting Businesses
  • Portfolio Websites
  • Marketing Campaigns


💡 Found this tutorial helpful? Please Subscribe, If this content is helpful to You. Happy Coding! 🚀