{
  "schema_version": "1.2.0",
  "canonical": "https://approximated.app/guides/examples/nextjs--v16.json",
  "example": {
    "id": "nextjs--v16",
    "framework": "Next.js",
    "edition": "v16",
    "edition_status": "current",
    "guide": "https://approximated.app/guides/nextjs-custom-domains-guide/",
    "version_url": "https://approximated.app/guides/nextjs-custom-domains-guide/v16/",
    "source_file": "src/guides/nextjs-custom-domains-guide/index.html",
    "edition_source": "src/_partials/guide-editions/nextjs/v16.html",
    "upstream_repository": "https://github.com/Approximated-Inc/nextjs-custom-domains",
    "upstream_exists": true,
    "published": null,
    "prepared_at": "2026-09-09",
    "publication_status": "local_draft",
    "last_reviewed": "2026-09-09",
    "review_scope": "All 23 behavioral tests, TypeScript checks, and production builds passed on Node 24.20.0 LTS and Node 26.8.1 Current. Lifecycle coverage includes a controlled delayed-refresh/removal overlap and retry after ambiguous DELETE failure. The compiled server returned separate Alpha and Beta fixture content and 404 for an unknown host. The development server accepted exact-origin fixture login and create with HTTP 200/201, rejected a same-host wrong-scheme mutation with 403, and returned 404 for the newly created provider-pending hostname. September 9 provider-mode follow-up: 28 Node 24.20.0 tests passed, including missing and blank key defaults, keyed real mode, explicit local override, and live mode without a key. Typecheck and the forced-local Next.js production build passed. Root review pinned npm test and the aggregate check build to local mode; all 28 tests passed again.",
    "runtime_test_status": "passed_local",
    "upstream_revision": "b9f99bd40d81fd13af457c9ef4a4849471c3a6fb",
    "tested_versions": {
      "next": "16.3.4",
      "react": "19.2.8",
      "react_dom": "19.2.8",
      "typescript": "7.0.2",
      "node_lts": "24.20.0",
      "node_current": "26.8.1",
      "npm_node_24": "11.19.0",
      "npm_node_26": "11.19.0"
    },
    "test_commands": [
      "npm ci",
      "npm test",
      "npm run typecheck",
      "NEXT_TELEMETRY_DISABLED=1 npm run build",
      "DATABASE_PATH=/tmp/nextjs-custom-domains-smoke.sqlite CONTROL_ORIGIN=http://localhost:3081 npm start -- -p 3081",
      "curl -H 'Host: alpha.localhost:3081' http://127.0.0.1:3081/",
      "curl -H 'Host: beta.localhost:3081' http://127.0.0.1:3081/",
      "curl -i -H 'Host: unknown.localhost:3081' http://127.0.0.1:3081/",
      "CONTROL_ORIGIN=http://localhost:3081 npm run dev -- -p 3081",
      "curl -H 'Host: localhost:3081' -H 'Origin: https://localhost:3081' -H 'Content-Type: application/json' --data '{...}' http://127.0.0.1:3081/api/domains",
      "curl -H 'Host: localhost:3081' -H 'Origin: http://localhost:3081' -H 'Content-Type: application/json' --data '{...}' http://127.0.0.1:3081/api/domains"
    ],
    "api_contract_revision": "99f0de6b74f4a88a7c5674d86c852036f22dcd13",
    "api_paths": [
      "/api/vhosts",
      "/api/vhosts/{id}"
    ],
    "not_tested": [
      "No live Approximated API request or account mutation was made.",
      "No controlled public DNS, certificate issuance, HTTPS routing, or deletion-propagation smoke test was run.",
      "No deployment adapter, reverse proxy, multi-instance database, Linux, or Windows runtime was tested.",
      "The provider-independent walkthrough snippets are illustrative; companion runtime results do not verify every guide snippet."
    ],
    "direct_resource": "https://approximated.app/guides/examples/nextjs--v16.json",
    "snippet_count": 11,
    "snippets": [
      {
        "id": "nextjs--v16--snippet-1-typescript",
        "language": "typescript",
        "sha256": "5dc2469245054afba46dae5890f92fb9659c2c1026113ddbc3598a79abb04696"
      },
      {
        "id": "nextjs--v16--snippet-2-typescript",
        "language": "typescript",
        "sha256": "79bf5250d62b574a88c47584e911a871e8ab76ec174b779576724705c0a4e53d"
      },
      {
        "id": "nextjs--v16--snippet-3-bash",
        "language": "bash",
        "sha256": "1212ba0d9c4f2ae1ef2a004c5381e39e8b1dd7acbc24680ee7934c8642ec398e"
      },
      {
        "id": "nextjs--v16--snippet-4-sql",
        "language": "sql",
        "sha256": "8c586f025f5b904638281f0851e3ff10a1391506e46e02c31f715ecafa8ca9d3"
      },
      {
        "id": "nextjs--v16--snippet-5-typescript",
        "language": "typescript",
        "sha256": "6c0208d0505457ea604fd630950e24cc775ba186c4880be51b90bf47bceb9875"
      },
      {
        "id": "nextjs--v16--snippet-6-bash",
        "language": "bash",
        "sha256": "b575ebf89c5d2e0ab93e02f10d21bb60d5d0f098ac4ec73b25d5fea91e568939"
      },
      {
        "id": "nextjs--v16--snippet-7-typescript",
        "language": "typescript",
        "sha256": "eac2410eeb4e5614ed9750c21f138869b1aea260581991e0854e9d268fa66edd"
      },
      {
        "id": "nextjs--v16--snippet-8-typescript",
        "language": "typescript",
        "sha256": "a85879f26c87bc7d3ad8a8d3836e65f5d17c38564d39ded693c7e092b77b9fd0"
      },
      {
        "id": "nextjs--v16--snippet-9-typescript",
        "language": "typescript",
        "sha256": "63ae68f18f2f88f9e830e53a528dcf57af17c13bd697fa77e101cba1cdc7ea6b"
      },
      {
        "id": "nextjs--v16--snippet-10-typescript",
        "language": "typescript",
        "sha256": "ffae0eb5c1c18d9332a9307ecd80bf38fbf79712b4dc215281bf35992234456a"
      },
      {
        "id": "nextjs--v16--snippet-11-bash",
        "language": "bash",
        "sha256": "bdd4d27b2781a4913fc2e8fdc704fe50aa2a25856c7921ae9917593d4aa44025"
      }
    ],
    "sources": [
      {
        "url": "https://registry.npmjs.org/next/latest",
        "title": "npm registry: Next.js latest package metadata"
      },
      {
        "url": "https://react.dev/versions",
        "title": "React versions"
      },
      {
        "url": "https://registry.npmjs.org/typescript/latest",
        "title": "npm registry: TypeScript latest package metadata"
      },
      {
        "url": "https://nodejs.org/en/about/previous-releases",
        "title": "Node.js release status"
      },
      {
        "url": "https://nextjs.org/blog/next-16",
        "title": "Next.js 16"
      },
      {
        "url": "https://nextjs.org/docs/app/api-reference/file-conventions/proxy",
        "title": "Next.js Proxy file convention"
      },
      {
        "url": "https://approximated.app/openapi.yaml",
        "title": "Approximated public OpenAPI contract"
      },
      {
        "url": "https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html",
        "title": "A, AAAA, and CNAME records and apex restrictions"
      },
      {
        "url": "https://developers.cloudflare.com/dns/cname-flattening/",
        "title": "Provider-specific CNAME flattening at the apex"
      },
      {
        "url": "https://approximated.app/docs/#how-approximated-works",
        "title": "Approximated routing, certificates, and dedicated IPv4"
      },
      {
        "url": "https://approximated.app/docs/#edge-verify",
        "title": "Form bot protection with Edge Verify"
      },
      {
        "url": "https://approximated.app/docs/#edge-sequences",
        "title": "Request rules and rate limiting with Edge Sequences"
      },
      {
        "url": "https://approximated.app/docs/#dns-widget",
        "title": "DNS onboarding widget and provider-specific support"
      },
      {
        "url": "https://approximated.app/docs/#webhook-events-virtual-host-monitor-updated",
        "title": "Domain monitoring status webhooks"
      }
    ],
    "walkthrough": {
      "provider_independent": true,
      "optional_integration_anchor": "bonus-approximated",
      "code_scope": "Main walkthrough snippets illustrate adding custom domains to an existing app. They are not a complete standalone application or a copy of the companion implementation.",
      "runtime_verification_scope": "Recorded runtime versions, commands, and results apply to the companion repository implementation. They do not imply that every illustrative guide snippet was executed.",
      "domain_connection_policy": {
        "txt_challenge_required": false,
        "dns_check_in_main": "A brief recommendation to check that DNS points directly or indirectly to the app or its receiving service.",
        "automated_dns_checks": "Explained in the optional Approximated bonus, alongside HTTPS readiness."
      }
    },
    "companion_provider_mode": {
      "default": "auto",
      "api_key_environment_variable": "APPROXIMATED_API_KEY",
      "without_key": "local mock",
      "with_key": "real Approximated API at https://cloud.approximated.app",
      "explicit_mock_override": "PROVIDER_MODE=local",
      "verification": {
        "date": "2026-09-09",
        "summary": "28 Node 24.20.0 tests passed, including missing and blank key defaults, keyed real mode, explicit local override, and live mode without a key. Typecheck and the forced-local Next.js production build passed. Root review pinned npm test and the aggregate check build to local mode; all 28 tests passed again.",
        "live_api_used": false
      }
    },
    "publication_evidence": {
      "type": "public_companion_git_tag",
      "published_at": "2026-09-09",
      "repository": "https://github.com/Approximated-Inc/nextjs-custom-domains",
      "revision": "b9f99bd40d81fd13af457c9ef4a4849471c3a6fb",
      "tag": "guide-nextjs16-r1",
      "tag_url": "https://github.com/Approximated-Inc/nextjs-custom-domains/tree/guide-nextjs16-r1",
      "anonymous_clone_verified_at": "2026-09-09",
      "scope": "Companion source publication and anonymous HTTPS clone verified. This does not establish guide deployment or live API, DNS, or HTTPS acceptance.",
      "previous_edition_tag": "guide-legacy-2026-09"
    }
  }
}
