diff --git a/assets/Standardprofil_Sebastian_Fröhlich_TMH20250120.pdf b/assets/Standardprofil_Sebastian_Fröhlich_TMH20250120.pdf new file mode 100644 index 0000000..c5c6d64 Binary files /dev/null and b/assets/Standardprofil_Sebastian_Fröhlich_TMH20250120.pdf differ diff --git a/assets/Zwischenzeugnis Sebastian Fröhlich 01.2026.pdf b/assets/Zwischenzeugnis Sebastian Fröhlich 01.2026.pdf new file mode 100644 index 0000000..1bf38f3 Binary files /dev/null and b/assets/Zwischenzeugnis Sebastian Fröhlich 01.2026.pdf differ diff --git a/components/Experience.tsx b/components/Experience.tsx index 087d265..0fdbfc9 100644 --- a/components/Experience.tsx +++ b/components/Experience.tsx @@ -15,17 +15,36 @@ interface Job { const jobs: Job[] = [ { id: 'job1', - title: 'Technischer Product Owner', - company: 'IT im Bereich Finanzen und Banken', - location: 'Regulatory & Risk, Nürnberg', - period: 'Juni 2021 - heute', - description: 'Technischer Product Owner in einem Nürnberger Unternehmen, welches die komplette Banken IT steuert.', + 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: [ - 'Sicherstellung des Betriebs', - 'Planung und Priorisierung der Ressourcen & Aufgaben', - 'Technische Kommunikation und Architektur', - 'Migration der Infrastruktur K8s on prem & Cloud', - 'Aufbau neuer Services', + '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', ], }, { @@ -202,14 +221,26 @@ export default function Experience() {
{activeJob === 0 && ( + <> + LangChain / LangGraph + RAG & Vector DB + AI Agentic Systems + MCP Server + Azure / AWS + Terraform + Python + + )} + {activeJob === 1 && ( <> Kubernetes Cloud Migration Systemarchitektur Financial IT + Compliance )} - {activeJob === 1 && ( + {activeJob === 2 && ( <> Kubernetes Mobile Apps @@ -217,7 +248,7 @@ export default function Experience() { Digitalisierung )} - {activeJob === 2 && ( + {activeJob === 3 && ( <> E-Commerce Laravel @@ -226,7 +257,7 @@ export default function Experience() { Team Leadership )} - {activeJob === 3 && ( + {activeJob === 4 && ( <> Joomla E-Mail Marketing @@ -236,7 +267,7 @@ export default function Experience() { Print Design )} - {activeJob === 4 && ( + {activeJob === 5 && ( <> HTML/CSS/JS CMS Development diff --git a/components/Intro.tsx b/components/Intro.tsx index 4a1dac3..d5c1312 100644 --- a/components/Intro.tsx +++ b/components/Intro.tsx @@ -36,22 +36,23 @@ export default function Intro() { ]; const skills = [ + 'AI Solution Architecture', + 'LangChain / LangGraph', + 'RAG & Vector Databases', + 'Technical Architecture', + 'Kubernetes & Cloud', 'Product Owner', - 'Technical Project Manager', + 'Python', 'Laravel', 'Vue.js', - 'PHP', - 'JavaScript', - 'MySQL', - 'MSSQL', 'Systemarchitektur', - 'User Experience', 'Team Leadership', - 'Compliance', + 'Compliance & Regulatorik', ]; const timeline = [ - { year: '2021 - heute', company: 'Sopra Financial Technology GmbH', role: 'Technical Product Owner' }, + { year: '2024 - heute', company: 'Sopra Financial Technology GmbH', role: 'AI Solution Architect & Technical Architect' }, + { year: '2021 - 2024', company: 'Sopra Financial Technology GmbH', role: 'Technical Product Owner – Bankenmeldewesen' }, { 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' }, @@ -158,31 +159,36 @@ export default function Intro() {

Bei der{' '} - Sopra Financial Technology GmbH bin - ich seit 2021 als{' '} - Technical Product Owner im - Bereich Regulatory & Risk tätig. Ich verantworte{' '} + Sopra Financial Technology GmbH war + ich seit 2021 zunächst als{' '} + Technical Product Owner im + Bereich Regulatory & Risk tätig. Ich verantwortete{' '} 3 Fintech-Produkte im{' '} - Bankenmeldewesen und stelle - deren reibungslosen Betrieb unter strikten{' '} - regulatorischen Vorgaben sicher. + Bankenmeldewesen (Abacus360, Okular, zeb.Trading) und + leitete u.a. die erfolgreiche{' '} + Kubernetes-Migration ohne Ausfallzeiten{' '} + unter strikten regulatorischen Vorgaben.

- Zu meinen Kernaufgaben gehören die{' '} + Seit Juni 2024 bin ich als{' '} + AI Solution Architect und{' '} + Technical Architect tätig. + Ich konzipiere und begleite die unternehmensweite{' '} + KI-Initiative im regulierten Bankenumfeld – + von{' '} - technische Projektleitung komplexer Migrationen + AI Agentic Systems und RAG-basierten Knowledge-Management-Architekturen {' '} - (z.B. Kubernetes-Migration ohne Ausfallzeiten), die Steuerung{' '} + bis hin zu{' '} - internationaler Teams (inkl. Nearshore) - , Code Reviews sowie die aktive Teilnahme an{' '} - Cost-Savings-Programmen. - Darüber hinaus arbeite ich in den Bereichen{' '} - - Managed Application & Cloud Service - , wo ich neue Produkte architektonisch begleite und bei - Bieterverfahren meine Expertise einbringe. + LangChain/LangGraph-Workflows + {' '} + und der Integration von MCP-Servern. Gleichzeitig verantworte ich als Technical Architect + Cloud-Native-Architekturen auf{' '} + Azure und AWS mit{' '} + Kubernetes, Terraform und Ansible{' '} + und unterstütze bei Bieterverfahren mit technischer Expertise.

diff --git a/components/Skills.tsx b/components/Skills.tsx index 47d5a56..e7e2dae 100644 --- a/components/Skills.tsx +++ b/components/Skills.tsx @@ -9,32 +9,40 @@ interface Skill { } const skillsData: Skill[] = [ + // AI & ML + { name: 'LangChain / LangGraph', level: 4, category: 'AI & ML' }, + { name: 'RAG & Vector Databases', level: 4, category: 'AI & ML' }, + { name: 'LLMs (Ollama, LM Studio, Claude)', level: 4, category: 'AI & ML' }, + { name: 'AI Agentic Systems', level: 4, category: 'AI & ML' }, + { name: 'MCP Server Integration', level: 3, category: 'AI & ML' }, + { name: 'Prompt Engineering', level: 4, category: 'AI & ML' }, + // Programmiersprachen + { name: 'Python', level: 4, category: 'Programmiersprachen' }, { name: 'PHP & FW Laravel', level: 4, category: 'Programmiersprachen' }, - { name: 'Python & Perl', level: 4, category: 'Programmiersprachen' }, { name: 'JavaScript', level: 4, category: 'Programmiersprachen' }, { name: 'Node.js', level: 3, category: 'Programmiersprachen' }, { name: 'Vue.js / Next.js', level: 4, category: 'Programmiersprachen' }, { name: 'HTML', level: 5, category: 'Programmiersprachen' }, { name: 'CSS & Frameworks', level: 5, category: 'Programmiersprachen' }, { name: 'Sass', level: 4, category: 'Programmiersprachen' }, - + // Datenbanken { name: 'SQL (MS/DB2/Oracle)', level: 4, category: 'Datenbanken' }, { name: 'MySQL, MariaDB, Postgres', level: 4, category: 'Datenbanken' }, + { name: 'ChromaDB / Vector DBs', level: 3, category: 'Datenbanken' }, { name: 'Redis', level: 4, category: 'Datenbanken' }, { name: 'MongoDB', level: 3, category: 'Datenbanken' }, { name: 'CouchDB', level: 3, category: 'Datenbanken' }, - { name: 'Firebase', level: 1, category: 'Datenbanken' }, - - // DevOps - { name: 'Linux Bash Scripting', level: 4, category: 'DevOps' }, - { name: 'Git / SVN', level: 4, category: 'DevOps' }, - { name: 'Docker / Kubernetes', level: 3, category: 'DevOps' }, - { name: 'AWS', level: 3, category: 'DevOps' }, - { name: 'CI/CD Pipelines', level: 4, category: 'DevOps' }, - { name: 'Draw.io Architektur', level: 4, category: 'DevOps' }, - + + // DevOps & Cloud + { name: 'Linux Bash Scripting', level: 4, category: 'DevOps & Cloud' }, + { name: 'Git / SVN', level: 4, category: 'DevOps & Cloud' }, + { name: 'Docker / Kubernetes', level: 4, category: 'DevOps & Cloud' }, + { name: 'Terraform / Ansible', level: 3, category: 'DevOps & Cloud' }, + { name: 'AWS / Azure', level: 3, category: 'DevOps & Cloud' }, + { name: 'CI/CD Pipelines', level: 4, category: 'DevOps & Cloud' }, + // Grafik & Design { name: 'Adobe Suite (u.a. PS/XD)', level: 4, category: 'Grafik & Design' }, { name: 'Affinity', level: 4, category: 'Grafik & Design' }, @@ -42,14 +50,15 @@ const skillsData: Skill[] = [ ]; const categories = [ + 'AI & ML', 'Programmiersprachen', 'Datenbanken', - 'DevOps', + 'DevOps & Cloud', 'Grafik & Design', ]; export default function Skills() { - const [activeCategory, setActiveCategory] = useState('Programmiersprachen'); + const [activeCategory, setActiveCategory] = useState('AI & ML'); const [isVisible, setIsVisible] = useState(false); const ref = useRef(null); diff --git a/next.config.ts b/next.config.ts index a9a2fd3..afcbe7e 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,9 +1,9 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { - output: 'export', // Statischer Export aktivieren + output: 'export', images: { - unoptimized: true, // Next.js Image Optimierung deaktivieren (für statischen Export nötig) + unoptimized: true, }, }; diff --git a/package-lock.json b/package-lock.json index c457588..179b989 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,13 +15,13 @@ "devDependencies": { "@eslint/eslintrc": "^3", "@tailwindcss/postcss": "^4", - "@types/node": "^20", - "@types/react": "^19", + "@types/node": "20.19.33", + "@types/react": "19.2.13", "@types/react-dom": "^19", "eslint": "^9", "eslint-config-next": "15.5.4", "tailwindcss": "^4", - "typescript": "^5" + "typescript": "5.9.3" } }, "node_modules/@alloc/quick-lru": { @@ -1291,9 +1291,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.19.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.19.tgz", - "integrity": "sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==", + "version": "20.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz", + "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==", "dev": true, "license": "MIT", "dependencies": { @@ -1301,14 +1301,13 @@ } }, "node_modules/@types/react": { - "version": "19.1.16", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.16.tgz", - "integrity": "sha512-WBM/nDbEZmDUORKnh5i1bTnAz6vTohUf9b8esSMu+b24+srbaxa04UbJgWx78CVfNXA20sNu0odEIluZDFdCog==", + "version": "19.2.13", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.13.tgz", + "integrity": "sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { @@ -1367,7 +1366,6 @@ "integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.45.0", "@typescript-eslint/types": "8.45.0", @@ -1885,7 +1883,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2353,9 +2350,9 @@ } }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "dev": true, "license": "MIT" }, @@ -2736,7 +2733,6 @@ "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -2911,7 +2907,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -5034,7 +5029,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -5044,7 +5038,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.26.0" }, @@ -5738,7 +5731,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -5888,7 +5880,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/package.json b/package.json index b0ebaf1..fe28f52 100644 --- a/package.json +++ b/package.json @@ -10,19 +10,19 @@ "copy-assets": "bash copy-assets.sh" }, "dependencies": { + "next": "15.5.4", "react": "19.1.0", - "react-dom": "19.1.0", - "next": "15.5.4" + "react-dom": "19.1.0" }, "devDependencies": { - "typescript": "^5", - "@types/node": "^20", - "@types/react": "^19", - "@types/react-dom": "^19", + "@eslint/eslintrc": "^3", "@tailwindcss/postcss": "^4", - "tailwindcss": "^4", + "@types/node": "20.19.33", + "@types/react": "19.2.13", + "@types/react-dom": "^19", "eslint": "^9", "eslint-config-next": "15.5.4", - "@eslint/eslintrc": "^3" + "tailwindcss": "^4", + "typescript": "5.9.3" } } diff --git a/app/favicon.ico b/public/favicon.ico similarity index 100% rename from app/favicon.ico rename to public/favicon.ico diff --git a/tsconfig.json b/tsconfig.json index d8b9323..0444ed5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,11 @@ { "compilerOptions": { "target": "ES2017", - "lib": ["dom", "dom.iterable", "esnext"], + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -19,9 +23,19 @@ } ], "paths": { - "@/*": ["./*"] + "@/*": [ + "./*" + ] } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "include": [ + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + "next-env.d.ts", + "./.next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] }