frontend: added Experience, Interests, and projects section

This commit is contained in:
2025-01-06 21:28:48 +02:00
parent bd6539d4b6
commit 72cc387b34
10 changed files with 337 additions and 42 deletions

View File

@ -1,7 +1,8 @@
import { Linkedin, Github, Award } from "lucide-react";
import { COLORS } from "../constants";
const Introduction = () => {
const BoldStyle = "text-blue-900 dark:text-blue-400 font-semibold";
const BoldStyle = "text-blue-900 dark:text-blue-300 font-semibold";
const socialLinks = [
{
@ -23,15 +24,15 @@ const Introduction = () => {
return (
<div className="text-center p-4 max-w-4xl mx-auto">
<h1 className="text-5xl text-blue-900 dark:text-blue-400 py-2 font-medium font-burtons">
<h1 className={`text-5xl py-2 ${COLORS.PRIMARY} ${COLORS.DARK_PRIMARY} font-medium font-mono tracking-wide`}>
Taqi Tahmid
</h1>
<h2 className="text-2xl py-2 font-burtons dark:text-blue-200">
<h2 className={`text-2xl py-2 font-burtons ${COLORS.PRIMARY} ${COLORS.DARK_PRIMARY}`}>
Test Automation and DevOps Engineer
</h2>
<div className="text-md py-5 leading-8 text-gray-800 dark:text-gray-300 md:text-xl space-y-4">
<div className={`text-md py-5 ${COLORS.TEXT} ${COLORS.DARK_TEXT} leading-8 md:text-xl space-y-4`}>
<p>
I am a <span className={BoldStyle}>DevOps</span> and{" "}
<span className={BoldStyle}>Test Automation</span> engineer with a{" "}
@ -56,7 +57,7 @@ const Introduction = () => {
href={link.href}
target="_blank"
rel="noreferrer"
className="text-blue-900 dark:text-blue-400 hover:text-sky-600 dark:hover:text-sky-500 transition-colors duration-200"
className={`${COLORS.PRIMARY} ${COLORS.DARK_PRIMARY} hover:text-sky-600 dark:hover:text-sky-500 transition-colors duration-200`}
aria-label={link.label}
>
{link.icon}

View File

@ -1,5 +1,6 @@
import React, { useState, useRef } from 'react';
import React, { useEffect, useState, useRef } from 'react';
import { Menu, Sun, Moon, FileText, Mail, Check, Copy } from "lucide-react";
import { COLORS, EMAIL } from '../constants';
interface NavProps {
darkMode: boolean;
@ -9,12 +10,11 @@ interface NavProps {
const Navbar: React.FC<NavProps> = ({toggleDarkMode, darkMode}) => {
const [copied, setCopied] = useState(false);
const [isMenuOpen, setIsMenuOpen] = useState(false);
const email = "taqitahmid@gmail.com";
const menuRef = useRef<HTMLDivElement>(null);
const handleCopyEmail = async () => {
try {
await navigator.clipboard.writeText(email);
await navigator.clipboard.writeText(EMAIL);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
} catch (err) {
@ -22,6 +22,10 @@ const Navbar: React.FC<NavProps> = ({toggleDarkMode, darkMode}) => {
}
};
useEffect(() => {
localStorage.setItem('DARK_MODE', String(darkMode))
},[darkMode])
const menuItem = [
{title: 'Home', href: '/'},
{title: 'Experience', href: '/experience'},
@ -31,14 +35,13 @@ const Navbar: React.FC<NavProps> = ({toggleDarkMode, darkMode}) => {
return (
<div className="w-full flex justify-center">
<nav className="py-5 mb-12 flex justify-between dark:text-white w-full max-w-5xl px-4">
<nav className="py-5 mb-6 flex justify-between dark:text-white w-full max-w-5xl px-4">
<button
onClick={handleCopyEmail}
className="flex items-center space-x-2 hover:bg-gray-100 dark:hover:bg-gray-800 px-3 py-2 rounded-lg transition-colors duration-200 group relative"
>
<Mail size={20} className="text-blue-500" />
<span className="hidden sm:inline">{email}</span>
<span className="sm:hidden">Email</span>
<Mail size={25} className={`${COLORS.DARK_PRIMARY}`} />
<span>Email</span>
{copied ? (
<Check size={16} className="text-green-500" />
) : (
@ -52,8 +55,8 @@ const Navbar: React.FC<NavProps> = ({toggleDarkMode, darkMode}) => {
<ul className="flex items-center">
<li className="transition ease-in-out delay-50 duration-100 cursor-pointer"
onClick={toggleDarkMode}>
<div className="bg-blue-900 hover:bg-blue-1000 dark:bg-blue-500 dark:hover:bg-blue-600 text-white p-2 rounded-lg ml-8 shadow-sm group relative">
{darkMode ? <Sun size={24} /> : <Moon size={24} />}
<div className="group relative">
{darkMode ? <Sun className='text-amber-400 hover:scale-110' size={30} /> : <Moon size={24} />}
<span className="pointer-events-none absolute -bottom-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded bg-slate-800 px-2 py-1 text-xs text-slate-100 opacity-0 transition before:absolute before:left-1/2 before:top-full before:-translate-x-1/2 before:border-4 before:border-transparent before:border-t-slate-800 before:content-[''] group-hover:opacity-100">
{darkMode ? "Light Mode": "Dark Mode"}
</span>
@ -61,11 +64,11 @@ const Navbar: React.FC<NavProps> = ({toggleDarkMode, darkMode}) => {
</li>
<li className="transition ease-in-out delay-50 duration-100">
<div className="group relative">
<a className="bg-blue-900 hover:bg-blue-1000 dark:bg-blue-500 dark:hover:bg-blue-600 text-white p-2 rounded-lg ml-8 shadow-sm inline-flex"
<a className="text-white p-2 ml-8 inline-flex"
href="https://www.linkedin.com/in/taqi-tahmid/details/featured/1735981754176/single-media-viewer/?profileId=ACoAACDU_GsBCgKtvw2bmzbVwTy2WixBG6-e3JM"
target="_blank"
rel="noreferrer">
<FileText size={24} />
<FileText className="hover:scale-110 text-gray-800 dark:text-white" size={30} />
</a>
<span className="pointer-events-none absolute -bottom-8 left-1/2 -translate-x-1/2 whitespace-nowrap rounded bg-slate-800 px-2 py-1 text-xs text-slate-100 opacity-0 transition before:absolute before:left-1/2 before:top-full before:-translate-x-1/2 before:border-4 before:border-transparent before:border-t-slate-800 before:content-[''] group-hover:opacity-100">
Resume

View File

@ -10,6 +10,7 @@ import dockerIcon from "../assets/docker-icon.svg";
import kubernetesIcon from "../assets/kubernetes.svg";
import prometheusIcon from "../assets/prometheus.svg";
import grafanaIcon from "../assets/grafana.svg";
import { COLORS } from "../constants";
const Skills = () => {
const skills = [
@ -29,10 +30,10 @@ const Skills = () => {
return (
<div>
<h1 className="text-2xl py-5 font-burtons dark:text-blue-200">
<h1 className={`text-2xl py-5 font-burtons ${COLORS.PRIMARY} ${COLORS.DARK_PRIMARY}`}>
Tools and Languages
</h1>
<div className="grid grid-cols-4 gap-6 text-md py-5 leading-8 text-gray-800 dark:text-gray-300 mx-auto max-w-2xl md:text-xl">
<div className={`grid grid-cols-4 gap-6 text-md py-5 leading-8 ${COLORS.TEXT} ${COLORS.DARK_TEXT} mx-auto max-w-2xl md:text-xl`}>
{skills.map((skill) => (
<div key={skill.name} className="flex flex-col items-center">
<img src={skill.icon} alt={skill.name} className="h-10 w-10" />