powerpointproto slides.waow.tech
slides

fix OG tags: remove layout defaults, use OG endpoint URL

- remove default OG meta tags from layout (they override page-specific ones)
- point og:image to our /og endpoint instead of raw PDS blob URL
- add OG meta tags to homepage
- crawlers now get consistent, proxied images from our endpoint

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

+11 -17
-15
src/routes/+layout.svelte
··· 9 9 </script> 10 10 11 11 <svelte:head> 12 - <title>{title}</title> 13 - <meta name="description" content={description} /> 14 - 15 - <!-- open graph --> 16 - <meta property="og:title" content={title} /> 17 - <meta property="og:description" content={description} /> 18 - <meta property="og:type" content="website" /> 19 - <meta property="og:url" content={url} /> 20 - <meta property="og:image" content="{url}/og-image.svg" /> 21 - 22 - <!-- twitter --> 23 - <meta name="twitter:card" content="summary" /> 24 - <meta name="twitter:title" content={title} /> 25 - <meta name="twitter:description" content={description} /> 26 - 27 12 <link rel="icon" href={favicon} /> 28 13 </svelte:head> 29 14
+8
src/routes/+page.svelte
··· 78 78 79 79 <svelte:head> 80 80 <title>slides</title> 81 + <meta name="description" content="create and present slides on atproto" /> 82 + <meta property="og:title" content="slides" /> 83 + <meta property="og:description" content="create and present slides on atproto" /> 84 + <meta property="og:type" content="website" /> 85 + <meta property="og:url" content="https://slides.waow.tech" /> 86 + <meta name="twitter:card" content="summary" /> 87 + <meta name="twitter:title" content="slides" /> 88 + <meta name="twitter:description" content="create and present slides on atproto" /> 81 89 </svelte:head> 82 90 83 91 {#if !auth.ready}
+3 -2
src/routes/view/[did]/[rkey]/+page.server.ts
··· 114 114 115 115 const [deck, handle] = await Promise.all([fetchDeck(did, rkey), resolveHandle(did)]); 116 116 117 - // use thumbnail URL directly if available (better for social platforms) 118 - const ogImageUrl = deck?.thumbnailUrl || null; 117 + // use our OG endpoint which proxies the thumbnail (crawlers don't follow redirects) 118 + const hasThumbnail = !!deck?.thumbnailUrl; 119 + const ogImageUrl = hasThumbnail ? `https://slides.waow.tech/og/${did}/${rkey}.png` : null; 119 120 120 121 return { 121 122 did,