### Install and Run Development Server Source: https://github.com/dodopayments/dualmark/blob/main/examples/nextjs-app-router/README.md Commands to install dependencies and start the Next.js development server. ```bash bun install bun run dev # http://localhost:3000 (recommended for verify) ``` -------------------------------- ### Project Setup and Testing Source: https://github.com/dodopayments/dualmark/blob/main/README.md Commands to install dependencies, build the project, and run all tests across packages. ```bash bun install bun run build && bun run test && bun run typecheck # 324 tests across 6 packages ``` -------------------------------- ### Install and Run Development Server Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/README.md Install dependencies and start the local development server for Dualmark. The server will be available at http://localhost:4000. ```bash bun install bun run dev # http://localhost:4000 bun run build bun run start ``` -------------------------------- ### Install and Run Astro Development Server Source: https://github.com/dodopayments/dualmark/blob/main/examples/astro-blog/README.md Install dependencies and start the Astro development server to view the site with full Dualmark headers. This is recommended for verification purposes. ```bash bun install bun run dev # http://localhost:4321 — full Dualmark headers (recommended for verify) ``` -------------------------------- ### Install @dualmark/core with Bun Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/core.mdx Install the package using Bun. ```bash bun add @dualmark/core ``` -------------------------------- ### Install @dualmark/cli Source: https://github.com/dodopayments/dualmark/blob/main/packages/cli/README.md Install the CLI tool using bun. Alternatively, use bunx to run it directly without installation. ```bash bun add -d @dualmark/cli ``` ```bash bunx @dualmark/cli verify https://example.com/blog/hello ``` -------------------------------- ### Install Core Package Source: https://github.com/dodopayments/dualmark/blob/main/README.md Install the core framework-agnostic primitives for Dualmark. ```bash npm i @dualmark/core ``` -------------------------------- ### Install @dualmark/core with npm Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/core.mdx Install the package using npm. ```bash npm install @dualmark/core ``` -------------------------------- ### Install @dualmark/core with Yarn Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/core.mdx Install the package using Yarn. ```bash yarn add @dualmark/core ``` -------------------------------- ### Install Dependencies and Build Project Source: https://github.com/dodopayments/dualmark/blob/main/CONTRIBUTING.md Run these commands to set up your development environment, install dependencies, build the project, and run tests. ```bash bun install bun run build bun run test ``` -------------------------------- ### Install Dualmark Next.js Integration Source: https://github.com/dodopayments/dualmark/blob/main/README.md Install the Dualmark Next.js integration package using Bun. ```bash bun add @dualmark/nextjs ``` -------------------------------- ### Install and Run @dualmark/cli with npm Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/cli.mdx Install the CLI globally using npm and run a verification test ad-hoc. ```bash npm install -g @dualmark/cli # or run ad-hoc: bunx @dualmark/cli verify https://example.com ``` -------------------------------- ### Install Converters Package Source: https://github.com/dodopayments/dualmark/blob/main/README.md Install the production-tested converter factories for Dualmark. ```bash npm i @dualmark/converters ``` -------------------------------- ### Install CLI Tool Source: https://github.com/dodopayments/dualmark/blob/main/README.md Install the Dualmark CLI tool globally for URL verification. ```bash npm i -g @dualmark/cli ``` -------------------------------- ### Install and Run @dualmark/cli with Bun Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/cli.mdx Install the CLI globally using Bun and run a verification test ad-hoc. ```bash bun add -g @dualmark/cli # or run ad-hoc: bunx @dualmark/cli verify https://example.com ``` -------------------------------- ### Build and Start Production Server Source: https://github.com/dodopayments/dualmark/blob/main/examples/nextjs-app-router/README.md Commands for creating a production build and serving it. ```bash bun run build # production build (uses generateStaticParams) bun run start # serve production build ``` -------------------------------- ### Install Dualmark Converters Source: https://github.com/dodopayments/dualmark/blob/main/packages/converters/README.md Install the @dualmark/converters and @dualmark/core packages using Bun. ```bash bun add @dualmark/converters @dualmark/core ``` -------------------------------- ### Verify Dualmark Installation Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/integrations/nextjs.mdx Run this command to verify your Dualmark installation and setup. Ensure your Next.js development server is running. ```bash bun run dev # new terminal: bunx @dualmark/cli verify http://localhost:3000/posts/your-post ``` -------------------------------- ### Install and Run @dualmark/cli with Yarn Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/cli.mdx Install the CLI globally using Yarn and run a verification test ad-hoc. ```bash yarn global add @dualmark/cli # or run ad-hoc: yarn dlx @dualmark/cli verify https://example.com ``` -------------------------------- ### Install Dualmark Astro Integration Source: https://github.com/dodopayments/dualmark/blob/main/README.md Install the Dualmark Astro integration package using Bun. ```bash bun add @dualmark/astro ``` -------------------------------- ### Install @dualmark/converters Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/converters.mdx Install the @dualmark/converters and @dualmark/core packages using your preferred package manager. ```bash bun add @dualmark/converters @dualmark/core ``` ```bash npm install @dualmark/converters @dualmark/core ``` ```bash yarn add @dualmark/converters @dualmark/core ``` -------------------------------- ### Install Next.js Adapter Source: https://github.com/dodopayments/dualmark/blob/main/README.md Install the Dualmark adapter for Next.js App Router, providing functions like withDualmark() and createDualmarkMiddleware(). ```bash npm i @dualmark/nextjs ``` -------------------------------- ### Install @dualmark/cloudflare and @dualmark/core with Bun Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/integrations/cloudflare-workers.mdx Use this command to add the necessary packages to your project when using Bun. ```bash bun add @dualmark/cloudflare @dualmark/core ``` -------------------------------- ### Install Astro Integration Source: https://github.com/dodopayments/dualmark/blob/main/README.md Install the Dualmark integration for Astro 5, which auto-generates .md endpoints and includes middleware. ```bash npm i @dualmark/astro ``` -------------------------------- ### Install @dualmark/astro with Bun, npm, or Yarn Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/astro.mdx Install the necessary packages for the @dualmark/astro integration using your preferred package manager. ```bash bun add @dualmark/astro @dualmark/core @dualmark/converters ``` ```bash npm install @dualmark/astro @dualmark/core @dualmark/converters ``` ```bash yarn add @dualmark/astro @dualmark/core @dualmark/converters ``` -------------------------------- ### Dualmark Conformance Report Example Source: https://github.com/dodopayments/dualmark/blob/main/README.md An example of the output from the `dualmark verify` command, detailing conformance scores and specific checks. ```text Dualmark Conformance Report URL: https://yourcompany.com/pricing Markdown: https://yourcompany.com/pricing.md Score: 125/125 Duration: 107ms Passed: [+20] md.fetch — Markdown twin URL is reachable [+10] md.contentType — Content-Type is text/markdown; charset=utf-8 [+10] md.tokensHeader — X-Markdown-Tokens header is present [+10] md.noindex — X-Robots-Tag includes noindex [+10] md.vary — Vary header includes Accept [+10] md.body — Body is non-empty markdown [+10] html.linkAlternate — HTML response advertises markdown twin [+10] negotiation.botUa — GPTBot UA receives text/markdown [+10] negotiation.acceptHeader — Accept: text/markdown receives text/markdown ... ``` -------------------------------- ### Install @dualmark/cloudflare and @dualmark/core with npm Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/integrations/cloudflare-workers.mdx Use this command to add the necessary packages to your project when using npm. ```bash npm install @dualmark/cloudflare @dualmark/core ``` -------------------------------- ### Install @dualmark/nextjs with Bun Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/quickstart.mdx Install the necessary Dualmark packages for Next.js using Bun. This includes the Next.js adapter, core library, and converters. ```bash bun add @dualmark/nextjs @dualmark/core @dualmark/converters ``` -------------------------------- ### Collection Configuration Example Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/astro.mdx Configure collections for dualmark, specifying converter types, slug strategies, and listing metadata. ```typescript collections: { blog: { converter: "blog" | "case-study" | "changelog" | "compare" | "docs" | "feature" | "glossary" | "integration" | "legal" | "pricing" | "pseo" | "tool" | "video" | ((entry) => string), // or custom function slugStrategy?: "single" | "nested", // single = /blog/, nested = /blog/<...> listingMetadata?: { title?: string; description?: string; }, }, } ``` -------------------------------- ### Quick Example: Fetch Handler Source: https://github.com/dodopayments/dualmark/blob/main/packages/core/README.md A basic fetch handler demonstrating content negotiation, AI bot detection, and markdown response generation using @dualmark/core. ```typescript import { negotiateFormat, markdownResponse, detectAIBot } from "@dualmark/core"; export default { async fetch(request) { const accept = request.headers.get("accept") ?? ""; const ua = request.headers.get("user-agent") ?? ""; const bot = detectAIBot(ua); const fmt = negotiateFormat(accept); if (fmt === null) return new Response("Not Acceptable", { status: 406 }); if (bot.isBot || fmt === "markdown") { return markdownResponse("# Hello\n\nThis is the markdown twin."); } return new Response("Hello", { headers: { "Content-Type": "text/html" }, }); }, }; ``` -------------------------------- ### Install Dualmark Packages Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/integrations/nextjs.mdx Install the necessary Dualmark packages for your Next.js project using your preferred package manager. ```bash bun add @dualmark/nextjs @dualmark/core @dualmark/converters ``` ```bash npm install @dualmark/nextjs @dualmark/core @dualmark/converters ``` ```bash yarn add @dualmark/nextjs @dualmark/core @dualmark/converters ``` -------------------------------- ### Install @dualmark/nextjs with npm Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/quickstart.mdx Install the necessary Dualmark packages for Next.js using npm. This includes the Next.js adapter, core library, and converters. ```bash npm install @dualmark/nextjs @dualmark/core @dualmark/converters ``` -------------------------------- ### Example URL Structure Source: https://github.com/dodopayments/dualmark/blob/main/README.md Demonstrates how Dualmark serves different content types from the same URL based on request headers or URL extensions. ```text yourcompany.com/pricing ← human visitors get this yourcompany.com/pricing.md ← AI agents get this yourcompany.com/llms.txt ← AI agents discover everything ``` -------------------------------- ### Install @dualmark/cloudflare and @dualmark/core with Yarn Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/integrations/cloudflare-workers.mdx Use this command to add the necessary packages to your project when using Yarn. ```bash yarn add @dualmark/cloudflare @dualmark/core ``` -------------------------------- ### llms.txt Configuration Example Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/astro.mdx Enable and configure the generation of an llms.txt file from provided sections, including brand name and links. ```typescript llmsTxt: { enabled: true, brandName: "Acme", description: "Acme's docs and blog.", sections: [ { title: "Pages", links: [ { title: "Home", href: "https://example.com/" }, { title: "Blog", href: "https://example.com/blog" }, ], }, ], } ``` -------------------------------- ### Install Dualmark Packages with Bun Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/integrations/astro.mdx Install the necessary Dualmark packages for Astro using Bun. This includes the Astro integration, core library, and converters. ```bash bun add @dualmark/astro @dualmark/core @dualmark/converters ``` -------------------------------- ### Install @dualmark/nextjs with Yarn Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/quickstart.mdx Install the necessary Dualmark packages for Next.js using Yarn. This includes the Next.js adapter, core library, and converters. ```bash yarn add @dualmark/nextjs @dualmark/core @dualmark/converters ``` -------------------------------- ### Migrating to @dualmark/nextjs Adapter Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/integrations/nextjs.mdx Compares manual `@dualmark/core` setup with the streamlined `@dualmark/nextjs` adapter for Next.js middleware and route handlers. ```typescript Hand-rolled `proxy.ts`/`middleware.ts` with `detectAIBot` + `negotiateFormat` + manual rewrite logic ``` ```typescript `createDualmarkMiddleware({ siteUrl })` ``` ```typescript Hand-rolled `app/md/[...path]/route.ts` with `if`-chains over the joined path ``` ```typescript `createDualmarkRouteHandler({ siteUrl, collections, staticPages, parameterizedRoutes })` ``` ```typescript Hand-rolled `app/llms.txt/route.ts` calling `renderLlmsTxt` ``` ```typescript `createLlmsTxtHandler({ brandName, sections })` ``` ```typescript Manual `transpilePackages: ["@dualmark/core", ...]` ``` ```typescript `withDualmark(nextConfig, options)` ``` -------------------------------- ### Install Dualmark Packages with npm Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/integrations/astro.mdx Install the necessary Dualmark packages for Astro using npm. This includes the Astro integration, core library, and converters. ```bash npm install @dualmark/astro @dualmark/core @dualmark/converters ``` -------------------------------- ### CI Workflow for Conformance Check Source: https://github.com/dodopayments/dualmark/blob/main/README.md Example of how to integrate the Dualmark CLI verification into a GitHub Actions CI workflow to prevent regressions. ```yaml # .github/workflows/ci.yml - run: bunx @dualmark/cli verify https://staging.yourcompany.com/pricing # exits non-zero if any required check fails ``` -------------------------------- ### Install Dualmark Core Package Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/quickstart.mdx Install the core Dualmark package using your preferred package manager (bun, npm, or yarn). This package provides the necessary functions for content negotiation and AI bot detection. ```bash bun add @dualmark/core ``` ```bash npm install @dualmark/core ``` ```bash yarn add @dualmark/core ``` -------------------------------- ### Browser Request Example Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/spec/content-negotiation.mdx Demonstrates a typical browser request with an Accept header that includes multiple media types and quality values. The server should respond with HTML. ```http GET /blog/hello HTTP/1.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 ``` -------------------------------- ### Parameterized Routes Configuration Example Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/astro.mdx Configure parameterized routes to dynamically generate pages based on parameters. ```typescript parameterizedRoutes: [ { pattern: "/tax/[country]", getStaticPaths: async () => [ { params: { country: "us" } }, { params: { country: "uk" } }, ], render: ({ country }) => `# Tax in ${country.toUpperCase()}\n\n...`, }, ], ``` -------------------------------- ### Path utility examples Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/core.mdx Demonstrates the usage of `toMarkdownPath` and `toMarkdownUrl` for converting paths and URLs to their markdown equivalents. Both helpers are idempotent on already-`.md` inputs. ```typescript toMarkdownPath("/blog/post"); // → "/blog/post.md" toMarkdownPath("/"); // → "/index.md" toMarkdownPath("/blog/post.md"); // → "/blog/post.md" (idempotent) toMarkdownUrl("https://x.com/blog?q=1"); // → "https://x.com/blog.md?q=1" ``` -------------------------------- ### Base llms.txt Format Example Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/spec/llms-txt-extensions.mdx Illustrates the fundamental structure of an llms.txt file, including brand name, description, and section links. ```markdown # Brand Name > One-paragraph description suitable for AI summarization. ## Section Title Optional section description. - [Page Title](https://example.com/page): Optional description - [Another Page](https://example.com/other) ## Another Section - [Item](https://example.com/item) ``` -------------------------------- ### Install Cloudflare Workers Adapter Source: https://github.com/dodopayments/dualmark/blob/main/README.md Install the Dualmark adapter for Cloudflare Workers, which wraps upstream Workers and includes hooks for analytics. ```bash npm i @dualmark/cloudflare ``` -------------------------------- ### Build and Preview Astro Site Source: https://github.com/dodopayments/dualmark/blob/main/examples/astro-blog/README.md Build the Astro project for static deployment and preview the generated files. Note that the preview server does not preserve response headers. ```bash bun run build # generates dist/ with html + .md twins (static) bun run preview # serves static dist/ — note: response headers are NOT preserved by static serving ``` -------------------------------- ### Markdown Sitemap Example Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/spec/discovery.mdx An example of a markdown sitemap file that lists all markdown twins. This can be useful for AI agents preferring markdown discovery. ```markdown # Sitemap ## Blog - [Hello World](/blog/hello.md) - [Second Post](/blog/second.md) ## Pages - [Home](/index.md) - [About](/about.md) ``` -------------------------------- ### Build and Verify Astro Site Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/quickstart.mdx Build and run your Astro development server, then use the Dualmark CLI to verify the site. This checks for markdown twins and auto-generated content. ```bash bun run build bun run dev # in another terminal: bunx @dualmark/cli verify http://localhost:4321/blog/your-post ``` -------------------------------- ### Install Dualmark Packages with Yarn Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/integrations/astro.mdx Install the necessary Dualmark packages for Astro using Yarn. This includes the Astro integration, core library, and converters. ```bash yarn add @dualmark/astro @dualmark/core @dualmark/converters ``` -------------------------------- ### Build Astro Site with Bun Source: https://github.com/dodopayments/dualmark/blob/main/examples/astro-cloudflare-full/README.md Installs dependencies and builds the Astro static site using Bun. The build process generates HTML, markdown twins, and an llms.txt file in the ./dist/ directory. ```bash bun install bun run build # astro build → ./dist/ with HTML + .md twins + llms.txt ``` -------------------------------- ### CLI Usage Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/cli.mdx The `@dualmark/cli` package provides a command-line interface for running conformance tests. The `verify` command takes a URL as input and can be configured with several options. ```APIDOC ## CLI Usage ```bash dualmark verify [options] ``` ### Options - `--json` - Output a machine-readable JSON report - `--skip-negotiation` - Skip negotiation checks (use for static-only sites) - `--timeout ` - Per-request timeout (default: 10000) - `--help`, `-h` - Show help ``` -------------------------------- ### Create LLMs.txt Handler Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/nextjs.mdx Generate `{ GET }` for `app/llms.txt/route.ts` using `createLlmsTxtHandler`. This provides structured information for LLMs. ```typescript import { createLlmsTxtHandler } from "@dualmark/nextjs"; const handler = createLlmsTxtHandler({ brandName: "Acme", description: "Acme's docs and blog.", sections: [ { title: "Pages", links: [ { title: "Home", href: "https://example.com/" }, { title: "Blog", href: "https://example.com/blog" }, ], }, ], }); export const dynamic = "force-static"; export const GET = handler.GET; ``` -------------------------------- ### New: @dualmark/nextjs - First-class Next.js 15 App Router Adapter Source: https://github.com/dodopayments/dualmark/blob/main/packages/nextjs/CHANGELOG.md Introduces the `@dualmark/nextjs` package, a dedicated adapter for Next.js 15 App Router. It offers a one-line install for `withDualmark(nextConfig, options)`, `createDualmarkMiddleware(options)`, `createDualmarkRouteHandler(options)`, and `createLlmsTxtHandler(options)`. The configuration mirrors `@dualmark/astro` and provides a tree-shakeable solution with zero runtime dependencies beyond `@dualmark/core` and `@dualmark/converters`. ```typescript 9f9f1d1: ## New: `@dualmark/nextjs` — first-class Next.js 15 App Router adapter Closes #4. Same one-line install as `@dualmark/astro`: - `withDualmark(nextConfig, options)` — wraps `next.config.mjs` - `createDualmarkMiddleware(options)` — drop-in `middleware.ts` - `createDualmarkRouteHandler(options)` — catch-all markdown twin route handler with `generateStaticParams` - `createLlmsTxtHandler(options)` — `/llms.txt` route handler Mirrors `@dualmark/astro`'s `collections` / `staticPages` / `parameterizedRoutes` config shape so users can copy their config across frameworks. Built-in converter names work identically. Tree-shakeable, zero runtime deps beyond `@dualmark/core` and `@dualmark/converters`. `examples/nextjs-app-router` is migrated to use the new package — same 120/125 conformance score under `next dev`, ~50 lines instead of ~120 hand-rolled. The `@dualmark/*` linked changeset group means all packages get a coordinated patch bump. ``` -------------------------------- ### Static Pages Configuration Example Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/astro.mdx Define static pages for your Astro site using the staticPages configuration option. ```typescript staticPages: [ { pattern: "/", render: () => "# Home\n\nWelcome." }, { pattern: "/about", render: () => "# About" }, ], ``` -------------------------------- ### Using a Blog Converter Factory Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/converters.mdx Demonstrates how to use the blogConverter factory with a configuration object and convert a collection entry. Ensure the necessary imports are included. ```typescript import { blogConverter } from "@dualmark/converters"; const convert = blogConverter({ siteUrl: "https://example.com", basePath: "/blog", categoryBasePath: "/blog/category", brandFooter: "## About\n\nWe build widgets.", }); const md = convert({ id: "first-post", data: { title: "Hello", description: "First post", publishedDate: new Date("2026-05-05"), author: "Alice", category: "announcements", }, body: "Long-form content.", }); ``` -------------------------------- ### createLlmsTxtHandler(options) Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/packages/nextjs.mdx Returns `{ GET }` for `app/llms.txt/route.ts`. This handler generates the content for the `llms.txt` file, which is used by LLM crawlers. ```APIDOC ## `createLlmsTxtHandler(options)` Returns `{ GET }` for `app/llms.txt/route.ts`. ### Parameters - `options` (object) - Configuration options for the `llms.txt` handler. - `brandName` (string) - The name of the brand. - `description` (string) - A description of the brand or website. - `sections` (array) - An array of sections to include in `llms.txt`. - `title` (string) - The title of the section. - `links` (array) - An array of links within the section. - `title` (string) - The title of the link. - `href` (string) - The URL of the link. ### Example ```ts // app/llms.txt/route.ts import { createLlmsTxtHandler } from "@dualmark/nextjs"; const handler = createLlmsTxtHandler({ brandName: "Acme", description: "Acme's docs and blog.", sections: [ { title: "Pages", links: [ { title: "Home", href: "https://example.com/" }, { title: "Blog", href: "https://example.com/blog" }, ], }, ], }); export const dynamic = "force-static"; export const GET = handler.GET; ``` ``` -------------------------------- ### llms.txt 'What We Do Not Do' Section Example Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/spec/llms-txt-extensions.mdx Demonstrates the recommended 'What We Do Not Do' section for disambiguation, preventing AI confusion with similar entities. ```markdown ## What We Do Not Do - Acme Corp does not sell physical products - Acme Corp is not affiliated with Acme Industries (defunct) - Acme Corp does not provide consulting services ``` -------------------------------- ### Verify Dualmark Integration with CLI Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/integrations/astro.mdx Verify the Dualmark integration by running the development server and then using the Dualmark CLI to check a specific blog post URL. ```bash bun run dev # new terminal: bunx @dualmark/cli verify http://localhost:4321/blog/your-post ``` -------------------------------- ### Verify Package Signatures Source: https://github.com/dodopayments/dualmark/blob/main/CONTRIBUTING.md Consumers can verify the provenance attestation of any @dualmark/* tarball using this command. It audits signatures for installed packages. ```bash npm audit signatures ``` -------------------------------- ### Tied Preference Example Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/spec/content-negotiation.mdx Demonstrates a scenario where the Accept header has multiple media types with the same highest quality value. The reference implementation prefers HTML, but other implementations may choose Markdown. ```http GET /blog/hello HTTP/1.1 Accept: text/html;q=0.5, text/markdown;q=0.5 ``` -------------------------------- ### Verify Page with CLI (Framework Agnostic) Source: https://github.com/dodopayments/dualmark/blob/main/apps/docs/content/docs/quickstart.mdx Use the Dualmark CLI to verify a page served by any framework. This command checks conformance to the AEO Spec. ```bash bunx @dualmark/cli verify http://localhost:3000/your-page ``` -------------------------------- ### Using the Compare Converter Source: https://github.com/dodopayments/dualmark/blob/main/README.md Shows how to import and use the `compareConverter` from `@dualmark/converters` to generate markdown for comparison pages. ```typescript import { compareConverter } from "@dualmark/converters"; const convert = compareConverter({ siteUrl: "https://yourcompany.com", basePath: "/compare", }); const md = convert(yourComparePage); // → battle-tested markdown layout ``` -------------------------------- ### Format Code Source: https://github.com/dodopayments/dualmark/blob/main/CONTRIBUTING.md Run this command to format your code according to the project's style guidelines using Prettier. This should be done before committing. ```bash bun run format ``` -------------------------------- ### Verify URL with CLI Source: https://github.com/dodopayments/dualmark/blob/main/README.md Use the Dualmark CLI to verify a given URL. ```bash dualmark verify ```