diff --git a/scripts/sync-brand.js b/scripts/sync-brand.js index aa145e4..457a469 100644 --- a/scripts/sync-brand.js +++ b/scripts/sync-brand.js @@ -20,6 +20,7 @@ const logos = [ "wavekat-tight-light.svg", "wavekat-tight-dark.svg", "wavekat-icon-light.svg", + "wavekat-icon-dark.svg", ]; // Initialise submodule if vendor directory is empty (Cloudflare Pages shallow clone) diff --git a/src/components/VoiceDownload.astro b/src/components/VoiceDownload.astro index deb8b06..777e8c5 100644 --- a/src/components/VoiceDownload.astro +++ b/src/components/VoiceDownload.astro @@ -114,3 +114,22 @@ const primaryCls = document.addEventListener('DOMContentLoaded', resolve); })(); + + diff --git a/src/layouts/Base.astro b/src/layouts/Base.astro index 31bc88b..c44fc42 100644 --- a/src/layouts/Base.astro +++ b/src/layouts/Base.astro @@ -6,16 +6,58 @@ interface Props { title?: string; description?: string; ogImage?: string; + ogImageAlt?: string; + ogType?: 'website' | 'article'; + noindex?: boolean; + article?: { + publishedTime?: Date; + modifiedTime?: Date; + author?: string; + tags?: string[]; + }; } const { title = 'WaveKat — Open-Source AI Voice Tools for Small Business', description = 'WaveKat builds open-source, AI-powered tools that give small businesses enterprise-grade voice capabilities — phone answering, conversations, and 24/7 presence.', ogImage = '/og.png', + ogImageAlt = 'WaveKat — open-source AI voice tools for small business', + ogType = 'website', + noindex = false, + article, } = Astro.props; const canonicalURL = new URL(Astro.url.pathname, Astro.site); const ogImageURL = new URL(ogImage, Astro.site); + +// Sitewide Organization + WebSite structured data. Emitted on every page so +// search engines can build a consistent entity for WaveKat (logo, social +// profiles) and surface the site name in results. +const orgSchema = { + '@context': 'https://schema.org', + '@graph': [ + { + '@type': 'Organization', + '@id': 'https://wavekat.com/#organization', + name: 'WaveKat', + url: 'https://wavekat.com', + logo: 'https://wavekat.com/og.png', + description: + 'WaveKat builds open-source, AI-powered voice tools that give small businesses enterprise-grade phone capabilities.', + sameAs: [ + 'https://github.com/wavekat', + 'https://www.linkedin.com/company/wavekat/', + ], + }, + { + '@type': 'WebSite', + '@id': 'https://wavekat.com/#website', + name: 'WaveKat', + url: 'https://wavekat.com', + publisher: { '@id': 'https://wavekat.com/#organization' }, + }, + ], +}; --- @@ -24,6 +66,9 @@ const ogImageURL = new URL(ogImage, Astro.site); + + + @@ -32,19 +77,34 @@ const ogImageURL = new URL(ogImage, Astro.site); - + + + + + {article?.publishedTime && ( + + )} + {article?.modifiedTime && ( + + )} + {article?.author && } + {article?.tags?.map((tag) => )} + + + +