diff --git a/.auto-claude-security.json b/.auto-claude-security.json
new file mode 100644
index 0000000..eed60a2
--- /dev/null
+++ b/.auto-claude-security.json
@@ -0,0 +1,227 @@
+{
+ "base_commands": [
+ ".",
+ "[",
+ "[[",
+ "ag",
+ "awk",
+ "basename",
+ "bash",
+ "bc",
+ "break",
+ "cat",
+ "cd",
+ "chmod",
+ "clear",
+ "cmp",
+ "column",
+ "comm",
+ "command",
+ "continue",
+ "cp",
+ "curl",
+ "cut",
+ "date",
+ "df",
+ "diff",
+ "dig",
+ "dirname",
+ "du",
+ "echo",
+ "egrep",
+ "env",
+ "eval",
+ "exec",
+ "exit",
+ "expand",
+ "export",
+ "expr",
+ "false",
+ "fd",
+ "fgrep",
+ "file",
+ "find",
+ "fmt",
+ "fold",
+ "gawk",
+ "gh",
+ "git",
+ "grep",
+ "gunzip",
+ "gzip",
+ "head",
+ "help",
+ "host",
+ "iconv",
+ "id",
+ "jobs",
+ "join",
+ "jq",
+ "kill",
+ "killall",
+ "less",
+ "let",
+ "ln",
+ "ls",
+ "lsof",
+ "man",
+ "mkdir",
+ "mktemp",
+ "more",
+ "mv",
+ "nl",
+ "paste",
+ "pgrep",
+ "ping",
+ "pkill",
+ "popd",
+ "printenv",
+ "printf",
+ "ps",
+ "pushd",
+ "pwd",
+ "read",
+ "readlink",
+ "realpath",
+ "reset",
+ "return",
+ "rev",
+ "rg",
+ "rm",
+ "rmdir",
+ "sed",
+ "seq",
+ "set",
+ "sh",
+ "shuf",
+ "sleep",
+ "sort",
+ "source",
+ "split",
+ "stat",
+ "tail",
+ "tar",
+ "tee",
+ "test",
+ "time",
+ "timeout",
+ "touch",
+ "tr",
+ "tree",
+ "true",
+ "type",
+ "uname",
+ "unexpand",
+ "uniq",
+ "unset",
+ "unzip",
+ "watch",
+ "wc",
+ "wget",
+ "whereis",
+ "which",
+ "whoami",
+ "xargs",
+ "yes",
+ "yq",
+ "zip",
+ "zsh"
+ ],
+ "stack_commands": [
+ "ar",
+ "clang",
+ "clang++",
+ "cmake",
+ "composer",
+ "dive",
+ "docker",
+ "docker-buildx",
+ "docker-compose",
+ "dockerfile",
+ "eslint",
+ "g++",
+ "gcc",
+ "ipython",
+ "jupyter",
+ "ld",
+ "make",
+ "meson",
+ "next",
+ "ninja",
+ "nm",
+ "node",
+ "notebook",
+ "npm",
+ "npx",
+ "objdump",
+ "pdb",
+ "php",
+ "pip",
+ "pip3",
+ "pipx",
+ "pnpm",
+ "pnpx",
+ "pudb",
+ "python",
+ "python3",
+ "react-scripts",
+ "strip",
+ "ts-node",
+ "tsc",
+ "tsx",
+ "vitest"
+ ],
+ "script_commands": [
+ "bun",
+ "npm",
+ "pnpm",
+ "yarn"
+ ],
+ "custom_commands": [],
+ "detected_stack": {
+ "languages": [
+ "python",
+ "javascript",
+ "typescript",
+ "php",
+ "c"
+ ],
+ "package_managers": [
+ "pnpm"
+ ],
+ "frameworks": [
+ "nextjs",
+ "react",
+ "vitest",
+ "eslint"
+ ],
+ "databases": [],
+ "infrastructure": [
+ "docker"
+ ],
+ "cloud_providers": [],
+ "code_quality_tools": [],
+ "version_managers": []
+ },
+ "custom_scripts": {
+ "npm_scripts": [
+ "dev",
+ "build",
+ "start",
+ "lint",
+ "build:images",
+ "generate:images",
+ "generate:images:dry",
+ "test",
+ "test:coverage"
+ ],
+ "make_targets": [],
+ "poetry_scripts": [],
+ "cargo_aliases": [],
+ "shell_scripts": []
+ },
+ "project_dir": "C:\\Users\\damja\\WebstormProjects\\Portfolio",
+ "created_at": "2026-01-22T15:28:38.237190",
+ "project_hash": "c4ad399e16be367eb4e6b076fe1d9ee3",
+ "inherited_from": "C:\\Users\\damja\\WebstormProjects\\Portfolio"
+}
\ No newline at end of file
diff --git a/.auto-claude-status b/.auto-claude-status
new file mode 100644
index 0000000..43ab9c7
--- /dev/null
+++ b/.auto-claude-status
@@ -0,0 +1,25 @@
+{
+ "active": true,
+ "spec": "002-recherchiere-weitere-seo-optimierungen-an-der-webs",
+ "state": "building",
+ "subtasks": {
+ "completed": 15,
+ "total": 27,
+ "in_progress": 1,
+ "failed": 0
+ },
+ "phase": {
+ "current": "Chatbot Frontend",
+ "id": null,
+ "total": 3
+ },
+ "workers": {
+ "active": 0,
+ "max": 1
+ },
+ "session": {
+ "number": 15,
+ "started_at": "2026-01-25T00:03:26.706142"
+ },
+ "last_update": "2026-01-25T00:57:00.939315"
+}
\ No newline at end of file
diff --git a/.claude_settings.json b/.claude_settings.json
new file mode 100644
index 0000000..3d12dba
--- /dev/null
+++ b/.claude_settings.json
@@ -0,0 +1,39 @@
+{
+ "sandbox": {
+ "enabled": true,
+ "autoAllowBashIfSandboxed": true
+ },
+ "permissions": {
+ "defaultMode": "acceptEdits",
+ "allow": [
+ "Read(./**)",
+ "Write(./**)",
+ "Edit(./**)",
+ "Glob(./**)",
+ "Grep(./**)",
+ "Read(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\002-recherchiere-weitere-seo-optimierungen-an-der-webs/**)",
+ "Write(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\002-recherchiere-weitere-seo-optimierungen-an-der-webs/**)",
+ "Edit(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\002-recherchiere-weitere-seo-optimierungen-an-der-webs/**)",
+ "Glob(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\002-recherchiere-weitere-seo-optimierungen-an-der-webs/**)",
+ "Grep(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\002-recherchiere-weitere-seo-optimierungen-an-der-webs/**)",
+ "Read(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\002-recherchiere-weitere-seo-optimierungen-an-der-webs\\.auto-claude\\specs\\002-recherchiere-weitere-seo-optimierungen-an-der-webs/**)",
+ "Write(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\002-recherchiere-weitere-seo-optimierungen-an-der-webs\\.auto-claude\\specs\\002-recherchiere-weitere-seo-optimierungen-an-der-webs/**)",
+ "Edit(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude\\worktrees\\tasks\\002-recherchiere-weitere-seo-optimierungen-an-der-webs\\.auto-claude\\specs\\002-recherchiere-weitere-seo-optimierungen-an-der-webs/**)",
+ "Read(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude/**)",
+ "Write(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude/**)",
+ "Edit(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude/**)",
+ "Glob(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude/**)",
+ "Grep(C:\\Users\\damja\\WebstormProjects\\Portfolio\\.auto-claude/**)",
+ "Bash(*)",
+ "WebFetch(*)",
+ "WebSearch(*)",
+ "mcp__context7__resolve-library-id(*)",
+ "mcp__context7__get-library-docs(*)",
+ "mcp__graphiti-memory__search_nodes(*)",
+ "mcp__graphiti-memory__search_facts(*)",
+ "mcp__graphiti-memory__add_episode(*)",
+ "mcp__graphiti-memory__get_episodes(*)",
+ "mcp__graphiti-memory__get_entity_edge(*)"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/build_output.txt b/build_output.txt
new file mode 100644
index 0000000..e69de29
diff --git a/playwright-report/index.html b/playwright-report/index.html
new file mode 100644
index 0000000..8175542
--- /dev/null
+++ b/playwright-report/index.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+ Playwright Test Report
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/chat/ChatMessage.tsx b/src/components/chat/ChatMessage.tsx
new file mode 100644
index 0000000..599b9e7
--- /dev/null
+++ b/src/components/chat/ChatMessage.tsx
@@ -0,0 +1,171 @@
+'use client';
+
+import { motion } from 'framer-motion';
+import { User, Bot } from 'lucide-react';
+
+export type ChatRole = 'user' | 'assistant' | 'system';
+
+export interface ChatMessageData {
+ id?: string;
+ role: ChatRole;
+ content: string;
+ created_at?: string;
+ isStreaming?: boolean;
+}
+
+interface ChatMessageProps {
+ message: ChatMessageData;
+ index?: number;
+}
+
+/**
+ * Formats a timestamp for display
+ */
+function formatTime(timestamp?: string): string {
+ if (!timestamp) return '';
+
+ try {
+ const date = new Date(timestamp);
+ return date.toLocaleTimeString(undefined, {
+ hour: '2-digit',
+ minute: '2-digit',
+ });
+ } catch {
+ return '';
+ }
+}
+
+/**
+ * ChatMessage component for displaying individual chat messages
+ * Styled differently based on message role (user vs assistant)
+ */
+export function ChatMessage({ message, index = 0 }: ChatMessageProps) {
+ const { role, content, created_at, isStreaming } = message;
+
+ // Don't render system messages
+ if (role === 'system') {
+ return null;
+ }
+
+ const isUser = role === 'user';
+ const formattedTime = formatTime(created_at);
+
+ return (
+
+ {/* Avatar */}
+
+ {isUser ? (
+
+ ) : (
+
+ )}
+
+
+ {/* Message Content */}
+
+
+
+ {content}
+ {isStreaming && (
+
+ )}
+
+
+
+ {/* Timestamp */}
+ {formattedTime && !isStreaming && (
+
+ {formattedTime}
+
+ )}
+
+
+ );
+}
+
+/**
+ * Typing indicator shown when assistant is generating a response
+ */
+export function TypingIndicator() {
+ return (
+
+ {/* Avatar */}
+
+
+
+
+ {/* Typing dots */}
+
+
+ {[0, 1, 2].map((i) => (
+
+ ))}
+
+
+
+ );
+}
+
+/**
+ * Welcome message component for empty chat state
+ */
+export function WelcomeMessage() {
+ return (
+
+
+
+
+
+ Hi, I'm Damjan's AI Assistant
+
+
+ I can help you learn about Damjan's skills, services, and experience.
+ Feel free to ask me anything!
+
+
+ );
+}
+
+export default ChatMessage;
diff --git a/test-results/.last-run.json b/test-results/.last-run.json
new file mode 100644
index 0000000..815dfb3
--- /dev/null
+++ b/test-results/.last-run.json
@@ -0,0 +1,14 @@
+{
+ "status": "failed",
+ "failedTests": [
+ "b15d6361b2fc38288977-cc6cca7f3eb8cd82590c",
+ "b15d6361b2fc38288977-5e1c665e664697d61b48",
+ "b15d6361b2fc38288977-61ae5d34d2c913db9b2a",
+ "b15d6361b2fc38288977-284f9ff9499f4f985752",
+ "b15d6361b2fc38288977-554360e215668a72f3c5",
+ "b15d6361b2fc38288977-d4fe6d5b85e4848564f5",
+ "b15d6361b2fc38288977-e6c0964e023326d4a6c7",
+ "b15d6361b2fc38288977-252e2d4a1453fc1d2a15",
+ "b15d6361b2fc38288977-e2864a9c91ff6b5e2798"
+ ]
+}
\ No newline at end of file
diff --git a/test-results/performance-Resource-Loadi-1c0d6-undles-are-reasonably-sized-chromium/error-context.md b/test-results/performance-Resource-Loadi-1c0d6-undles-are-reasonably-sized-chromium/error-context.md
new file mode 100644
index 0000000..4d7ec49
--- /dev/null
+++ b/test-results/performance-Resource-Loadi-1c0d6-undles-are-reasonably-sized-chromium/error-context.md
@@ -0,0 +1,301 @@
+# Page snapshot
+
+```yaml
+- generic [active] [ref=e1]:
+ - generic [ref=e2]:
+ - generic:
+ - img
+ - navigation "Main navigation" [ref=e5]:
+ - generic [ref=e7]:
+ - link "Damjan Savić Logo" [ref=e8] [cursor=pointer]:
+ - /url: /de
+ - img "Damjan Savić Logo" [ref=e9]
+ - generic [ref=e10]:
+ - link "Startseite" [ref=e11] [cursor=pointer]:
+ - /url: /de
+ - img [ref=e12]
+ - generic [ref=e15]: Startseite
+ - link "Über mich" [ref=e16] [cursor=pointer]:
+ - /url: /de/about
+ - img [ref=e17]
+ - generic [ref=e20]: Über mich
+ - link "Leistungen" [ref=e21] [cursor=pointer]:
+ - /url: /de/leistungen
+ - img [ref=e22]
+ - generic [ref=e33]: Leistungen
+ - link "Portfolio" [ref=e34] [cursor=pointer]:
+ - /url: /de/portfolio
+ - img [ref=e35]
+ - generic [ref=e38]: Portfolio
+ - link "Blog" [ref=e39] [cursor=pointer]:
+ - /url: /de/blog
+ - img [ref=e40]
+ - generic [ref=e42]: Blog
+ - link "Kontakt" [ref=e43] [cursor=pointer]:
+ - /url: /de/contact
+ - img [ref=e44]
+ - generic [ref=e46]: Kontakt
+ - generic [ref=e48]:
+ - button "Select language" [ref=e49] [cursor=pointer]:
+ - img [ref=e50]
+ - generic [ref=e53]: Deutsch
+ - listbox "Languages":
+ - generic:
+ - option "English"
+ - option "Deutsch" [selected]
+ - option "Srpski"
+ - main [ref=e54]:
+ - generic [ref=e55]:
+ - img "Damjan Savić" [ref=e57]
+ - generic [ref=e59]:
+ - link "LinkedIn" [ref=e60] [cursor=pointer]:
+ - /url: https://www.linkedin.com/in/damjan-savi%C4%87-720288127/
+ - img [ref=e61]
+ - link "GitHub" [ref=e65] [cursor=pointer]:
+ - /url: https://github.com/damjan1996
+ - img [ref=e66]
+ - generic [ref=e70]:
+ - paragraph [ref=e71]: FULLSTACK DEVELOPER
+ - heading "DAMJAN SAVIC|" [level=1] [ref=e72]
+ - paragraph [ref=e73]: Entwicklung von KI-Agenten und Automatisierungslösungen. Von Voice-AI-Plattformen bis zu autonomen Web-Agenten.
+ - generic [ref=e74]:
+ - link "KONTAKT AUFNEHMEN" [ref=e75] [cursor=pointer]:
+ - /url: mailto:info@damjan-savic.com
+ - link "PROJEKTE" [ref=e76] [cursor=pointer]:
+ - /url: "#projects"
+ - navigation [ref=e77]:
+ - link "ERFAHRUNG" [ref=e78] [cursor=pointer]:
+ - /url: "#experience"
+ - link "FÄHIGKEITEN" [ref=e79] [cursor=pointer]:
+ - /url: "#skills"
+ - link "ÜBER MICH" [ref=e80] [cursor=pointer]:
+ - /url: "#about"
+ - img [ref=e82]
+ - generic [ref=e86]:
+ - heading "Berufserfahrung" [level=2] [ref=e87]
+ - generic [ref=e89]:
+ - generic [ref=e90]:
+ - heading "Process Automation Specialist" [level=3] [ref=e91]
+ - heading "Everlast Consulting GmbH" [level=4] [ref=e92]
+ - paragraph [ref=e93]: 12/2024 - HEUTE
+ - list [ref=e94]:
+ - listitem [ref=e95]:
+ - generic [ref=e96]: →
+ - generic [ref=e97]: Entwicklung von KI-Agenten mit n8n und Zapier
+ - listitem [ref=e98]:
+ - generic [ref=e99]: →
+ - generic [ref=e100]: Aufbau von Web-Scraping-Lösungen
+ - listitem [ref=e101]:
+ - generic [ref=e102]: →
+ - generic [ref=e103]: Migration von Power Automate zu n8n
+ - generic [ref=e104]:
+ - heading "Consultant Digital Solutions" [level=3] [ref=e105]
+ - heading "Ritter Digital GmbH" [level=4] [ref=e106]
+ - paragraph [ref=e107]: 08/2023 - 11/2024
+ - list [ref=e108]:
+ - listitem [ref=e109]:
+ - generic [ref=e110]: →
+ - generic [ref=e111]: Backend-Services auf dedizierten Servern
+ - listitem [ref=e112]:
+ - generic [ref=e113]: →
+ - generic [ref=e114]: KI-Integration via Power Automate
+ - listitem [ref=e115]:
+ - generic [ref=e116]: →
+ - generic [ref=e117]: RFID/IoT-Lösungen mit Zebra-Hardware
+ - generic [ref=e118]:
+ - button "Previous page" [disabled] [ref=e119]: ‹
+ - generic [ref=e120]:
+ - button "Page 1" [ref=e121] [cursor=pointer]
+ - button "Page 2" [ref=e123] [cursor=pointer]
+ - button "Next page" [ref=e125] [cursor=pointer]: ›
+ - generic [ref=e128]:
+ - heading "Fähigkeiten" [level=2] [ref=e129]
+ - generic [ref=e130]:
+ - generic [ref=e131]:
+ - generic [ref=e132]:
+ - generic [ref=e133]:
+ - generic [ref=e134]: AI & LLMs
+ - generic [ref=e135]: 90%
+ - progressbar [ref=e136]
+ - generic [ref=e137]:
+ - generic [ref=e138]:
+ - generic [ref=e139]: Automation
+ - generic [ref=e140]: 85%
+ - progressbar [ref=e141]
+ - generic [ref=e142]:
+ - generic [ref=e143]:
+ - generic [ref=e144]: Python
+ - generic [ref=e145]: 90%
+ - progressbar [ref=e146]
+ - generic [ref=e147]:
+ - generic [ref=e148]:
+ - generic [ref=e149]: TypeScript
+ - generic [ref=e150]: 85%
+ - progressbar [ref=e151]
+ - generic [ref=e152]:
+ - generic [ref=e153]:
+ - generic [ref=e154]: Datenbank
+ - generic [ref=e155]: 85%
+ - progressbar [ref=e156]
+ - generic [ref=e157]:
+ - generic [ref=e158]:
+ - generic [ref=e159]: DevOps
+ - generic [ref=e160]: 75%
+ - progressbar [ref=e161]
+ - generic [ref=e162]:
+ - button "AI & LLMs" [ref=e164] [cursor=pointer]:
+ - img [ref=e166]
+ - generic [ref=e169]: AI & LLMs
+ - button "Automation" [ref=e171] [cursor=pointer]:
+ - img [ref=e173]
+ - generic [ref=e177]: Automation
+ - button "Python" [ref=e179] [cursor=pointer]:
+ - img [ref=e181]
+ - generic [ref=e185]: Python
+ - button "TypeScript" [ref=e187] [cursor=pointer]:
+ - img [ref=e189]
+ - generic [ref=e194]: TypeScript
+ - button "Datenbank" [ref=e196] [cursor=pointer]:
+ - img [ref=e198]
+ - generic [ref=e202]: Datenbank
+ - button "DevOps" [ref=e204] [cursor=pointer]:
+ - img [ref=e206]
+ - generic [ref=e209]: DevOps
+ - generic [ref=e211]:
+ - generic [ref=e212]:
+ - heading "Portfolio" [level=2] [ref=e213]
+ - link "Alle Projekte" [ref=e214] [cursor=pointer]:
+ - /url: /de/portfolio
+ - generic [ref=e215]:
+ - link "AI Document Reader 2024-01 4 Technologies AI Document Reader KI-gestützte Dokumentenanalyse mit OLLAMA und Python Python OLLAMA FastAPI +1 more" [ref=e216] [cursor=pointer]:
+ - /url: /de/portfolio/ai-data-reader
+ - generic [ref=e217]:
+ - img "AI Document Reader" [ref=e219]
+ - generic [ref=e220]:
+ - generic [ref=e221]:
+ - generic [ref=e222]:
+ - img [ref=e223]
+ - generic [ref=e225]: 2024-01
+ - generic [ref=e226]:
+ - img [ref=e227]
+ - generic [ref=e230]: 4 Technologies
+ - heading "AI Document Reader" [level=3] [ref=e231]
+ - paragraph [ref=e232]: KI-gestützte Dokumentenanalyse mit OLLAMA und Python
+ - generic [ref=e233]:
+ - generic [ref=e234]: Python
+ - generic [ref=e235]: OLLAMA
+ - generic [ref=e236]: FastAPI
+ - generic [ref=e237]: +1 more
+ - img [ref=e239]
+ - link "Smart Warehouse RFID 2024-02 4 Technologies Smart Warehouse RFID RFID-basiertes Lagerverwaltungssystem mit IoT-Integration Python RFID IoT +1 more" [ref=e243] [cursor=pointer]:
+ - /url: /de/portfolio/smart-warehouse
+ - generic [ref=e244]:
+ - img "Smart Warehouse RFID" [ref=e246]
+ - generic [ref=e247]:
+ - generic [ref=e248]:
+ - generic [ref=e249]:
+ - img [ref=e250]
+ - generic [ref=e252]: 2024-02
+ - generic [ref=e253]:
+ - img [ref=e254]
+ - generic [ref=e257]: 4 Technologies
+ - heading "Smart Warehouse RFID" [level=3] [ref=e258]
+ - paragraph [ref=e259]: RFID-basiertes Lagerverwaltungssystem mit IoT-Integration
+ - generic [ref=e260]:
+ - generic [ref=e261]: Python
+ - generic [ref=e262]: RFID
+ - generic [ref=e263]: IoT
+ - generic [ref=e264]: +1 more
+ - img [ref=e266]
+ - link "Portfolio mit KI 2024-03 4 Technologies Portfolio mit KI Moderne Portfolio-Website mit KI-Integration Next.js TypeScript Tailwind +1 more" [ref=e270] [cursor=pointer]:
+ - /url: /de/portfolio/website-mit-ki
+ - generic [ref=e271]:
+ - img "Portfolio mit KI" [ref=e273]
+ - generic [ref=e274]:
+ - generic [ref=e275]:
+ - generic [ref=e276]:
+ - img [ref=e277]
+ - generic [ref=e279]: 2024-03
+ - generic [ref=e280]:
+ - img [ref=e281]
+ - generic [ref=e284]: 4 Technologies
+ - heading "Portfolio mit KI" [level=3] [ref=e285]
+ - paragraph [ref=e286]: Moderne Portfolio-Website mit KI-Integration
+ - generic [ref=e287]:
+ - generic [ref=e288]: Next.js
+ - generic [ref=e289]: TypeScript
+ - generic [ref=e290]: Tailwind
+ - generic [ref=e291]: +1 more
+ - img [ref=e293]
+ - generic [ref=e299]:
+ - generic [ref=e300]:
+ - heading "Über Damjan Savić - Senior Fullstack Entwickler & Digital Solutions Consultant" [level=2] [ref=e302]
+ - generic [ref=e304]:
+ - generic [ref=e305]:
+ - img [ref=e307]
+ - generic [ref=e310]: Köln, Deutschland
+ - generic [ref=e311]:
+ - img [ref=e313]
+ - generic [ref=e316]: 5+ Jahre Erfahrung
+ - generic [ref=e317]:
+ - img [ref=e319]
+ - generic [ref=e322]: Full-Stack Developer
+ - generic [ref=e323]:
+ - img [ref=e325]
+ - generic [ref=e328]: ERP Spezialist
+ - paragraph [ref=e330]: Damjan Savić ist AI & Automation Specialist mit Fokus auf Voice AI, autonome Agenten und Prozessautomatisierung. Mit einem M.A. in Software Development und über 7 Jahren Erfahrung in der Entwicklung digitaler Lösungen verbindet er technische Expertise mit strategischem Geschäftsverständnis.
+ - generic [ref=e331]:
+ - link "Mehr erfahren" [ref=e332] [cursor=pointer]:
+ - /url: /de/about
+ - img [ref=e333]
+ - text: Mehr erfahren
+ - link "CV herunterladen" [ref=e336] [cursor=pointer]:
+ - /url: /damjan_savic_cv_de.pdf
+ - img [ref=e337]
+ - text: CV herunterladen
+ - img "Damjan Savić" [ref=e342]
+ - contentinfo [ref=e343]:
+ - generic [ref=e345]:
+ - generic [ref=e346]:
+ - heading "Kontakt" [level=3] [ref=e347]
+ - generic [ref=e348]:
+ - link "info@damjan-savic.com" [ref=e349] [cursor=pointer]:
+ - /url: mailto:info@damjan-savic.com
+ - img [ref=e350]
+ - generic [ref=e353]: info@damjan-savic.com
+ - generic [ref=e354]:
+ - img [ref=e355]
+ - generic [ref=e358]: Köln, Deutschland
+ - generic [ref=e359]:
+ - heading "Navigation" [level=3] [ref=e360]
+ - navigation [ref=e361]:
+ - link "Portfolio" [ref=e362] [cursor=pointer]:
+ - /url: /de/portfolio
+ - link "Blog" [ref=e363] [cursor=pointer]:
+ - /url: /de/blog
+ - link "Über mich" [ref=e364] [cursor=pointer]:
+ - /url: /de/about
+ - link "Kontakt" [ref=e365] [cursor=pointer]:
+ - /url: /de/contact
+ - generic [ref=e366]:
+ - heading "Social Media" [level=3] [ref=e367]
+ - generic [ref=e368]:
+ - link "LinkedIn" [ref=e369] [cursor=pointer]:
+ - /url: https://www.linkedin.com/in/damjan-savić-720288127/
+ - img [ref=e370]
+ - link "GitHub" [ref=e374] [cursor=pointer]:
+ - /url: https://github.com/damjan1996
+ - img [ref=e375]
+ - generic [ref=e379]:
+ - paragraph [ref=e380]: © 2026 Damjan Savić. Alle Rechte vorbehalten
+ - generic [ref=e381]:
+ - link "Datenschutz" [ref=e382] [cursor=pointer]:
+ - /url: /de/privacy
+ - link "Impressum" [ref=e383] [cursor=pointer]:
+ - /url: /de/imprint
+ - link "AGB" [ref=e384] [cursor=pointer]:
+ - /url: /de/terms
+ - button "Open Next.js Dev Tools" [ref=e390] [cursor=pointer]:
+ - img [ref=e391]
+ - alert [ref=e394]
+```
\ No newline at end of file
diff --git a/test-results/performance-Resource-Loadi-1c0d6-undles-are-reasonably-sized-chromium/test-failed-1.png b/test-results/performance-Resource-Loadi-1c0d6-undles-are-reasonably-sized-chromium/test-failed-1.png
new file mode 100644
index 0000000..52457c2
Binary files /dev/null and b/test-results/performance-Resource-Loadi-1c0d6-undles-are-reasonably-sized-chromium/test-failed-1.png differ