diff --git a/website/blog/2019-05-28-first-blog-post.md b/website/blog/2019-05-28-first-blog-post.md deleted file mode 100644 index 176da000..00000000 --- a/website/blog/2019-05-28-first-blog-post.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -slug: first-blog-post -title: First Blog Post -authors: [slorber, yangshun] -tags: [hola, docusaurus] -draft: true ---- - -Lorem ipsum dolor sit amet... - - - -...consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet diff --git a/website/blog/2019-05-29-long-blog-post.md b/website/blog/2019-05-29-long-blog-post.md deleted file mode 100644 index ff3a0891..00000000 --- a/website/blog/2019-05-29-long-blog-post.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -slug: long-blog-post -title: Long Blog Post -authors: yangshun -tags: [hello, docusaurus] -draft: true ---- - -This is the summary of a very long blog post, - -Use a `` comment to limit blog post size in the list view. - - - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet diff --git a/website/blog/2021-08-01-mdx-blog-post.mdx b/website/blog/2021-08-01-mdx-blog-post.mdx deleted file mode 100644 index fab41c9c..00000000 --- a/website/blog/2021-08-01-mdx-blog-post.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -slug: mdx-blog-post -title: MDX Blog Post -authors: [slorber] -tags: [docusaurus] -draft: true ---- - -Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/). - -:::tip - -Use the power of React to create interactive blog posts. - -::: - -{/* truncate */} - -For example, use JSX to create an interactive button: - -```js - -``` - - diff --git a/website/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg b/website/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg deleted file mode 100644 index 11bda092..00000000 Binary files a/website/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg and /dev/null differ diff --git a/website/blog/2021-08-26-welcome/index.md b/website/blog/2021-08-26-welcome/index.md deleted file mode 100644 index 3e909713..00000000 --- a/website/blog/2021-08-26-welcome/index.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -slug: welcome -title: Welcome -authors: [slorber, yangshun] -tags: [facebook, hello, docusaurus] -draft: true ---- - -[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog). - -Here are a few tips you might find useful. - - - -Simply add Markdown files (or folders) to the `blog` directory. - -Regular blog authors can be added to `authors.yml`. - -The blog post date can be extracted from filenames, such as: - -- `2019-05-30-welcome.md` -- `2019-05-30-welcome/index.md` - -A blog post folder can be convenient to co-locate blog post images: - -![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg) - -The blog supports tags as well! - -**And if you don't want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config. diff --git a/website/blog/2025-10-28-example.md b/website/blog/2025-10-28-welcome.md similarity index 90% rename from website/blog/2025-10-28-example.md rename to website/blog/2025-10-28-welcome.md index 8a329773..83ebbb11 100644 --- a/website/blog/2025-10-28-example.md +++ b/website/blog/2025-10-28-welcome.md @@ -1,8 +1,9 @@ --- -slug: 2025-10-28-example +slug: 2025-10-28-welcome title: Hello Compose World! authors: [mn] tags: [hello] +enableComments: false --- Welcome to the blog diff --git a/website/blog/authors.yml b/website/blog/authors.yml index d93bd69f..e9525f14 100644 --- a/website/blog/authors.yml +++ b/website/blog/authors.yml @@ -1,33 +1,10 @@ -yangshun: - name: Yangshun Tay - title: Ex-Meta Staff Engineer, Co-founder GreatFrontEnd - url: https://linkedin.com/in/yangshun - image_url: https://github.com/yangshun.png - page: true - socials: - x: yangshunz - linkedin: yangshun - github: yangshun - newsletter: https://www.greatfrontend.com - -slorber: - name: Sébastien Lorber - title: Docusaurus maintainer - url: https://sebastienlorber.com - image_url: https://github.com/slorber.png - page: - # customize the url of the author page at /blog/authors/ - permalink: '/all-sebastien-lorber-articles' - socials: - x: sebastienlorber - linkedin: sebastienlorber - github: slorber - newsletter: https://thisweekinreact.com - mn: name: MN title: Maintainer @ Compose image_url: https://github.com/maxnorm.png + socials: + x: mnnnnnnnn355 + github: maxnorm mudgen: name: Nick Mudge diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 9a185269..6c08639c 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -262,6 +262,23 @@ const config = { contextualSearch: true, }, }), + // Giscus commenting system configuration + // See here for more information: https://github.com/giscus/giscus + ...(process.env.GISCUS_REPO && process.env.GISCUS_REPO_ID && process.env.GISCUS_CATEGORY_ID && { + giscus: { + repo: process.env.GISCUS_REPO, + repoId: process.env.GISCUS_REPO_ID, + category: process.env.GISCUS_CATEGORY || 'Blog', + categoryId: process.env.GISCUS_CATEGORY_ID, + mapping: process.env.GISCUS_MAPPING || 'pathname', + strict: process.env.GISCUS_STRICT || '0', + reactionsEnabled: process.env.GISCUS_REACTIONS_ENABLED || '1', + emitMetadata: process.env.GISCUS_EMIT_METADATA || '0', + inputPosition: process.env.GISCUS_INPUT_POSITION || 'top', + lang: process.env.GISCUS_LANG || 'en', + loading: process.env.GISCUS_LOADING || 'lazy' + }, + }), }), plugins: [ process.env.POSTHOG_API_KEY && [ diff --git a/website/package-lock.json b/website/package-lock.json index a18f2d70..b9486d8c 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -11,6 +11,7 @@ "@docusaurus/core": "3.9.2", "@docusaurus/preset-classic": "3.9.2", "@docusaurus/theme-mermaid": "^3.9.2", + "@giscus/react": "^3.1.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "dotenv": "^17.2.3", @@ -4124,6 +4125,18 @@ "node": ">=20.0" } }, + "node_modules/@giscus/react": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@giscus/react/-/react-3.1.0.tgz", + "integrity": "sha512-0TCO2TvL43+oOdyVVGHDItwxD1UMKP2ZYpT6gXmhFOqfAJtZxTzJ9hkn34iAF/b6YzyJ4Um89QIt9z/ajmAEeg==", + "dependencies": { + "giscus": "^1.6.0" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18 || ^19", + "react-dom": "^16 || ^17 || ^18 || ^19" + } + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -4365,6 +4378,21 @@ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "license": "MIT" }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz", + "integrity": "sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==", + "license": "BSD-3-Clause" + }, + "node_modules/@lit/reactive-element": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.2.tgz", + "integrity": "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.5.0" + } + }, "node_modules/@mdx-js/mdx": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", @@ -5470,8 +5498,7 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/@types/unist": { "version": "3.0.3", @@ -9557,6 +9584,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/giscus": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/giscus/-/giscus-1.6.0.tgz", + "integrity": "sha512-Zrsi8r4t1LVW950keaWcsURuZUQwUaMKjvJgTCY125vkW6OiEBkatE7ScJDbpqKHdZwb///7FVC21SE3iFK3PQ==", + "license": "MIT", + "dependencies": { + "lit": "^3.2.1" + } + }, "node_modules/github-slugger": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", @@ -11097,6 +11133,37 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "license": "MIT" }, + "node_modules/lit": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.2.tgz", + "integrity": "sha512-NF9zbsP79l4ao2SNrH3NkfmFgN/hBYSQo90saIVI1o5GpjAdCPVstVzO1MrLOakHoEhYkrtRjPK6Ob521aoYWQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^2.1.0", + "lit-element": "^4.2.0", + "lit-html": "^3.3.0" + } + }, + "node_modules/lit-element": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.2.tgz", + "integrity": "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.5.0", + "@lit/reactive-element": "^2.1.0", + "lit-html": "^3.3.0" + } + }, + "node_modules/lit-html": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.2.tgz", + "integrity": "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "node_modules/loader-runner": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", diff --git a/website/package.json b/website/package.json index 502302dd..44cd03df 100644 --- a/website/package.json +++ b/website/package.json @@ -17,6 +17,7 @@ "@docusaurus/core": "3.9.2", "@docusaurus/preset-classic": "3.9.2", "@docusaurus/theme-mermaid": "^3.9.2", + "@giscus/react": "^3.1.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "dotenv": "^17.2.3", diff --git a/website/src/components/Giscus/GiscusComponent.js b/website/src/components/Giscus/GiscusComponent.js new file mode 100644 index 00000000..e6917cbd --- /dev/null +++ b/website/src/components/Giscus/GiscusComponent.js @@ -0,0 +1,78 @@ +import React from 'react'; +import Giscus from "@giscus/react"; +import { useColorMode } from '@docusaurus/theme-common'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import styles from './styles.module.css'; + +/** + * Giscus comment component for blog posts + * + * Configuration is read from themeConfig.giscus in docusaurus.config.js + * The component automatically adapts to the current Docusaurus theme (light/dark mode) + * by using Giscus's built-in themes. + * + * Quick setup: Visit https://giscus.app/ to get your configuration values. + * See GISCUS_SETUP.md for detailed instructions. + */ +export default function GiscusComponent() { + const { colorMode } = useColorMode(); + const { siteConfig } = useDocusaurusContext(); + + const giscusConfig = siteConfig.themeConfig?.giscus; + + if (!giscusConfig) { + console.warn( + 'Giscus configuration is missing from themeConfig. ' + + 'Please ensure giscus config is set in docusaurus.config.js' + ); + return null; + } + + const { + repo, + repoId, + category = 'Blog', + categoryId, + mapping = 'pathname', + strict = '0', + reactionsEnabled = '1', + emitMetadata = '0', + inputPosition = 'top', + theme: themeConfig, + lightTheme = 'light', // Configurable light theme + darkTheme = 'dark', // Configurable dark theme + lang = 'en', + loading = 'lazy', + ...restConfig + } = giscusConfig; + + + // Determine theme based on color mode and configuration + const theme = colorMode === 'dark' ? darkTheme : lightTheme; + + return ( +
+

+ Comments +

+ +
+ ); +} diff --git a/website/src/components/Giscus/index.js b/website/src/components/Giscus/index.js new file mode 100644 index 00000000..2c692ba8 --- /dev/null +++ b/website/src/components/Giscus/index.js @@ -0,0 +1 @@ +export { default } from './GiscusComponent'; diff --git a/website/src/components/Giscus/styles.module.css b/website/src/components/Giscus/styles.module.css new file mode 100644 index 00000000..75c9dd13 --- /dev/null +++ b/website/src/components/Giscus/styles.module.css @@ -0,0 +1,36 @@ +/** + * Giscus Comments Section Styling + */ + +.commentsSection { + margin-top: 3rem; + margin-bottom: 2rem; +} + +.commentsHeading { + font-size: 2rem; + font-weight: 700; + letter-spacing: -0.015em; + margin-top: 0; + margin-bottom: 1.5rem; + padding-bottom: 0.75rem; + border-bottom: 2px solid var(--ifm-color-emphasis-200); + color: var(--ifm-heading-color); +} + +[data-theme='dark'] .commentsHeading { + border-bottom-color: #334155; + color: #ffffff; +} + +/* Responsive adjustments */ +@media (max-width: 768px) { + .commentsHeading { + font-size: 1.75rem; + margin-bottom: 1.25rem; + } + + .commentsSection { + margin-top: 2.5rem; + } +} diff --git a/website/src/css/custom.css b/website/src/css/custom.css index fa180cae..dc36746b 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -109,4 +109,27 @@ .token.constant, .token.important { font-style: normal !important; +} + +/* ============================================ + GISCUS COMMENTS STYLING + ============================================ */ + +/* Ensure Giscus iframe container matches our design */ +.giscus, +.giscus-frame { + width: 100%; + border: none; + margin-top: 1.5rem; +} + +/* Style the Giscus container wrapper */ +[class*="giscus"] { + font-family: var(--ifm-font-family-base); +} + +/* Ensure proper spacing for comments section in blog posts */ +article .giscus { + margin-top: 2rem; + margin-bottom: 2rem; } \ No newline at end of file diff --git a/website/src/theme/BlogPostItem/index.js b/website/src/theme/BlogPostItem/index.js new file mode 100644 index 00000000..50c3753a --- /dev/null +++ b/website/src/theme/BlogPostItem/index.js @@ -0,0 +1,20 @@ +import React from 'react'; +import { useBlogPost } from '@docusaurus/plugin-content-blog/client'; +import BlogPostItem from '@theme-original/BlogPostItem'; +import GiscusComponent from '@site/src/components/Giscus'; + +export default function BlogPostItemWrapper(props) { + const { metadata, isBlogPostPage } = useBlogPost(); + + const { frontMatter } = metadata; + const { enableComments } = frontMatter; + + return ( + <> + + {(enableComments !== false && isBlogPostPage) && ( + + )} + + ); +} diff --git a/website/static/llms.txt b/website/static/llms.txt index cb7d3764..010afafb 100644 --- a/website/static/llms.txt +++ b/website/static/llms.txt @@ -1,6 +1,5 @@ # LLMs crawling policy # Purpose: Signal intent to common AI/LLM crawlers. -# Note: This file is advisory; enforcement depends on each crawler. User-agent: GPTBot Allow: / @@ -21,6 +20,66 @@ Allow: / User-agent: * Allow: / -# Reference sitemap (update domain when finalized) -Sitemap: https://docusaurus-test-seven-sage.vercel.app/sitemap.xml +Sitemap: https://compose.diamonds/sitemap.xml +# Site Information +Site-Name: Compose +Site-URL: https://compose.diamonds/ +Description: Smart Contract Oriented Programming for ERC-2535 Diamonds. A smart contract library that helps developers build smart contract systems using the ERC-2535 Diamond standard, designed for code clarity, reusability, and on-chain composability. +Tagline: Smart Contract Oriented Programming for ERC-2535 Diamonds + +# Main Content Sections +Content-Sections: + - Homepage: https://compose.diamonds/ + - Documentation: https://compose.diamonds/docs + - Blog: https://compose.diamonds/blog + +# Documentation Structure +Documentation-Topics: + - Introduction: https://compose.diamonds/docs + - Foundations: https://compose.diamonds/docs/foundations + - Getting Started: https://compose.diamonds/docs/getting-started + - Design: https://compose.diamonds/docs/design + - Contribution: https://compose.diamonds/docs/contribution + +# Key Concepts +Core-Concepts: + - ERC-2535 Diamonds: Diamond standard for modular smart contracts + - Facets: Modular smart contract components + - Smart Contract Oriented Programming (SCOP): Programming paradigm designed specifically for smart contracts + - Composition Over Inheritance: Combine deployed facets instead of inheriting contracts + - On-Chain Standard Library: Verified, audited facets deployed on multiple blockchains + +# Philosophy +Philosophy: + - Read First: Code written to be understood first, not just executed + - Diamond-Native: Built specifically for ERC-2535 diamond contracts + - Composition Over Inheritance: Combine facets instead of inheriting contracts + - Intentional Simplicity: Banned features lead to clearer, safer code + +# Important Links +Links: + - GitHub: https://github.com/Perfect-Abstractions/Compose + - Discord: https://discord.gg/DCBD2UKbxc + - GitHub Discussions: https://github.com/Perfect-Abstractions/Compose/discussions + - License: https://github.com/Perfect-Abstractions/Compose/blob/main/LICENSE.md + +# Project Status +Status: Early Stage - Not Production Ready +License: MIT +Language: Solidity +Framework: Foundry + +# Technical Details +Tech-Stack: + - Smart Contracts: Solidity + - Build Tool: Foundry + - Documentation: Docusaurus + - Standard: ERC-2535 Diamonds + +# Content Types +Content-Types: + - Documentation: Technical guides, API references, tutorials + - Blog: Articles, updates, and community content + - Code Examples: Solidity smart contract examples + - Design Patterns: SCOP patterns and best practices diff --git a/website/static/robots.txt b/website/static/robots.txt index 27b32da4..dd02d3d2 100644 --- a/website/static/robots.txt +++ b/website/static/robots.txt @@ -1,8 +1,25 @@ +# Robots.txt for Compose Documentation + +# Allow all search engines to crawl the site User-agent: * Allow: / +# Disallow tag pages (low-value, duplicate content) Disallow: /tags/ -# Update this to your final production domain when ready -Sitemap: https://docusaurus-test-seven-sage.vercel.app/sitemap.xml +# Disallow search pages (dynamic, no-index content) +Disallow: /search + +# Disallow any admin or internal paths +Disallow: /admin/ +Disallow: /_next/ +Disallow: /api/ + +# Allow important content paths explicitly +Allow: /docs +Allow: /blog +Allow: / + +# Sitemap location +Sitemap: https://compose.diamonds/sitemap.xml