|
1 | 1 | --- |
2 | 2 | import Layout from '../layouts/Layout.astro'; |
| 3 | +import YouTubeEmbed from '../components/YouTubeEmbed.astro'; |
| 4 | +
|
| 5 | +const introVideo = { |
| 6 | + id: 'kbTK0A4Psv0', |
| 7 | + title: 'Dev Proxy: Test API Errors, Rate Limits & AI Without Code', |
| 8 | + description: 'Your app works on the happy path. What happens when the API returns 500s, throttles you with 429s, or times out? Dev Proxy lets you find out in minutes, without changing a single line of code.', |
| 9 | + uploadDate: '2026-09-28T02:29:23-07:00', |
| 10 | + duration: 'PT40S', |
| 11 | +}; |
| 12 | +
|
| 13 | +const structuredData = { |
| 14 | + '@context': 'https://schema.org', |
| 15 | + '@type': 'VideoObject', |
| 16 | + name: introVideo.title, |
| 17 | + description: introVideo.description, |
| 18 | + thumbnailUrl: [ |
| 19 | + `https://i.ytimg.com/vi/${introVideo.id}/maxresdefault.jpg`, |
| 20 | + `https://i.ytimg.com/vi/${introVideo.id}/hqdefault.jpg`, |
| 21 | + ], |
| 22 | + uploadDate: introVideo.uploadDate, |
| 23 | + duration: introVideo.duration, |
| 24 | + embedUrl: `https://www.youtube-nocookie.com/embed/${introVideo.id}`, |
| 25 | + contentUrl: `https://www.youtube.com/watch?v=${introVideo.id}`, |
| 26 | +}; |
3 | 27 | --- |
4 | 28 |
|
5 | | -<Layout title="Home"> |
| 29 | +<Layout title="Home" structuredData={structuredData}> |
6 | 30 |
|
7 | 31 | <!-- Hero — full viewport, cinematic intro --> |
8 | 32 | <section class="hero-section relative flex items-center justify-center overflow-hidden" style="min-height: calc(100vh - 4rem);"> |
@@ -39,6 +63,19 @@ import Layout from '../layouts/Layout.astro'; |
39 | 63 | Browse Samples |
40 | 64 | </a> |
41 | 65 | </div> |
| 66 | + <div class="hero-fade hero-fade-4 mt-6"> |
| 67 | + <a |
| 68 | + href="#intro-video" |
| 69 | + data-yt-play={introVideo.id} |
| 70 | + class="group inline-flex items-center gap-2 text-sm font-medium transition-colors hover:text-purple-400" |
| 71 | + style="color: var(--text-muted);" |
| 72 | + > |
| 73 | + <span class="flex items-center justify-center w-7 h-7 rounded-full border transition-colors group-hover:border-purple-500" style="border-color: var(--border-secondary);" aria-hidden="true"> |
| 74 | + <svg class="w-3 h-3 ml-0.5" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5.14v13.72a1 1 0 0 0 1.52.85l11.01-6.86a1 1 0 0 0 0-1.7L9.52 4.29A1 1 0 0 0 8 5.14Z" /></svg> |
| 75 | + </span> |
| 76 | + Watch the 40-second intro |
| 77 | + </a> |
| 78 | + </div> |
42 | 79 |
|
43 | 80 | <!-- Terminal teaser --> |
44 | 81 | <div class="hero-fade hero-fade-5 mt-16 max-w-xl mx-auto min-w-0"> |
@@ -66,6 +103,33 @@ import Layout from '../layouts/Layout.astro'; |
66 | 103 | </div> |
67 | 104 | </section> |
68 | 105 |
|
| 106 | + <!-- Intro video — 40s explainer, placed high with a CTA right after --> |
| 107 | + <section id="intro-video" class="pt-16 pb-8 px-6 sm:px-8 scroll-mt-20"> |
| 108 | + <div class="max-w-4xl mx-auto text-center"> |
| 109 | + <p class="section-reveal text-sm font-semibold tracking-widest uppercase text-purple-400 mb-4">Dev Proxy in 40 seconds</p> |
| 110 | + <h2 class="section-reveal text-3xl md:text-5xl font-bold mb-12">See what Dev Proxy can do for you.</h2> |
| 111 | + <div class="section-reveal"> |
| 112 | + <YouTubeEmbed |
| 113 | + videoId={introVideo.id} |
| 114 | + title={introVideo.title} |
| 115 | + duration="0:40" |
| 116 | + playLabel="Watch the intro" |
| 117 | + /> |
| 118 | + </div> |
| 119 | + <div class="section-reveal mt-10 flex flex-col items-center gap-3"> |
| 120 | + <a |
| 121 | + href="https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/get-started" |
| 122 | + target="_blank" |
| 123 | + rel="noopener" |
| 124 | + class="group px-8 py-4 bg-purple-600 hover:bg-purple-500 text-white font-semibold rounded-full transition-all duration-300 hover:shadow-[0_0_30px_rgba(168,85,247,0.4)]" |
| 125 | + > |
| 126 | + Try Dev Proxy now <span class="inline-block transition-transform duration-300 group-hover:translate-x-1">→</span> |
| 127 | + </a> |
| 128 | + <p class="text-sm" style="color: var(--text-faint);">Free & open source · Windows, macOS & Linux</p> |
| 129 | + </div> |
| 130 | + </div> |
| 131 | + </section> |
| 132 | + |
69 | 133 | <!-- Problem statement — emotional hook --> |
70 | 134 | <section class="py-32 px-6 sm:px-8"> |
71 | 135 | <div class="max-w-3xl mx-auto text-center"> |
@@ -275,21 +339,18 @@ import Layout from '../layouts/Layout.astro'; |
275 | 339 | <!-- Getting started video --> |
276 | 340 | <section class="py-32 px-6 sm:px-8"> |
277 | 341 | <div class="max-w-4xl mx-auto text-center"> |
278 | | - <p class="section-reveal text-sm font-semibold tracking-widest uppercase text-purple-400 mb-4">See It In Action</p> |
| 342 | + <p class="section-reveal text-sm font-semibold tracking-widest uppercase text-purple-400 mb-4">Step-by-Step Walkthrough</p> |
279 | 343 | <h2 class="section-reveal text-3xl md:text-5xl font-bold mb-8">Get started with Dev Proxy.</h2> |
280 | 344 | <p class="section-reveal text-lg md:text-xl mb-12" style="color: var(--text-muted);"> |
281 | 345 | Watch how to set up Dev Proxy and start testing your app in minutes. |
282 | 346 | </p> |
283 | | - <div class="section-reveal rounded-2xl border overflow-hidden" style="border-color: var(--border-primary);"> |
284 | | - <div style="position: relative; padding-bottom: 56.25%; height: 0;"> |
285 | | - <iframe |
286 | | - src="https://www.youtube-nocookie.com/embed/HVTJlGSxhcw" |
287 | | - title="Get started with Dev Proxy" |
288 | | - style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0;" |
289 | | - allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" |
290 | | - allowfullscreen |
291 | | - ></iframe> |
292 | | - </div> |
| 347 | + <div class="section-reveal"> |
| 348 | + <YouTubeEmbed |
| 349 | + videoId="HVTJlGSxhcw" |
| 350 | + title="Get started with Dev Proxy" |
| 351 | + duration="8:49" |
| 352 | + playLabel="Watch the walkthrough" |
| 353 | + /> |
293 | 354 | </div> |
294 | 355 | </div> |
295 | 356 | </section> |
|
0 commit comments