Files
cbazzaandClaude Opus 4.6 4a5155eb1e Update profile to AI Solution Architect role and add AI/ML skills
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>
2026-02-11 15:19:33 +01:00

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>
);
}