Skip to content

Commit

Permalink
New Commits
Browse files Browse the repository at this point in the history
  • Loading branch information
utsavpatel562 committed Jun 27, 2024
1 parent 18a4dba commit 0c8b9a2
Show file tree
Hide file tree
Showing 5 changed files with 285 additions and 8 deletions.
2 changes: 2 additions & 0 deletions app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Grid from "@/components/Grid";
import Hero from "@/components/Hero";
import RecentProjects from "@/components/RecentProjects";
import { FloatingNav } from "@/components/ui/FloatingNav";
import { FaHome } from "react-icons/fa";

Expand All @@ -12,6 +13,7 @@ export default function Home() {
/>
<Hero />
<Grid />
<RecentProjects />
</div>
</main>
);
Expand Down
83 changes: 83 additions & 0 deletions components/RecentProjects.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
"use client";

import { FaLocationArrow } from "react-icons/fa6";

import { projects } from "@/data";
import { PinContainer } from "@/components/ui/3d-pin";

const RecentProjects = () => {
return (
<div className="py-20">
<h1 className="heading">
A small selection of{" "}
<span className="text-purple">recent projects</span>
</h1>
<div className="flex flex-wrap items-center justify-center p-4 gap-16 mt-10">
{projects.map((item) => (
<div
className="lg:min-h-[32.5rem] h-[25rem] flex items-center justify-center sm:w-96 w-[80vw]"
key={item.id}
>
<PinContainer
title="/zoom.clone.vercel"
href="https://zoom-clone-iota-six.vercel.app/"
>
<div className="relative flex items-center justify-center sm:w-96 w-[80vw] overflow-hidden h-[20vh] lg:h-[30vh] mb-10">
<div
className="relative w-full h-full overflow-hidden lg:rounded-3xl"
style={{ backgroundColor: "#13162D" }}
>
<img src="/bg.png" alt="bgimg" />
</div>
<img
src={item.img}
alt="cover"
className="z-10 absolute bottom-0"
/>
</div>

<h1 className="font-bold lg:text-2xl md:text-xl text-base line-clamp-1">
{item.title}
</h1>

<p
className="lg:text-xl lg:font-normal font-light text-sm line-clamp-2"
style={{
color: "#BEC1DD",
margin: "1vh 0",
}}
>
{item.des}
</p>

<div className="flex items-center justify-between mt-7 mb-3">
<div className="flex items-center">
{item.iconLists.map((icon, index) => (
<div
key={index}
className="border border-white/[.2] rounded-full bg-black lg:w-10 lg:h-10 w-8 h-8 flex justify-center items-center"
style={{
transform: `translateX(-${5 * index + 2}px)`,
}}
>
<img src={icon} alt="icon5" className="p-2" />
</div>
))}
</div>

<div className="flex justify-center items-center">
<p className="flex lg:text-xl md:text-xs text-sm text-purple">
Check Live Site
</p>
<FaLocationArrow className="ms-3" color="#CBACF9" />
</div>
</div>
</PinContainer>
</div>
))}
</div>
</div>
);
};

export default RecentProjects;
166 changes: 166 additions & 0 deletions components/ui/3d-pin.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
"use client";
import React, { useState } from "react";
import { motion } from "framer-motion";
import { cn } from "@/utils/cn";
import Link from "next/link";

export const PinContainer = ({
children,
title,
href,
className,
containerClassName,
}: {
children: React.ReactNode;
title?: string;
href?: string;
className?: string;
containerClassName?: string;
}) => {
const [transform, setTransform] = useState(
"translate(-50%,-50%) rotateX(0deg)"
);

const onMouseEnter = () => {
setTransform("translate(-50%,-50%) rotateX(40deg) scale(0.8)");
};
const onMouseLeave = () => {
setTransform("translate(-50%,-50%) rotateX(0deg) scale(1)");
};

return (
<Link
className={cn(
"relative group/pin z-50 cursor-pointer",
containerClassName
)}
onMouseEnter={onMouseEnter}
onMouseLeave={onMouseLeave}
href={href || "/"}
>
<div
style={{
perspective: "1000px",
transform: "rotateX(70deg) translateZ(0deg)",
}}
className="absolute left-1/2 top-1/2 ml-[0.09375rem] mt-4 -translate-x-1/2 -translate-y-1/2"
>
<div
style={{
transform: transform,
}}
className="absolute left-1/2 p-4 top-1/2 flex justify-start items-start rounded-2xl shadow-[0_8px_16px_rgb(0_0_0/0.4)] border-white/[0.1] group-hover/pin:border-white/[0.2] transition duration-700 overflow-hidden"
>
<div className={cn(" relative z-50 ", className)}>{children}</div>
</div>
</div>
<PinPerspective title={title} href={href} />
</Link>
);
};

export const PinPerspective = ({
title,
href,
}: {
title?: string;
href?: string;
}) => {
return (
<motion.div className="pointer-events-none w-full h-80 flex items-center justify-center opacity-0 group-hover/pin:opacity-100 z-[60] transition duration-500">
<div className=" w-full h-full -mt-7 flex-none inset-0">
<div className="absolute top-0 inset-x-0 flex justify-center">
<a
href={href}
target={"_blank"}
className="relative flex space-x-2 items-center z-10 rounded-full bg-zinc-950 py-0.5 px-4 ring-1 ring-white/10 "
>
<span className="relative z-20 text-white text-xs font-bold inline-block py-0.5">
{title}
</span>

<span className="absolute -bottom-0 left-[1.125rem] h-px w-[calc(100%-2.25rem)] bg-gradient-to-r from-emerald-400/0 via-emerald-400/90 to-emerald-400/0 transition-opacity duration-500 group-hover/btn:opacity-40"></span>
</a>
</div>

<div
style={{
perspective: "1000px",
transform: "rotateX(70deg) translateZ(0)",
}}
className="absolute left-1/2 top-1/2 ml-[0.09375rem] mt-4 -translate-x-1/2 -translate-y-1/2"
>
<>
<motion.div
initial={{
opacity: 0,
scale: 0,
x: "-50%",
y: "-50%",
}}
animate={{
opacity: [0, 1, 0.5, 0],
scale: 1,

z: 0,
}}
transition={{
duration: 6,
repeat: Infinity,
delay: 0,
}}
className="absolute left-1/2 top-1/2 h-[11.25rem] w-[11.25rem] rounded-[50%] bg-sky-500/[0.08] shadow-[0_8px_16px_rgb(0_0_0/0.4)]"
></motion.div>
<motion.div
initial={{
opacity: 0,
scale: 0,
x: "-50%",
y: "-50%",
}}
animate={{
opacity: [0, 1, 0.5, 0],
scale: 1,

z: 0,
}}
transition={{
duration: 6,
repeat: Infinity,
delay: 2,
}}
className="absolute left-1/2 top-1/2 h-[11.25rem] w-[11.25rem] rounded-[50%] bg-sky-500/[0.08] shadow-[0_8px_16px_rgb(0_0_0/0.4)]"
></motion.div>
<motion.div
initial={{
opacity: 0,
scale: 0,
x: "-50%",
y: "-50%",
}}
animate={{
opacity: [0, 1, 0.5, 0],
scale: 1,

z: 0,
}}
transition={{
duration: 6,
repeat: Infinity,
delay: 4,
}}
className="absolute left-1/2 top-1/2 h-[11.25rem] w-[11.25rem] rounded-[50%] bg-sky-500/[0.08] shadow-[0_8px_16px_rgb(0_0_0/0.4)]"
></motion.div>
</>
</div>

<>
<motion.div className="absolute right-1/2 bottom-1/2 bg-gradient-to-b from-transparent to-cyan-500 translate-y-[14px] w-px h-20 group-hover/pin:h-40 blur-[2px]" />
<motion.div className="absolute right-1/2 bottom-1/2 bg-gradient-to-b from-transparent to-cyan-500 translate-y-[14px] w-px h-20 group-hover/pin:h-40 " />
<motion.div className="absolute right-1/2 translate-x-[1.5px] bottom-1/2 bg-cyan-600 translate-y-[14px] w-[4px] h-[4px] rounded-full z-40 blur-[3px]" />
<motion.div className="absolute right-1/2 translate-x-[0.5px] bottom-1/2 bg-cyan-300 translate-y-[14px] w-[2px] h-[2px] rounded-full z-40 " />
</>
</div>
</motion.div>
);
};
26 changes: 26 additions & 0 deletions components/ui/PinContainer.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
"use client";
import React from "react";
import { PinContainer } from "@/components/ui/3d-pin";

export function AnimatedPinDemo() {
return (
<div className="h-[40rem] w-full flex items-center justify-center ">
<PinContainer
title="/ui.aceternity.com"
href="https://twitter.com/mannupaaji"
>
<div className="flex basis-full flex-col p-4 tracking-tight text-slate-100/50 sm:basis-1/2 w-[20rem] h-[20rem] ">
<h3 className="max-w-xs !pb-2 !m-0 font-bold text-base text-slate-100">
Aceternity UI
</h3>
<div className="text-base !m-0 !p-0 font-normal">
<span className="text-slate-500 ">
Customizable Tailwind CSS and Framer Motion Components.
</span>
</div>
<div className="flex flex-1 w-full rounded-lg mt-4 bg-gradient-to-br from-violet-500 via-purple-500 to-blue-500" />
</div>
</PinContainer>
</div>
);
}
16 changes: 8 additions & 8 deletions data/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,32 +72,32 @@ export const gridItems = [
export const projects = [
{
id: 1,
title: "3D Solar System Planets to Explore",
title: "Google - Gemini Clone",
des: "Explore the wonders of our solar system with this captivating 3D simulation of the planets using Three.js.",
img: "/p1.svg",
iconLists: ["/re.svg", "/tail.svg", "/ts.svg", "/three.svg", "/fm.svg"],
link: "/ui.earth.com",
},
{
id: 2,
title: "Yoom - Video Conferencing App",
des: "Simplify your video conferencing experience with Yoom. Seamlessly connect with colleagues and friends.",
title: "Zoom Clone - Video Conferencing App",
des: "Simplify your video conferencing experience with Zoom. Seamlessly connect with colleagues and friends.",
img: "/p2.svg",
iconLists: ["/next.svg", "/tail.svg", "/ts.svg", "/stream.svg", "/c.svg"],
link: "/ui.yoom.com",
link: "https://zoom-clone-iota-six.vercel.app/",
},
{
id: 3,
title: "AI Image SaaS - Canva Application",
des: "A REAL Software-as-a-Service app with AI features and a payments and credits system using the latest tech stack.",
title: "React Chat-App using Firebase",
des: "Developed real-time chat application with user auth. with firebase using the latest tech stack.",
img: "/p3.svg",
iconLists: ["/re.svg", "/tail.svg", "/ts.svg", "/three.svg", "/c.svg"],
link: "/ui.aiimg.com",
},
{
id: 4,
title: "Animated Apple Iphone 3D Website",
des: "Recreated the Apple iPhone 15 Pro website, combining GSAP animations and Three.js 3D effects..",
title: "LearNovice - Learning Management System",
des: "Developed LMS for user exprience using PHP, MySQL, JavaScript, jQuery and HTML/CSS",
img: "/p4.svg",
iconLists: ["/next.svg", "/tail.svg", "/ts.svg", "/three.svg", "/gsap.svg"],
link: "/ui.apple.com",
Expand Down

0 comments on commit 0c8b9a2

Please sign in to comment.