Feature Blocks for Shadcn UI

155 Feature blocks built with Shadcn UI, Tailwind & React.

feature43

Free
import {
BatteryCharging,
GitPullRequest,
Layers,
RadioTower,
SquareKanban,
WandSparkles,
} from "lucide-react";
interface Reason {
title: string;
description: string;
icon: JSX.Element;
}
interface Feature43Props {
heading?: string;
reasons?: Reason[];
}
const Feature43 = ({
heading = "Why Work With Us?",
reasons = [
{
title: "Quality",
description:
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Saepe est aliquid exercitationem, quos explicabo repellat?",
icon: <GitPullRequest className="size-6" />,
},
{
title: "Experience",
description:
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Saepe est aliquid exercitationem, quos explicabo repellat?",
icon: <SquareKanban className="size-6" />,
},
{
title: "Support",
description:
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Saepe est aliquid exercitationem, quos explicabo repellat?",
icon: <RadioTower className="size-6" />,
},
{
title: "Innovation",
description:
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Saepe est aliquid exercitationem, quos explicabo repellat?",
icon: <WandSparkles className="size-6" />,
},
{
title: "Results",
description:
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Saepe est aliquid exercitationem, quos explicabo repellat?",
icon: <Layers className="size-6" />,
},
{
title: "Efficiency",
description:
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Saepe est aliquid exercitationem, quos explicabo repellat?",
icon: <BatteryCharging className="size-6" />,
},
],
}: Feature43Props) => {
return (
<section className="py-32">
<div className="container">
<div className="mb-10 md:mb-20">
<h2 className="mb-2 text-center text-3xl font-semibold lg:text-5xl">
{heading}
</h2>
</div>
<div className="grid gap-10 md:grid-cols-2 lg:grid-cols-3">
{reasons.map((reason, i) => (
<div key={i} className="flex flex-col">
<div className="mb-5 flex size-16 items-center justify-center rounded-full bg-accent">
{reason.icon}
</div>
<h3 className="mb-2 text-xl font-semibold">{reason.title}</h3>
<p className="text-muted-foreground">{reason.description}</p>
</div>
))}
</div>
</div>
</section>
);
};
export { Feature43 };

feature17

Free
import {
DollarSign,
MessagesSquare,
PersonStanding,
Timer,
Zap,
ZoomIn,
} from "lucide-react";
interface Feature {
title: string;
description: string;
icon: JSX.Element;
}
interface Feature17Props {
heading?: string;
subheading?: string;
features?: Feature[];
}
const Feature17 = ({
heading = "Our Core Features",
subheading = "Features",
features = [
{
title: "Performance",
description:
"Lorem ipsum, dolor sit amet consectetur adipisicing elit. Nesciunt, accusantium quam. Temporibus quae quos deserunt!",
icon: <Timer className="size-4 md:size-6" />,
},
{
title: "Innovation",
description:
"Lorem ipsum, dolor sit amet consectetur adipisicing elit. Nesciunt, accusantium quam. Temporibus quae quos deserunt!",
icon: <Zap className="size-4 md:size-6" />,
},
{
title: "Quality",
description:
"Lorem ipsum, dolor sit amet consectetur adipisicing elit. Nesciunt, accusantium quam. Temporibus quae quos deserunt!",
icon: <ZoomIn className="size-4 md:size-6" />,
},
{
title: "Accessibility",
description:
"Lorem ipsum, dolor sit amet consectetur adipisicing elit. Nesciunt, accusantium quam. Temporibus quae quos deserunt!",
icon: <PersonStanding className="size-4 md:size-6" />,
},
{
title: "Affordability",
description:
"Lorem ipsum, dolor sit amet consectetur adipisicing elit. Nesciunt, accusantium quam. Temporibus quae quos deserunt!",
icon: <DollarSign className="size-4 md:size-6" />,
},
{
title: "Customer Support",
description:
"Lorem ipsum, dolor sit amet consectetur adipisicing elit. Nesciunt, accusantium quam. Temporibus quae quos deserunt!",
icon: <MessagesSquare className="size-4 md:size-6" />,
},
],
}: Feature17Props) => {
return (
<section className="py-32">
<div className="container mx-auto max-w-screen-xl">
<p className="mb-4 text-xs text-muted-foreground md:pl-5">
{subheading}
</p>
<h2 className="text-3xl font-medium md:pl-5 lg:text-4xl">{heading}</h2>
<div className="mx-auto mt-14 grid gap-x-20 gap-y-8 md:grid-cols-2 md:gap-y-6 lg:mt-20">
{features.map((feature, idx) => (
<div className="flex gap-6 rounded-lg md:block md:p-5" key={idx}>
<span className="mb-8 flex size-10 shrink-0 items-center justify-center rounded-full bg-accent md:size-12">
{feature.icon}
</span>
<div>
<h3 className="font-medium md:mb-2 md:text-xl">
{feature.title}
</h3>
<p className="text-sm text-muted-foreground md:text-base">
{feature.description}
</p>
</div>
</div>
))}
</div>
</div>
</section>
);
};
export { Feature17 };

feature16

Basic

feature3

Basic

feature42

Basic

feature74

Basic

feature51

Basic

feature15

Basic

feature95

Pro

feature87

Pro

feature102

Pro

feature81

Pro

feature9

Pro

feature80

Pro

feature79

Pro

feature8

Pro

feature77

Pro

feature78

Pro

feature75

Pro

feature76

Pro

feature72

Free
import { ArrowRight } from "lucide-react";
interface Feature {
id: string;
title: string;
description: string;
image: string;
}
interface Feature72Props {
heading?: string;
description?: string;
linkUrl?: string;
linkText?: string;
features?: Feature[];
}
const Feature72 = ({
heading = "Powerful Features",
description = "Discover the powerful features that make our platform stand out from the rest. Built with the latest technology and designed for maximum productivity.",
linkUrl = "https://www.shadcnblocks.com",
linkText = "Book a demo",
features = [
{
id: "feature-1",
title: "Modern Design",
description:
"Clean and intuitive interface built with the latest design principles. Optimized for the best user experience.",
image: "https://www.shadcnblocks.com/images/block/placeholder-1.svg",
},
{
id: "feature-2",
title: "Responsive Layout",
description:
"Fully responsive design that works seamlessly across all devices and screen sizes. Perfect for any platform.",
image: "https://www.shadcnblocks.com/images/block/placeholder-2.svg",
},
{
id: "feature-3",
title: "Easy Integration",
description:
"Simple integration process with comprehensive documentation and dedicated support team.",
image: "https://www.shadcnblocks.com/images/block/placeholder-3.svg",
},
{
id: "feature-4",
title: "Advanced Analytics",
description:
"Powerful analytics tools to help you understand your users and make data-driven decisions.",
image: "https://www.shadcnblocks.com/images/block/placeholder-4.svg",
},
],
}: Feature72Props) => {
return (
<section className="py-32">
<div className="container flex flex-col gap-16 lg:px-16">
<div className="lg:max-w-sm">
<h2 className="mb-3 text-xl font-semibold md:mb-4 md:text-4xl lg:mb-6">
{heading}
</h2>
<p className="mb-8 text-muted-foreground lg:text-lg">{description}</p>
<a
href={linkUrl}
className="group flex items-center text-xs font-medium md:text-base lg:text-lg"
>
{linkText}
<ArrowRight className="ml-2 size-4 transition-transform group-hover:translate-x-1" />
</a>
</div>
<div className="grid gap-6 md:grid-cols-2 lg:gap-8">
{features.map((feature) => (
<div
key={feature.id}
className="flex flex-col overflow-clip rounded-xl border border-border"
>
<div>
<img
src={feature.image}
alt={feature.title}
className="aspect-[16/9] h-full w-full object-cover object-center"
/>
</div>
<div className="px-6 py-8 md:px-8 md:py-10 lg:px-10 lg:py-12">
<h3 className="mb-3 text-lg font-semibold md:mb-4 md:text-2xl lg:mb-6">
{feature.title}
</h3>
<p className="text-muted-foreground lg:text-lg">
{feature.description}
</p>
</div>
</div>
))}
</div>
</div>
</section>
);
};
export { Feature72 };

feature73

Free
import { ArrowRight } from "lucide-react";
interface Feature {
id: string;
title: string;
description: string;
image: string;
}
interface Feature73Props {
heading?: string;
description?: string;
linkUrl?: string;
linkText?: string;
features?: Feature[];
}
const Feature73 = ({
heading = "Powerful Features",
description = "Discover the powerful features that make our platform stand out from the rest. Built with the latest technology and designed for maximum productivity.",
linkUrl = "https://www.shadcnblocks.com",
linkText = "Book a demo",
features = [
{
id: "feature-1",
title: "Modern Design",
description:
"Clean and intuitive interface built with the latest design principles. Optimized for the best user experience.",
image: "https://www.shadcnblocks.com/images/block/placeholder-1.svg",
},
{
id: "feature-2",
title: "Responsive Layout",
description:
"Fully responsive design that works seamlessly across all devices and screen sizes. Perfect for any platform.",
image: "https://www.shadcnblocks.com/images/block/placeholder-2.svg",
},
{
id: "feature-3",
title: "Easy Integration",
description:
"Simple integration process with comprehensive documentation and dedicated support team.",
image: "https://www.shadcnblocks.com/images/block/placeholder-3.svg",
},
],
}: Feature73Props) => {
return (
<section className="py-32">
<div className="container flex flex-col gap-16 lg:px-16">
<div className="lg:max-w-sm">
<h2 className="mb-3 text-xl font-semibold md:mb-4 md:text-4xl lg:mb-6">
{heading}
</h2>
<p className="mb-8 text-muted-foreground lg:text-lg">{description}</p>
<a
href={linkUrl}
className="group flex items-center text-xs font-medium md:text-base lg:text-lg"
>
{linkText}
<ArrowRight className="ml-2 size-4 transition-transform group-hover:translate-x-1" />
</a>
</div>
<div className="grid gap-6 md:grid-cols-2 lg:gap-8">
{features[0] && (
<div className="flex flex-col overflow-clip rounded-xl border border-border md:col-span-2 md:grid md:grid-cols-2 md:gap-6 lg:gap-8">
<div className="md:min-h-[24rem] lg:min-h-[28rem] xl:min-h-[32rem]">
<img
src={features[0].image}
alt={features[0].title}
className="aspect-[16/9] h-full w-full object-cover object-center"
/>
</div>
<div className="flex flex-col justify-center px-6 py-8 md:px-8 md:py-10 lg:px-10 lg:py-12">
<h3 className="mb-3 text-lg font-semibold md:mb-4 md:text-2xl lg:mb-6">
{features[0].title}
</h3>
<p className="text-muted-foreground lg:text-lg">
{features[0].description}
</p>
</div>
</div>
)}
{features.slice(1).map((feature) => (
<div
key={feature.id}
className="flex flex-col overflow-clip rounded-xl border border-border"
>
<div>
<img
src={feature.image}
alt={feature.title}
className="aspect-[16/9] h-full w-full object-cover object-center"
/>
</div>
<div className="px-6 py-8 md:px-8 md:py-10 lg:px-10 lg:py-12">
<h3 className="mb-3 text-lg font-semibold md:mb-4 md:text-2xl lg:mb-6">
{feature.title}
</h3>
<p className="text-muted-foreground lg:text-lg">
{feature.description}
</p>
</div>
</div>
))}
</div>
</div>
</section>
);
};
export { Feature73 };

feature71

Pro

feature70

Pro

feature69

Pro

feature7

Pro

feature68

Pro

feature67

Pro

feature66

Pro

feature64

Pro

feature63

Pro

feature62

Pro

feature61

Pro

feature60

Pro

feature6

Pro

feature58

Pro

feature59

Pro

feature57

Pro

feature56

Pro

feature54

Pro

feature55

Pro

feature52

Pro

feature53

Pro

feature5

Pro

feature50

Pro

feature44

Pro

feature4

Pro

feature41

Pro

feature38

Pro

feature39

Pro

feature36

Pro

feature37

Pro

feature34

Pro

feature35

Pro

feature31

Pro

feature32

Pro

feature33

Pro

feature30

Pro

feature29

Pro

feature28

Pro

feature25

Pro

feature26

Pro

feature27

Pro

feature23

Pro

feature24

Pro

feature22

Pro

feature20

Pro

feature21

Pro

feature2

Pro

feature18

Pro

feature19

Pro

feature14

Pro

feature13

Free
interface Feature {
id: string;
title: string;
subtitle: string;
description: string;
image: string;
}
interface Feature13Props {
heading?: string;
features?: Feature[];
}
const Feature13 = ({
heading = "A better way to build websites",
features = [
{
id: "feature-1",
title: "Built for artists and designers",
subtitle: "FOR DESIGNERS",
description:
"Lorem ipsum dolor sit, amet consectetur adipisicing elit. Minima doloribus illum, labore quis facilis molestias!",
image: "https://shadcnblocks.com/images/block/placeholder-1.svg",
},
{
id: "feature-2",
title: "Built for coders and developers",
subtitle: "FOR DEVELOPERS",
description:
"Lorem ipsum dolor sit, amet consectetur adipisicing elit. Minima doloribus illum, labore quis facilis molestias!",
image: "https://shadcnblocks.com/images/block/placeholder-4.svg",
},
],
}: Feature13Props) => {
return (
<section className="py-32">
<div className="container max-w-7xl">
<h2 className="text-3xl font-medium lg:text-4xl">{heading}</h2>
<div className="mt-20 grid gap-9 lg:grid-cols-2">
{features.map((feature) => (
<div
key={feature.id}
className="flex flex-col justify-between rounded-lg bg-accent"
>
<div className="flex justify-between gap-10 border-b">
<div className="flex flex-col justify-between gap-14 py-6 pl-4 md:py-10 md:pl-8 lg:justify-normal">
<p className="text-xs text-muted-foreground">
{feature.subtitle}
</p>
<h3 className="text-2xl md:text-4xl">{feature.title}</h3>
</div>
<div className="md:1/3 w-2/5 shrink-0 rounded-r-lg border-l">
<img
src={feature.image}
alt={feature.title}
className="h-full w-full object-cover"
/>
</div>
</div>
<div className="p-4 text-muted-foreground md:p-8">
{feature.description}
</div>
</div>
))}
</div>
</div>
</section>
);
};
export { Feature13 };

feature12

Pro

feature1

Pro

feature197

Basic

feature149

Pro

feature65

Pro

feature166

Free
interface Feature {
title: string;
description: string;
image: string;
}
interface Feature166Props {
heading: string;
description?: string;
feature1: Feature;
feature2: Feature;
feature3: Feature;
feature4: Feature;
}
const Feature166 = ({
heading = "Blocks built with Shadcn & Tailwind",
description = "Finely crafted components built with React, Tailwind and Shadcn UI. Developers can copy and paste these blocks directly into their project.",
feature1 = {
title: "UI/UX Design",
description:
"Creating intuitive user experiences with modern interface design principles and user-centered methodologies.",
image: "https://shadcnblocks.com/images/block/placeholder-1.svg",
},
feature2 = {
title: "Responsive Development",
description:
"Building websites that look and function perfectly across all devices and screen sizes.",
image: "https://shadcnblocks.com/images/block/placeholder-2.svg",
},
feature3 = {
title: "Brand Integration",
description:
"Seamlessly incorporating your brand identity into every aspect of your website's design.",
image: "https://shadcnblocks.com/images/block/placeholder-1.svg",
},
feature4 = {
title: "Performance Optimization",
description:
"Ensuring fast loading times and smooth performance through optimized code and assets.",
image: "https://shadcnblocks.com/images/block/placeholder-2.svg",
},
}: Feature166Props) => {
return (
<section className="py-32">
<div className="container">
<div className="mb-24 flex flex-col items-center gap-6">
<h1 className="text-center text-3xl font-semibold lg:max-w-3xl lg:text-5xl">
{heading}
</h1>
<p className="text-center text-lg font-medium text-muted-foreground md:max-w-4xl lg:text-xl">
{description}
</p>
</div>
<div className="relative flex justify-center">
<div className="relative flex w-full flex-col border border-muted2 md:w-1/2 lg:w-full">
<div className="relative flex flex-col lg:flex-row">
<div className="flex flex-col justify-between border-b border-solid border-muted2 p-10 lg:w-3/5 lg:border-b-0 lg:border-r">
<h2 className="text-xl font-semibold">{feature1.title}</h2>
<p className="text-muted-foreground">{feature1.description}</p>
<img
src={feature1.image}
alt={feature1.title}
className="mt-8 aspect-[1.5] h-full w-full object-cover lg:aspect-[2.4]"
/>
</div>
<div className="flex flex-col justify-between p-10 lg:w-2/5">
<h2 className="text-xl font-semibold">{feature2.title}</h2>
<p className="text-muted-foreground">{feature2.description}</p>
<img
src={feature2.image}
alt={feature2.title}
className="mt-8 aspect-[1.45] h-full w-full object-cover"
/>
</div>
</div>
<div className="relative flex flex-col border-t border-solid border-muted2 lg:flex-row">
<div className="flex flex-col justify-between border-b border-solid border-muted2 p-10 lg:w-2/5 lg:border-b-0 lg:border-r">
<h2 className="text-xl font-semibold">{feature3.title}</h2>
<p className="text-muted-foreground">{feature3.description}</p>
<img
src={feature3.image}
alt={feature3.title}
className="mt-8 aspect-[1.45] h-full w-full object-cover"
/>
</div>
<div className="flex flex-col justify-between p-10 lg:w-3/5">
<h2 className="text-xl font-semibold">{feature4.title}</h2>
<p className="text-muted-foreground">{feature4.description}</p>
<img
src={feature4.image}
alt={feature4.title}
className="mt-8 aspect-[1.5] h-full w-full object-cover lg:aspect-[2.4]"
/>
</div>
</div>
</div>
</div>
</div>
</section>
);
};
export { Feature166 };

feature163

Pro

feature164

Pro

feature161

Pro

feature162

Pro

feature160

Pro

feature157

Pro

feature158

Pro

feature159

Pro

feature154

Pro

feature156

Pro

feature152

Pro

feature153

Pro

feature150

Pro

feature151

Pro

feature148

Pro

feature145

Pro

feature146

Pro

feature147

Pro

feature143

Pro

feature144

Pro

feature141

Pro

feature142

Pro

feature138

Pro

feature139

Pro

feature137

Pro

feature131

Pro

feature125

Pro

feature124

Pro

feature140

Pro

feature130

Pro

feature132

Pro

feature133

Pro

feature128

Pro

feature129

Pro

feature126

Pro

feature127

Pro

feature122

Pro

feature123

Pro

feature121

Pro

feature135

Pro

feature136

Pro

feature134

Pro

feature120

Pro

feature117

Pro

feature118

Pro

feature119

Pro

feature115

Pro

feature116

Pro

feature113

Pro

feature114

Pro

feature110

Pro

feature111

Pro

feature112

Pro

feature97

Pro

feature98

Pro

feature94

Pro

feature92

Pro

feature93

Pro

feature91

Pro

feature89

Pro

feature90

Pro

feature86

Pro

feature83

Pro

feature85

Pro

feature82

Pro

feature99

Pro

feature108

Free
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@radix-ui/react-tabs";
import { Layout, Pointer, Zap } from "lucide-react";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
interface TabContent {
badge: string;
title: string;
description: string;
buttonText: string;
imageSrc: string;
imageAlt: string;
}
interface Tab {
value: string;
icon: React.ReactNode;
label: string;
content: TabContent;
}
interface Feature108Props {
badge?: string;
heading?: string;
description?: string;
tabs?: Tab[];
}
const Feature108 = ({
badge = "shadcnblocks.com",
heading = "A Collection of Components Built With Shadcn & Tailwind",
description = "Join us to build flawless web solutions.",
tabs = [
{
value: "tab-1",
icon: <Zap className="h-auto w-4 shrink-0" />,
label: "Boost Revenue",
content: {
badge: "Modern Tactics",
title: "Make your site a true standout.",
description:
"Discover new web trends that help you craft sleek, highly functional sites that drive traffic and convert leads into customers.",
buttonText: "See Plans",
imageSrc:
"https://shadcnblocks.com/images/block/placeholder-dark-1.svg",
imageAlt: "placeholder",
},
},
{
value: "tab-2",
icon: <Pointer className="h-auto w-4 shrink-0" />,
label: "Higher Engagement",
content: {
badge: "Expert Features",
title: "Boost your site with top-tier design.",
description:
"Use stellar design to easily engage users and strengthen their loyalty. Create a seamless experience that keeps them coming back for more.",
buttonText: "See Tools",
imageSrc:
"https://shadcnblocks.com/images/block/placeholder-dark-2.svg",
imageAlt: "placeholder",
},
},
{
value: "tab-3",
icon: <Layout className="h-auto w-4 shrink-0" />,
label: "Stunning Layouts",
content: {
badge: "Elite Solutions",
title: "Build an advanced web experience.",
description:
"Lift your brand with modern tech that grabs attention and drives action. Create a digital experience that stands out from the crowd.",
buttonText: "See Options",
imageSrc:
"https://shadcnblocks.com/images/block/placeholder-dark-3.svg",
imageAlt: "placeholder",
},
},
],
}: Feature108Props) => {
return (
<section className="py-32">
<div className="container mx-auto">
<div className="flex flex-col items-center gap-4 text-center">
<Badge variant="outline">{badge}</Badge>
<h1 className="max-w-2xl text-3xl font-semibold md:text-4xl">
{heading}
</h1>
<p className="text-muted-foreground">{description}</p>
</div>
<Tabs defaultValue={tabs[0].value} className="mt-8">
<TabsList className="container flex flex-col items-center justify-center gap-4 sm:flex-row md:gap-10">
{tabs.map((tab) => (
<TabsTrigger
key={tab.value}
value={tab.value}
className="flex items-center gap-2 rounded-xl px-4 py-3 text-sm font-semibold text-muted-foreground data-[state=active]:bg-muted data-[state=active]:text-primary"
>
{tab.icon} {tab.label}
</TabsTrigger>
))}
</TabsList>
<div className="mx-auto mt-8 max-w-screen-xl rounded-2xl bg-muted/70 p-6 lg:p-16">
{tabs.map((tab) => (
<TabsContent
key={tab.value}
value={tab.value}
className="grid place-items-center gap-20 lg:grid-cols-2 lg:gap-10"
>
<div className="flex flex-col gap-5">
<Badge variant="outline" className="w-fit bg-background">
{tab.content.badge}
</Badge>
<h3 className="text-3xl font-semibold lg:text-5xl">
{tab.content.title}
</h3>
<p className="text-muted-foreground lg:text-lg">
{tab.content.description}
</p>
<Button className="mt-2.5 w-fit gap-2" size="lg">
{tab.content.buttonText}
</Button>
</div>
<img
src={tab.content.imageSrc}
alt={tab.content.imageAlt}
className="rounded-xl"
/>
</TabsContent>
))}
</div>
</Tabs>
</div>
</section>
);
};
export { Feature108 };

feature109

Pro

feature105

Pro

feature106

Pro

feature107

Pro

feature103

Pro

feature104

Pro

feature101

Pro

feature11

Pro

feature10

Pro