diff --git a/apps/web/src/features/contact/components/ContactSection.tsx b/apps/web/src/features/contact/components/ContactSection.tsx index 014010d..b1968dd 100644 --- a/apps/web/src/features/contact/components/ContactSection.tsx +++ b/apps/web/src/features/contact/components/ContactSection.tsx @@ -118,7 +118,7 @@ export const ContactSection: React.FC = () => {

Email

-

alex@himetoprogram.com

+

robert@bretz.dev

@@ -128,7 +128,7 @@ export const ContactSection: React.FC = () => {

Location

-

San Francisco, CA

+

Germany

diff --git a/apps/web/src/features/experience/data/experienceData.ts b/apps/web/src/features/experience/data/experienceData.ts index 37044ee..251df31 100644 --- a/apps/web/src/features/experience/data/experienceData.ts +++ b/apps/web/src/features/experience/data/experienceData.ts @@ -3,40 +3,40 @@ import type { Experience } from '../../../shared/types'; export const experienceData: Experience[] = [ { id: '1', - position: 'Senior React Developer', - company: 'Tech Startup Inc.', - startYear: 2023, + position: 'Senior Software Engineer', + company: 'Enterprise Systems Group', + startYear: 2024, description: - 'Led the development of multiple high-performance React applications, mentored junior developers, and implemented modern design systems', - technologies: ['React', 'TypeScript', 'Next.js', 'GraphQL'], + 'Designed scalable backend systems with .NET, SQL, Docker and advanced architecture patterns for enterprise workflows.', + technologies: ['.NET', 'SQL', 'Docker', 'Clean Architecture'], }, { id: '2', - position: 'Full Stack Developer', - company: 'Digital Agency Co.', + position: 'Full Stack Architect', + company: 'Innovative SaaS Labs', startYear: 2022, - endYear: 2023, + endYear: 2024, description: - 'Developed responsive web applications for clients, collaborated with designers, and optimized performance metrics', - technologies: ['React', 'Node.js', 'MongoDB', 'Tailwind CSS'], + 'Owned end-to-end product architecture using React, TypeScript, NestJS and Vertical Slice Architecture for high-performance applications.', + technologies: ['React', 'NestJS', 'TypeScript', 'Vertical Slice Architecture'], }, { id: '3', - position: 'Junior Frontend Developer', - company: 'Web Solutions Ltd.', - startYear: 2021, + position: 'Backend Developer', + company: 'Platform Engineering Co.', + startYear: 2020, endYear: 2022, description: - 'Built responsive web interfaces, fixed bugs, and participated in code reviews to improve code quality', - technologies: ['React', 'JavaScript', 'CSS', 'HTML'], + 'Built resilient APIs and development workflows with Express.js, Fastify, Node.js and Linux deployment automation.', + technologies: ['Express.js', 'Fastify', 'Node.js', 'Linux'], }, { id: '4', - position: 'Freelance Web Developer', - startYear: 2020, - endYear: 2021, + position: 'Creative Tech Consultant', + startYear: 2018, + endYear: 2020, description: - 'Created custom websites for various clients, managed projects independently, and delivered quality work on time', - technologies: ['React', 'WordPress', 'JavaScript', 'jQuery'], + 'Delivered immersive digital experiences using Unity, Blender, Godot and LaTeX documentation for creative product storytelling.', + technologies: ['Unity', 'Blender', 'Godot', 'LaTeX'], }, ]; diff --git a/apps/web/src/features/hero/components/HeroSection.tsx b/apps/web/src/features/hero/components/HeroSection.tsx index b8077c0..7d76ecb 100644 --- a/apps/web/src/features/hero/components/HeroSection.tsx +++ b/apps/web/src/features/hero/components/HeroSection.tsx @@ -46,17 +46,17 @@ export const HeroSection: React.FC = () => {
- React Developer & UI/UX Enthusiast | Based in San Francisco, CA + Softwareentwickler & Architektur-Enthusiast | Deutschland
{/* Main Heading */} - - React is Developer + + Robert Bretz
- Portfolio + Crafting clean, performant digital products
@@ -65,44 +65,44 @@ export const HeroSection: React.FC = () => { variants={itemVariants} className="text-gray-300 text-lg sm:text-xl max-w-2xl mx-auto mb-8" > - Building modern, scalable web applications with React, JavaScript, and cutting-edge technologies. - Transforming ideas into exceptional digital experiences. + Ich entwickle moderne Anwendungen mit React, TypeScript, Tailwind, .NET, NestJS und sauberer Architektur. + Mein Fokus liegt auf Performance, Vertical Slice Architecture, Docker-Deployments und skalierbaren Backend-Systemen. {/* Stats */} -
-
3+
-
Years Experience
+
+
4+
+
Years Engineering
-
-
50+
-
Projects Completed
+
+
30+
+
Delivered Solutions
-
-
98%
-
Client Satisfaction
+
+
99%
+
Performance Focus
{/* CTA Buttons */} {/* Scroll Indicator */} diff --git a/apps/web/src/features/navigation/components/Navigation.tsx b/apps/web/src/features/navigation/components/Navigation.tsx index f8dcb54..be53a93 100644 --- a/apps/web/src/features/navigation/components/Navigation.tsx +++ b/apps/web/src/features/navigation/components/Navigation.tsx @@ -1,49 +1,54 @@ -import React from 'react'; -import { motion } from 'framer-motion'; +import React, { useState } from 'react'; +import { motion, AnimatePresence } from 'framer-motion'; +import { Menu, X } from 'lucide-react'; import { useNavigation } from '../hooks/useNavigation'; import { useScrollToSection } from '../../../shared/hooks/useScrollToSection'; import Button from '../../../shared/components/Button'; const navItems = [ - { id: 'home', label: 'About' }, - { id: 'skills', label: 'Skills' }, - { id: 'projects', label: 'Projects' }, - { id: 'experience', label: 'Experience' }, - { id: 'contact', label: 'Contact' }, + { id: 'home', label: 'Über mich' }, + { id: 'skills', label: 'Fähigkeiten' }, + { id: 'projects', label: 'Projekte' }, + { id: 'experience', label: 'Erfahrung' }, + { id: 'contact', label: 'Kontakt' }, ]; export const Navigation: React.FC = () => { + const [isOpen, setIsOpen] = useState(false); const { activeSection, isScrolled } = useNavigation(); const { scrollToSection } = useScrollToSection(); + const handleNavClick = (id: string) => { + setIsOpen(false); + scrollToSection(id); + }; + return (
- {/* Logo */} scrollToSection('home')} + onClick={() => handleNavClick('home')} > - </> Alex + </> Robert Bretz - {/* Nav Items */}
{navItems.map((item) => ( scrollToSection(item.id)} + onClick={() => handleNavClick(item.id)} className={`text-sm font-medium transition-colors duration-300 pb-2 border-b-2 ${ activeSection === item.id ? 'text-green-500 border-green-500' @@ -57,12 +62,51 @@ export const Navigation: React.FC = () => { ))}
- {/* CTA Button */} - +
+
+ +
+ + +
+ + + {isOpen && ( + +
+ {navItems.map((item) => ( + + ))} +
+
+ )} +
); }; diff --git a/apps/web/src/features/projects/components/ProjectCard.tsx b/apps/web/src/features/projects/components/ProjectCard.tsx index 9133cba..4a3a21f 100644 --- a/apps/web/src/features/projects/components/ProjectCard.tsx +++ b/apps/web/src/features/projects/components/ProjectCard.tsx @@ -12,58 +12,58 @@ interface ProjectCardProps { export const ProjectCard: React.FC = ({ project, index }) => { return ( {/* Image */}
{project.title} -
+
{/* Content */}
- {/* Category Badge */} -
+
{project.category}
-

{project.title}

-

{project.description}

+

{project.title}

+

{project.description}

- {/* Tags */}
{project.tags.slice(0, 3).map((tag) => ( {tag} ))} {project.tags.length > 3 && ( - + +{project.tags.length - 3} )}
- {/* Links */} -
+
{project.link && ( Live @@ -72,9 +72,11 @@ export const ProjectCard: React.FC = ({ project, index }) => { {project.github && ( Code diff --git a/apps/web/src/features/projects/components/ProjectsSection.tsx b/apps/web/src/features/projects/components/ProjectsSection.tsx index 122ac22..8b8226b 100644 --- a/apps/web/src/features/projects/components/ProjectsSection.tsx +++ b/apps/web/src/features/projects/components/ProjectsSection.tsx @@ -5,12 +5,12 @@ import { ProjectCard } from './ProjectCard'; import AnimatedSection from '../../../shared/components/AnimatedSection'; import type { Project } from '../../../shared/types'; -type Category = 'All' | 'Web Apps' | 'UI Components' | 'Full Stack'; +type Category = 'Alle' | 'Webanwendungen' | 'UI-Komponenten' | 'Fullstack'; export const ProjectsSection: React.FC = () => { - const [selectedCategory, setSelectedCategory] = useState('All'); + const [selectedCategory, setSelectedCategory] = useState('Alle'); - const categories: Category[] = ['All', 'Web Apps', 'UI Components', 'Full Stack']; + const categories: Category[] = ['Alle', 'Webanwendungen', 'UI-Komponenten', 'Fullstack']; const filteredProjects = projectsData.filter( (project: Project) => @@ -29,14 +29,14 @@ export const ProjectsSection: React.FC = () => { transition={{ duration: 0.5 }} className="inline-block px-4 py-2 rounded-full border border-green-500/50 bg-green-500/10 mb-6" > - My Work + Meine Projekte

- Featured Projects + Ausgewählte Projekte

- Showcasing my best work and achievements + Eine Auswahl meiner besten Lösungen und Erfolge

diff --git a/apps/web/src/features/projects/data/projectsData.ts b/apps/web/src/features/projects/data/projectsData.ts index 4b55954..d0d2baa 100644 --- a/apps/web/src/features/projects/data/projectsData.ts +++ b/apps/web/src/features/projects/data/projectsData.ts @@ -3,34 +3,34 @@ import type { Project } from '../../../shared/types'; export const projectsData: Project[] = [ { id: '1', - title: 'E-Commerce Platform', + title: 'Order Flow Microservice Suite', description: - 'Full-stack e-commerce platform with product catalog, shopping cart, and payment integration using Stripe', - image: 'https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=800&h=600&fit=crop', - tags: ['React', 'Next.js', 'TypeScript', 'Tailwind CSS', 'MongoDB'], - category: 'Full Stack', + 'Skalierbare Auftragsverwaltung mit .NET, SQL, Docker und SQS für robuste, ereignisgesteuerte Commerce-Flows.', + image: 'https://images.unsplash.com/photo-1498050108023-c5249f4df085?w=800&h=600&fit=crop', + tags: ['.NET', 'Docker', 'SQL', 'SQS', 'Clean Architecture'], + category: 'Fullstack', link: '#', github: '#', }, { id: '2', - title: 'Task Management Dashboard', + title: 'Design System Engine', description: - 'A collaborative task management application with real-time updates, user authentication, and advanced filtering', - image: 'https://images.unsplash.com/photo-1552664730-d307ca884978?w=800&h=600&fit=crop', - tags: ['React', 'Firebase', 'TypeScript', 'Tailwind CSS'], - category: 'Web Apps', + 'Wiederverwendbares UI-System mit React, Tailwind, Figma-Tokens und Storybook für teamübergreifende Konsistenz.', + image: 'https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=800&h=600&fit=crop', + tags: ['React', 'Tailwind CSS', 'Figma', 'Storybook'], + category: 'UI-Komponenten', link: '#', github: '#', }, { id: '3', - title: 'Component Library', + title: 'Performance Platform', description: - 'A comprehensive reusable component library with Storybook documentation and design system tokens', - image: 'https://images.unsplash.com/photo-1517694712202-14dd9538aa97?w=800&h=600&fit=crop', - tags: ['React', 'Storybook', 'Tailwind CSS', 'TypeScript'], - category: 'UI Components', + 'Leistungsstarkes Backend mit Node.js, Fastify, NestJS und Docker, optimiert für schnelle Deployments und Observability.', + image: 'https://images.unsplash.com/photo-1504384308090-c894fdcc538d?w=800&h=600&fit=crop', + tags: ['Node.js', 'Fastify', 'NestJS', 'Docker', 'Linux'], + category: 'Webanwendungen', link: '#', github: '#', }, diff --git a/apps/web/src/features/skills/components/SkillCard.tsx b/apps/web/src/features/skills/components/SkillCard.tsx index ae9c01f..c93f2ee 100644 --- a/apps/web/src/features/skills/components/SkillCard.tsx +++ b/apps/web/src/features/skills/components/SkillCard.tsx @@ -4,7 +4,7 @@ import { iconMap } from '../data/skillsData'; import type { Skill } from '../../../shared/types'; interface SkillCardProps { - skill: Skill; + skill: Skill & { iconName: keyof typeof iconMap }; index: number; } @@ -23,44 +23,41 @@ export const SkillCard: React.FC = ({ skill, index }) => { Beginner: 'bg-blue-500/20', }; - // Get icon from the mapped skill name - const IconComponent = iconMap[skill.name as keyof typeof iconMap]; + const IconComponent = iconMap[skill.iconName]; return (
-
+
{IconComponent && }
- + {skill.level}
-

{skill.name}

+

{skill.name}

- {/* Progress Bar */}
- Proficiency + Experience {skill.years}+ yrs
-
+
diff --git a/apps/web/src/features/skills/components/SkillsSection.tsx b/apps/web/src/features/skills/components/SkillsSection.tsx index 355b184..834875f 100644 --- a/apps/web/src/features/skills/components/SkillsSection.tsx +++ b/apps/web/src/features/skills/components/SkillsSection.tsx @@ -4,12 +4,27 @@ import { skillsData } from '../data/skillsData'; import { SkillCard } from './SkillCard'; import AnimatedSection from '../../../shared/components/AnimatedSection'; -type Category = 'All' | 'Frontend' | 'Backend' | 'Tools' | 'Design'; +type Category = + | 'Alle' + | 'Frontend' + | 'Backend' + | 'Tools' + | 'Design' + | 'Architektur' + | 'Kreativ'; export const SkillsSection: React.FC = () => { - const [selectedCategory, setSelectedCategory] = useState('All'); + const [selectedCategory, setSelectedCategory] = useState('Alle'); - const categories: Category[] = ['All', 'Frontend', 'Backend', 'Tools', 'Design']; + const categories: Category[] = [ + 'Alle', + 'Frontend', + 'Backend', + 'Tools', + 'Design', + 'Architektur', + 'Kreativ', + ]; const filteredSkills = skillsData.filter( (skill) => selectedCategory === 'All' || skill.category === selectedCategory @@ -27,14 +42,14 @@ export const SkillsSection: React.FC = () => { transition={{ duration: 0.5 }} className="inline-block px-4 py-2 rounded-full border border-green-500/50 bg-green-500/10 mb-6" > - My Expertise + Meine Expertise

- Skills & Technologies + Fähigkeiten & Technologien

- A comprehensive overview of my technical skills and proficiency levels + Ein Überblick über meine technischen Fähigkeiten und Erfahrungsstufen.

diff --git a/apps/web/src/features/skills/data/skillsData.ts b/apps/web/src/features/skills/data/skillsData.ts index 2044299..8b788ab 100644 --- a/apps/web/src/features/skills/data/skillsData.ts +++ b/apps/web/src/features/skills/data/skillsData.ts @@ -6,20 +6,40 @@ import { GitBranch, Wind, Package, + PenTool, + Layers, + Terminal, + Box, + FileText, + Gamepad, + ShieldCheck, } from 'lucide-react'; import type { Skill } from '../../../shared/types'; export const iconMap = { 'React.js': Code, + 'Vue.js': Code, 'JavaScript': Zap, 'TypeScript': Code, - 'Next.js': Package, - 'Node.js': Database, - 'REST APIs': Code, - 'Git & GitHub': GitBranch, - 'Responsive Design': Layout, - 'Figma': Wind, 'Tailwind CSS': Wind, + 'CSS': Layout, + '.NET': ShieldCheck, + 'Node.js': Database, + 'Express.js': Zap, + 'Fastify': Box, + 'NestJS': Layers, + 'SQL / SQS': Database, + 'Git & GitHub': GitBranch, + 'Docker': Box, + 'Linux': Terminal, + 'Clean Architecture': Layers, + 'Vertical Slice Architecture': Layers, + 'Design Patterns': Layout, + 'Figma': PenTool, + 'Unity': Gamepad, + 'Blender': Package, + 'Godot': Package, + 'LaTeX': FileText, }; export const skillsData: Array & { iconName: keyof typeof iconMap }> = [ @@ -27,70 +47,140 @@ export const skillsData: Array & { iconName: keyof typeof ic name: 'React.js', iconName: 'React.js', level: 'Expert', - years: 3, + years: 4, category: 'Frontend', }, { - name: 'JavaScript', - iconName: 'JavaScript', - level: 'Expert', - years: 4, + name: 'Vue.js', + iconName: 'Vue.js', + level: 'Advanced', + years: 3, category: 'Frontend', }, { name: 'TypeScript', iconName: 'TypeScript', - level: 'Advanced', - years: 2, - category: 'Frontend', - }, - { - name: 'Next.js', - iconName: 'Next.js', - level: 'Advanced', - years: 2, - category: 'Frontend', - }, - { - name: 'Node.js', - iconName: 'Node.js', - level: 'Intermediate', - years: 2, - category: 'Backend', - }, - { - name: 'REST APIs', - iconName: 'REST APIs', - level: 'Advanced', - years: 3, - category: 'Backend', - }, - { - name: 'Git & GitHub', - iconName: 'Git & GitHub', - level: 'Advanced', - years: 4, - category: 'Tools', - }, - { - name: 'Responsive Design', - iconName: 'Responsive Design', level: 'Expert', - years: 3, - category: 'Design', - }, - { - name: 'Figma', - iconName: 'Figma', - level: 'Intermediate', - years: 2, - category: 'Design', + years: 4, + category: 'Frontend', }, { name: 'Tailwind CSS', iconName: 'Tailwind CSS', level: 'Expert', - years: 3, + years: 4, category: 'Frontend', }, + { + name: '.NET', + iconName: '.NET', + level: 'Advanced', + years: 3, + category: 'Backend', + }, + { + name: 'Express.js', + iconName: 'Express.js', + level: 'Advanced', + years: 3, + category: 'Backend', + }, + { + name: 'Fastify', + iconName: 'Fastify', + level: 'Advanced', + years: 2, + category: 'Backend', + }, + { + name: 'NestJS', + iconName: 'NestJS', + level: 'Advanced', + years: 2, + category: 'Backend', + }, + { + name: 'SQL / SQS', + iconName: 'SQL / SQS', + level: 'Advanced', + years: 3, + category: 'Backend', + }, + { + name: 'Clean Architecture', + iconName: 'Clean Architecture', + level: 'Advanced', + years: 3, + category: 'Architektur', + }, + { + name: 'Vertical Slice Architecture', + iconName: 'Vertical Slice Architecture', + level: 'Advanced', + years: 3, + category: 'Architektur', + }, + { + name: 'Design Patterns', + iconName: 'Design Patterns', + level: 'Advanced', + years: 4, + category: 'Architektur', + }, + { + name: 'Docker', + iconName: 'Docker', + level: 'Advanced', + years: 4, + category: 'Tools', + }, + { + name: 'Git & GitHub', + iconName: 'Git & GitHub', + level: 'Expert', + years: 5, + category: 'Tools', + }, + { + name: 'Linux', + iconName: 'Linux', + level: 'Advanced', + years: 4, + category: 'Tools', + }, + { + name: 'Figma', + iconName: 'Figma', + level: 'Advanced', + years: 3, + category: 'Design', + }, + { + name: 'Unity', + iconName: 'Unity', + level: 'Intermediate', + years: 2, + category: 'Kreativ', + }, + { + name: 'Blender', + iconName: 'Blender', + level: 'Intermediate', + years: 2, + category: 'Kreativ', + }, + { + name: 'Godot', + iconName: 'Godot', + level: 'Intermediate', + years: 2, + category: 'Kreativ', + }, + { + name: 'LaTeX', + iconName: 'LaTeX', + level: 'Intermediate', + years: 3, + category: 'Kreativ', + }, ]; diff --git a/apps/web/src/index.css b/apps/web/src/index.css index dc598cc..a4aed39 100644 --- a/apps/web/src/index.css +++ b/apps/web/src/index.css @@ -13,6 +13,7 @@ html { scroll-behavior: smooth; + scroll-padding-top: 92px; } body { diff --git a/apps/web/src/shared/components/Footer.tsx b/apps/web/src/shared/components/Footer.tsx index 7d1d757..da8fce4 100644 --- a/apps/web/src/shared/components/Footer.tsx +++ b/apps/web/src/shared/components/Footer.tsx @@ -14,9 +14,9 @@ const Footer: React.FC = () => { whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} > -

</> Alex

+

</> Robert Bretz

- Crafting seamless digital experiences with modern web technologies + Building clean architecture, fast systems and modern web products.

@@ -80,7 +80,7 @@ const Footer: React.FC = () => { {/* Copyright */}

- © {currentYear} Alex Johnson. All rights reserved. + © {currentYear} Robert Bretz. All rights reserved.

Built with 💚 using React & Tailwind CSS diff --git a/apps/web/src/shared/hooks/useScrollToSection.ts b/apps/web/src/shared/hooks/useScrollToSection.ts index 9a44b1b..88d95cd 100644 --- a/apps/web/src/shared/hooks/useScrollToSection.ts +++ b/apps/web/src/shared/hooks/useScrollToSection.ts @@ -4,7 +4,9 @@ export const useScrollToSection = () => { const scrollToSection = useCallback((sectionId: string) => { const element = document.getElementById(sectionId); if (element) { - element.scrollIntoView({ behavior: 'smooth' }); + const headerOffset = 92; + const elementPosition = element.getBoundingClientRect().top + window.pageYOffset; + window.scrollTo({ top: elementPosition - headerOffset, behavior: 'smooth' }); } }, []); diff --git a/apps/web/src/shared/types/index.ts b/apps/web/src/shared/types/index.ts index c8472f5..e7957ca 100644 --- a/apps/web/src/shared/types/index.ts +++ b/apps/web/src/shared/types/index.ts @@ -2,7 +2,7 @@ export interface Skill { name: string; level: 'Expert' | 'Advanced' | 'Intermediate' | 'Beginner'; years: number; - category: 'Frontend' | 'Backend' | 'Tools' | 'Design'; + category: 'Frontend' | 'Backend' | 'Tools' | 'Design' | 'Architektur' | 'Kreativ'; } export interface Project { @@ -11,7 +11,7 @@ export interface Project { description: string; image: string; tags: string[]; - category: 'Web Apps' | 'UI Components' | 'Full Stack'; + category: 'Webanwendungen' | 'UI-Komponenten' | 'Fullstack'; link?: string; github?: string; }