diff --git a/src/components/layout/Navigation.tsx b/src/components/layout/Navigation.tsx index 29bce7b..d212ed7 100644 --- a/src/components/layout/Navigation.tsx +++ b/src/components/layout/Navigation.tsx @@ -14,7 +14,7 @@ type Props = { export default function Navbar({ theme, setTheme -}: Props) { +}: Readonly) { const [menuOpen, setMenuOpen] = useState(false); const location = useLocation(); const navigate = useNavigate(); diff --git a/src/components/sections/AboutSection.tsx b/src/components/sections/AboutSection.tsx index b4684f5..54eaa41 100644 --- a/src/components/sections/AboutSection.tsx +++ b/src/components/sections/AboutSection.tsx @@ -71,7 +71,7 @@ export default function AboutSection(props: AboutSectionProps = {}) { {/* Personal Photo and Bio */} -
+
- {bio.map((paragraph, index) => ( -

{paragraph}

+ {bio.map((paragraph) => ( +

{paragraph}

))}
- + {/* Feature Cards Grid */}

My Areas of Expertise

@@ -108,23 +107,21 @@ export default function AboutSection(props: AboutSectionProps = {}) {
{featureCards.map((card, index) => { const IconComponent = card.icon; + const cardId = card.title.toLowerCase().replaceAll(/\s+/g, '-'); return (

{card.description} @@ -149,6 +146,6 @@ export default function AboutSection(props: AboutSectionProps = {}) {

- + ); } \ No newline at end of file diff --git a/src/components/sections/CertificationsSection.tsx b/src/components/sections/CertificationsSection.tsx index 4911349..ae88754 100644 --- a/src/components/sections/CertificationsSection.tsx +++ b/src/components/sections/CertificationsSection.tsx @@ -83,16 +83,14 @@ export default function CertificationsSection(props: CertificationsSectionProps {/* Certifications Grid */} -
{sortedCertifications.map((cert, index) => ( -
@@ -108,7 +106,6 @@ export default function CertificationsSection(props: CertificationsSectionProps
- + ))} - - + {/* Certifications summary for screen readers */}

- Certifications timeline: Spanning from {sortedCertifications[sortedCertifications.length - 1]?.year} to {sortedCertifications[0]?.year}, + Certifications timeline: Spanning from {sortedCertifications.at(-1)?.year} to {sortedCertifications.at(0)?.year}, including {sortedCertifications.filter(cert => cert.issuer.includes('Udemy')).length} online courses and {sortedCertifications.filter(cert => cert.issuer.includes('TU Darmstadt')).length} academic degree.

diff --git a/src/components/sections/ContactSection.tsx b/src/components/sections/ContactSection.tsx index 5fccf46..caa2f69 100644 --- a/src/components/sections/ContactSection.tsx +++ b/src/components/sections/ContactSection.tsx @@ -1,4 +1,4 @@ -import { Mail, Github, Linkedin, Send } from 'lucide-react'; +import { Mail, ExternalLink, Send } from 'lucide-react'; import { personalConfig, getObfuscatedEmail } from '../../config/personal'; import { getTexts } from '../../config/texts'; @@ -50,10 +50,10 @@ export default function ContactSection(props: ContactSectionProps = {}) { announcement.textContent = 'Opening email client with pre-filled message'; document.body.appendChild(announcement); - window.location.href = `mailto:${email}?subject=${subject}&body=${body}`; + globalThis.location.href = `mailto:${email}?subject=${subject}&body=${body}`; setTimeout(() => { - document.body.removeChild(announcement); + announcement.remove(); }, 1000); }; @@ -70,10 +70,10 @@ export default function ContactSection(props: ContactSectionProps = {}) { announcement.textContent = `Opening ${platform} profile in new tab`; document.body.appendChild(announcement); - window.open(url, '_blank', 'noopener,noreferrer'); + globalThis.open(url, '_blank', 'noopener,noreferrer'); setTimeout(() => { - document.body.removeChild(announcement); + announcement.remove(); }, 1000); }; @@ -98,15 +98,13 @@ export default function ContactSection(props: ContactSectionProps = {}) {
{/* Contact Content Grid */} -
+
{/* Let's Connect Card */}
); diff --git a/src/components/sections/HeroSection.tsx b/src/components/sections/HeroSection.tsx index 62fe006..71acf80 100644 --- a/src/components/sections/HeroSection.tsx +++ b/src/components/sections/HeroSection.tsx @@ -39,7 +39,7 @@ export default function HeroSection(props: HeroSectionProps = {}) { document.body.appendChild(announcement); setTimeout(() => { - document.body.removeChild(announcement); + announcement.remove(); }, 1000); }; @@ -63,7 +63,7 @@ export default function HeroSection(props: HeroSectionProps = {}) { link.click(); // Clean up - document.body.removeChild(link); + link.remove(); console.log('✅ Resume download initiated'); announceToScreenReader('Resume download started successfully'); @@ -93,7 +93,7 @@ export default function HeroSection(props: HeroSectionProps = {}) { }; return ( -
+
{/* Skip link for keyboard navigation */}
@@ -167,6 +167,6 @@ export default function HeroSection(props: HeroSectionProps = {}) { ))}
-
+ ); } \ No newline at end of file diff --git a/src/components/sections/ProjectsSection.tsx b/src/components/sections/ProjectsSection.tsx index de7ae8c..63b56ff 100644 --- a/src/components/sections/ProjectsSection.tsx +++ b/src/components/sections/ProjectsSection.tsx @@ -1,4 +1,4 @@ -import { Github, ExternalLink } from 'lucide-react'; +import { GitBranch, ExternalLink } from 'lucide-react'; import { useState, useRef, useEffect, type KeyboardEvent } from 'react'; import { personalConfig } from '../../config/personal'; import { getTexts } from '../../config/texts'; @@ -167,7 +167,7 @@ export default function ProjectsSection(props: ProjectsSectionProps = {}) { document.body.appendChild(announcement); setTimeout(() => { - document.body.removeChild(announcement); + announcement.remove(); }, 1000); }; @@ -248,9 +248,8 @@ export default function ProjectsSection(props: ProjectsSectionProps = {}) { {/* Conditionally visible action buttons */} -
@@ -265,7 +264,7 @@ export default function ProjectsSection(props: ProjectsSectionProps = {}) { tabIndex={isActive ? 0 : -1} onKeyDown={(e) => handleActionKeyDown(e, cardIndex, 0)} > -
+
@@ -305,18 +305,17 @@ export default function ProjectsSection(props: ProjectsSectionProps = {}) {
-
+
+ {/* Enhanced status indicator for active card */} {isActive && ( diff --git a/src/components/sections/ServicesSection.tsx b/src/components/sections/ServicesSection.tsx index d02824c..9fd27fc 100644 --- a/src/components/sections/ServicesSection.tsx +++ b/src/components/sections/ServicesSection.tsx @@ -85,10 +85,8 @@ export default function ServicesSection(props: ServicesSectionProps = {}) { const IconComponent = service.icon; return (
@@ -96,8 +94,6 @@ export default function ServicesSection(props: ServicesSectionProps = {}) {