- Fix video player poster/black screen flash issue
- Redesign hero subscribe input
- Add card-to-modal morph animation
- Add title bar above video player in modal
- Release streamline - removed auth, gating, filters, directories
- Add branding assets (logomark, favicon, OG image)
- Eye/lens logomark added to header (icon + wordmark)
- Theme-adaptive SVG favicon (white/black based on browser theme)
- PNG fallback for Safari
- Animated GIF OG image for social sharing
- Add emoji confetti animation on subscribe success
- Fix video player play/pause button not working (pointer-events on blur overlays)
- Add hero copy update with subscribe CTA
- Add subscribe input reset after 4 seconds
- Add animated logo on hover (eye looks around + blinks, 12s loop)
- Replace Lucide icons with custom player icons
- Custom SVG icons for play, pause, skip, volume, expand, minimize
- Standardized all player control buttons to 32x32px containers
- Updated video modal center play/pause overlay
- Create /components design system page
- Add IntroLogo loop prop for continuous trace animation (5s cycle)
- Mobile view improvements (comprehensive)
- Hero section: full-width input, scaled text, adjusted spacing
- Video card: hidden hover overlay on touch devices
- Video modal: stacked title bar, dual Visit buttons
- Header/footer: responsive padding and stacking
- Video grid: tighter gaps on mobile
- Mobile player refinements
- Hide skip buttons (±5s) on mobile
- Hide speed selector (1x) on mobile
- Add iOS Safari fullscreen support (webkitEnterFullscreen)
- Fix logo animation on returning visits
- Set introComplete=true when intro is skipped so logo animates
- Enable pull-to-refresh on mobile (removed overscroll-behavior: none)
- Fix iOS input zoom on mobile
- Added viewport meta with maximumScale=1, userScalable=false
- Changed hero input from text-sm to text-base (16px prevents iOS auto-zoom)
- Disable vertical rubber-banding while keeping swipe navigation
- Added overscroll-behavior-y: none to html and body
- Added -webkit-overflow-scrolling: auto
- Improve subscribe error messages
- "Invalid email" for client validation, "Email not supported" for server errors
- Error text absolutely positioned 16px below input
- Tablet grid layout - 2 columns on iPad mini/tablets (lg breakpoint instead of md)
- Fix intro logo handoff animation (logo jumps during settling phase)
- Investigate intro logo trace animation on mobile (user reports it's "messed up")
- Fixed welcome email logo not displaying
- Issue was Resend's
onboarding@resend.devsender can only send to account owner - Purchased domain on IONOS and verified with Resend (DKIM, SPF, DMARC records)
- Set up
RESEND_FROM_EMAILenv var with verified domain - Logo now uses direct URL from
NEXT_PUBLIC_SITE_URL - Softened logo appearance (32px, 60% opacity)
- Issue was Resend's
- Fixed XSS vulnerability in company page (innerHTML → textContent)
- Restricted image domains in next.config.ts (was allowing **)
- Added security headers (X-Content-Type-Options, X-Frame-Options, Referrer-Policy)
- Improved email validation with Zod (was just checking for @)
- Removed test email handler from production code
- Removed console.logs leaking email addresses in server logs
- Deleted unused public assets (logo.svg, logo.png, logo-dark.svg, logomark.svg, logomark-dark.svg, favicon-black.png, favicon-white.png, og-image.svg, og-image.png)
- Deleted src/icons/ folder (source SVGs now in React components)
- Deleted unused UI components (input.tsx, modal.tsx)
- Removed unused npm dependencies (@supabase/ssr, @supabase/supabase-js, react-use-measure)
- Cleaned up dead code in video.ts (removed unused types, interfaces, constants)
- Removed unused props from VideoModal (allVideos, onVideoChange)
(none)