diff --git a/README.md b/README.md index 47f857a..9dbdeba 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ src/ - Node.js 22+ - npm - Optional: GitHub personal access token for Projects section +- Modern browser with `IntersectionObserver` support (Chrome 51+, Firefox 55+, Safari 12.1+, Edge 15+, and modern mobile browsers like iOS Safari 12.2+, Chrome for Android 51+) for animations ### 1. Clone diff --git a/next.config.ts b/next.config.ts index b899aa4..03e116d 100644 --- a/next.config.ts +++ b/next.config.ts @@ -3,7 +3,27 @@ import type { NextConfig } from 'next' const nextConfig: NextConfig = { experimental: { optimizePackageImports: ['@mui/material', '@mui/icons-material'], + cssChunking: 'strict', }, + headers: async () => [ + { + source: '/(.*)', + headers: [ + { key: 'X-Content-Type-Options', value: 'nosniff' }, + { key: 'X-Frame-Options', value: 'DENY' }, + { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' }, + ], + }, + { + source: '/_next/static/(.*)', + headers: [ + { + key: 'Cache-Control', + value: 'public, max-age=31536000, immutable', + }, + ], + }, + ], } export default nextConfig diff --git a/src/app/globals.css b/src/app/globals.css index b2555e1..75747a3 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -95,7 +95,7 @@ body { animation: header-fade-in 0.4s cubic-bezier(0.16, 1, 0.3, 1) 0.08s both; } -/* Section entrance – replaces framer-motion FadeIn */ +/* Section entrance */ @keyframes fade-in-up { from { opacity: 0; @@ -116,7 +116,7 @@ body { var(--fade-delay, 0s) both; } -/* Stagger children – replaces framer-motion StaggerWrapper/StaggerItem */ +/* Stagger children */ .stagger-item { opacity: 0; } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index e8ad87d..45834a4 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -107,6 +107,18 @@ export default function RootLayout({ return ( + + + +