Commit Graph
194 Commits
Author SHA1 Message Date
damjan_savic e8431af213 auto-claude: subtask-1-1 - Create scripts/README.md with comprehensive documentation 2026-01-25 06:30:54 +01:00
damjan_savic 4ef3b4267d auto-claude: subtask-1-1 - Create CONTRIBUTING.md with project overview and development setup 2026-01-25 06:30:54 +01:00
damjan_savic 2f2f4cdf8c auto-claude: subtask-1-2 - Extract ProfessionalServiceJsonLd component 2026-01-25 06:30:51 +01:00
damjan_savic 87694077d9 auto-claude: subtask-1-1 - Create main i18n documentation directory and README 2026-01-25 06:30:48 +01:00
damjan_savic 4c22898d7a auto-claude: subtask-1-1 - Create rate_limits table migration in Supabase 2026-01-25 06:30:46 +01:00
damjan_savic c3d2037b09 auto-claude: subtask-3-1 - Remove components-vite and pages-vite from tsconfig.json 2026-01-25 06:30:33 +01:00
damjan_savicandClaude Sonnet 4.5 2bb0003902 auto-claude: subtask-1-1 - Create legacyBlogPosts data file with TypeScript types
- 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>
2026-01-25 06:30:23 +01:00
damjan_savicandClaude Sonnet 4.5 0f5bba66a8 auto-claude: subtask-1-1 - Move iconMap outside component and memoize event h
- Import useCallback from 'react'
- Add memoized handleHoverStart and handleHoverEnd handlers
- Update event handlers to use memoized versions
- iconMap already at module level outside component

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 06:29:41 +01:00
damjan_savic 18f71c6730 auto-claude: subtask-1-1 - Reduce path count from 36 to 12 paths 2026-01-25 06:29:22 +01:00
damjan_savic 142e582886 auto-claude: subtask-2-2 - Delete src/pages-vite directory (454KB, 50 files) 2026-01-25 06:29:15 +01:00
damjan_savic 43593c7654 auto-claude: subtask-2-1 - Add visibility detection to GlobalBackground component 2026-01-25 06:29:03 +01:00
damjan_savic 3047c8f7f2 auto-claude: subtask-1-1 - Create schemas directory and extract PersonJsonLd 2026-01-25 06:29:02 +01:00
damjan_savicandClaude Sonnet 4.5 f0490db544 auto-claude: subtask-1-1 - Install testing dependencies (@testing-library/react, @testing-library/jest-dom, jsdom)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 06:28:59 +01:00
damjan_savic 85398a58e0 auto-claude: subtask-2-1 - Remove base64 SVG placeholder constant 2026-01-25 06:28:28 +01:00
damjan_savic 3b4a10c90e auto-claude: subtask-2-1 - Delete src/components-vite directory (299KB, 50 fi 2026-01-25 06:28:08 +01:00
damjan_savicandClaude Sonnet 4.5 26955a7b64 auto-claude: subtask-1-2 - Verify current build succeeds before deletion
Verified that Next.js build completes successfully before proceeding with
deletion of components-vite and pages-vite directories. Build exited with
code 0 (success).

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 06:27:10 +01:00
damjan_savicandClaude Sonnet 4.5 75ffb59084 auto-claude: subtask-1-2 - Run optimization on existing blog post images
Generated responsive image variants for all 4 existing blog posts:
- automated-ad-creatives
- erp-integration-breuninger
- fullstack-development-timetracking
- rfid-automation

Each post now has optimized cover images in multiple sizes:
- JPG variants: 200w, 300w, 400w, 600w, 800w, 1200w
- WebP variants: 200w, 300w, 400w, 600w, 800w, 1200w
- Optimized originals: cover.jpg, cover.webp

This matches the optimization pipeline used for project images and
enables responsive image loading with WebP support.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 06:26:45 +01:00
damjan_savic 2b096416a0 auto-claude: subtask-1-3 - Create useIntersectionObserver hook for element vi 2026-01-25 06:26:31 +01:00
damjan_savic 77ceae5b9f auto-claude: subtask-1-2 - Create usePageVisibility hook for tab visibility detection 2026-01-25 06:25:05 +01:00
damjan_savic 7044e16911 auto-claude: subtask-1-1 - Add blog post image processing to optimize-images.js
Extended the image optimization script to process both project and blog post images:
- Added constants for posts input/output directories
- Refactored processImage to accept output directory parameter
- Updated processDirectory to handle multiple content types
- Main function now processes both projects and posts directories
- Gracefully handles missing directories with informative messages
2026-01-25 06:24:07 +01:00
damjan_savic c934eeaad8 auto-claude: subtask-1-1 - Create throttle utility function 2026-01-25 06:23:46 +01:00
damjan_savicandClaude Sonnet 4.5 009eb1d99f auto-claude: subtask-1-1 - Verify no imports from components-vite or pages-vite
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 06:23:08 +01:00
damjan_savicandClaude Sonnet 4.5 ffa56a7b50 auto-claude: subtask-2-2 - Manual browser verification
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>
2026-01-25 04:07:29 +01:00
damjan_savic 34555de0e5 auto-claude: subtask-2-1 - Create basic unit tests for useLocalStorage 2026-01-25 04:01:47 +01:00
damjan_savic 2f8c79612d auto-claude: subtask-1-2 - Add JSDoc documentation to hook 2026-01-25 02:38:22 +01:00
damjan_savic 29ad019884 auto-claude: subtask-1-1 - Create useLocalStorage hook with TypeScript 2026-01-25 02:36:05 +01:00
damjan_savic cba6c66ccc chore: add auto-claude entries to .gitignore 2026-01-22 15:27:30 +01:00
damjan_savicandClaude Opus 4.5 eec1758827 Change port mapping to 3003
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 23:53:09 +01:00
damjan_savicandClaude Opus 4.5 14b263eb78 Change port mapping to 3002
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 23:52:13 +01:00
damjan_savicandClaude Opus 4.5 69f88a08d4 Fix: Replace ES2018 regex flag with compatible pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 23:49:46 +01:00
damjan_savicandClaude Opus 4.5 f98476c3fd Fix: Handle undefined content in blog post rendering
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 23:48:44 +01:00
damjan_savicandClaude Opus 4.5 a7ee78d194 Fix: Make content optional in BlogPost type
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 23:47:42 +01:00
damjan_savicandClaude Opus 4.5 f16b1bcbfd Fix: Add optional chaining for post.tags
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 23:46:16 +01:00
damjan_savicandClaude Opus 4.5 d6a67fc70f Fix: Update Docker config to use pnpm instead of npm
- 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>
2026-01-19 23:44:21 +01:00
damjan_savicandClaude Opus 4.5 87c7ebc5e3 feat: Add professional portfolio images and Hero redesign
- 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>
2026-01-19 23:33:28 +01:00
damjan_savicandClaude Opus 4.5 b1ec7b4d61 Migrate from Vite to Next.js 15 with SSR
- Replace Vite + React Router with Next.js 15 App Router
- Implement i18n with next-intl (URL-based: /de, /en, /sr)
- Add SSR/SSG for all pages (48 static pages generated)
- Setup Supabase SSR client for auth
- Migrate all pages: Home, About, Portfolio, Blog, Contact, Login, Dashboard, Imprint, Privacy, Terms
- Add Docker support with standalone output
- Replace i18next with next-intl JSON translations
- Use next/image for optimized images

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 01:00:33 +01:00
damjan_savicandClaude Opus 4.5 a66f51b9a2 Fix: Hero Icons wie im Footer (lucide-react, nicht sticky)
- 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>
2026-01-05 23:50:10 +01:00
damjan_savicandClaude Opus 4.5 833dea46ae Fix: Hero Social Icons durch Text ersetzt (SVG Rendering-Problem)
- 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>
2026-01-05 23:48:53 +01:00
damjan_savicandClaude Opus 4.5 f6997ce629 Fix: Hero Social Links komplett neu implementiert
- 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>
2026-01-05 23:46:47 +01:00
damjan_savicandClaude Opus 4.5 bc68ea5c0c Fix: SVG Icons mit fill statt stroke
- 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>
2026-01-05 23:45:02 +01:00
damjan_savicandClaude Opus 4.5 195bc98791 Fix: SVG Icons mit expliziter weißer Stroke-Farbe
- 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>
2026-01-05 23:41:26 +01:00
damjan_savicandClaude Opus 4.5 cf74df445b Fix: Social Links unterhalb der Navigation positioniert
- 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>
2026-01-05 23:38:25 +01:00
damjan_savicandClaude Opus 4.5 bd5570aa87 Fix: Cookie-Banner Buttons stapeln sich auf Mobile
- 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>
2026-01-05 23:35:47 +01:00
damjan_savicandClaude Opus 4.5 fc4d4f3cc3 Fix: GitHub/LinkedIn Icons im Hero-Bereich sichtbar machen
- 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>
2026-01-05 23:30:46 +01:00
damjan_savicandClaude Opus 4.5 3f32ad6081 Performance: Preload für Haupt-Script mit fetchpriority=high
- 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>
2026-01-05 23:25:03 +01:00
damjan_savicandClaude Opus 4.5 db6d969874 Performance: i18n Lazy Loading, Bundle-Größe halbiert
- 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>
2026-01-05 23:20:18 +01:00
damjan_savicandClaude Opus 4.5 ff92b58e83 Performance: CSS async laden, kritisches CSS inline erweitert
- Vite Plugin für async CSS Loading (preload/onload Trick)
- Erweiterte kritische CSS Styles inline
- Eliminiert render-blocking CSS (~150ms Einsparung)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 23:16:35 +01:00
damjan_savicandClaude Opus 4.5 8f500bdc6b Performance: HTML-Skeleton für sofortige LCP hinzugefügt
- 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>
2026-01-05 23:09:44 +01:00
damjan_savicandClaude Opus 4.5 090d640e9a Performance: Inter-Font auf 60KB Subset reduziert (vorher 344KB)
- 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>
2026-01-05 23:05:09 +01:00
damjan_savicandClaude Opus 4.5 61c7c523ab Performance: Framer-motion aus kritischem Pfad entfernt
- 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>
2026-01-05 22:34:52 +01:00