data endpoint for entity 90008 (aka. a website)

improve og tags

ptr.pet 61331b56 6f46b816

verified
Waiting for spindle ...
+55 -62
+1
eunomia/src/routes/(site)/+layout.svelte
··· 64 64 <meta name="twitter:card" content="summary_large_image" /> 65 65 <meta name="twitter:image" content="https://gaze.systems/_api/background/og.png" /> 66 66 <meta property="og:site_name" content="gaze.systems" /> 67 + <meta property="og:title" content={title} /> 67 68 <meta property="og:url" content="https://gaze.systems/" /> 68 69 <meta property="og:image" content="https://gaze.systems/_api/background/og.png" /> 69 70 <meta property="og:image:type" content="image/png" />
+21 -43
eunomia/src/routes/(site)/+page.svelte
··· 116 116 let { data }: Props = $props(); 117 117 </script> 118 118 119 + <svelte:head> 120 + <meta property="og:description" content="90008's data endpoint" /> 121 + <meta property="og:type" content="website" /> 122 + </svelte:head> 123 + 119 124 <div class="flex flex-col-reverse md:flex-row gap-2 md:gap-4 md:h-full h-card"> 120 125 <div class="flex flex-col gap-2 md:gap-6 md:ml-auto place-items-end"> 121 126 <Window title="status" iconUri="/icons/msn.webp" removePadding> ··· 129 134 <a href="/entries">last log was…</a> 130 135 published {renderRelativeDate(data.lastNote.published)}! 131 136 </p> 132 - <div 133 - class="mt-0 p-1.5 border-4 border-double bg-ralsei-black min-w-full max-w-[60ch]" 134 - > 137 + <div class="mt-0 p-1.5 border-4 border-double bg-ralsei-black min-w-full max-w-[60ch]"> 135 138 <Note rootNote={data.lastNote} onlyContent /> 136 139 </div> 137 140 </div> ··· 152 155 {#each data.lastActivity as activity, index (index)} 153 156 <div 154 157 class="text-ralsei-green-light text-ellipsis text-nowrap overflow-hidden max-w-[60ch]" 155 - style="opacity: {1.0 - 156 - (index * 1.0) / data.lastActivity.length + 157 - index * 0.03};" 158 + style="opacity: {1.0 - (index * 1.0) / data.lastActivity.length + index * 0.03};" 158 159 > 159 160 <span title={renderDate(activity.date)} class="text-[#f87c32]" 160 161 >[{activity.source}]</span 161 162 > 162 - <a href={activity.link} title={activity.description} 163 - >{activity.description}</a 164 - > 163 + <a href={activity.link} title={activity.description}>{activity.description}</a> 165 164 </div> 166 165 {/each} 167 166 </div> ··· 174 173 <div class="flex flex-row gap-0.5 m-1.5 border-4 border-double bg-ralsei-black"> 175 174 <!-- svelte-ignore a11y_missing_attribute --> 176 175 <img 177 - class="border-4 {showAlbum 178 - ? 'w-[5.75rem] h-[5.75rem]' 179 - : 'w-[4.5rem] h-[4.5rem]'} {data.lastTrack.image 176 + class="border-4 {showAlbum ? 'w-[5.75rem] h-[5.75rem]' : 'w-[4.5rem] h-[4.5rem]'} {data 177 + .lastTrack.image 180 178 ? 'object-cover' 181 179 : 'p-2'}" 182 180 style="border-style: none double none none; {data.lastTrack.image ··· 190 188 class="text-shadow-green text-ralsei-green-light text-sm text-ellipsis text-nowrap overflow-hidden max-w-[45ch]" 191 189 > 192 190 <span class="text-sm text-shadow-white text-ralsei-white" 193 - >{data.lastTrack.status === 'playing' 194 - ? 'listening to' 195 - : 'listened to'}</span 191 + >{data.lastTrack.status === 'playing' ? 'listening to' : 'listened to'}</span 196 192 > 197 193 <a 198 194 title={data.lastTrack.name} 199 195 href={data.lastTrack.link ?? 200 196 'https://tealfm-slice.wisp.place/profile/ptr.pet/scrobbles'} 201 - class="hover:underline motion-safe:hover:animate-squiggle" 202 - >{data.lastTrack.name}</a 197 + class="hover:underline motion-safe:hover:animate-squiggle">{data.lastTrack.name}</a 203 198 > 204 199 </p> 205 200 {#if showAlbum} ··· 241 236 <span class="text-sm text-shadow-white text-ralsei-white" 242 237 >{data.lastGame.playing ? 'playing' : 'played'}</span 243 238 > 244 - <a 245 - title={data.lastGame.name} 246 - class="hover:underline" 247 - href={data.lastGame.link}>{data.lastGame.name}</a 239 + <a title={data.lastGame.name} class="hover:underline" href={data.lastGame.link} 240 + >{data.lastGame.name}</a 248 241 > 249 242 </p> 250 243 <p ··· 427 420 <li>discord: 90.008</li> 428 421 <li> 429 422 e-mail: 430 - <a class="u-email" href="mailto:90008@gaze.systems" rel="me" 431 - >90008@gaze.systems</a 432 - > 423 + <a class="u-email" href="mailto:90008@gaze.systems" rel="me">90008@gaze.systems</a> 433 424 </li> 434 425 <li> 435 426 bluesky: ··· 449 440 </li> 450 441 <li> 451 442 tangled: 452 - <a 453 - class="u-url" 454 - href="https://tangled.org/did:plc:dfl62fgb7wtjj3fcbb72naae" 455 - rel="me">@ptr.pet</a 443 + <a class="u-url" href="https://tangled.org/did:plc:dfl62fgb7wtjj3fcbb72naae" rel="me" 444 + >@ptr.pet</a 456 445 > 457 446 </li> 458 447 <li> ··· 468 457 <li> 469 458 <span 470 459 >{coin}: 471 - <a href="/copy?text={wallets[coin]}">{trimStr(wallets[coin])}</a 472 - ></span 460 + <a href="/copy?text={wallets[coin]}">{trimStr(wallets[coin])}</a></span 473 461 > 474 462 </li> 475 463 {/each} 476 464 <li> 477 465 <span> 478 - <a href="https://github.com/sponsors/90-008" rel="me" 479 - >github sponsors</a 480 - ></span 466 + <a href="https://github.com/sponsors/90-008" rel="me">github sponsors</a></span 481 467 > 482 468 </li> 483 469 </ul> ··· 485 471 <details open> 486 472 <summary>88x31</summary> 487 473 <div class="mt-2 flex flex-row flex-wrap gap-1 prose-img:m-0"> 488 - <img 489 - src="/88x31.gif" 490 - alt="88x31 banner" 491 - title="midnight AND sunrise! woaw" 492 - /> 474 + <img src="/88x31.gif" alt="88x31 banner" title="midnight AND sunrise! woaw" /> 493 475 <img 494 476 src="/88x31_midnight.gif" 495 477 alt="88x31 banner (midnight only)" 496 478 title="it's midnight!" 497 479 /> 498 - <img 499 - src="/88x31_sunrise.gif" 500 - alt="88x31 banner (sunrise only)" 501 - title="it's sunrise!" 502 - /> 480 + <img src="/88x31_sunrise.gif" alt="88x31 banner (sunrise only)" title="it's sunrise!" /> 503 481 </div> 504 482 </details> 505 483 </div>
+5
eunomia/src/routes/(site)/about/_layout.svelte
··· 14 14 let { title, children }: Props = $props(); 15 15 </script> 16 16 17 + <svelte:head> 18 + <meta property="og:description" content="information about entity with ID 90008" /> 19 + <meta property="og:type" content="article" /> 20 + </svelte:head> 21 + 17 22 <div class="flex flex-wrap md:flex-nowrap gap-4 md:gap-8"> 18 23 <Window {title} style="ml-auto"> 19 24 <div class="prose prose-ralsei leading-6 prose-ul:leading-5 max-w-[80ch]">
+5
eunomia/src/routes/(site)/copy/+page.svelte
··· 14 14 let copied = $state(false); 15 15 </script> 16 16 17 + <svelte:head> 18 + <meta property="og:description" content={text} /> 19 + <meta property="og:type" content="website" /> 20 + </svelte:head> 21 + 17 22 <div class="flex justify-center items-center w-[100vw] h-[100vh] px-[15%]"> 18 23 <!-- svelte-ignore a11y_click_events_have_key_events --> 19 24 <!-- svelte-ignore a11y_no_static_element_interactions -->
+5
eunomia/src/routes/(site)/entries/+page.svelte
··· 14 14 let { data }: Props = $props(); 15 15 </script> 16 16 17 + <svelte:head> 18 + <meta property="og:description" content="entries on this endpoint" /> 19 + <meta property="og:type" content="website" /> 20 + </svelte:head> 21 + 17 22 <div class="mx-auto md:max-w-fit flex flex-col-reverse md:flex-row gap-y-4 gap-x-16"> 18 23 <div class="flex flex-col gap-y-4"> 19 24 {#each data.posts as post (post.path)}
+18 -19
eunomia/src/routes/(site)/guestbook/+page.svelte
··· 1 1 <script lang="ts"> 2 + import { page } from '$app/state'; 2 3 import Note, { type NoteData } from '$components/note.svelte'; 3 4 import Token from '$components/token.svelte'; 4 5 import Window from '$components/window.svelte'; 6 + import getTitle from '$lib/getTitle'; 5 7 6 8 interface Props { 7 9 data: { ··· 20 22 const placeholders = ['meow', 'arf', '0110100001101001', '0x6869']; 21 23 </script> 22 24 25 + <svelte:head> 26 + <meta property="og:description" content="guestbook for this endpoint" /> 27 + <meta property="og:type" content="article" /> 28 + </svelte:head> 29 + 23 30 <div class="flex flex-col-reverse md:flex-row gap-2 md:gap-4"> 24 31 <Window title="guestbook" style="ml-auto" iconUri="/icons/guestbook.webp"> 25 32 <div class="flex flex-col gap-1 max-w-[50ch]"> ··· 35 42 <textarea 36 43 class="p-1 m-0 ml-0.5 bg-transparent resize-none text-shadow-white focus:[box-shadow:none] placeholder-shown:[text-shadow:none] [field-sizing:content] border-none" 37 44 name="content" 38 - placeholder="say {placeholders[ 39 - Math.floor(Math.random() * placeholders.length) 40 - ]}!" 45 + placeholder="say {placeholders[Math.floor(Math.random() * placeholders.length)]}!" 41 46 maxlength="300" 42 47 required 43 48 ></textarea> ··· 103 108 <Token v="[" punct />gazesys <Token v="/" keywd /><Token v="]$" punct /> <Token 104 109 v="let" 105 110 funct 106 - /> <Token v="entries" /> <Token v="=" punct /> <Token 107 - v="(" 108 - punct 109 - /><Token v="ls" funct /> <Token v="guestbook" /> <Token 111 + /> <Token v="entries" /> <Token v="=" punct /> <Token v="(" punct /><Token 112 + v="ls" 113 + funct 114 + /> <Token v="guestbook" /> <Token v="|" punct /> <Token v="reverse" funct /> <Token 110 115 v="|" 111 116 punct 112 - /> <Token v="reverse" funct /> <Token v="|" punct /> <Token 113 - v="take" 114 - funct 115 - /> <Token v="14" /><Token v=")" punct /> 117 + /> <Token v="take" funct /> <Token v="14" /><Token v=")" punct /> 116 118 <br /> 117 119 <Token v="[" punct />gazesys <Token v="/" keywd /><Token v="]$" punct /> <Token 118 120 v="$entries" 119 - /> <Token v="|" punct /> <Token v="each" funct /> <Token 120 - v="&#123;" 121 + /> <Token v="|" punct /> <Token v="each" funct /> <Token v="&#123;" punct /><Token 122 + v="|" 121 123 punct 122 - /><Token v="|" punct /><Token v="file" /><Token 123 - v="|" 124 + /><Token v="file" /><Token v="|" punct /> <Token v="render" funct /> <Token 125 + v="(" 124 126 punct 125 - /> <Token v="render" funct /> <Token v="(" punct /><Token 126 - v="open" 127 - funct 128 - /> <Token v="$file.name" /><Token v=")" punct /><Token 127 + /><Token v="open" funct /> <Token v="$file.name" /><Token v=")" punct /><Token 129 128 v="&#125;" 130 129 punct 131 130 />