perf: optimize portfolio runtime delivery
Some checks failed
Test and deploy / Verify production build (push) Has been cancelled
Test and deploy / Deploy production (push) Has been cancelled

Replace the blocking asset loader with progressive rendering, defer expensive media and Three.js work, and reduce hydration and animation costs. Move deployment from a static Nginx export to the standalone Next.js runtime with optimized dynamic images.
This commit is contained in:
2026-09-09 12:43:37 +03:30
parent 9143ba8504
commit f34bea05cd
63 changed files with 1296 additions and 1048 deletions

View File

@@ -1,4 +1,4 @@
import Image from 'next/image';
import { ImageWithSkeleton } from './ImageWithSkeleton';
import { getEducation } from '@/data/education';
import { messagesByLocale, type Locale } from '@/i18n/content';
import styles from './EducationSection.module.css';
@@ -8,7 +8,7 @@ export const EducationSection = ({ locale }: { locale: Locale }) => {
const copy = messagesByLocale[locale].education;
return (
<section id="education" className={styles.educationSection}>
<section id="education" className={styles.educationSection} data-deferred-render data-looping-motion>
<div className="content-container">
<div className="section-header" data-reveal="soft">
<div className="section-title-wrap">
@@ -21,12 +21,13 @@ export const EducationSection = ({ locale }: { locale: Locale }) => {
<div className={styles.card} data-reveal-group>
<div className={styles.crestCol} data-reveal="image">
<div className={styles.crestContainer}>
<Image
src={education.logo}
<ImageWithSkeleton
src={education.logo.src}
alt={education.institution}
width={264}
height={192}
fill
sizes="(max-width: 650px) 12rem, 16.5rem"
className={styles.crestImage}
skeletonShape="rounded"
/>
</div>
</div>