Border Logo Grid

A border grid layout showcasing various logos for social proof.

Preview

Code

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:

Code
npx create-next-app@latest my-app

2. Install Framer Motion

Code
npm install framer-motion --save

Add Company Logos Section

Code

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

Code

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];

Become an Astrae
Affiliate Today

Make referrals, and bring in clients. Keep 50% of your earnings paid out weekly.

Description