{
  "site": "ToolMink",
  "generatedFrom": "src/data/tools.ts",
  "processingStatement": "Most tools process files in your browser. Online processing tools send files to our server only when you start.",
  "allClientSide": false,
  "tools": [
    {
      "slug": "heic-to-jpg",
      "name": "HEIC to JPG",
      "path": "/heic-to-jpg/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "image-convert",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "@jsquash/jpeg",
          "@jsquash/png",
          "heic-to"
        ]
      }
    },
    {
      "slug": "merge-pdf",
      "name": "Merge PDF",
      "path": "/merge-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "pdf-merge",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "pdf-lib"
        ]
      }
    },
    {
      "slug": "png-to-jpg",
      "name": "PNG to JPG",
      "path": "/png-to-jpg/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "image-convert",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "@jsquash/jpeg",
          "@jsquash/png",
          "heic-to"
        ]
      }
    },
    {
      "slug": "webp-to-png",
      "name": "WebP to PNG",
      "path": "/webp-to-png/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "image-convert",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "@jsquash/jpeg",
          "@jsquash/png",
          "heic-to"
        ]
      }
    },
    {
      "slug": "webp-to-jpg",
      "name": "WebP to JPG",
      "path": "/webp-to-jpg/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "image-convert",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "@jsquash/jpeg",
          "@jsquash/png",
          "heic-to"
        ]
      }
    },
    {
      "slug": "resize-image",
      "name": "Resize Image",
      "path": "/resize-image/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "resize-image",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "@jsquash/jpeg",
          "@jsquash/png",
          "canvas.webp"
        ]
      }
    },
    {
      "slug": "heic-to-png",
      "name": "HEIC to PNG",
      "path": "/heic-to-png/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "image-convert",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "@jsquash/jpeg",
          "@jsquash/png",
          "heic-to"
        ]
      }
    },
    {
      "slug": "jpg-to-pdf",
      "name": "JPG to PDF",
      "path": "/jpg-to-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "pdf-build",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "pdf-lib",
          "@jsquash/jpeg",
          "@jsquash/png"
        ]
      }
    },
    {
      "slug": "pdf-to-jpg",
      "name": "PDF to JPG",
      "path": "/pdf-to-jpg/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "pdf-raster",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "@mink/io-web/pdf-render",
          "pdf.js"
        ]
      }
    },
    {
      "slug": "pdf-to-png",
      "name": "PDF to PNG",
      "path": "/pdf-to-png/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "pdf-raster",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "@mink/io-web/pdf-render",
          "pdf.js"
        ]
      }
    },
    {
      "slug": "compress-pdf",
      "name": "Compress PDF",
      "path": "/compress-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "pdf-compress",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "pdf-lib",
          "@jsquash/jpeg"
        ]
      }
    },
    {
      "slug": "compress-image",
      "name": "Compress Image",
      "path": "/compress-image/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "compress-image",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "@jsquash/jpeg",
          "@jsquash/png",
          "canvas.webp"
        ]
      }
    },
    {
      "slug": "pdf-to-word",
      "name": "PDF to Word",
      "path": "/pdf-to-word/",
      "category": "pdf",
      "processing": "server",
      "runsIn": "server",
      "uploadsFile": true,
      "runner": "pdf-to-word",
      "evidence": {
        "verifyChecks": [
          "A1-routes"
        ],
        "evidenceScope": "gateway allowlist regression for the only proxied convert paths; container limits enforced server-side",
        "codeLibraries": [
          "libreoffice",
          "pypdf"
        ]
      }
    },
    {
      "slug": "ocr",
      "name": "OCR",
      "path": "/ocr/",
      "category": "pdf",
      "processing": "server",
      "runsIn": "server",
      "uploadsFile": true,
      "runner": "ocr",
      "evidence": {
        "verifyChecks": [
          "A1-routes"
        ],
        "evidenceScope": "gateway allowlist regression for the only proxied convert paths; container limits enforced server-side",
        "codeLibraries": [
          "poppler-utils",
          "tesseract"
        ]
      }
    },
    {
      "slug": "split-pdf",
      "name": "Split PDF",
      "path": "/split-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "pdf-split",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "pdf-lib"
        ]
      }
    },
    {
      "slug": "remove-pages",
      "name": "Remove Pages",
      "path": "/remove-pages/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "pdf-remove-pages",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "pdf-lib"
        ]
      }
    },
    {
      "slug": "rotate-pdf",
      "name": "Rotate PDF",
      "path": "/rotate-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "pdf-rotate",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "pdf-lib"
        ]
      }
    },
    {
      "slug": "organize-pdf",
      "name": "Organize PDF",
      "path": "/organize-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "pdf-organize",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "pdf-lib",
          "@mink/io-web/pdf-render",
          "pdf.js"
        ]
      }
    },
    {
      "slug": "add-page-numbers",
      "name": "Add Page Numbers",
      "path": "/add-page-numbers/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "pdf-page-numbers",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "pdf-lib"
        ]
      }
    },
    {
      "slug": "image-to-webp",
      "name": "Image to WebP",
      "path": "/image-to-webp/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "image-to-webp",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "@jsquash/jpeg",
          "@jsquash/png",
          "canvas.webp"
        ]
      }
    },
    {
      "slug": "word-to-pdf",
      "name": "Word to PDF",
      "path": "/word-to-pdf/",
      "category": "pdf",
      "processing": "server",
      "runsIn": "server",
      "uploadsFile": true,
      "runner": "word-to-pdf",
      "evidence": {
        "verifyChecks": [
          "A1-routes"
        ],
        "evidenceScope": "gateway allowlist regression for the only proxied convert paths; container limits enforced server-side",
        "codeLibraries": [
          "libreoffice"
        ]
      }
    },
    {
      "slug": "rotate-image",
      "name": "Rotate Image",
      "path": "/rotate-image/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "flip-image",
      "name": "Flip Image",
      "path": "/flip-image/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "crop-image",
      "name": "Crop Image",
      "path": "/crop-image/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "image-grayscale",
      "name": "Image Grayscale",
      "path": "/image-grayscale/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "image-watermark",
      "name": "Image Watermark",
      "path": "/image-watermark/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "round-corners",
      "name": "Round Corners",
      "path": "/round-corners/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "compress-image-to-size",
      "name": "Compress Image to KB",
      "path": "/compress-image-to-size/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "image-budget",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "heic-to"
        ]
      }
    },
    {
      "slug": "reverse-pdf",
      "name": "Reverse PDF",
      "path": "/reverse-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "pdf-to-text",
      "name": "PDF to Text",
      "path": "/pdf-to-text/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "add-watermark",
      "name": "Add Watermark to PDF",
      "path": "/add-watermark/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "image-to-pdf",
      "name": "Image to PDF",
      "path": "/image-to-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "pdf-build",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "pdf-lib",
          "@jsquash/jpeg",
          "@jsquash/png"
        ]
      }
    },
    {
      "slug": "crop-pdf",
      "name": "Crop PDF",
      "path": "/crop-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "flatten-pdf",
      "name": "Flatten PDF",
      "path": "/flatten-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "pdf-metadata-editor",
      "name": "PDF Metadata Editor",
      "path": "/pdf-metadata-editor/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "sign-pdf",
      "name": "Sign PDF",
      "path": "/sign-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "pdf-interactive",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "pdf-lib",
          "pdf.js",
          "canvas"
        ]
      }
    },
    {
      "slug": "pdf-forms",
      "name": "PDF Form Filler",
      "path": "/pdf-forms/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "pdf-interactive",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "pdf-lib",
          "pdf.js",
          "canvas"
        ]
      }
    },
    {
      "slug": "color-picker",
      "name": "Color Picker from Image",
      "path": "/color-picker/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "image-analyzer",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "heic-to"
        ]
      }
    },
    {
      "slug": "image-filters",
      "name": "Image Filter Editor",
      "path": "/image-filters/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "image-color-palette",
      "name": "Color Palette from Image",
      "path": "/image-color-palette/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "appicon",
      "name": "App Icon Resizer",
      "path": "/appicon/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "image-to-base64",
      "name": "Image to Base64",
      "path": "/image-to-base64/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "base64-to-image",
      "name": "Base64 to Image",
      "path": "/base64-to-image/",
      "category": "image",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "data-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "UTF-8",
          "JSON",
          "Intl.Segmenter",
          "qrcode",
          "JsBarcode",
          "canvas"
        ]
      }
    },
    {
      "slug": "qr-code-generator",
      "name": "QR Code Generator",
      "path": "/qr-code-generator/",
      "category": "generator",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "data-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "UTF-8",
          "JSON",
          "Intl.Segmenter",
          "qrcode",
          "JsBarcode",
          "canvas"
        ]
      }
    },
    {
      "slug": "barcode-generator",
      "name": "Barcode Generator",
      "path": "/barcode-generator/",
      "category": "generator",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "data-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "UTF-8",
          "JSON",
          "Intl.Segmenter",
          "qrcode",
          "JsBarcode",
          "canvas"
        ]
      }
    },
    {
      "slug": "json-formatter",
      "name": "JSON Formatter",
      "path": "/json-formatter/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "data-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "UTF-8",
          "JSON",
          "Intl.Segmenter",
          "qrcode",
          "JsBarcode",
          "canvas"
        ]
      }
    },
    {
      "slug": "csv-to-json",
      "name": "CSV to JSON",
      "path": "/csv-to-json/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "data-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "UTF-8",
          "JSON",
          "Intl.Segmenter",
          "qrcode",
          "JsBarcode",
          "canvas"
        ]
      }
    },
    {
      "slug": "json-to-csv",
      "name": "JSON to CSV",
      "path": "/json-to-csv/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "data-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "UTF-8",
          "JSON",
          "Intl.Segmenter",
          "qrcode",
          "JsBarcode",
          "canvas"
        ]
      }
    },
    {
      "slug": "remove-duplicate-lines",
      "name": "Remove Duplicate Lines",
      "path": "/remove-duplicate-lines/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "data-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "UTF-8",
          "JSON",
          "Intl.Segmenter",
          "qrcode",
          "JsBarcode",
          "canvas"
        ]
      }
    },
    {
      "slug": "text-sorter",
      "name": "Text Line Sorter",
      "path": "/text-sorter/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "data-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "UTF-8",
          "JSON",
          "Intl.Segmenter",
          "qrcode",
          "JsBarcode",
          "canvas"
        ]
      }
    },
    {
      "slug": "find-and-replace",
      "name": "Find and Replace Text",
      "path": "/find-and-replace/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "data-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "UTF-8",
          "JSON",
          "Intl.Segmenter",
          "qrcode",
          "JsBarcode",
          "canvas"
        ]
      }
    },
    {
      "slug": "text-diff-checker",
      "name": "Text Diff Checker",
      "path": "/text-diff-checker/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "data-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "UTF-8",
          "JSON",
          "Intl.Segmenter",
          "qrcode",
          "JsBarcode",
          "canvas"
        ]
      }
    },
    {
      "slug": "word-counter",
      "name": "Word Counter",
      "path": "/word-counter/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "data-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "UTF-8",
          "JSON",
          "Intl.Segmenter",
          "qrcode",
          "JsBarcode",
          "canvas"
        ]
      }
    },
    {
      "slug": "extract-pdf-pages",
      "name": "Extract PDF Pages",
      "path": "/extract-pdf-pages/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib",
          "pdf.js",
          "heic-to",
          "qrcode",
          "JsBarcode"
        ]
      }
    },
    {
      "slug": "repair-pdf",
      "name": "Repair PDF",
      "path": "/repair-pdf/",
      "category": "pdf",
      "processing": "server",
      "runsIn": "server",
      "uploadsFile": true,
      "runner": "advanced-server",
      "evidence": {
        "verifyChecks": [
          "A1-routes"
        ],
        "evidenceScope": "gateway allowlist regression for the only proxied convert paths; container limits enforced server-side",
        "codeLibraries": [
          "pikepdf",
          "qpdf",
          "poppler-utils",
          "libreoffice"
        ]
      }
    },
    {
      "slug": "extract-pdf-images",
      "name": "Extract Images from PDF",
      "path": "/extract-pdf-images/",
      "category": "pdf",
      "processing": "server",
      "runsIn": "server",
      "uploadsFile": true,
      "runner": "advanced-server",
      "evidence": {
        "verifyChecks": [
          "A1-routes"
        ],
        "evidenceScope": "gateway allowlist regression for the only proxied convert paths; container limits enforced server-side",
        "codeLibraries": [
          "pikepdf",
          "qpdf",
          "poppler-utils",
          "libreoffice"
        ]
      }
    },
    {
      "slug": "encrypt-pdf",
      "name": "Encrypt PDF",
      "path": "/encrypt-pdf/",
      "category": "pdf",
      "processing": "server",
      "runsIn": "server",
      "uploadsFile": true,
      "runner": "advanced-server",
      "evidence": {
        "verifyChecks": [
          "A1-routes"
        ],
        "evidenceScope": "gateway allowlist regression for the only proxied convert paths; container limits enforced server-side",
        "codeLibraries": [
          "pikepdf",
          "qpdf",
          "poppler-utils",
          "libreoffice"
        ]
      }
    },
    {
      "slug": "decrypt-pdf",
      "name": "Decrypt PDF",
      "path": "/decrypt-pdf/",
      "category": "pdf",
      "processing": "server",
      "runsIn": "server",
      "uploadsFile": true,
      "runner": "advanced-server",
      "evidence": {
        "verifyChecks": [
          "A1-routes"
        ],
        "evidenceScope": "gateway allowlist regression for the only proxied convert paths; container limits enforced server-side",
        "codeLibraries": [
          "pikepdf",
          "qpdf",
          "poppler-utils",
          "libreoffice"
        ]
      }
    },
    {
      "slug": "excel-to-pdf",
      "name": "Excel to PDF",
      "path": "/excel-to-pdf/",
      "category": "pdf",
      "processing": "server",
      "runsIn": "server",
      "uploadsFile": true,
      "runner": "advanced-server",
      "evidence": {
        "verifyChecks": [
          "A1-routes"
        ],
        "evidenceScope": "gateway allowlist regression for the only proxied convert paths; container limits enforced server-side",
        "codeLibraries": [
          "pikepdf",
          "qpdf",
          "poppler-utils",
          "libreoffice"
        ]
      }
    },
    {
      "slug": "powerpoint-to-pdf",
      "name": "PowerPoint to PDF",
      "path": "/powerpoint-to-pdf/",
      "category": "pdf",
      "processing": "server",
      "runsIn": "server",
      "uploadsFile": true,
      "runner": "advanced-server",
      "evidence": {
        "verifyChecks": [
          "A1-routes"
        ],
        "evidenceScope": "gateway allowlist regression for the only proxied convert paths; container limits enforced server-side",
        "codeLibraries": [
          "pikepdf",
          "qpdf",
          "poppler-utils",
          "libreoffice"
        ]
      }
    },
    {
      "slug": "pdf-to-excel",
      "name": "PDF to Excel",
      "path": "/pdf-to-excel/",
      "category": "pdf",
      "processing": "server",
      "runsIn": "server",
      "uploadsFile": true,
      "runner": "advanced-server",
      "evidence": {
        "verifyChecks": [
          "A1-routes"
        ],
        "evidenceScope": "gateway allowlist regression for the only proxied convert paths; container limits enforced server-side",
        "codeLibraries": [
          "pikepdf",
          "qpdf",
          "poppler-utils",
          "libreoffice"
        ]
      }
    },
    {
      "slug": "booklet-pdf",
      "name": "Booklet PDF",
      "path": "/booklet-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib"
        ]
      }
    },
    {
      "slug": "n-up-pdf",
      "name": "N-up PDF",
      "path": "/n-up-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib"
        ]
      }
    },
    {
      "slug": "unbooklet-pdf",
      "name": "Restore booklet to single pages",
      "path": "/unbooklet-pdf/",
      "category": "pdf",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "workflow-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "canvas",
          "pdf-lib"
        ]
      }
    },
    {
      "slug": "case-converter",
      "name": "Case Converter",
      "path": "/case-converter/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "slug-generator",
      "name": "Slug Generator",
      "path": "/slug-generator/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "lorem-ipsum-generator",
      "name": "Lorem Ipsum Generator",
      "path": "/lorem-ipsum-generator/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "text-to-binary",
      "name": "Text to Binary",
      "path": "/text-to-binary/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "strip-html",
      "name": "Strip HTML Tags",
      "path": "/strip-html/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "whitespace-remover",
      "name": "Whitespace Remover",
      "path": "/whitespace-remover/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "email-extractor",
      "name": "Email Extractor",
      "path": "/email-extractor/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "url-extractor",
      "name": "URL Extractor",
      "path": "/url-extractor/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "remove-line-breaks",
      "name": "Remove Line Breaks",
      "path": "/remove-line-breaks/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "reverse-text",
      "name": "Reverse Text",
      "path": "/reverse-text/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "morse-code-translator",
      "name": "Morse Code Translator",
      "path": "/morse-code-translator/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "word-frequency-counter",
      "name": "Word Frequency Counter",
      "path": "/word-frequency-counter/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "text-repeater",
      "name": "Text Repeater",
      "path": "/text-repeater/",
      "category": "data",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "base64-encoder",
      "name": "Base64 Encoder / Decoder",
      "path": "/base64-encoder/",
      "category": "developer",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "url-encoder",
      "name": "URL Encoder / Decoder",
      "path": "/url-encoder/",
      "category": "developer",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "jwt-decoder",
      "name": "JWT Decoder",
      "path": "/jwt-decoder/",
      "category": "developer",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "hash-generator",
      "name": "Hash Generator",
      "path": "/hash-generator/",
      "category": "developer",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "html-encoder-decoder",
      "name": "HTML Encoder / Decoder",
      "path": "/html-encoder-decoder/",
      "category": "developer",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "query-string-parser",
      "name": "Query String Parser",
      "path": "/query-string-parser/",
      "category": "developer",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "string-escaper",
      "name": "String Escape / Unescape",
      "path": "/string-escaper/",
      "category": "developer",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "uuid-generator",
      "name": "UUID Generator",
      "path": "/uuid-generator/",
      "category": "developer",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "password-generator-dev",
      "name": "Password Generator",
      "path": "/password-generator-dev/",
      "category": "developer",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "length-converter",
      "name": "Length Converter",
      "path": "/length-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "weight-converter",
      "name": "Weight Converter",
      "path": "/weight-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "temperature-converter",
      "name": "Temperature Converter",
      "path": "/temperature-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "time-converter",
      "name": "Time Converter",
      "path": "/time-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "speed-converter",
      "name": "Speed Converter",
      "path": "/speed-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "area-converter",
      "name": "Area Converter",
      "path": "/area-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "volume-converter",
      "name": "Volume Converter",
      "path": "/volume-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "data-storage-converter",
      "name": "Data Storage Converter",
      "path": "/data-storage-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "pressure-converter",
      "name": "Pressure Converter",
      "path": "/pressure-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "energy-converter",
      "name": "Energy Converter",
      "path": "/energy-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "angle-converter",
      "name": "Angle Converter",
      "path": "/angle-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "number-base-converter",
      "name": "Number Base Converter",
      "path": "/number-base-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "color-code-converter",
      "name": "Color Code Converter",
      "path": "/color-code-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "epoch-converter",
      "name": "Unix Timestamp Converter",
      "path": "/epoch-converter/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    },
    {
      "slug": "aspect-ratio-calculator",
      "name": "Aspect Ratio Calculator",
      "path": "/aspect-ratio-calculator/",
      "category": "converter",
      "processing": "client",
      "runsIn": "browser",
      "uploadsFile": false,
      "runner": "utility-tool",
      "evidence": {
        "verifyChecks": [
          "D1b",
          "D2"
        ],
        "evidenceScope": "site-wide zero-upload scan (static build + sampled live traffic); not a per-tool conversion test",
        "codeLibraries": [
          "Web Worker",
          "Web Crypto",
          "UTF-8",
          "Intl.Segmenter",
          "htmlparser2",
          "entities"
        ]
      }
    }
  ]
}
