diff --git a/src/components/sections/AboutSection.tsx b/src/components/sections/AboutSection.tsx index adb30c3..442ead4 100644 --- a/src/components/sections/AboutSection.tsx +++ b/src/components/sections/AboutSection.tsx @@ -1,4 +1,5 @@ -import { Code, Palette, ShieldCheck } from 'lucide-react'; +import { Code, Palette, ShieldCheck, Eye } from 'lucide-react'; +import { getTexts } from '../../config/texts'; import type { SkillBadge } from '../../data/SkillBadge'; import type { Service } from '../../data/Service'; import saschaImage from '../../assets/sascha.png'; @@ -13,39 +14,49 @@ interface AboutSectionProps { featureCards?: Service[]; } -export default function AboutSection({ - name = "Sascha Bach", - title = "About Me", - subtitle = "Web developer specializing in modern web technologies. Since 2020, I've been building efficient, scalable solutions – from complex Angular applications to creative React projects. My focus is on clean, maintainable code that solves real-world problems.", - bio = "As a dedicated web developer, I specialize in creating modern, responsive web applications using both Angular and React frameworks with TypeScript. I'm passionate about writing clean, maintainable code and ensuring exceptional user experiences across all devices and browsers. I have extensive experience with Angular and am actively developing my React expertise. Also, I have a history in working with Unity3D.", - profileImage = saschaImage, - skillBadges = [ - { text: "Angular & React Developer", colorClass: "primary" }, - { text: "Responsive Design Expert", colorClass: "secondary" }, - { text: "Cross-Browser Compatible", colorClass: "tertiary" }, - { text: "Continuous Learner", colorClass: "quaternary" } - ], - featureCards = [ - { - icon: Code, - title: "Web Development", - description: "Building modern web applications with Angular and React frameworks, leveraging TypeScript and JavaScript for robust, scalable solutions.", - colorClass: "primary" - }, - { - icon: Palette, - title: "Responsive Design", - description: "Creating pixel-perfect, responsive interfaces that work seamlessly across all devices and screen sizes.", - colorClass: "secondary" - }, - { - icon: ShieldCheck, - title: "Cross-Browser Compatibility", - description: "Ensuring consistent user experiences across all major browsers with thorough testing and optimization.", - colorClass: "tertiary" - } - ] -}: AboutSectionProps) { +export default function AboutSection(props: AboutSectionProps = {}) { + const texts = getTexts().about; + + // Use centralized texts as defaults, allow props to override + const { + name = texts.name, + title = texts.title, + subtitle = texts.subtitle, + bio = texts.bio, + profileImage = saschaImage, + skillBadges = [ + { text: "Angular & React Developer", colorClass: "primary" }, + { text: "Responsive Design Expert", colorClass: "secondary" }, + { text: "Cross-Browser Compatible", colorClass: "tertiary" }, + { text: "Continuous Learner", colorClass: "quaternary" } + ], + featureCards = [ + { + icon: Code, + title: "Web Development", + description: "Building modern web applications with Angular and React frameworks, leveraging TypeScript and JavaScript for robust, scalable solutions.", + colorClass: "primary" + }, + { + icon: Palette, + title: "Responsive Design", + description: "Creating pixel-perfect, responsive interfaces that work seamlessly across all devices and screen sizes.", + colorClass: "secondary" + }, + { + icon: ShieldCheck, + title: "Cross-Browser Compatibility", + description: "Ensuring consistent user experiences across all major browsers with thorough testing and optimization.", + colorClass: "tertiary" + }, + { + icon: Eye, + title: "Web Accessibility", + description: "Implementing accessibility best practices to deliver websites that support screen readers, keyboard navigation, and assistive technologies.", + colorClass: "quaternary" + } + ] + } = props; return (
diff --git a/src/components/sections/CertificationsSection.tsx b/src/components/sections/CertificationsSection.tsx index 64e1ef2..7107914 100644 --- a/src/components/sections/CertificationsSection.tsx +++ b/src/components/sections/CertificationsSection.tsx @@ -1,4 +1,5 @@ import { Award } from 'lucide-react'; +import { getTexts } from '../../config/texts'; import type { Certification } from '../../data/Certification'; interface CertificationsSectionProps { @@ -7,42 +8,46 @@ interface CertificationsSectionProps { certifications?: Certification[]; } -export default function CertificationsSection({ - title = "Certifications & Achievements", - subtitle = "My professional qualifications and continuous learning", - certifications = [ - { - name: "Practical Prompt Engineering Masterclass: Hands-On Learning", - issuer: "Udemy Lecture - Asif Farooqi, Abdullah Dar", - year: "2025", - icon: "" - }, - { - name: "Understanding Typescript", - issuer: "Udemy Lecture - Maximilian Schwarzmüller", - year: "2025", - icon: "" - }, - { - name: "Angular Step by Step", - issuer: "Udemy Lecture - Shivprasad Koirala", - year: "2020", - icon: "" - }, - { - name: "Angular and Typescript", - issuer: "LinkedIn TestDome", - year: "2020", - icon: "" - }, - { - name: "Bachelor of Science in Computer Science", - issuer: "TU Darmstadt", - year: "2015", - icon: "" - } - ] -}: CertificationsSectionProps) { +export default function CertificationsSection(props: CertificationsSectionProps = {}) { + const texts = getTexts().certifications; + + // Use centralized texts as defaults, allow props to override + const { + title = texts.title, + subtitle = texts.subtitle, + certifications = [ + { + name: "Practical Prompt Engineering Masterclass: Hands-On Learning", + issuer: "Udemy Lecture - Asif Farooqi, Abdullah Dar", + year: "2025", + icon: "" + }, + { + name: "Understanding Typescript", + issuer: "Udemy Lecture - Maximilian Schwarzmüller", + year: "2025", + icon: "" + }, + { + name: "Angular Step by Step", + issuer: "Udemy Lecture - Shivprasad Koirala", + year: "2020", + icon: "" + }, + { + name: "Angular and Typescript", + issuer: "LinkedIn TestDome", + year: "2020", + icon: "" + }, + { + name: "Bachelor of Science in Computer Science", + issuer: "TU Darmstadt", + year: "2015", + icon: "" + } + ] + } = props; // Sort certifications by year in descending order (newest first) const sortedCertifications = [...certifications].sort((a, b) => { return parseInt(b.year) - parseInt(a.year); diff --git a/src/components/sections/ContactSection.tsx b/src/components/sections/ContactSection.tsx index 8181a90..eaf061e 100644 --- a/src/components/sections/ContactSection.tsx +++ b/src/components/sections/ContactSection.tsx @@ -46,6 +46,12 @@ export default function ContactSection(props: ContactSectionProps = {}) { window.location.href = `mailto:info@sascha-bach.de?subject=${subject}&body=${body}`; }; + // Replace the hardcoded email with obfuscated construction + const getEmailAddress = () => { + const parts = ['freelancer', 'sascha-bach', 'de']; + return parts[0] + '@' + parts[1] + '.' + parts[2]; + }; + return (
@@ -75,9 +81,10 @@ export default function ContactSection(props: ContactSectionProps = {}) {