diff --git a/apps/docs/astro.config.mjs b/apps/docs/astro.config.mjs index 5b659351..659adeee 100644 --- a/apps/docs/astro.config.mjs +++ b/apps/docs/astro.config.mjs @@ -13,18 +13,15 @@ export default defineConfig({ title: 'chkit Docs', description: 'Public documentation for chkit, the ClickHouse schema and migration CLI.', customCss: ['./src/styles/custom.css'], - ...(isDev && { - components: { - Footer: './src/components/Footer.astro', - }, - }), + components: { + Header: './src/components/Header.astro', + Hero: './src/components/Hero.astro', + Footer: './src/components/Footer.astro', + SiteTitle: './src/components/SiteTitle.astro', + SocialIcons: './src/components/SocialIcons.astro', + ThemeSelect: './src/components/ThemeSelect.astro', + }, sidebar: [ - { - label: 'Overview', - items: [ - { label: 'Introduction', slug: 'index' }, - ], - }, { label: 'Getting Started', items: [ diff --git a/apps/docs/public/fonts/Goldman-Latin-400.woff2 b/apps/docs/public/fonts/Goldman-Latin-400.woff2 new file mode 100644 index 00000000..54f1a402 Binary files /dev/null and b/apps/docs/public/fonts/Goldman-Latin-400.woff2 differ diff --git a/apps/docs/public/fonts/Goldman-Latin-700.woff2 b/apps/docs/public/fonts/Goldman-Latin-700.woff2 new file mode 100644 index 00000000..b8e09f7a Binary files /dev/null and b/apps/docs/public/fonts/Goldman-Latin-700.woff2 differ diff --git a/apps/docs/public/fonts/Inter-Variable-Latin.woff2 b/apps/docs/public/fonts/Inter-Variable-Latin.woff2 new file mode 100644 index 00000000..91dc3e85 Binary files /dev/null and b/apps/docs/public/fonts/Inter-Variable-Latin.woff2 differ diff --git a/apps/docs/public/fonts/Inter-Variable-LatinExt.woff2 b/apps/docs/public/fonts/Inter-Variable-LatinExt.woff2 new file mode 100644 index 00000000..57da6f8d Binary files /dev/null and b/apps/docs/public/fonts/Inter-Variable-LatinExt.woff2 differ diff --git a/apps/docs/public/logos/altinity.svg b/apps/docs/public/logos/altinity.svg new file mode 100644 index 00000000..e96554e3 --- /dev/null +++ b/apps/docs/public/logos/altinity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/logos/clickhouse.svg b/apps/docs/public/logos/clickhouse.svg new file mode 100644 index 00000000..80897f10 --- /dev/null +++ b/apps/docs/public/logos/clickhouse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/logos/obsessiondb-dark.svg b/apps/docs/public/logos/obsessiondb-dark.svg new file mode 100644 index 00000000..62b77cbe --- /dev/null +++ b/apps/docs/public/logos/obsessiondb-dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/docs/public/logos/obsessiondb-light.svg b/apps/docs/public/logos/obsessiondb-light.svg new file mode 100644 index 00000000..d1cfdfe0 --- /dev/null +++ b/apps/docs/public/logos/obsessiondb-light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/docs/src/assets/chkit-scaffold.png b/apps/docs/src/assets/chkit-scaffold.png new file mode 100644 index 00000000..e1270f4e Binary files /dev/null and b/apps/docs/src/assets/chkit-scaffold.png differ diff --git a/apps/docs/src/components/Footer.astro b/apps/docs/src/components/Footer.astro index e235a9b4..13159fa5 100644 --- a/apps/docs/src/components/Footer.astro +++ b/apps/docs/src/components/Footer.astro @@ -1,8 +1,62 @@ --- +/** + * Override of Starlight's Footer. + * Renders the default per-page footer (pagination / meta) followed by the + * site-wide footer (brand + link columns). The Agentation overlay is + * rendered only under `import.meta.env.DEV`, so the production build drops + * it (and its react island) via dead-code elimination. + */ import Default from '@astrojs/starlight/components/Footer.astro'; import AgentationDev from './AgentationDev'; + +const repo = 'https://github.com/obsessiondb/chkit'; --- + + {import.meta.env.DEV && } diff --git a/apps/docs/src/components/Header.astro b/apps/docs/src/components/Header.astro new file mode 100644 index 00000000..90fc0a51 --- /dev/null +++ b/apps/docs/src/components/Header.astro @@ -0,0 +1,52 @@ +--- +/** + * Override of Starlight's Header. + * Renders the default nav, then an ob-db-style breadcrumb subheader that + * spans the full width below the nav, above all three content columns. + * It is `position: fixed` (see .chk-subheader) so it escapes the nav box; + * the columns are offset downward by --chk-subheader-h in custom.css. + */ +import Default from '@astrojs/starlight/components/Header.astro'; + +const { sidebar, entry } = Astro.locals.starlightRoute; +const title = entry.data.title; +const isSplash = entry.data.template === 'splash'; + +type SidebarItem = + | { type: 'link'; label: string; isCurrent: boolean } + | { type: 'group'; label: string; entries: SidebarItem[] }; + +function findGroupTrail(entries: SidebarItem[], trail: string[]): string[] | null { + for (const item of entries) { + if (item.type === 'group') { + const found = findGroupTrail(item.entries, [...trail, item.label]); + if (found) return found; + } else if (item.isCurrent) { + return trail; + } + } + return null; +} + +const groups = isSplash ? [] : findGroupTrail(sidebar as SidebarItem[], []) ?? []; +--- + + + +{ + !isSplash && ( +
+ +
+ ) +} diff --git a/apps/docs/src/components/Hero.astro b/apps/docs/src/components/Hero.astro new file mode 100644 index 00000000..210dadf1 --- /dev/null +++ b/apps/docs/src/components/Hero.astro @@ -0,0 +1,212 @@ +--- +/** + * Override of Starlight's Hero (splash landing only). + * Same structure + frontmatter contract as the default Hero (title, + * tagline, image, actions), with a Drizzle-style "BACKED BY ObsessionDB" + * credit line under the copy. Visual styling lives in custom.css. + */ +import { Image } from 'astro:assets'; +import { LinkButton } from '@astrojs/starlight/components'; + +const PAGE_TITLE_ID = '_top'; + +const { data } = Astro.locals.starlightRoute.entry; +const { title = data.title, tagline, image, actions = [] } = data.hero || {}; + +const imageAttrs = { + loading: 'eager' as const, + decoding: 'async' as const, + width: 400, + height: 400, + alt: image?.alt || '', +}; + +let darkImage: ImageMetadata | undefined; +let lightImage: ImageMetadata | undefined; +let rawHtml: string | undefined; +if (image) { + if ('file' in image) { + darkImage = image.file; + } else if ('dark' in image) { + darkImage = image.dark; + lightImage = image.light; + } else { + rawHtml = image.html; + } +} +--- + +
+ { + darkImage && ( + + ) + } + {lightImage && } + {rawHtml &&
} +
+
+

+ {tagline && + { + actions.length > 0 && ( +
+

What you will find here

+
+ {actions.map( + ({ attrs: { class: className, ...attrs } = {}, icon, link: href, text, variant }) => ( + + {text} + {icon?.html && } + + ) + )} +
+
+ ) + } +

+
+ + diff --git a/apps/docs/src/components/SiteTitle.astro b/apps/docs/src/components/SiteTitle.astro new file mode 100644 index 00000000..c1d93097 --- /dev/null +++ b/apps/docs/src/components/SiteTitle.astro @@ -0,0 +1,50 @@ +--- +/** + * Override of Starlight's SiteTitle. + * Renders the brand wordmark "chkit" (dropping the "Docs" suffix from the + * configured site title) in the Goldman display face. Styling — font and + * neutral (non-accent) colour — lives in custom.css (.chk-wordmark). + */ +const { siteTitleHref, entry } = Astro.locals.starlightRoute; +const isSplash = entry.data.template === 'splash'; +--- + + + ch-kit + {!isSplash && Docs} + + + + +{ + /* Splash pages have no Starlight sidebar/hamburger, so the collapsed nav + above has no mobile affordance. Provide one (no-JS
menu). + Doc pages keep Starlight's own menu button. */ + isSplash && ( +
+ + + + +
+ ) +} + + diff --git a/apps/docs/src/components/SocialIcons.astro b/apps/docs/src/components/SocialIcons.astro new file mode 100644 index 00000000..4f644087 --- /dev/null +++ b/apps/docs/src/components/SocialIcons.astro @@ -0,0 +1,65 @@ +--- +/** + * Override of Starlight's SocialIcons. + * Renders any configured social links, then a GitHub "stars" badge. + * The star count is filled client-side from the GitHub API and + * degrades gracefully to a "Star" label if the request fails. + */ +import config from 'virtual:starlight/user-config'; +import { Icon } from '@astrojs/starlight/components'; + +const links = config.social || []; +const repo = 'obsessiondb/chkit'; +--- + +{ + links.map(({ label, href, icon }) => ( + + )) +} + + + + + Star + + + + + diff --git a/apps/docs/src/components/ThemeSelect.astro b/apps/docs/src/components/ThemeSelect.astro new file mode 100644 index 00000000..4f2cfbbb --- /dev/null +++ b/apps/docs/src/components/ThemeSelect.astro @@ -0,0 +1,49 @@ +--- +/** + * Override of Starlight's ThemeSelect. + * Replaces the dark / light / auto