- Added rate limit translations for en, de, and sr locales
- Added state to track remaining attempts from X-RateLimit-Remaining header
- Display warning when remaining attempts are low (<=2)
- Show user-friendly error messages with time until reset for 429 errors
- Added AlertTriangle icon for visual feedback on warnings
- All messages now use i18n translation keys for multilingual support
Changes:
- Replaced simulated API call with real fetch() to /api/contact
- Added errorMessage state for custom error messages
- Implemented proper response handling for different status codes:
* 200: Success message and form reset
* 429: Rate limit error with time until retry
* 400/500: Display API error messages
- Enhanced rate limit error display with human-readable time formatting
- Added VERIFICATION_STEPS.md for manual testing guidance
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixed translation bug in character counter implementation. Changed hardcoded
English text "characters" to use the translation key so counter displays
correctly in all supported languages (English, German, Serbian).
Code review verification completed:
- Character counter state and logic verified
- Translations in all languages (en/de/sr) verified
- maxLength enforcement verified
- Color feedback logic verified (gray, yellow at 80%, red at limit)
Created comprehensive e2e-verification-report.md with 8 manual test cases
for human testers to complete browser-based verification.
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>