- Add next-intl internationalization support
- Use translation keys from pages.notfound (title, description, backHome)
- Change button from blue to white/zinc design system colors
- Link to default locale homepage
- Convert component to async for getTranslations
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Added Skeleton base component using zinc-700/50 and animate-pulse
- Created SkillsSkeleton with two-column grid layout
- Left column: 8 progress bar skeletons with labels and percentages
- Right column: 2x3 grid of card skeletons matching icon layout
- Replaced loading state with SkillsSkeleton component
- Added 2s delay to useEffect for easier skeleton visibility during testing
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Created src/data/legacyBlogPosts.ts following pattern from cities.ts and services.ts
- Exported LegacyBlogPostsData type and legacyBlogPosts constant
- Includes all 8 legacy blog posts with translations (de, en, sr)
- Build succeeds with no type errors
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Created comprehensive test page at src/app/test-localstorage/page.tsx to verify useLocalStorage hook functionality in the browser.
Test Coverage:
- String values (basic get/set)
- Complex objects (nested properties)
- Arrays (add/remove items)
- Numbers (increment/decrement)
- Remove functionality
- State persistence across page refreshes
- Real-time localStorage updates visible in DevTools
Verification Guide:
A detailed manual verification guide has been created at .auto-claude/specs/004-add-uselocalstorage-custom-hook/MANUAL_VERIFICATION.md with step-by-step instructions for browser testing.
Manual Verification Checklist:
- [ ] No hydration errors in console
- [ ] localStorage updates visible in DevTools
- [ ] State persists across page refresh
- [ ] No TypeScript errors (verified with npx tsc --noEmit)
TypeScript compilation verified with no errors.
Co-Authored-By: Claude Sonnet 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>
- 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>