Quick Answer
100vh, 100svh or 100dvh: which should you use on mobile?
Use svh for a stable small viewport and dvh for a dynamically resizing one. Choose based on behavior, and leave room for longer content.
The 3D is running slowly on this device. The light version is smoother, with the same content.
Preparing the graphics. This can take a moment on the first visit.
Henry Lõiv
Web design & development
Notes on building this portfolio with WordPress, HTML and Three.js. Read how its navigation, content pages and rendering fit together, including the tradeoffs behind an interactive website.
Quick Answer
Use svh for a stable small viewport and dvh for a dynamically resizing one. Choose based on behavior, and leave room for longer content.
Quick Answer
Check muted playback, playsinline and browser restrictions on iPhone. Handle play() failures and provide a working manual-play fallback.
Quick Answer
no-cors does not let JavaScript read a protected cross-origin response. Diagnose origin, preflight and server headers instead of hiding the error.
Quick Answer
VITE_ values used by client code can appear in the browser bundle. Keep secret API calls server-side and rotate credentials already exposed.
Quick Answer
Check overlapping automatic and manual page_view events in GA4. Verify initial load, router navigation and browser back separately in DebugView.
Quick Answer
Check the exact variation, required attributes, price and stock settings before changing your WooCommerce theme or enabling backorders.
Quick Answer
Check payment-extension compatibility when a method disappears after switching to WooCommerce Checkout Block. Compare the same cart on staging.
Quick Answer
Check the first matching shipping zone, enabled methods and eligibility conditions. WooCommerce does not combine methods from every matching zone.
Quick Answer
Preserve unsaved work, inspect the failed response and check REST authentication before changing WordPress settings to fix an invalid JSON error.