diff --git a/website/astro.config.mjs b/website/astro.config.mjs index 3d7957a..33348a5 100644 --- a/website/astro.config.mjs +++ b/website/astro.config.mjs @@ -15,6 +15,7 @@ export default defineConfig({ changefreq: "weekly", priority: 0.7, lastmod: new Date(), + filter: (page) => !page.includes("/blog"), }), inline(), ], diff --git a/website/src/components/Footer.astro b/website/src/components/Footer.astro index 1a5315a..3ef3702 100644 --- a/website/src/components/Footer.astro +++ b/website/src/components/Footer.astro @@ -10,6 +10,8 @@ const columns = [ { href: `${base}docs/`, label: "Field guide" }, { href: `${base}docs/installation/`, label: "Install" }, { href: `${base}docs/server/`, label: "Architecture" }, + { href: `${base}docs/hooks/`, label: "Hooks & Capture" }, + { href: `${base}docs/finops/`, label: "FinOps" }, ], }, { diff --git a/website/src/layouts/DocsPage.astro b/website/src/layouts/DocsPage.astro index 37fed7b..0755b9a 100644 --- a/website/src/layouts/DocsPage.astro +++ b/website/src/layouts/DocsPage.astro @@ -48,6 +48,10 @@ const structuredData = [ headline: title, description, inLanguage: "en", + // Omit dateModified — using build date would claim every page was modified + // on every deploy, which Google penalizes as artificial freshness inflation. + // TODO: derive from git last-commit date per file when Astro supports it. + author: { "@type": "Organization", name: "Primer", url: siteOrigin }, isPartOf: { "@type": "WebSite", name: "Primer Documentation", url: `${siteOrigin}/docs/` }, mainEntityOfPage: { "@type": "WebPage", "@id": pageUrl }, publisher: { diff --git a/website/src/pages/docs/hooks.mdx b/website/src/pages/docs/hooks.mdx index 18485a0..fc18161 100644 --- a/website/src/pages/docs/hooks.mdx +++ b/website/src/pages/docs/hooks.mdx @@ -2,7 +2,7 @@ layout: ../../layouts/DocsPage.astro title: "Hook System" section: "Architecture" -description: "How the SessionEnd hook captures data from AI coding tools." +description: "How SessionEnd and PreCompact hooks capture session data from AI coding tools for harness intelligence." --- import Callout from '../../components/docs/Callout.astro'; diff --git a/website/src/pages/index.astro b/website/src/pages/index.astro index 4394204..3a7b87a 100644 --- a/website/src/pages/index.astro +++ b/website/src/pages/index.astro @@ -18,6 +18,7 @@ const chapters = [ plate: "screenshots/readme-quality-dark.png", caption: "Plate I. Quality clustered by harness pattern.", layout: "right", + docLink: { href: `${base}docs/server/`, label: "Read: Server & Intelligence Model" }, }, { num: "Chapter III", @@ -31,6 +32,7 @@ const chapters = [ plate: "screenshots/readme-finops-dark.png", caption: "Plate II. Spend grouped by harness pattern, not by model.", layout: "left", + docLink: { href: `${base}docs/finops/`, label: "Read: FinOps & Cost Management" }, }, { num: "Chapter IV", @@ -44,6 +46,7 @@ const chapters = [ plate: "screenshots/readme-growth-dark.png", caption: "Plate III. An effective pattern promoted into a standard.", layout: "right", + docLink: { href: `${base}docs/hooks/`, label: "Read: Hooks & Capture" }, }, ]; @@ -178,6 +181,9 @@ const structuredData = [ + {chapter.docLink && ( + {chapter.docLink.label} → + )}
@@ -454,6 +460,22 @@ const structuredData = [ color: var(--color-accent); } + .chapter-doc-link { + display: inline-block; + margin-top: 16px; + font-family: var(--font-body); + font-size: 13px; + color: var(--color-ink-muted); + text-decoration: none; + border-bottom: 1px solid var(--color-rule); + padding-bottom: 2px; + transition: color 0.2s, border-color 0.2s; + } + .chapter-doc-link:hover { + color: var(--color-accent); + border-color: var(--color-accent); + } + .chapter-plate { margin: 0; } .chapter-plate-frame { border: 1px solid var(--color-rule);