Spaces:
Sleeping
Sleeping
| import React, { useState } from "react"; | |
| import { motion } from "framer-motion"; | |
| import { FaPython, FaDatabase } from "react-icons/fa"; | |
| import { BiLogoPostgresql } from "react-icons/bi"; | |
| import javaLogo from "../assets/java-svgrepo-com.svg"; | |
| import kotlinLogo from "../assets/kotlin-16-svgrepo-com.svg"; | |
| import springBootLogo from "../assets/spring-boot-svgrepo-com.svg"; | |
| import kafkaLogo from "../assets/kafka-icon-svgrepo-com.svg"; | |
| import redisLogo from "../assets/redis-svgrepo-com.svg"; | |
| import dockerLogo from "../assets/docker-svgrepo-com.svg"; | |
| import cLogo from "../assets/icons8-c-50.png"; | |
| import leetcodeLogo from "../assets/leetcode-svgrepo-com.svg"; | |
| export default function Skills() { | |
| const [skills] = useState([ | |
| { id: 1, name: "Java", icon: <img src={javaLogo} alt="Java" className="w-12 h-12" /> }, | |
| { id: 2, name: "Kotlin", icon: <img src={kotlinLogo} alt="Kotlin" className="w-12 h-12" /> }, | |
| { id: 3, name: "Spring Boot", icon: <img src={springBootLogo} alt="Spring Boot" className="w-12 h-12" /> }, | |
| { id: 4, name: "Kafka", icon: <img src={kafkaLogo} alt="Kafka" className="w-12 h-12" /> }, | |
| { id: 5, name: "Redis", icon: <img src={redisLogo} alt="Redis" className="w-12 h-12" /> }, | |
| { id: 6, name: "Docker", icon: <img src={dockerLogo} alt="Docker" className="w-12 h-12" /> }, | |
| { id: 7, name: "C", icon: <img src={cLogo} alt="C" className="w-12 h-12" /> }, | |
| { id: 8, name: "Python", icon: <FaPython size={50} /> }, | |
| { id: 9, name: "PostgreSQL", icon: <BiLogoPostgresql size={50} /> }, | |
| { id: 10, name: "MongoDb", icon: <FaDatabase size={50} /> }, | |
| ]); | |
| const [experiences] = useState([ | |
| { | |
| id: 1, | |
| company: "MobileBytesSensei", | |
| role: "Backend Intern", | |
| period: "Recent", | |
| description: | |
| "Worked on backend development projects, contributing to the design and implementation of scalable backend systems. Gained hands-on experience with modern backend technologies and best practices.", | |
| }, | |
| ]); | |
| const [achievements] = useState([ | |
| { | |
| id: 1, | |
| title: "ICPC Regionalist (2×)", | |
| description: "Participated twice in ICPC regional competitions, demonstrating strong problem-solving skills and competitive programming expertise.", | |
| }, | |
| ]); | |
| return ( | |
| <div className="mt-3 lg:mt-16" id="skills"> | |
| <div className="px-5 lg:px-28"> | |
| <motion.h2 | |
| className="text-2xl lg:text-4xl text-center" | |
| initial={{ opacity: 0, y: -20 }} | |
| whileInView={{ opacity: 1, y: 0 }} | |
| transition={{ duration: 0.8 }} | |
| viewport={{ once: true }} | |
| > | |
| My <span className="font-extrabold">Skills</span> | |
| </motion.h2> | |
| {/* Skill Cards */} | |
| <div className="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-5 text-lg font-bold mt-7 lg:mt-16 w-full place-items-center gap-y-6 lg:gap-y-12"> | |
| {skills.map((skill) => ( | |
| <motion.div | |
| key={skill.id} | |
| className="bg-white border-2 hover:bg-black hover:text-white transition-all cursor-pointer border-black rounded p-3 h-36 w-36 lg:h-44 lg:w-44 flex flex-col items-center justify-center gap-5" | |
| initial={{ opacity: 0, y: 5 }} | |
| whileInView={{ opacity: 1, y: 0 }} | |
| transition={{ duration: 0.8, ease: "easeOut", delay: skill.id * 0.1 }} | |
| viewport={{ once: true }} | |
| > | |
| {skill.icon} | |
| <p>{skill.name}</p> | |
| </motion.div> | |
| ))} | |
| </div> | |
| </div> | |
| {/* Experience Section */} | |
| <div className="bg-black w-full my-8 py-8 lg:my-16 lg:py-16"> | |
| <motion.h2 | |
| className="text-2xl lg:text-4xl text-center text-white" | |
| initial={{ opacity: 0, y: -20 }} | |
| whileInView={{ opacity: 1, y: 0 }} | |
| transition={{ duration: 0.8 }} | |
| viewport={{ once: true }} | |
| > | |
| My <span className="font-extrabold">Experience</span> | |
| </motion.h2> | |
| {/* Experience Cards */} | |
| <div className="px-5 lg:px-28 my-8 lg:mt-16 space-y-10"> | |
| {experiences.map((exp, index) => ( | |
| <motion.div | |
| key={exp.id} | |
| className="bg-black p-5 border border-[#D4D4D8] rounded-md hover:bg-[#27272A] transition-all cursor-pointer" | |
| initial={{ opacity: 0, x: -20 }} | |
| whileInView={{ opacity: 1, x: 0 }} | |
| transition={{ | |
| type: "spring", | |
| stiffness: 100, | |
| damping: 10, | |
| delay: index * 0.2, | |
| }} | |
| viewport={{ once: true }} | |
| > | |
| <div className="flex justify-between flex-col items-start lg:flex-row lg:items-center"> | |
| <div className="flex items-center gap-5"> | |
| <img className="w-7" src={exp.logo} alt="" /> | |
| <h2 className="font-semibold text-white text-lg lg:text-xl"> | |
| {exp.role} at {exp.company} | |
| </h2> | |
| </div> | |
| <span className="text-[#D4D4D8] font-semibold text-sm mt-4 lg:mt-0 lg:text-base"> | |
| {exp.period} | |
| </span> | |
| </div> | |
| <p className="text-[#D4D4D8] mt-6 text-sm/6 lg:text-base font-light"> | |
| {exp.description} | |
| </p> | |
| </motion.div> | |
| ))} | |
| </div> | |
| {/* Achievements Section */} | |
| <motion.h2 | |
| className="text-2xl lg:text-4xl text-center text-white mt-8 lg:mt-16" | |
| initial={{ opacity: 0, y: -20 }} | |
| whileInView={{ opacity: 1, y: 0 }} | |
| transition={{ duration: 0.8 }} | |
| viewport={{ once: true }} | |
| > | |
| My <span className="font-extrabold">Achievements</span> | |
| </motion.h2> | |
| <div className="px-5 lg:px-28 my-8 space-y-6"> | |
| {achievements.map((achievement, index) => ( | |
| <motion.div | |
| key={achievement.id} | |
| className="bg-black p-5 border border-[#D4D4D8] rounded-md hover:bg-[#27272A] transition-all cursor-pointer" | |
| initial={{ opacity: 0, x: -20 }} | |
| whileInView={{ opacity: 1, x: 0 }} | |
| transition={{ | |
| type: "spring", | |
| stiffness: 100, | |
| damping: 10, | |
| delay: index * 0.2, | |
| }} | |
| viewport={{ once: true }} | |
| > | |
| <h2 className="font-semibold text-white text-lg lg:text-xl"> | |
| {achievement.title} | |
| </h2> | |
| <p className="text-[#D4D4D8] mt-3 text-sm/6 lg:text-base font-light"> | |
| {achievement.description} | |
| </p> | |
| </motion.div> | |
| ))} | |
| </div> | |
| </div> | |
| </div> | |
| ); | |
| } | |