lightswind
Version:
A modern frontend library with pre-built Tailwind CSS components for building responsive and interactive user interfaces.
163 lines (149 loc) • 7.3 kB
JSX
import React, { useEffect, useState } from "react";
const PortfolioPage = () => {
const [menuOpen, setMenuOpen] = useState(false);
const [typingText, setTypingText] = useState("");
const textArray = [
"FullStack Developer,",
"Frontend Developer,",
"Backend Developer,",
"Mobile Apps Developer.",
];
let textIndex = 0;
let charIndex = 0;
let isDeleting = false;
useEffect(() => {
const typeEffect = () => {
const currentText = textArray[textIndex];
if (isDeleting) {
setTypingText(currentText.substring(0, charIndex--));
} else {
setTypingText(currentText.substring(0, charIndex++));
}
let typingSpeed = isDeleting ? 50 : 100;
if (!isDeleting && charIndex === currentText.length) {
typingSpeed = 1000; // Pause before deleting
isDeleting = true;
} else if (isDeleting && charIndex === 0) {
isDeleting = false;
textIndex = (textIndex + 1) % textArray.length;
typingSpeed = 500; // Pause before typing new text
}
setTimeout(typeEffect, typingSpeed);
};
typeEffect();
}, []);
const toggleMenu = () => {
setMenuOpen(!menuOpen);
};
return (
<div className="w-full h-screen bg-gray-200 dark:bg-gray-900 font-primarylw overflow-y-scroll scrollbar-hide">
<header className="lg:px-16 px-4 flex flex-wrap items-center py-4 shadow-lg bg-gray-200 dark:bg-gray-900">
<div className="flex-1 flex justify-between items-center">
<h2 className="text-4xl font-sans text-black dark:text-white">Muhilan</h2>
</div>
<label
htmlFor="menu-toggle"
className="cursor-pointer md:hidden block"
onClick={toggleMenu}
>
<svg
className="fill-current text-black dark:text-white"
xmlns="http://www.w3.org/2000/svg"
width="28"
height="28"
viewBox="0 0 20 20"
>
<title>menu</title>
<path
d={
menuOpen
? "M14.348 14.849l-4.349-4.349-4.349 4.349-1.415-1.415 4.349-4.349-4.349-4.349 1.415-1.415 4.349 4.349 4.349-4.349 1.415 1.415-4.349 4.349 4.349 4.349z"
: "M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z"
}
/>
</svg>
</label>
<input className="hidden" type="checkbox" id="menu-toggle" />
<div
id="menu"
className={
menuOpen ? "block bg-gray-300 dark:bg-gray-800" : "hidden" +
" md:flex md:items-center md:w-auto w-full absolute md:static top-16 left-0 " +
"md:bg-transparent transition-all z-50 duration-300 ease-in-out"
}
>
<nav>
<ul className="md:flex items-center justify-between text-base text-gray-700 dark:text-gray-100 md:pt-0">
<li>
<a className="md:p-4 py-3 px-4 block text-primarylw" href="#">
Home
</a>
</li>
<li>
<a className="md:p-4 py-3 px-4 block" href="#">
About Me
</a>
</li>
<li>
<a className="md:p-4 py-3 px-4 block" href="#">
Education
</a>
</li>
<li>
<a className="md:p-4 py-3 px-4 block" href="#">
Experience
</a>
</li>
<li>
<a className="md:p-4 py-3 px-4 block" href="#">
Projects
</a>
</li>
<li>
<a className="md:p-4 py-3 px-4 block md:mb-0 mb-2" href="#">
Contact
</a>
</li>
</ul>
</nav>
</div>
</header>
<div className="h-full w-full mx-auto relative pb-20 xl:px-16 px-8 flex md:flex-row flex-col gap-4 justify-center items-center">
<div className="w-full relative">
<img
className="shadow-2xl shadow-blue-500 animate-[spin_12s_linear_infinite] absolute left-0 right-0 rounded-full lg:max-w-[70%] max-w-[60%] mx-auto"
src="https://cdn.buymeacoffee.com/uploads/profile_pictures/2023/11/PIXxBAJGpUj1wI7F.png@300w_0e.webp"
alt="My Image"
/>
<img
className="relative z-10 rounded-full lg:max-w-[70%] max-w-[60%] mx-auto outline outline-[.7rem] outline-offset-[.1rem] outline-blue-400/30"
src="https://cdn.buymeacoffee.com/uploads/profile_pictures/2023/11/PIXxBAJGpUj1wI7F.png@300w_0e.webp"
alt="My Image"
/>
</div>
<div className="w-full flex flex-col justify-center gap-4 md:text-left text-center text-gray-800 dark:text-white md:mt-0 sm:mt-8 mt-4">
<h1 className="md:text-4xl sm:text-3xl text-2xl font-semibold">
Hello, My name is Muhilan
</h1>
<h3 className="capitalize text-primarylw">
I'm{" "}
<span className="typing text-primarylw dark:text-primarylw-2">
{typingText}
</span>
</h3>
<p>
Experienced full-stack developer with 4+ years of expertise in
Laravel, NestJS, Nuxt.js, Next.js, Android, and some Flutter
experience.
</p>
<div className="sm:mt-4 mt-2">
<button className="px-6 py-3 rounded-xl bg-primarylw text-white rounded-sm">
Get In Touch
</button>
</div>
</div>
</div>
</div>
)
}
export default PortfolioPage