259 lines
10 KiB
TypeScript
259 lines
10 KiB
TypeScript
'use client';
|
|||
|
|
|
||
|
|
import { useEffect, useRef, useState } from 'react';
|
||
|
|
|
||
|
|
export default function Intro() {
|
||
|
|
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);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
}, []);
|
||
|
|
|
||
|
|
const highlights = [
|
||
|
|
{ value: '20+', label: 'Jahre Erfahrung' },
|
||
|
|
{ value: '10+', label: 'Jahre Freelancing' },
|
||
|
|
{ value: '9+', label: 'Mitarbeiter geführt' },
|
||
|
|
{ value: '3', label: 'Produkte verantwortet' },
|
||
|
|
];
|
||
|
|
|
||
|
|
const skills = [
|
||
|
|
'Product Owner',
|
||
|
|
'Technical Project Manager',
|
||
|
|
'Laravel',
|
||
|
|
'Vue.js',
|
||
|
|
'PHP',
|
||
|
|
'JavaScript',
|
||
|
|
'MySQL',
|
||
|
|
'MSSQL',
|
||
|
|
'Systemarchitektur',
|
||
|
|
'User Experience',
|
||
|
|
'Team Leadership',
|
||
|
|
'Compliance',
|
||
|
|
];
|
||
|
|
|
||
|
|
const timeline = [
|
||
|
|
{ year: '2021 - heute', company: 'Sopra Financial Technology GmbH', role: 'Technical Product Owner' },
|
||
|
|
{ year: '2019 - 2020', company: 'APPsolute Mobility', role: 'Product Owner & Technical Project Manager' },
|
||
|
|
{ year: '2014 - 2019', company: 'SCC Fahrzeugtechnik GmbH', role: 'Leiter IT Abteilung' },
|
||
|
|
{ year: '2010 - 2014', company: 'Trustec Energy GmbH', role: 'Marketing Manager' },
|
||
|
|
{ year: '2000 - 2010', company: 'Freelancer', role: 'Web Development & Design' },
|
||
|
|
];
|
||
|
|
|
||
|
|
return (
|
||
|
|
<section
|
||
|
|
id="intro"
|
||
|
|
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 mb-12 text-center relative inline-block w-full after:content-[''] after:block after:w-12 after:h-1 after:bg-primary after:mt-6 after:mx-auto">
|
||
|
|
Über mich
|
||
|
|
</h2>
|
||
|
|
|
||
|
|
{/* Highlights Box */}
|
||
|
|
<div className="grid grid-cols-2 md:grid-cols-4 gap-4 mb-12">
|
||
|
|
{highlights.map((item, index) => (
|
||
|
|
<div
|
||
|
|
key={index}
|
||
|
|
className={`bg-gradient-to-br from-primary/10 to-primary/5 rounded-lg p-6 text-center border border-primary/20 hover:border-primary/40 transition-all hover:shadow-lg ${
|
||
|
|
isVisible ? 'animate-fade-in' : 'opacity-0'
|
||
|
|
}`}
|
||
|
|
style={{ animationDelay: `${index * 100}ms` }}
|
||
|
|
>
|
||
|
|
<div className="text-3xl sm:text-4xl font-bold text-primary mb-2">
|
||
|
|
{item.value}
|
||
|
|
</div>
|
||
|
|
<div className="text-sm text-text-light font-semibold">
|
||
|
|
{item.label}
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
))}
|
||
|
|
</div>
|
||
|
|
|
||
|
|
{/* Main Text */}
|
||
|
|
<div className="max-w-4xl mx-auto space-y-6 text-text-light leading-relaxed text-base sm:text-lg mb-12">
|
||
|
|
<p>
|
||
|
|
Mein Name ist Sebastian Fröhlich, ich bin 47 Jahre alt und lebe zusammen mit meiner
|
||
|
|
Familie in Neuendettelsau im Landkreis Ansbach.
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p>
|
||
|
|
Von der Diskette zur Cloud durfte ich diesen spannenden und rasanten technischen
|
||
|
|
Wandel miterleben. Besonders die Themen{' '}
|
||
|
|
<strong className="text-text font-semibold">
|
||
|
|
redundante Datenerfassung, Systemarchitektur und User Experience
|
||
|
|
</strong>{' '}
|
||
|
|
haben mich schon immer besonders fasziniert.
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p>
|
||
|
|
Bereits während meiner Berufsausbildung wurde mir die Verantwortung für den
|
||
|
|
Firmenserver (Netware) übertragen.
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p>
|
||
|
|
Für die A-Socks GmbH, einem Unternehmen aus der Textilbranche entwickelte ich einen{' '}
|
||
|
|
<strong className="text-text font-semibold">
|
||
|
|
Shop (HTML/ Javascript/ Actionscript - Flash)
|
||
|
|
</strong>, gestaltete die Verkaufsverpackungen und programmierte ein automatisiertes
|
||
|
|
EAN Vergabe System.
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p>
|
||
|
|
Als Freelancer war ich über 10 Jahre für Unternehmenskunden aus unterschiedlichen
|
||
|
|
Branchen tätig. Mein Fokus lag dabei auf webbasierten Lösungen wie z.B.{' '}
|
||
|
|
<strong className="text-text font-semibold">
|
||
|
|
Präsentations- und Buchungssystemen, CMS-Systemen und Internetshops
|
||
|
|
</strong>.
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p>
|
||
|
|
Im Jahr 2010 erhielt ich die Gelegenheit meine Kompetenzen als Marketing Manager für
|
||
|
|
die Trustec Energy GmbH in der Solarbranche einzusetzen. Nach 4 Jahren erhielt ich eine
|
||
|
|
betriebsbedingte Kündigung und wechselte 2014 zur SCC Fahrzeugtechnik GmbH.
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p>
|
||
|
|
Als{' '}
|
||
|
|
<strong className="text-text font-semibold">Leiter der IT Abteilung</strong> war ich
|
||
|
|
hier fachlich und disziplinarisch für 6 Mitarbeiter und 3 Auszubildende verantwortlich.
|
||
|
|
Darüber hinaus entwickelte und programmierte ich ein eigenes Firmen-Intranet{' '}
|
||
|
|
<strong className="text-text font-semibold">
|
||
|
|
(PHP Framework: Laravel, Javascript/ Vue.js, MySql/ MSSQL)
|
||
|
|
</strong>, wartete und migrierte die Server und sorgte für ein funktionierendes Backup-
|
||
|
|
und Sicherheitssystem{' '}
|
||
|
|
<strong className="text-text font-semibold">(Master-Master Replication, BashScript)</strong>.
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p>
|
||
|
|
Die nächste Karrierestufe erreichte ich mit meinem Wechsel zu einem Startupunternehmen,
|
||
|
|
wo ich als{' '}
|
||
|
|
<strong className="text-text font-semibold">
|
||
|
|
Product Owner & Technical Project Manager
|
||
|
|
</strong>{' '}
|
||
|
|
für die Firma "APPsolute Mobility" tätig war. Leider konnte das Startup die gesetzten
|
||
|
|
Ziele nicht erreichen, weswegen ich 1 Jahr später zu meinem jetzigen Arbeitgeber wechselte.
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p>
|
||
|
|
Bei der{' '}
|
||
|
|
<strong className="text-text font-semibold">Sopra Financial Technology GmbH</strong> bin
|
||
|
|
ich seit 2021 als{' '}
|
||
|
|
<strong className="text-text font-semibold">Technical Product Owner</strong> im
|
||
|
|
Bereich Regulatory & Risk tätig. Ich verantworte{' '}
|
||
|
|
<strong className="text-text font-semibold">3 Fintech-Produkte</strong> im{' '}
|
||
|
|
<strong className="text-text font-semibold">Bankenmeldewesen</strong> und stelle
|
||
|
|
deren reibungslosen Betrieb unter strikten{' '}
|
||
|
|
<strong className="text-text font-semibold">regulatorischen Vorgaben</strong> sicher.
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p>
|
||
|
|
Zu meinen Kernaufgaben gehören die{' '}
|
||
|
|
<strong className="text-text font-semibold">
|
||
|
|
technische Projektleitung komplexer Migrationen
|
||
|
|
</strong>{' '}
|
||
|
|
(z.B. Kubernetes-Migration ohne Ausfallzeiten), die Steuerung{' '}
|
||
|
|
<strong className="text-text font-semibold">
|
||
|
|
internationaler Teams (inkl. Nearshore)
|
||
|
|
</strong>, Code Reviews sowie die aktive Teilnahme an{' '}
|
||
|
|
<strong className="text-text font-semibold">Cost-Savings-Programmen</strong>.
|
||
|
|
Darüber hinaus arbeite ich in den Bereichen{' '}
|
||
|
|
<strong className="text-text font-semibold">
|
||
|
|
Managed Application & Cloud Service
|
||
|
|
</strong>, wo ich neue Produkte architektonisch begleite und bei
|
||
|
|
Bieterverfahren meine Expertise einbringe.
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p className="pt-4 border-t border-gray-200">
|
||
|
|
Mit dieser Präsentation möchte ich die Gelegenheit nutzen, mich als motivierten und
|
||
|
|
kompetenten Bewerber bei Ihrem Unternehmen vorzustellen.
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p>
|
||
|
|
Nachfolgend können Sie sich einen Eindruck über mich und meine abgeschlossenen Projekte{' '}
|
||
|
|
<a
|
||
|
|
href="#portfolio"
|
||
|
|
className="text-primary hover:text-primary-dark font-semibold underline underline-offset-4 transition-colors"
|
||
|
|
>
|
||
|
|
hier
|
||
|
|
</a>{' '}
|
||
|
|
verschaffen. Gerne überzeuge ich Sie auch in einem persönlichen Gespräch von mir.
|
||
|
|
</p>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
{/* Timeline */}
|
||
|
|
<div className="mb-12">
|
||
|
|
<h3 className="text-2xl font-bold text-text mb-8 text-center">
|
||
|
|
Karriere-Timeline
|
||
|
|
</h3>
|
||
|
|
<div className="max-w-3xl mx-auto">
|
||
|
|
{timeline.map((item, index) => (
|
||
|
|
<div
|
||
|
|
key={index}
|
||
|
|
className={`relative pl-8 pb-8 border-l-2 border-primary/30 last:border-transparent ${
|
||
|
|
isVisible ? 'animate-fade-in' : 'opacity-0'
|
||
|
|
}`}
|
||
|
|
style={{ animationDelay: `${(index + 4) * 100}ms` }}
|
||
|
|
>
|
||
|
|
{/* Timeline dot */}
|
||
|
|
<div className="absolute -left-[9px] top-0 w-4 h-4 rounded-full bg-primary border-4 border-white shadow-md" />
|
||
|
|
|
||
|
|
<div className="bg-bg-light rounded-lg p-6 hover:shadow-lg transition-shadow">
|
||
|
|
<div className="flex flex-col sm:flex-row sm:justify-between sm:items-start mb-2">
|
||
|
|
<h4 className="text-lg font-bold text-text">{item.role}</h4>
|
||
|
|
<span className="text-sm font-semibold text-primary whitespace-nowrap">
|
||
|
|
{item.year}
|
||
|
|
</span>
|
||
|
|
</div>
|
||
|
|
<p className="text-text-light">{item.company}</p>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
))}
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
{/* Skills Tags */}
|
||
|
|
<div className="max-w-4xl mx-auto">
|
||
|
|
<h3 className="text-2xl font-bold text-text mb-6 text-center">
|
||
|
|
Kernkompetenzen
|
||
|
|
</h3>
|
||
|
|
<div className="flex flex-wrap justify-center gap-3">
|
||
|
|
{skills.map((skill, index) => (
|
||
|
|
<span
|
||
|
|
key={index}
|
||
|
|
className={`px-4 py-2 bg-primary/10 text-primary font-semibold rounded-full text-sm border border-primary/20 hover:bg-primary hover:text-white transition-all cursor-default hover:scale-105 ${
|
||
|
|
isVisible ? 'animate-fade-in' : 'opacity-0'
|
||
|
|
}`}
|
||
|
|
style={{ animationDelay: `${(index + timeline.length + 4) * 50}ms` }}
|
||
|
|
>
|
||
|
|
{skill}
|
||
|
|
</span>
|
||
|
|
))}
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</section>
|
||
|
|
);
|
||
|
|
}
|