17 Commits
Author SHA1 Message Date
MR CYBER 515abc7bfa feat: fix homepage video, add AdSense banner/in-article ads, navigation ad refactor
- Fix VideoAdPlayer CSS conflict and YouTube API race condition
- Replace padding-bottom with aspect-video on homepage
- Add real AdSense slot IDs to all ad placements (4266907782 banner, 2044808434 in-article, 5341055619 PIP)
- AdFrame uses adSenseSlot from config instead of logical slot name
- AdFrame shows network name badge and 3 dot indicators for rotation
- Add InArticleAd component injecting ads every 4 paragraphs in blog posts
- Navigation ad: remove skip button, 5s countdown before Continue clickable
- Navigation ad: show on every page navigation (no counter)
- Navigation ad: square 400x400 ad area using PIP slot 5341055619
2026-07-23 20:50:23 -07:00
MR CYBER a6515c3cdb feat: add video pre-roll ads, navigation interstitial, and refactor ad system
- Add VideoAdOverlay (VAST parser + ad player overlay)
- Add VideoAdPlayer (YouTube IFrame API wrapper with VAST ad integration)
- Add NavigationAdOverlay (consent-style interstitial ad on page navigation)
- Add NavigationAdController (route change interceptor with sessionStorage counter)
- Replace iframe embeds with VideoAdPlayer on all 6 video pages
- Add VAST ad overlay to PIP player with play/pause on ad start/end
- Add shared YouTube types (lib/types/youtube.ts) to avoid duplicate declarations
- Add videoAds + navigationAd config sections to config.json
- Add useVideoAdsConfig + useNavigationAdConfig hooks
- Refactor AdFrame: useMemo for enabledNetworks, string key for useEffect, AdsbygoogleWindow type
- All pages build and lint clean
2026-07-18 09:34:12 -07:00
MR CYBER 63f2cab786 fix: stabilize AdFrame with useMemo to prevent infinite re-render loop
- Wrap enabledNetworks in useMemo to avoid new array reference every render
- Use string key for useEffect dependency instead of array reference
- Remove slides from loadAd dependency array
- Remove stale GitHub Pages workflow (Vercel handles deploys)
- Add dev-server.log to .gitignore
2026-07-18 06:56:34 -07:00
MR CYBER 9fb5acce47 fix: make PIP player non-blocking (pointer-events-none) so page links stay clickable 2026-07-18 06:00:08 -07:00
MR CYBER 03f3b8c209 feat: WSL UI-inspired redesign with blog, ads, PIP player, multi-page site 2026-07-17 19:50:09 -07:00
MR CYBER d33232480c fix: remove double ca- prefix in AdSense data-ad-client, fix adsbygoogle.push timing 2026-07-13 18:54:27 -07:00
MR CYBER 625354fff9 fix: restore editable CTA, description, button text/link in PIP config 2026-07-13 18:45:18 -07:00
MR CYBER d7552f42d2 fix: restore PIP full UI (title, description, CTA) auto-generated from single YouTube URL via oEmbed 2026-07-13 18:39:00 -07:00
MR CYBER a18761d9fb feat: remove 3D laptop, show all images as screenshots, simplify PIP to single YouTube URL 2026-07-13 18:30:36 -07:00
MR CYBER c45a1c8f00 feat: runtime config for all sections, remove PIP close button 2026-07-13 18:08:26 -07:00
MR CYBER d89ec4bf49 feat: add ads.txt, AdSense script, polished 3D laptop, QR code, feature preview image, hero glow 2026-07-13 17:58:03 -07:00
MR CYBER cabf7885f0 feat: add app icon as website logo in Navigation and floating brand watermark in Hero 2026-07-13 17:50:08 -07:00
MR CYBER 380e75964c feat: transform website to fully immersive 3D experience with scroll-controlled WSA Assistant Droid and dynamic laptop dashboard 2026-07-13 17:41:33 -07:00
MR CYBER 5fedb21f05 feat: runtime config + YouTube PIP player
- RuntimeConfigProvider fetches config.json from GitHub raw every 60s
- Components use useConfig() hook for live updates (no rebuild needed)
- Download section reads installer/bundle URLs from runtime config
- Hero download buttons use runtime URLs
- PIPVideoPlayer now embeds YouTube iframe with autoplay
- Falls back to GIF thumbnail when no YouTube URL
- Removed close/minimize buttons — player is persistent
- AdSlot reads publisher ID from runtime config
- useRuntimeConfig hook (TSX for JSX support)
2026-07-13 17:41:33 -07:00
MR CYBER 06c55576fa feat: Google AdSense + PIP video player
- Replaced Carbon Ads with Google AdSense integration
- AdSense ads at all 5 placements (after-features, after-how-it-works,
  after-faq, sidebar-docs, footer)
- AdSlot updated to render AdSense ads with '— Sponsored —' label
- PIPVideoPlayer component: fixed bottom-right, purple glass aesthetic,
  YouTube embed thumbnail, title/description, CTA button
- PIP controls: minimize to floating icon, close button
- Config-driven via config.json (pipVideo + adSensePublisherId)
- Provider set to 'adsense' with publisher ID placeholder
2026-07-13 10:23:05 -07:00
MR CYBER 269abdd47d feat: config-driven architecture, ads, 3D model, images
- config.json at repo root as single source of truth
- TypeScript configs now import from config.json at build time
- AdSlot component with Carbon Ads + affiliate links integration
- 5 config-driven ad placements enabled
- Improved 3D DeviceMockup: screen texture with rendered UI,
  detailed keyboard, ambient orbs, glass overlay
- Generated PNG images: OG image (1200x630), 5 screenshots
  (welcome, system-check, install-progress, play-store, complete)
- Image generation script (scripts/generate-images.py)
2026-07-13 10:08:16 -07:00
MR CYBER e28ebc2b24 Initial release: WSA Installer official website
- Config-based architecture (site, content, monetization, SEO)
- 12 sections: Hero, Features, HowItWorks, Gallery, Requirements,
  Download, Documentation, ReleaseNotes, FAQ, Support, Footer
- 3D components: DeviceMockup, ParticleField, FloatingShapes
- UI primitives: MagneticButton, CursorFollower, TiltCard, BlobTransition
- SEO: structured data, OpenGraph, Twitter cards, sitemap, robots
- Monetization: config-driven with Buy Me a Coffee + ad slots
- Next.js 16 static export for GitHub Pages
2026-07-13 09:24:15 -07:00