feat(seo): site meta composable + Open Graph image generation

Adds `useSiteMeta()` composable that wraps useSeoMeta with site defaults
(title template, canonical URL, og/twitter image, og:site_name) and
absolute-URL handling via runtimeConfig.public.appUrl.

Adds /og/events/[slug].png route that renders per-event OG images via
satori + @resvg/resvg-js, cached on disk by slug + updatedAt. Bundles
Brygada 1918 + Commit Mono fonts as server assets, ships a fallback
default.png, and patches @shuding/opentype.js via patch-package.

Converts ~25 pages from useHead to useSiteMeta and adds noindex on
private/auth/admin pages.
This commit is contained in:
Jennie Robinson Faber 2026-05-21 17:50:34 +01:00
parent 877ef1a220
commit 31144617d7
36 changed files with 1182 additions and 53 deletions

View file

@ -276,14 +276,10 @@ onUnmounted(() => {
pageBreadcrumbTitle.value = "";
});
// Page head
useHead({
title: computed(() =>
member.value
? `${member.value.name} — Ghost Guild`
: "Member Profile — Ghost Guild",
),
});
useSiteMeta(() => ({
title: member.value ? member.value.name : "Member Profile",
noindex: true,
}));
</script>
<style scoped>

View file

@ -277,16 +277,7 @@ onBeforeUnmount(() => {
clearTimeout(searchTimeout)
})
// ---- useHead ----
useHead({
title: 'Member Directory - Ghost Guild',
meta: [
{
name: 'description',
content: 'Connect with members of the Ghost Guild community - game developers, founders, and practitioners building solidarity economy studios.',
},
],
})
useSiteMeta({ title: 'Member Directory', noindex: true })
// ---- Init ----
onMounted(async () => {