diff --git a/.gitignore b/.gitignore index 9a7d6fb..0a7adec 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ .claude/ .agent/ .gemini/ +_/ GEMINI.md AGENT.md diff --git a/biome.json b/biome.json index c784ae7..2f0ac5b 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.4.12/schema.json", + "$schema": "https://biomejs.dev/schemas/2.5.7/schema.json", "vcs": { "enabled": true, "clientKind": "git", @@ -18,7 +18,7 @@ "linter": { "enabled": true, "rules": { - "recommended": true, + "preset": "recommended", "correctness": { "useExhaustiveDependencies": "warn", "useJsxKeyInIterable": "error" diff --git a/components/Copyright.tsx b/components/Copyright.tsx index 0e95b40..5a7025d 100644 --- a/components/Copyright.tsx +++ b/components/Copyright.tsx @@ -6,7 +6,6 @@ const Copyright = () => { fontWeight: '400', fontSize: '1.4rem', lineHeight: '2.4rem', - color: 'white', gap: '1rem', }} > diff --git a/next.config.mjs b/next.config.mjs index 379fc8a..740432d 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -9,6 +9,11 @@ const nextConfig = { // Enable standalone output for optimized Docker builds output: 'standalone', + // Keep Turbopack scoped to this repository when parent directories contain lockfiles. + turbopack: { + root: import.meta.dirname, + }, + // Security headers configuration async headers() { return [ diff --git a/package.json b/package.json index e31ceec..9081f8e 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "luddy.dance", "version": "0.1.0", "private": true, - "packageManager": "pnpm@11.1.3", + "packageManager": "pnpm@11.20.0", "engines": { "node": ">=22" }, @@ -22,27 +22,27 @@ }, "dependencies": { "logan-logger": "^1.1.16", - "next": "16.2.6", - "react": "^19.2.6", - "react-dom": "^19.2.6" + "next": "16.3.0", + "react": "^19.2.8", + "react-dom": "^19.2.8" }, "devDependencies": { - "@biomejs/biome": "^2.4.15", - "@next/bundle-analyzer": "^16.2.6", - "@tailwindcss/postcss": "^4.3.0", + "@biomejs/biome": "^2.5.7", + "@next/bundle-analyzer": "^16.3.0", + "@tailwindcss/postcss": "^4.3.3", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@types/node": "^25.9.0", - "@types/react": "^19.2.14", - "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^6.0.2", - "@vitest/ui": "^4.1.6", + "@types/react": "^19.2.18", + "@types/react-dom": "^19.2.4", + "@vitejs/plugin-react": "^6.0.5", + "@vitest/ui": "^4.1.10", "jsdom": "^29.1.1", - "postcss": "^8.5.14", - "sharp": "^0.34.5", - "tailwindcss": "^4.3.0", + "postcss": "8.5.25", + "sharp": "^0.35.3", + "tailwindcss": "^4.3.3", "typescript": "^6.0.3", - "vite": "^8.0.13", - "vitest": "^4.1.6" + "vite": "^8.2.0", + "vitest": "^4.1.10" } } diff --git a/pages/index.tsx b/pages/index.tsx index 1421755..b3a543c 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -2,10 +2,13 @@ import Image from 'next/image'; import { useEffect, useRef, useState } from 'react'; import { log, reportError, setUserContext, trackPerformance } from '@/lib/logger'; +const VIDEO_URL = 'https://www.youtube.com/embed/L3Ucukzbp6k'; + export default function Component() { const [isIframeLoaded, setIframeLoaded] = useState(false); const [shouldLoadIframe, setShouldLoadIframe] = useState(false); const iframeRef = useRef(null); + const iframeLoadStartedAtRef = useRef(null); useEffect(() => { // Set user context on page load @@ -23,6 +26,7 @@ export default function Component() { const [entry] = entries; if (entry.isIntersecting) { const startTime = performance.now(); + iframeLoadStartedAtRef.current = startTime; setShouldLoadIframe(true); trackPerformance('iframe_intersection', performance.now() - startTime); log.componentMount('VideoIframe'); @@ -69,24 +73,32 @@ export default function Component() {