- Add all Next.js application files - Include components, app structure, and public assets - Remove empty bewerbung placeholder folder - Update .gitignore for Next.js project 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
134 lines
4.8 KiB
TypeScript
134 lines
4.8 KiB
TypeScript
'use client';
|
|
|
|
import { useEffect, useRef, useState } from 'react';
|
|
|
|
interface SoftSkill {
|
|
name: string;
|
|
level: number; // 1-5
|
|
icon: string;
|
|
}
|
|
|
|
const softSkills: SoftSkill[] = [
|
|
{ name: 'Organisation', level: 4, icon: '📋' },
|
|
{ name: 'Kommunikation', level: 5, icon: '💬' },
|
|
{ name: 'Selbstständigkeit', level: 4, icon: '🎯' },
|
|
{ name: 'Teamfähigkeit', level: 5, icon: '🤝' },
|
|
{ name: 'Verantwortung', level: 5, icon: '✓' },
|
|
{ name: 'Engagement', level: 5, icon: '🚀' },
|
|
{ name: 'Kompromissbereitschaft', level: 4, icon: '🤔' },
|
|
{ name: 'Aufgeschlossenheit', level: 5, icon: '🌟' },
|
|
{ name: 'Lernbereitschaft', level: 5, icon: '📚' },
|
|
{ name: 'Zielstrebigkeit', level: 5, icon: '🎯' },
|
|
{ name: 'Überzeugungsfähigkeit', level: 4, icon: '💡' },
|
|
{ name: 'Lösungsorientiert', level: 5, icon: '🔧' },
|
|
];
|
|
|
|
export default function SoftSkills() {
|
|
const [isVisible, setIsVisible] = useState(false);
|
|
const ref = useRef<HTMLElement>(null);
|
|
|
|
useEffect(() => {
|
|
const currentRef = ref.current;
|
|
const observer = new IntersectionObserver(
|
|
([entry]) => {
|
|
if (entry.isIntersecting) {
|
|
setIsVisible(true);
|
|
}
|
|
},
|
|
{ threshold: 0.1 }
|
|
);
|
|
|
|
if (currentRef) {
|
|
observer.observe(currentRef);
|
|
}
|
|
|
|
return () => {
|
|
if (currentRef) {
|
|
observer.unobserve(currentRef);
|
|
}
|
|
};
|
|
}, []);
|
|
|
|
return (
|
|
<section
|
|
id="soft-skills"
|
|
ref={ref}
|
|
className={`py-20 px-4 sm:px-6 lg:px-8 bg-white transition-opacity duration-1000 ${
|
|
isVisible ? 'opacity-100' : 'opacity-0'
|
|
}`}
|
|
>
|
|
<div className="max-w-6xl mx-auto">
|
|
<h2 className="text-3xl sm:text-4xl font-bold text-text text-center mb-4 relative inline-block w-full">
|
|
Persönliche Fähigkeiten
|
|
</h2>
|
|
<p className="text-center text-text-light mb-12 max-w-2xl mx-auto">
|
|
Soft Skills, die mich als Teamplayer und Leader auszeichnen
|
|
</p>
|
|
|
|
{/* Skills Grid */}
|
|
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6">
|
|
{softSkills.map((skill, index) => (
|
|
<div
|
|
key={skill.name}
|
|
className={`group bg-gradient-to-br from-white to-bg-light rounded-xl p-6 shadow-md hover:shadow-2xl transition-all duration-300 hover:-translate-y-2 border border-gray-100 hover:border-primary/30 ${
|
|
isVisible ? 'animate-fade-in' : 'opacity-0'
|
|
}`}
|
|
style={{ animationDelay: `${index * 50}ms` }}
|
|
>
|
|
{/* Icon */}
|
|
<div className="text-4xl mb-4 group-hover:scale-110 transition-transform duration-300">
|
|
{skill.icon}
|
|
</div>
|
|
|
|
{/* Skill Name */}
|
|
<h3 className="font-bold text-text mb-3 text-base group-hover:text-primary transition-colors">
|
|
{skill.name}
|
|
</h3>
|
|
|
|
{/* Level Dots */}
|
|
<div className="flex gap-1.5">
|
|
{[1, 2, 3, 4, 5].map((dot) => (
|
|
<div
|
|
key={dot}
|
|
className={`w-2.5 h-2.5 rounded-full transition-all duration-300 ${
|
|
dot <= skill.level
|
|
? 'bg-primary group-hover:scale-125'
|
|
: 'bg-gray-300'
|
|
}`}
|
|
style={{
|
|
transitionDelay: `${index * 50 + dot * 30}ms`,
|
|
}}
|
|
/>
|
|
))}
|
|
</div>
|
|
|
|
{/* Hover Effect - Level Text */}
|
|
<div className="mt-3 transition-opacity duration-300">
|
|
<span className="text-xs text-primary font-semibold">
|
|
{skill.level === 5 ? 'Expertenlevel' : skill.level === 4 ? 'Sehr gut' : 'Gut'}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
|
|
{/* Bottom Info */}
|
|
<div className="mt-16 bg-gradient-to-r from-primary/5 via-primary/10 to-primary/5 rounded-xl p-8 text-center">
|
|
<h3 className="text-xl font-bold text-text mb-4">
|
|
Warum diese Fähigkeiten wichtig sind
|
|
</h3>
|
|
<p className="text-text-light leading-relaxed max-w-3xl mx-auto">
|
|
In über 20 Jahren Berufserfahrung habe ich gelernt, dass technisches Know-how nur die
|
|
halbe Miete ist. Erfolgreiche Projekte entstehen durch{' '}
|
|
<strong className="text-primary">klare Kommunikation</strong>,
|
|
<strong className="text-primary"> Teamarbeit</strong> und die Fähigkeit, auch in
|
|
stressigen Situationen <strong className="text-primary">lösungsorientiert</strong> zu bleiben.
|
|
Diese Soft Skills ermöglichen es mir, komplexe technische Anforderungen verständlich zu
|
|
vermitteln und Teams erfolgreich zu führen.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
);
|
|
}
|