diff --git a/docs/app/app.config.ts b/docs/app/app.config.ts index 800cf823..b4800680 100644 --- a/docs/app/app.config.ts +++ b/docs/app/app.config.ts @@ -18,6 +18,7 @@ export default defineAppConfig({ { label: 'Plugins', sections: ['plugins'], link: 'section' as const }, { label: 'Examples', sections: ['examples'], link: 'section' as const }, { label: 'Playground', to: '/play' }, + { label: 'Ecosystem', to: '/ecosystem' }, ], }, diff --git a/docs/app/components/prose/EcosystemCta.vue b/docs/app/components/prose/EcosystemCta.vue new file mode 100644 index 00000000..545664f8 --- /dev/null +++ b/docs/app/components/prose/EcosystemCta.vue @@ -0,0 +1,33 @@ + diff --git a/docs/app/components/prose/EcosystemList.vue b/docs/app/components/prose/EcosystemList.vue new file mode 100644 index 00000000..17384658 --- /dev/null +++ b/docs/app/components/prose/EcosystemList.vue @@ -0,0 +1,255 @@ + + + + + diff --git a/docs/app/components/prose/EcosystemShowcase.vue b/docs/app/components/prose/EcosystemShowcase.vue new file mode 100644 index 00000000..9f3b77b6 --- /dev/null +++ b/docs/app/components/prose/EcosystemShowcase.vue @@ -0,0 +1,110 @@ + + + diff --git a/docs/content/9.ecosystem.md b/docs/content/9.ecosystem.md index 78b1d438..821b986a 100644 --- a/docs/content/9.ecosystem.md +++ b/docs/content/9.ecosystem.md @@ -1,14 +1,218 @@ --- title: Ecosystem -description: Testing the `page` layout for a content page — a plain container with no docs sidebar. +description: Renderers, plugins, integrations and tooling built around Comark by the community and the core team. navigation: layout: page +seo: + title: "Comark ecosystem: community renderers, plugins, and integrations" + description: "Browse community renderers, plugins, integrations, and tooling built around Comark, plus real products running it in production." --- -## Ecosystem +::ecosystem-list +--- +packages: + - name: comark-solid + description: SolidJS renderer for Comark + author: shiguri-01 + repo: shiguri-01/comark-solid + category: Renderers + icon: i-logos-solidjs-icon + color: "#2c4f7c" + - name: preact-comark + description: Preact renderer for Comark + author: aleclarson + repo: aleclarson/preact-comark + category: Renderers + icon: i-logos-preact + color: "#673ab8" + - name: "@comark/markdown-it" + description: Comark syntax as a markdown-it plugin + author: comarkdown + repo: comarkdown/markdown-it-comark + category: Plugins + icon: i-simple-icons-markdown + official: true + - name: comark-strip + description: Strips Markdown and Comark syntax to plain text + author: aa900031 + repo: aa900031/comark-strip + category: Plugins + icon: i-lucide-eraser + - name: comark-toml + description: TOML frontmatter and block props + author: caelyreth + repo: caelyreth/comark-toml + category: Plugins + icon: i-vscode-icons-file-type-toml + color: "#9c4221" + - name: comark-knap + description: Renders Knap templates before parsing + author: atinux + repo: atinux/comark-knap + category: Plugins + icon: i-lucide-zap + color: "#f59e0b" + - name: "@leandown/comark" + description: Lean 4 highlighting via the language server + author: mzhang28 + repo: mzhang28/leandown + category: Plugins + icon: i-lucide-sigma + color: "#0ea5e9" + - name: comark-etiket + description: Barcode and QR directives as inline SVG or PNG + author: miguelrk + repo: miguelrk/comark-etiket + category: Plugins + icon: i-lucide-qr-code + color: "#f0db4f" + - name: "@red-glare/astro" + description: Astro integration for USWDS documentation sites + author: IHIutch + repo: IHIutch/red-glare + category: Integrations + icon: i-simple-icons-astro + color: "#bc52ee" + - name: "@sit-onyx/comark" + description: Comark wrapped in the Onyx design system + author: SchwarzIT + repo: SchwarzIT/onyx + category: Tooling + subcategory: UI + icon: i-lucide-component + - name: vue-stream-markdown + description: Vue components for streaming LLM output + author: jinghaihan + repo: jinghaihan/vue-stream-markdown + category: Tooling + subcategory: UI + icon: i-logos-vue + color: "#42b883" + - name: comark-tiptap + description: Lossless TipTap, Comark AST and Markdown round-trip + author: sandros94 + repo: sandros94/comark-tiptap + category: Tooling + subcategory: UI + icon: i-lucide-pen-tool + color: "#6a00f5" + - name: vscode-comark + description: Syntax highlighting and colon matching in VS Code + author: comarkdown + repo: comarkdown/vscode-comark + category: Tooling + subcategory: Extensions + icon: i-vscode-icons-file-type-vscode + color: "#007acc" + official: true + - name: comark-webext + description: Renders Comark syntax on GitHub and GitLab + author: comarkdown + repo: comarkdown/comark-webext + category: Tooling + subcategory: Extensions + icon: i-simple-icons-googlechrome + color: "#4285f4" + official: true + - name: comark-docs + description: The Nuxt docs layer powering comark.dev + author: comarkdown + repo: comarkdown/comark-docs + category: Tooling + subcategory: Templates + icon: i-lucide-book-open + color: "#eab308" + official: true + - name: comark-plugin-template + description: Starter repo for building a Comark plugin + author: comarkdown + repo: comarkdown/comark-plugin-template + category: Tooling + subcategory: Templates + icon: i-lucide-blocks + official: true + - name: comark-cat + description: Renders Markdown in the terminal, like bat + author: Norbiros + repo: Norbiros/comark-cat + category: Tooling + subcategory: CLI + icon: i-lucide-cat + color: "#f97316" + - name: docster + description: Agent skill for writing Comark documentation + author: atinux + repo: atinux/docster + category: Tooling + subcategory: Agents + icon: i-lucide-graduation-cap + color: "#eab308" +--- +:: + +::ecosystem-showcase +--- +sites: + - name: comark.dev + description: This documentation site, built with the comark-docs Nuxt layer. + author: comarkdown + url: https://comark.dev + screenshot: /ecosystem-images/comark-dev.webp + - name: unifont.dev + description: "Font metadata from every CDN in one lookup: catalogue, specimens, and a public HTTP API, all rendered with Comark." + author: danielroe + url: https://unifont.dev + screenshot: /ecosystem-images/unifont-dev.webp + - name: Graphs demo + description: "Markdown as a templating engine: a component block resolves to a live chart at render time." + author: atinux + url: https://comark-graphs-demo.vercel.app + screenshot: /ecosystem-images/graphs-demo.webp + - name: Kitchen sink + description: Next.js reference implementation covering every Comark component, prop, and slot pattern. + author: remiconnesson + url: https://v0-kitchen-sink-demo.vercel.app + screenshot: /ecosystem-images/kitchen-sink.webp + - name: roe.dev + description: "Daniel Roe's personal site: notes stored as markdown records in his own AT Protocol repo, parsed with Comark via airspace's markdown plugin." + author: danielroe + url: https://roe.dev + screenshot: /ecosystem-images/roe-dev.webp +--- + +#title +Built with Comark + +#description +Sites and demos running Comark in production +:: + +::ecosystem-cta +#title +Add your project + +#description +Building on Comark? Open a pull request adding a card, or open an issue first if you aren't sure it fits. -This page uses `navigation.layout: page` in its frontmatter instead of the default `docs` layout, so it renders without the sidebar navigation. +#ctas + :::u-button + --- + to: https://github.com/comarkdown/comark/edit/main/docs/content/9.ecosystem.md + icon: i-lucide-plus + target: _blank + color: neutral + --- + Add your project + ::: -- [GitHub](https://github.com/comarkdown/comark) -- [Comark Content](https://github.com/comarkdown/comark-content) -- [Comark Docs](https://github.com/comarkdown/comark-docs) + :::u-button + --- + to: https://github.com/comarkdown/comark/issues/new + target: _blank + color: neutral + variant: outline + --- + Open an issue + ::: +:: + diff --git a/docs/nuxt.config.ts b/docs/nuxt.config.ts index b2495240..6c26d4d8 100644 --- a/docs/nuxt.config.ts +++ b/docs/nuxt.config.ts @@ -84,6 +84,7 @@ export default defineNuxtConfig({ '/examples/**': { isr: 300 }, '/kb': { isr: 300 }, '/kb/**': { isr: 300 }, + '/ecosystem': { isr: 300 }, }, }, }) diff --git a/docs/public/ecosystem-images/comark-dev.webp b/docs/public/ecosystem-images/comark-dev.webp new file mode 100644 index 00000000..139e9ff7 Binary files /dev/null and b/docs/public/ecosystem-images/comark-dev.webp differ diff --git a/docs/public/ecosystem-images/graphs-demo.webp b/docs/public/ecosystem-images/graphs-demo.webp new file mode 100644 index 00000000..0d43b257 Binary files /dev/null and b/docs/public/ecosystem-images/graphs-demo.webp differ diff --git a/docs/public/ecosystem-images/kitchen-sink.webp b/docs/public/ecosystem-images/kitchen-sink.webp new file mode 100644 index 00000000..e766bd6d Binary files /dev/null and b/docs/public/ecosystem-images/kitchen-sink.webp differ diff --git a/docs/public/ecosystem-images/roe-dev.webp b/docs/public/ecosystem-images/roe-dev.webp new file mode 100644 index 00000000..958cb916 Binary files /dev/null and b/docs/public/ecosystem-images/roe-dev.webp differ diff --git a/docs/public/ecosystem-images/unifont-dev.webp b/docs/public/ecosystem-images/unifont-dev.webp new file mode 100644 index 00000000..5f51ac1f Binary files /dev/null and b/docs/public/ecosystem-images/unifont-dev.webp differ diff --git a/docs/scripts/ecosystem-images.mjs b/docs/scripts/ecosystem-images.mjs new file mode 100644 index 00000000..9d5fe990 --- /dev/null +++ b/docs/scripts/ecosystem-images.mjs @@ -0,0 +1,49 @@ +#!/usr/bin/env node +// Regenerates the "Built with Comark" screenshots on the ecosystem page. +// Requires the Playwright browsers to be installed (`npx playwright install chromium`) +// and `cwebp` (from libwebp) on PATH. +import { execFileSync } from 'node:child_process' +import { mkdirSync, rmSync } from 'node:fs' +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' + +const __dirname = dirname(fileURLToPath(import.meta.url)) +const outDir = join(__dirname, '../public/ecosystem-images') +mkdirSync(outDir, { recursive: true }) + +// 16:9 to match the UBlogPost card header; downscaled 2x for a sharp retina capture. +const VIEWPORT = '1280,720' +const OUT_SIZE = ['960', '540'] + +const shots = [ + { name: 'comark-dev', url: 'https://comark.dev' }, + { name: 'unifont-dev', url: 'https://unifont.dev' }, + { name: 'graphs-demo', url: 'https://comark-graphs-demo.vercel.app' }, + { name: 'kitchen-sink', url: 'https://v0-kitchen-sink-demo.vercel.app' }, + { name: 'roe-dev', url: 'https://roe.dev' }, +] + +for (const { name, url } of shots) { + const png = join(outDir, `${name}.png`) + const webp = join(outDir, `${name}.webp`) + console.log(`Capturing ${url}`) + execFileSync( + 'npx', + [ + 'playwright', + 'screenshot', + '--viewport-size', + VIEWPORT, + '--color-scheme', + 'dark', + '--wait-for-timeout', + '2500', + url, + png, + ], + { stdio: 'inherit' } + ) + execFileSync('cwebp', ['-q', '78', '-resize', ...OUT_SIZE, png, '-o', webp], { stdio: 'inherit' }) + rmSync(png) + console.log(`-> ${webp}`) +}