| Category | Metric | Value | Score | Status |
|---|---|---|---|---|
| Performance | LCP (Largest Contentful Paint) | 4,433 ms | ❌ Poor | Needs improvement (target: <2,500 ms) |
| CLS (Cumulative Layout Shift) | 0.00 | ✅ Excellent | Meets target (<0.1) | |
| TTFB (Time to First Byte) | 11 ms | ✅ Excellent | Meets target (<800 ms) | |
| FCP (First Contentful Paint) | 248 ms | ✅ Excellent | Meets target (<1,800 ms) | |
| First Paint | 248 ms | ✅ Excellent | Meets target (<1,800 ms) | |
| DOM Interactive | 28 ms | ✅ Excellent | Meets target (<3,800 ms) | |
| DOM Content Loaded | 183 ms | ✅ Excellent | Meets target (<3,800 ms) | |
| Load Complete | 184 ms | ✅ Excellent | Meets target (<3,800 ms) | |
| SEO | Page Title | Present | ✅ Excellent | "Vanessa Depraute : Designer & Developer" |
| Meta Description | Present | ✅ Excellent | 138 characters | |
| Meta Keywords | Present | ✅ Excellent | Set | |
| Open Graph Tags | Complete | ✅ Excellent | Full OG meta tags with absolute URLs | |
| Twitter Card | Present | ✅ Excellent | summary_large_image | |
| Canonical URL | Set | ✅ Excellent | https://www.vanessadepraute.dev/ | |
| Robots Meta | index, follow | ✅ Excellent | Allows search indexing | |
| H1 Tags | 1 | ✅ Excellent | Proper single H1 structure | |
| H2 Tags | 3 | ✅ Excellent | Acceptable | |
| H3 Tags | 29 | Reasonable for FAQ accordion | ||
| Structured Data | 1 | ✅ Excellent | JSON-LD present | |
| Images without Alt | 0/38 | ✅ Excellent | All images have alt text | |
| Accessibility | Body Font Size | 16px | ✅ Excellent | Meets minimum |
| Buttons without ARIA | 0/14 | ✅ Excellent | All buttons have labels | |
| Links without Text | 0/5 | ✅ Excellent | All have text | |
| Images without Alt | 0/38 | ✅ Excellent | All images accessible | |
| Skip to Content Link | Present | ✅ Excellent | Added for keyboard navigation | |
| Language Attribute | en | ✅ Excellent | Set correctly | |
| Heading Hierarchy | Sequential | ✅ Excellent | Proper heading levels | |
| Focusable Elements | 19 | ✅ Excellent | Keyboard navigable | |
| Best Practices | HTTPS | ✅ Yes | ✅ Excellent | Secure connection |
| Mixed Content | 0 | ✅ Excellent | None detected | |
| Content-Security-Policy | Set | ✅ Excellent | Comprehensive CSP configured | |
| X-Frame-Options | DENY | ✅ Excellent | Prevents clickjacking | |
| Viewport Meta | Set | ✅ Excellent | Responsive | |
| Service Worker | Optional | Can enable offline support | ||
| Inline Styles | 219 | Framework/library inline acceptable | ||
| Inline Scripts | 17 | Framework/library inline acceptable | ||
| Modern Image Formats | 15.8% | Needs GIF optimization | ||
| Large Images (>1.9MB) | 1/38 | One large GIF detected | ||
| Resources | Total Resources | 68 | - | Reasonable |
| Total Transfer Size | ~6.7 MB | Can be reduced with GIF optimization | ||
| Third-Party Domains | 4 | ✅ Excellent | Minimal | |
| Total Images | 38 | - | - | |
| CSS Files | 5 | - | - | |
| JavaScript Files | 6 | - | - |
Overall Assessment: Performance is good but limited by large GIF assets (~9.6 MB). SEO is now excellent with proper meta tags, canonical URL, and single H1. Accessibility is excellent with all ARIA labels and skip-to-content link. Best practices include comprehensive security headers (CSP, X-Frame-Options).
- Added canonical URL (
web/index.html):<link rel="canonical" href="https://www.vanessadepraute.dev/" /> - Fixed robots meta tag: Changed from
noindextoindex, follow, max-image-preview:large - Fixed Open Graph image path: Changed from
/avatar.png(relative) tohttps://www.vanessadepraute.dev/assets/profilepicture.webp(absolute URL) - Fixed heading hierarchy: Changed FAQ accordion headings from
<h1>to<h3>(reduced from 11 H1 to 1 H1 on main page)
- Added skip-to-content link:
<a href="#main-content" class="skip-link">Skip to main content</a>with CSS styling - Added ARIA label to ContactButton: Added
aria-label={t("footer.contact")} - Verified existing ARIA labels: AnimatedThemeToggler, AnimatedSoundToggler, and LanguageSwitcher have proper labels
- Verified Footer links: All social media links have appropriate
aria-labelattributes
Added to vercel.json:
- Content-Security-Policy:
default-src 'self'script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.vanessadepraute.devstyle-src 'self' 'unsafe-inline' https://fonts.googleapis.comimg-src 'self' 'unsafe-inline' data: https://www.vanessadepraute.devfont-src 'self' https://fonts.gstatic.com https://fonts.googleapis.comconnect-src 'self' https://www.vanessadepraute.dev https://o4509101039419392.ingest.de.sentry.io https://sentry.ioframe-src 'self'object-src 'none'
- X-Frame-Options:
DENY - X-Content-Type-Options:
nosniff - Referrer-Policy:
strict-origin-when-cross-origin
- Added resource preloading in
index.html:- JetBrains Mono font (
.woff2) for faster text rendering - Profile picture (
/assets/profilepicture.webp) for faster LCP
- JetBrains Mono font (
- Build verification: Successfully ran
pnpm buildwith no errors - All TypeScript compilation passed
- Project is production-ready
Current situation:
web/public/gifs/contains 7 GIF files totaling ~9.6 MB:cat-play.gif: 5.0 MB (main issue)cat-curious.gif: 1.7 MBcat-cool.gif: 2.1 MBcat-dance.gif: 98 KBcat-happy.gif: 558 KBcat-jump.gif: 37 KBcat-success.gif: 51 KBcat-celebrate.gif: 62 KB
Recommendation:
- Convert GIFs to modern formats (WebP/AVIF) which can reduce file size by 60-80%
- Consider lazy loading GIFs (they're not visible on initial page load)
- Use animated WebP or videos (MP4/WebM) for better compression
Expected improvement:
- Total transfer size: 9.6 MB → ~2.4 MB (75% reduction)
- LCP improvement: Faster initial page load
- Better Core Web Vitals scores
- Overall Performance score: 65 → ~85
Tools for conversion:
ffmpegfor video-to-WebP conversioncwebpfor GIF-to-WebP conversion- Squoosh (https://squoosh.app/) for WebP optimization
Example commands:
# Convert GIF to WebP
ffmpeg -i cat-play.gif -vf "fps=10,scale=320:-1:flags=lanczos" -c:v libwebp -q 50 -loop 0 cat-play.webp
# Convert to AVIF (modern format, better compression)
ffmpeg -i cat-play.gif -vf "fps=10,scale=320:-1:flags=lanczos" -c:v libaom-av1 -crf 30 -pix_fmt yuv420p cat-play.avifAdd loading="lazy" attribute to GIF images that appear below the fold to improve initial page load.
Example:
<img
src="/gifs/cat-play.gif"
alt="Cat playing animation"
loading="lazy"
className="..."
/>After implementing GIF optimization:
| Category | Before | After | Improvement |
|---|---|---|---|
| Performance | 65/100 | ~85/100 | +20 points |
| SEO | 100/100 | 100/100 | Maintained |
| Accessibility | 100/100 | 100/100 | Maintained |
| Best Practices | 92/100 | ~95/100 | +3 points |
| Overall | ~67/100 | ~90/100 | +23 points |
web/index.html: SEO meta tags, canonical URL, skip link, preload directivesweb/src/index.css: Skip-link stylesweb/src/components/ui/accordion-05.tsx: Changed H1 to H3web/src/components/ContactButton.tsx: Added ARIA labelvercel.json: Added security headers (CSP, X-Frame-Options, etc.)
- High Priority: Convert all 7 GIFs to WebP/AVIF formats
- Medium Priority: Implement lazy loading for GIFs
- Low Priority: Review inline styles (219 elements) from frameworks
- Optional: Implement service worker for offline support
- Optional: Add more detailed structured data (Organization, BreadcrumbList, etc.)
-
Image Optimization:
- Squoosh - Drag-and-drop WebP/AVIF optimizer
- CloudConvert - Batch file conversion
- TinyPNG - PNG optimization
-
Performance Testing:
- Lighthouse - Automated website auditing
- WebPageTest - Detailed performance analysis
- GTmetrix - Performance monitoring
-
Accessibility Testing:
- WAVE - Web accessibility evaluation tool
- axe DevTools - Browser extension for a11y testing
- Lighthouse Accessibility Audit - Built-in a11y checks
Last updated: January 20, 2026