CategoriesAllHeroNavigationFooterCall-to-ActionsFeature SectionsTestimonialsPricingContactGalleryStatsFAQServicesNewsletterAuthMiscellaneousButtons
All Components3D Cube InteractionBorder Logo GridCountdownFlip ButtonExpandable FAQsFlow ButtonGlow ButtonGrayscale CarouselInertia Zoom ParallaxLogo Cloud GridMobile Drawer NavigationPixel PreloaderProject GalleryRing ButtonShowcase CarouselSlide PreloaderSliding Stairs PreloaderStormtrooper FAQText Gradient OpacityThreads ButtonTilt HeadlineUltra Preloader
Code
app/page.tsx
1import CompanyLogos from "@/sections/company-logos";
2
3const Home = () => {
4 return (
5 <div className=" bg-[#F6F6F6] min-h-screen w-full flex items-center justify-center">
6 <CompanyLogos />
7 </div>
8 );
9}
10
11export default Home;Installation
Initialized a project and installed the necessary dependencies to use this component.
1. Initialize a new Next.js project:
npx create-next-app@latest my-app2. Install Framer Motion
npm install framer-motion --saveAdd Company Logos Section
src/sections/company-logos.tsx
1"use client"
2
3import { companyLogos } from "@/constants";
4import { motion } from "framer-motion";
5import { Plus } from "lucide-react";
6import Image from "next/image";
7
8
9const CompanyLogos = () => {
10 return (
11 <section className=" w-full py-8 z-20 relative flex flex-col items-center mt-28">
12 <h6 className=" font-medium opacity-80 text-base md:text-lg">Trusted by 24+ Startups and Businesses for Design and Development</h6>
13 <div className=" max-w-6xl mx-auto w-full mt-8">
14 <div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6 w-full relative group">
15 {companyLogos.map((logo, index) => (
16 <div key={index} className={`w-full border bg-[#F6F6F6] py-4 flex items-center justify-center ${index === 0 ? 'xl:rounded-tl-xl' :
17 index === 5 ? 'xl:rounded-tr-xl' :
18 index === 18 ? 'xl:rounded-bl-xl' : ''
19 }`}>
20 <motion.div
21 className="relative flex items-center justify-center object-contain"
22 style={{
23 width: `${logo.width}px`,
24 height: `${logo.height}px`,
25 }}
26 initial={{ opacity: 0, y: 20 }}
27 whileInView={{ opacity: 1, y: 0 }}
28 transition={{
29 duration: 0.5,
30 delay: index * 0.1,
31 ease: "easeOut"
32 }}
33 viewport={{ once: true, amount: 0.3 }}
34 >
35 <Image
36 fill
37 quality={100}
38 src={`/companies/${logo.image}`}
39 alt={logo.name}
40 sizes={`${Math.max(logo.width, logo.height)}px`}
41 className="object-contain"
42 />
43 </motion.div>
44 </div>
45 ))}
46 <div className=" w-full border py-2.5 px-2.5 xl:rounded-br-xl bg-[#F6F6F6]">
47 <div className=" text-sm md:text-[15px] bg-[#F6F6F6] border border-dashed hover:border-none hover:bg-[#002BBA] hover:text-white cursor-pointer border-[#002BBA] w-full h-full text-[#002BBA] font-medium gap-1 xl:rounded-lg flex items-center justify-center">
48 <p>Your Logo</p> <Plus className=" size-4" />
49 </div>
50 </div>
51 </div>
52 </div>
53 </section>
54 );
55}
56
57export default CompanyLogos;Add Constants
src/constants/index.ts
1export const companyLogos = [
2 {
3 name: "Lexos",
4 image: "logo-1.png",
5 width: 116,
6 height: 40,
7 },
8 {
9 name: "InfoSignal",
10 image: "logo-2.png",
11 width: 140,
12 height: 40,
13 },
14 {
15 name: "Stakenet",
16 image: "logo-3.png",
17 width: 140,
18 height: 40,
19 },
20 {
21 name: "FetchTalent AI",
22 image: "logo-4.png",
23 width: 152,
24 height: 40,
25 },
26 {
27 name: "Toonly AI",
28 image: "logo-5.png",
29 width: 148,
30 height: 40,
31 },
32 {
33 name: "Atlas Labs",
34 image: "logo-6.png",
35 width: 125,
36 height: 40,
37 },
38 {
39 name: "Intero",
40 image: "logo-7.png",
41 width: 112,
42 height: 40,
43 },
44 {
45 name: "Skillura",
46 image: "logo-8.png",
47 width: 135,
48 height: 40,
49 },
50 {
51 name: "OnlyTool",
52 image: "logo-9.png",
53 width: 115,
54 height: 40,
55 },
56 {
57 name: "Textbook LM",
58 image: "logo-10.png",
59 width: 160,
60 height: 40,
61 },
62 {
63 name: "InfoSignal InfoBoard",
64 image: "logo-11.png",
65 width: 160,
66 height: 40,
67 },
68 {
69 name: "GenYSolutions",
70 image: "logo-12.png",
71 width: 88,
72 height: 40,
73 },
74 {
75 name: "VoiceAfrica",
76 image: "logo-13.png",
77 width: 140,
78 height: 40,
79 },
80 {
81 name: "Midas",
82 image: "logo-14.png",
83 width: 120,
84 height: 40,
85 },
86 {
87 name: "Astrae",
88 image: "logo-15.png",
89 width: 128,
90 height: 40,
91 },
92 {
93 name: "Refactor",
94 image: "logo-16.png",
95 width: 148,
96 height: 40,
97 },
98 {
99 name: "Fontsnatcher",
100 image: "logo-17.png",
101 width: 160,
102 height: 40,
103 },
104 {
105 name: "Hetzel",
106 image: "logo-18.png",
107 width: 160,
108 height: 40,
109 },
110 {
111 name: "Nova",
112 image: "logo-19.png",
113 width: 160,
114 height: 40,
115 },
116 {
117 name: "Lancershout",
118 image: "logo-20.png",
119 width: 164,
120 height: 40,
121 },
122 {
123 name: "Handle Delivery",
124 image: "logo-21.png",
125 width: 164,
126 height: 40,
127 },
128 {
129 name: "EZ Politix",
130 image: "logo-22.png",
131 width: 180,
132 height: 40,
133 },
134 {
135 name: "VOX-AI",
136 image: "logo-23.png",
137 width: 132,
138 height: 40,
139 },
140];