damjan_savic
80694049b6
auto-claude: subtask-1-7 - Extract OrganizationJsonLd component
2026-01-25 06:37:21 +01:00
damjan_savic
cad7d46c7d
auto-claude: subtask-1-3 - Create comprehensive unit tests for Cache with LRU
2026-01-25 06:37:05 +01:00
damjan_savic and Claude Sonnet 4.5
8bd15d9d03
auto-claude: subtask-1-3 - Add CSRF token generation to middleware
...
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-25 06:36:42 +01:00
damjan_savic and Claude Sonnet 4.5
7ff2cb276e
auto-claude: subtask-1-3 - Update portfolio page with filtering logic
...
- Import CategoryFilter component
- Add searchParams to Props type to receive category query param
- Filter projects based on selected category
- Render CategoryFilter component above PortfolioGrid
- Pass filtered projects to PortfolioGrid
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-25 06:36:33 +01:00
damjan_savic
09c6f31ff0
auto-claude: subtask-2-1 - Add JSDoc to auth.ts (checkAuth, signOut functions)
2026-01-25 06:36:11 +01:00
damjan_savic
d877ac7e57
auto-claude: subtask-1-6 - Extract ServiceJsonLd component
2026-01-25 06:35:49 +01:00
damjan_savic and Claude Sonnet 4.5
200c204692
auto-claude: subtask-3-1 - Memoize touch handlers and getCurrentPageItems in Experience.tsx
...
- Added useCallback import from react
- Memoized handleTouchStart with empty dependency array
- Memoized handleTouchMove with empty dependency array
- Memoized handleTouchEnd with dependencies [touchStart, touchEnd, currentPage, totalPages]
- Memoized getCurrentPageItems with dependencies [experiences, currentPage, itemsPerPage]
- Follows patterns from BlogPost.tsx and ScrollContext.tsx reference files
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-25 06:35:41 +01:00
damjan_savic
483c8aefe7
auto-claude: subtask-1-3 - Add maxLength attribute to textarea and enforce character limit
2026-01-25 06:35:27 +01:00
damjan_savic
f2b4c0a227
auto-claude: subtask-1-4 - Add JSDoc to api.ts (fetchWithTimeout function)
2026-01-25 06:35:04 +01:00
damjan_savic
d53fba06a2
auto-claude: subtask-1-4 - Add performance optimizations - update willChange
2026-01-25 06:34:44 +01:00
damjan_savic
39697ae857
auto-claude: subtask-3-1 - Update blog page to import legacy posts from data file
2026-01-25 06:34:39 +01:00
damjan_savic
ee048ef70f
auto-claude: subtask-1-5 - Extract FAQJsonLd component
2026-01-25 06:34:31 +01:00
damjan_savic
bfdc52a117
auto-claude: subtask-1-2 - Add translations for character counter in all supp
2026-01-25 06:34:03 +01:00
damjan_savic
9bca232ca7
auto-claude: subtask-2-1 - Move iconMap outside component and memoize event handlers
2026-01-25 06:34:00 +01:00
damjan_savic
5115831e81
auto-claude: subtask-1-2 - Create CategoryFilter component
2026-01-25 06:33:49 +01:00
damjan_savic and Claude Sonnet 4.5
baa3ad0571
auto-claude: subtask-1-3 - Add JSDoc to rateLimiting.ts (RateLimiter class and methods)
...
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-25 06:33:46 +01:00
damjan_savic and Claude Sonnet 4.5
ebf2d18969
auto-claude: subtask-1-1 - Update not-found.tsx to use next-intl and match design system
...
- 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 >
2026-01-25 06:33:39 +01:00
damjan_savic
87261c6b92
auto-claude: subtask-1-2 - Create client-side CSRF token retrieval utility
2026-01-25 06:33:36 +01:00
damjan_savic and Claude Sonnet 4.5
44fd4880f9
auto-claude: subtask-1-1 - Create Supabase middleware client utility
...
Created middleware.ts with Supabase client configured for Next.js middleware context.
Uses NextRequest/NextResponse cookie handling instead of next/headers.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-25 06:33:35 +01:00
damjan_savic and Claude Sonnet 4.5
afcded170b
auto-claude: subtask-1-1 - Create SkillsSkeleton component matching Skills section layout
...
- 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 >
2026-01-25 06:33:23 +01:00
damjan_savic
34ac65c534
auto-claude: subtask-1-4 - Extract WebPageJsonLd component
2026-01-25 06:33:19 +01:00
damjan_savic
370611cb01
auto-claude: subtask-1-3 - Optimize animated properties - remove pathOffset
2026-01-25 06:32:39 +01:00
damjan_savic and Claude Sonnet 4.5
5b4c24e737
auto-claude: subtask-1-1 - Add focusedIndex state and arrow key navigation logic
...
- Added focusedIndex state to track keyboard focus
- Enhanced handleKeyDown to support ArrowDown, ArrowUp, Enter, and Escape keys
- Added visual focus indicator with orange ring (ring-2 ring-orange-500)
- Implemented aria-activedescendant for screen reader support
- Added unique IDs to language options for accessibility
- Reset focusedIndex when dropdown opens/closes
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-25 06:32:13 +01:00
damjan_savic
d1b8665652
auto-claude: subtask-1-2 - Add JSDoc to cache.ts (Cache class and its 5 methods)
2026-01-25 06:32:11 +01:00
damjan_savic
4cc19386fe
auto-claude: subtask-2-1 - Add caching to getAllBlogPosts using existing Cache
2026-01-25 06:32:09 +01:00
damjan_savic
602ff99b2b
auto-claude: subtask-1-3 - Extract BreadcrumbJsonLd component
2026-01-25 06:32:02 +01:00
damjan_savic
f0e5312a9b
auto-claude: subtask-1-1 - Update translations with actual project categories
2026-01-25 06:31:54 +01:00
damjan_savic
db13754e24
auto-claude: subtask-1-1 - Add maxSize parameter and access tracking to Cache
2026-01-25 06:31:54 +01:00
damjan_savic
b1e89b64c5
auto-claude: subtask-1-1 - Create server-side CSRF token generation and valid
2026-01-25 06:31:45 +01:00
damjan_savic and Claude Sonnet 4.5
a46b4f61fe
auto-claude: subtask-1-1 - Add character counter state and logic to ContactForm
...
- Added MAX_MESSAGE_LENGTH constant (1000 characters)
- Added messageLength calculation from formData.message
- Implemented character counter display below message textarea
- Added color feedback: red (over limit), yellow (80%+), gray (normal)
- Counter updates in real-time as user types
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-25 06:31:18 +01:00
damjan_savic
018921b6ea
auto-claude: subtask-3-1 - Apply throttle to Header scroll event listener
2026-01-25 06:31:07 +01:00
damjan_savic
c80f60cf4e
auto-claude: subtask-2-2 - Update BlogImage component to use optimized responsive images
...
- Changed sizes attribute from viewport-based (vw) to pixel-based values
- Matches PortfolioCard pattern for consistent image optimization
- Enables Next.js to generate optimal image sizes for each breakpoint
- Improves performance by serving appropriately sized WebP images
2026-01-25 06:31:03 +01:00
damjan_savic and Claude Sonnet 4.5
75d4e006ff
auto-claude: subtask-1-2 - Replace Math.random() with deterministic durations
...
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-25 06:31:01 +01:00
damjan_savic
52ef3b96da
auto-claude: subtask-1-1 - Add focus state styling to NavLink component
2026-01-25 06:30:55 +01:00
damjan_savic
2f2f4cdf8c
auto-claude: subtask-1-2 - Extract ProfessionalServiceJsonLd component
2026-01-25 06:30:51 +01:00
damjan_savic
ac36667dad
auto-claude: subtask-1-1 - Add JSDoc to errorHandling.ts (AppError class, han
2026-01-25 06:30:49 +01:00
damjan_savic and Claude 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_savic
9baffe9405
auto-claude: subtask-1-2 - Delete src/i18n/locales-old directory with all 135
2026-01-25 06:29:48 +01:00
damjan_savic and Claude 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_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_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
c934eeaad8
auto-claude: subtask-1-1 - Create throttle utility function
2026-01-25 06:23:46 +01:00
damjan_savic and Claude 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
b89031576d
auto-claude: subtask-1-4 - Add URL state management using searchParams and router.push
2026-01-25 04:03:05 +01:00