Reflect career progression from Technical Product Owner to AI Solution Architect & Technical Architect (since June 2024). Add AI & ML skill category (LangChain, RAG, Agentic Systems, MCP Server). Pin dependency versions, clean up config, move favicon, and add new PDF assets. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
288 lines
16 KiB
TypeScript
288 lines
16 KiB
TypeScript
'use client';
|
|
|
|
import { useState } from 'react';
|
|
|
|
interface Job {
|
|
id: string;
|
|
title: string;
|
|
company: string;
|
|
location: string;
|
|
period: string;
|
|
description: string;
|
|
responsibilities: string[];
|
|
}
|
|
|
|
const jobs: Job[] = [
|
|
{
|
|
id: 'job1',
|
|
title: 'AI Solution Architect & Technical Architect',
|
|
company: 'Sopra Financial Technology GmbH',
|
|
location: 'Managed Application & Cloud Service, Nürnberg',
|
|
period: 'Juni 2024 - heute',
|
|
description: 'Konzeption und Implementierung von Enterprise-AI-Lösungen für regulierte Fintech-Produkte im Bereich Antifinancial Crime (AFC) und Compliance. Architektonische Begleitung mit Fokus auf Cloud-Native-Architekturen.',
|
|
responsibilities: [
|
|
'Architektonische Konzeption von KI-Initiativen im regulierten Bankenumfeld (BaFin/KRITIS)',
|
|
'Design und Implementierung von AI Agentic Systemen für AFC-Compliance',
|
|
'Aufbau skalierbarer RAG-basierter Knowledge-Management-Architekturen mit Vector Databases',
|
|
'Implementierung von LangChain/LangGraph-basierten Workflows in Python',
|
|
'Integration von MCP-Servern für erweiterte AI-Funktionalitäten',
|
|
'Design skalierbarer Cloud-Infrastrukturen auf Azure- und AWS-Basis',
|
|
'Infrastructure-as-Code mit Terraform und Ansible',
|
|
'Technische Konzepte und Architekturdokumentation für Kundenangebote',
|
|
],
|
|
},
|
|
{
|
|
id: 'job1b',
|
|
title: 'Technical Architect & Technical Product Owner',
|
|
company: 'Sopra Financial Technology GmbH',
|
|
location: 'Regulatory & Risk, Nürnberg',
|
|
period: 'Juni 2021 - Juni 2024',
|
|
description: 'Verantwortung für Betrieb und Weiterentwicklung der Fintech-Produkte Abacus360, Okular und zeb.Trading im Bankenmeldewesen. Sicherstellung des störungsfreien Betriebs unter Einhaltung strenger SLA und regulatorischer Vorgaben.',
|
|
responsibilities: [
|
|
'Technische Projektleitung der Kubernetes-Migration ohne Ausfallzeiten',
|
|
'Steuerung internationaler Teams inkl. Nearshore-Partner (Polen)',
|
|
'Anforderungsmanagement und Priorisierung technischer Features',
|
|
'Sicherstellung der technischen und regulatorischen Compliance',
|
|
'Ressourcen- und Budgetplanung, Reporting an Management',
|
|
'Aktive Teilnahme am Cost-Savings-Programm',
|
|
],
|
|
},
|
|
{
|
|
id: 'job2',
|
|
title: 'Product Owner',
|
|
company: 'Mobile Applikationen Unternehmen',
|
|
location: 'Nürnberg',
|
|
period: 'Februar 2019 - März 2020',
|
|
description: 'Product Owner in einem Nürnberger Unternehmen, welches mobile Applikationen zur Digitalisierung von Prozessen herstellt.',
|
|
responsibilities: [
|
|
'Abklärung der Anforderungen zwischen Stakeholdern und Entwicklern',
|
|
'Planung und Priorisierung der Ressourcen & Aufgaben',
|
|
'Technische Kommunikation und Architektur',
|
|
'Migration der bestehenden Infrastruktur in die MagentaCloud (Kubernetes)',
|
|
'Weiterentwicklung des Produktes',
|
|
],
|
|
},
|
|
{
|
|
id: 'job3',
|
|
title: 'Leiter IT',
|
|
company: 'Unternehmen im Bereich Fahrzeugtechnik',
|
|
location: 'Georgensgmünd',
|
|
period: 'März 2014 - Januar 2019',
|
|
description: 'Leiter einer IT-Abteilung in einem mittelfränkischen Unternehmen aus dem Bereich Fahrzeugtechnik.',
|
|
responsibilities: [
|
|
'Programmierung & Weiterentwicklung der Online Shops',
|
|
'Anbindung der Warenwirtschaft',
|
|
'Aufbau und Entwicklung eines Intranets',
|
|
'Architektur der Datenbanken',
|
|
'API Schnittstellenprogrammierung',
|
|
'Migration/Neuaufbau und Entwicklung der Linux Server',
|
|
],
|
|
},
|
|
{
|
|
id: 'job4',
|
|
title: 'Marketing Manager',
|
|
company: 'Trustec Energy GmbH',
|
|
location: 'Solarbranche, Mittelfranken',
|
|
period: 'Januar 2010 - März 2014',
|
|
description: 'Marketing Manager in einem Unternehmen der Solarbranche mit Verantwortung für die komplette digitale Präsenz und Marketing-Kommunikation.',
|
|
responsibilities: [
|
|
'Aufbau, Programmierung und Pflege der Firmenwebseiten (trustec-energy.eu, mhm-marketing.com) mit Joomla CMS',
|
|
'Entwicklung und Programmierung neuer CMS-Inhaltstypen und Module',
|
|
'E-Mail Marketing: Erstellung, Versand und Erfolgsmessung von Newslettern und Messe-Respondern',
|
|
'Print Design: Kataloge, Preislisten, Flyer, Rollups und Messestände (InDesign, Photoshop, Illustrator)',
|
|
'Erstellung von 3D Produkt Mock-ups und Landing Pages',
|
|
'Web Analytics mit Google Analytics und Piwik',
|
|
'Koordination externer Dienstleister (Grafiker, Übersetzer, Messebauer)',
|
|
'IT-Support: Betreuung Windows Server 2008, CRM-Software und Telefonanlage',
|
|
],
|
|
},
|
|
{
|
|
id: 'job5',
|
|
title: 'Freelancer Web Development & Design',
|
|
company: 'Selbstständig',
|
|
location: 'Verschiedene Branchen',
|
|
period: 'Januar 2000 - Dezember 2010',
|
|
description: 'Über 10 Jahre selbstständig für Unternehmenskunden aus unterschiedlichen Branchen tätig, mit Fokus auf webbasierte Lösungen.',
|
|
responsibilities: [
|
|
'Entwicklung von Präsentations- und Buchungssystemen',
|
|
'Programmierung von CMS-Systemen und Content-Management-Lösungen',
|
|
'Aufbau und Entwicklung von E-Commerce Shops',
|
|
'Webdesign und Frontend-Entwicklung (HTML, CSS, JavaScript, Flash/Actionscript)',
|
|
'Kundenberatung und Anforderungsanalyse',
|
|
'Print Design und Corporate Design Entwicklung',
|
|
],
|
|
},
|
|
];
|
|
|
|
export default function Experience() {
|
|
const [activeJob, setActiveJob] = useState(0);
|
|
|
|
return (
|
|
<section id="experience" className="py-20 px-4 sm:px-6 lg:px-8 bg-white">
|
|
<div className="max-w-6xl mx-auto">
|
|
<h2 className="text-3xl sm:text-4xl font-bold text-text text-center mb-16 relative inline-block w-full after:content-[''] after:block after:w-12 after:h-1 after:bg-primary after:mt-6 after:mx-auto">
|
|
Berufserfahrung
|
|
</h2>
|
|
|
|
<div className="grid grid-cols-1 lg:grid-cols-3 gap-8">
|
|
{/* Job Tabs - Jetzt mit besserer Mobile-Darstellung */}
|
|
<div className="lg:col-span-1">
|
|
<div className="flex flex-col gap-3">
|
|
{jobs.map((job, index) => (
|
|
<button
|
|
key={job.id}
|
|
onClick={() => setActiveJob(index)}
|
|
className={`text-left p-4 sm:p-5 rounded-lg transition-all duration-300 ${
|
|
activeJob === index
|
|
? 'bg-primary text-white shadow-lg scale-105'
|
|
: 'bg-gray-100 text-text hover:bg-gray-200 hover:shadow-md'
|
|
}`}
|
|
>
|
|
<h3 className="font-bold text-sm sm:text-base lg:text-lg mb-1">
|
|
{job.title}
|
|
</h3>
|
|
<p className={`text-xs sm:text-sm ${activeJob === index ? 'text-white/80' : 'text-text-light'}`}>
|
|
{job.company}
|
|
</p>
|
|
<p className={`text-xs mt-1 font-semibold ${activeJob === index ? 'text-white/90' : 'text-primary'}`}>
|
|
{job.period.split(' - ')[0]}
|
|
</p>
|
|
</button>
|
|
))}
|
|
</div>
|
|
</div>
|
|
|
|
{/* Job Details */}
|
|
<div className="lg:col-span-2">
|
|
<div className="bg-bg-light rounded-lg p-6 sm:p-8 shadow-md hover:shadow-xl transition-shadow">
|
|
{/* Header */}
|
|
<div className="mb-6 pb-6 border-b border-gray-200">
|
|
<h3 className="text-xl sm:text-2xl lg:text-3xl font-bold text-text mb-3">
|
|
{jobs[activeJob].title}
|
|
</h3>
|
|
<div className="flex flex-col gap-2 mb-2">
|
|
<p className="text-base sm:text-lg font-semibold text-text-light flex items-center">
|
|
<svg className="w-5 h-5 mr-2 text-primary flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4" />
|
|
</svg>
|
|
{jobs[activeJob].company}
|
|
</p>
|
|
<p className="text-sm sm:text-base text-text-light flex items-center">
|
|
<svg className="w-5 h-5 mr-2 text-primary flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" />
|
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" />
|
|
</svg>
|
|
{jobs[activeJob].location}
|
|
</p>
|
|
</div>
|
|
<p className="text-primary font-bold text-base sm:text-lg flex items-center">
|
|
<svg className="w-5 h-5 mr-2 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" />
|
|
</svg>
|
|
{jobs[activeJob].period}
|
|
</p>
|
|
</div>
|
|
|
|
{/* Description */}
|
|
<p className="text-text-light mb-6 text-sm sm:text-base leading-relaxed">
|
|
{jobs[activeJob].description}
|
|
</p>
|
|
|
|
{/* Responsibilities */}
|
|
<h4 className="font-bold text-text mb-4 text-base sm:text-lg flex items-center">
|
|
<svg className="w-5 h-5 mr-2 text-primary flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4" />
|
|
</svg>
|
|
Verantwortlichkeiten:
|
|
</h4>
|
|
<ul className="space-y-3">
|
|
{jobs[activeJob].responsibilities.map((resp, idx) => (
|
|
<li
|
|
key={idx}
|
|
className="flex items-start group hover:translate-x-1 transition-transform"
|
|
>
|
|
<svg
|
|
className="w-5 h-5 text-primary mt-0.5 mr-3 flex-shrink-0 group-hover:scale-110 transition-transform"
|
|
fill="currentColor"
|
|
viewBox="0 0 20 20"
|
|
>
|
|
<path
|
|
fillRule="evenodd"
|
|
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
|
|
clipRule="evenodd"
|
|
/>
|
|
</svg>
|
|
<span className="text-text-light leading-relaxed text-sm sm:text-base">{resp}</span>
|
|
</li>
|
|
))}
|
|
</ul>
|
|
|
|
{/* Tags for quick tech overview */}
|
|
<div className="mt-8 pt-6 border-t border-gray-200">
|
|
<div className="flex flex-wrap gap-2">
|
|
{activeJob === 0 && (
|
|
<>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">LangChain / LangGraph</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">RAG & Vector DB</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">AI Agentic Systems</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">MCP Server</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Azure / AWS</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Terraform</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Python</span>
|
|
</>
|
|
)}
|
|
{activeJob === 1 && (
|
|
<>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Kubernetes</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Cloud Migration</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Systemarchitektur</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Financial IT</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Compliance</span>
|
|
</>
|
|
)}
|
|
{activeJob === 2 && (
|
|
<>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Kubernetes</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Mobile Apps</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Stakeholder Management</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Digitalisierung</span>
|
|
</>
|
|
)}
|
|
{activeJob === 3 && (
|
|
<>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">E-Commerce</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Laravel</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Vue.js</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">API Development</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Team Leadership</span>
|
|
</>
|
|
)}
|
|
{activeJob === 4 && (
|
|
<>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Joomla</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">E-Mail Marketing</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Adobe Suite</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Google Analytics</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">3D Design</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Print Design</span>
|
|
</>
|
|
)}
|
|
{activeJob === 5 && (
|
|
<>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">HTML/CSS/JS</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">CMS Development</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">E-Commerce</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Flash/Actionscript</span>
|
|
<span className="px-3 py-1 bg-primary/10 text-primary text-xs font-semibold rounded-full">Webdesign</span>
|
|
</>
|
|
)}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
);
|
|
}
|