- Created Chatbot.tsx with floating chat bubble UI
- Implemented streaming SSE message handling
- Added visitor ID persistence via localStorage for session continuity
- Integrated with /api/chat endpoint for AI responses
- Added suggested prompts for empty chat state
- Implemented error handling with retry functionality
- Added clear chat functionality
- Created responsive design with mobile support
- Created index.ts barrel export for chat components
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Created ChatMessage.tsx component with:
- ChatMessage component for displaying user/assistant messages
- Styled differently based on role (user right-aligned, assistant left-aligned)
- Framer Motion animations for smooth appearance
- Streaming indicator for real-time response display
- TypingIndicator component for loading state
- WelcomeMessage component for empty chat state
- Timestamp formatting utility
- Responsive design following existing Tailwind patterns
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implemented Next.js API route at /api/chat with:
- POST endpoint for sending messages with streaming responses (SSE)
- GET endpoint for retrieving chat history
- OPTIONS endpoint for CORS preflight
- Integration with Deepseek API via createStreamingChatCompletion
- Session management via getOrCreateChatSession (24h continuity)
- Message persistence to Supabase (user + assistant messages)
- Context management with 20-message history limit
- Error handling for API key/database issues
- Request validation for required fields (message, visitorId)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create SQL migration for chatbot database tables:
- chat_sessions: Stores visitor session data with visitor_id, metadata, timestamps
- chat_messages: Stores chat messages with role (user/assistant/system), content
- Proper indexes for visitor lookup and message ordering
- Row Level Security (RLS) enabled with policies for:
- Service role full access (for server-side API)
- Visitor-based access via x-visitor-id header (for potential future client-side)
- Trigger for automatic updated_at column on chat_sessions
Also updated ChatSession interface in chat.ts to include updated_at field.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Deepseek client using OpenAI SDK with custom baseURL
- Implement createDeepseekClient() factory function with lazy initialization
- Add ChatMessage type definitions for type safety
- Include portfolio-specific system prompt for the chatbot
- Support both streaming and non-streaming chat completions
- Configure default model (deepseek-chat) and sensible defaults
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Created .env.example with template for all environment variables
- Added DEEPSEEK_API_KEY for DeepSeek API integration
- Added SUPABASE_SERVICE_ROLE_KEY for server-side Supabase operations
- Updated .env.local with placeholder values (not committed due to .gitignore)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove outdated static public/sitemap.xml that conflicted with dynamic sitemap.ts
(was missing leistungen pages, city pages, and had outdated blog/portfolio slugs)
- Fix robots.ts to reference only the single sitemap.xml instead of non-existent
language-specific sitemaps (sitemap-de.xml, sitemap-en.xml, sitemap-sr.xml)
- Dynamic sitemap.ts now handles all pages with proper hreflang alternates
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added missing OpenGraph and Twitter card metadata to about, contact, and portfolio pages:
- Added siteName to OpenGraph metadata
- Added OpenGraph images with proper dimensions (1200x630)
- Added Twitter card metadata (summary_large_image)
All pages now follow the home page metadata pattern for consistent SEO.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Enhanced JSON-LD structured data coverage with the following improvements:
## PersonJsonLd Enhancements:
- Added hasOccupation with skills and occupationLocation
- Added knowsLanguage (German, English, Serbian)
- Added worksFor reference to business
- Added nationality for geo-targeting
- Enhanced knowsAbout with Claude AI, GPT-4, LangChain
- Upgraded image to ImageObject with dimensions
## New Components:
- ContactPageJsonLd: Contact page with ContactPoint entity
- CollectionPageJsonLd: Portfolio page with ItemList for projects
- ItemListJsonLd: Generic list schema for any items
## WebSiteJsonLd Enhancement:
- Added SearchAction for sitelinks search box
## Page Updates:
- Contact page now uses ContactPageJsonLd
- Portfolio page now uses CollectionPageJsonLd and BreadcrumbJsonLd
All schemas use @id cross-references for proper entity linking.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Created PAGESPEED_VERIFICATION_REPORT.md with comprehensive audit results
- Fixed robots.txt conflict by removing static public/robots.txt
- Updated src/app/robots.ts to include language-specific sitemaps (de, en, sr)
- Local Lighthouse tests: Accessibility 92-100%, Best Practices 100%
- Performance/SEO verification requires manual testing via pagespeed.web.dev
- Added .auto-claude/ to .gitignore
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create WebVitals client component in src/components/analytics/
- Track LCP, INP, CLS, FCP, and TTFB metrics
- Log metrics to console in development mode
- Send metrics to Google Analytics when available
- Add WebVitals component to root layout
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add comprehensive performance test suite with Playwright-Lighthouse integration
- Include Lighthouse audits with 90% thresholds for performance, accessibility,
best-practices, and SEO
- Test all locales (de, en, sr) for homepage performance
- Add critical pages performance tests (homepage, about, portfolio, contact)
- Include mobile performance testing with iPhone viewport
- Add Core Web Vitals verification tests (LCP, CLS, error tracking)
- Add resource loading tests (JS bundle size, image optimization, modern formats)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add playwright.config.ts with Chromium-only setup for Lighthouse
- Configure three test projects: chromium, mobile-chrome, and tablet
- Enable remote debugging ports (9222-9224) for Lighthouse integration
- Set up web server to auto-start Next.js dev server
- Add tests/e2e directory with setup verification test
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added testing infrastructure dependencies:
- @playwright/test@^1.58.0 for end-to-end testing
- playwright-lighthouse@^4.0.0 for Lighthouse performance audits
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Switched from npm ci to pnpm install --frozen-lockfile
- Added corepack enable for pnpm support
- Added .dockerignore for cleaner builds
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add 15 optimized WebP images for portfolio (21-53KB each)
- Redesign Hero section with full-width background image
- Add SSR support for Hero component
- Update About section with new portrait image
- Update Contact page with professional headshot
- Add images to Services/Leistungen page
- Add image optimization script (sharp)
- Update translations for gallery section
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Linkedin und Github Icons aus lucide-react importiert
- fixed zu absolute geändert (nicht mehr sticky)
- Styling wie im Footer (text-zinc-400, hover-Effekte)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- LinkedIn Icon durch "in" Text ersetzt
- GitHub Icon durch "</>" Text ersetzt
- Beide Icons haben bg-white/10 Hintergrund und hover-Effekte
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- SVGs direkt inline statt separate Komponenten
- Buttons mit bg-white/10 Hintergrund für Sichtbarkeit
- Fixed position statt absolute
- Runde Buttons mit Hover-Effekt
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Gefüllte SVG Icons (fill="#ffffff")
- Standard LinkedIn/GitHub/Mail Icon Pfade
- Sollte jetzt definitiv sichtbar sein
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- stroke="currentColor" durch stroke="#ffffff" ersetzt
- Icons sind jetzt garantiert sichtbar
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Von top-4 auf top-20 verschoben (unter 64px Navigation)
- z-index auf 50 erhöht für Sichtbarkeit
- LinkedIn und GitHub Icons jetzt sichtbar
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Buttons werden vertikal gestapelt auf kleinen Bildschirmen
- Ab sm-Breakpoint (640px) nebeneinander
- Volle Breite auf Mobile für bessere Bedienbarkeit
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Inline SVG Icons statt lucide-react Import
- Icons werden sofort gerendert ohne Lazy-Loading-Verzögerung
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Entry-Script wird mit hoher Priorität vorgeladen
- Schnellerer JavaScript-Download und Ausführung
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- i18n lädt EN/SR Übersetzungen nur bei Bedarf
- Hauptbundle von 356KB auf 179KB reduziert (~50%)
- Entfernt modulepreload für nicht-kritische Chunks
- Nur react-vendor und i18n-vendor werden vorgeladen
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Portrait-Bild wird sofort in HTML gerendert (kein JS-Warten)
- Skeleton wird ausgeblendet wenn React mounted
- Unnötige preconnects entfernt
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Font Subsetting mit fonttools für Latin + German Zeichen
- 83% Reduktion der Font-Datei
- PageSpeed API Script hinzugefügt
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Framer-motion aus Layout, NavLink, ContactInfo, LanguageSwitcher entfernt
- PageTransition komplett vereinfacht (keine 1200ms Verzögerung mehr)
- FloatingPaths wird erst nach 2s lazy geladen
- Framer-motion und lucide-react in separate Chunks getrennt
- Icons-Chunk: 10.87KB (statt 126KB ui-vendor)
- Animations-Chunk wird erst bei Bedarf geladen
Einsparung: ~115KB beim Initial Load
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Portrait-Bild von 1.2MB auf ~20KB optimiert (300px/600px + WebP)
- Hero-Animation entfernt für schnelleren LCP
- WebP srcset für alle Projekt-Bilder (6 Größen: 200-1200px)
- Korrekte sizes-Attribute für Mobile (350px statt 1200px)
- Supabase lazy laden via dynamischen Import
- Admin-Check verzögert mit requestIdleCallback
- Hauptbundle von 461KB auf 358KB reduziert
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- LCP-Bild (Portrait) mit fetchpriority="high" und Preload optimiert
- Logo SVG mit expliziten width/height Attributen versehen (CLS)
- Touch-Targets in Experience Navigation von 5px auf 24px vergrößert
- Kontrast für Firmenname/Zeitraum verbessert (zinc-300/zinc-400)
- PWA Service Worker mit script-defer für nicht-blockierendes Laden
- Responsive Bilder: srcset mit 400w/800w/1200w + WebP-Format
- Neues Build-Script für Bildoptimierung (scripts/optimize-images.js)
- Original-Bilder in source-images/ verschoben (gitignored)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Alle Portfolio-Projekte haben jetzt Datumsangaben aus 2025
- Betrifft DE, EN und SR Sprachversionen
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- RecRobot-Projektdateien (DE/EN/SR Locales, MDX) gelöscht
- RecRobot-Bilder entfernt
- Alle Referenzen in Portfolio-Index, Experience, About und Meta bereinigt
- README.md aktualisiert
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Übersetzungsdateien für DE, EN, SR erstellt
- Projekt in ProjectPage.tsx registriert
- Projekt in Portfolio-Index (de, en, sr) hinzugefügt
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- pnpm-workspace.yaml entfernt (verursachte Build-Fehler)
- Alle Projekt-Cover-Bilder auf 1200px optimiert und komprimiert
- Gesamte Bildgröße von ~20MB auf ~1MB reduziert
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Cover-Bilder für ai-music-production und website-mit-ki komprimiert
- pnpm-workspace.yaml hinzugefügt
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>