{
  "format": "audeep.report.v1",
  "exportedAt": "2026-09-12T13:37:01.394Z",
  "report": {
    "schemaVersion": 2,
    "contract": {
      "productUnderstanding": {
        "source": "surface-observation",
        "productName": null,
        "productCategory": "unknown",
        "summary": "This report used the audited public surface without paid discovery context.",
        "capabilities": [],
        "authSignals": [],
        "publicPaths": [],
        "apiOrigins": [],
        "discovery": null
      },
      "coverage": {
        "accessMode": "public",
        "status": "complete",
        "renderedPages": 1,
        "targetRequests": 120,
        "pageBudget": 1,
        "targetRequestBudget": 80,
        "discoveredPublicPathCount": 0,
        "allowedApiOriginCount": 0,
        "syntheticSignupCompleted": false,
        "postSignupTargetWrites": 0
      },
      "observedActions": [],
      "safeStops": [],
      "cleanupResidue": {
        "status": "not-required",
        "summary": "No synthetic account or target records were created by this audit.",
        "residue": []
      },
      "findingVerification": [
        {
          "findingId": "121054c5-a603-4389-ad59-135a5f95ed51-ux-tap-target-1",
          "status": "evidence-backed",
          "evidenceKinds": [
            "screenshot",
            "dom-selector"
          ],
          "summary": "The finding is tied to evidence captured during this audit."
        },
        {
          "findingId": "121054c5-a603-4389-ad59-135a5f95ed51-design-control-drift-3",
          "status": "evidence-backed",
          "evidenceKinds": [
            "screenshot",
            "dom-selector"
          ],
          "summary": "The finding is tied to evidence captured during this audit."
        },
        {
          "findingId": "121054c5-a603-4389-ad59-135a5f95ed51-missing-security-header-0",
          "status": "evidence-backed",
          "evidenceKinds": [
            "request"
          ],
          "summary": "The finding is tied to evidence captured during this audit."
        }
      ]
    },
    "id": "121054c5-a603-4389-ad59-135a5f95ed51",
    "tier": "quick",
    "url": "https://floov.co/",
    "finalUrl": "https://floov.co/",
    "auditedAt": "2026-08-29T09:30:14.727Z",
    "score": 90,
    "grade": "B",
    "dimensions": [
      {
        "class": "functional",
        "findings": 0,
        "covered": true,
        "score": 100,
        "grade": "A"
      },
      {
        "class": "security",
        "findings": 1,
        "covered": true,
        "score": 99,
        "grade": "A"
      },
      {
        "class": "accessibility",
        "findings": 0,
        "covered": true,
        "score": 100,
        "grade": "A"
      },
      {
        "class": "ux",
        "findings": 1,
        "covered": true,
        "score": 96,
        "grade": "B"
      },
      {
        "class": "performance",
        "findings": 1,
        "covered": true,
        "score": 99,
        "grade": "A"
      },
      {
        "class": "seo",
        "findings": 0,
        "covered": true,
        "score": 100,
        "grade": "A"
      },
      {
        "class": "design",
        "findings": 1,
        "covered": true,
        "score": 96,
        "grade": "B"
      }
    ],
    "totalFindings": 4,
    "otherFindings": 3,
    "headline": {
      "id": "121054c5-a603-4389-ad59-135a5f95ed51-ux-tap-target-1",
      "type": "ux-tap-target",
      "class": "ux",
      "severity": "medium",
      "confidence": "confirmed",
      "title": "Tap target is too small on mobile",
      "detail": "\"Cookie Policy\" renders at 73x14px in the first mobile viewport.",
      "evidence": {
        "selector": "#cookie-consent-description > a:nth-of-type(1)",
        "request": null,
        "screenshot": "/audit-artifacts/121054c5-a603-4389-ad59-135a5f95ed51/page.png",
        "prominence": 0.004069340329835082
      },
      "page": "https://floov.co/",
      "firstSeen": 1,
      "evidenceChip": "#cookie-consent-description > a:nth-of-type(1)"
    },
    "evidenceChip": "#cookie-consent-description > a:nth-of-type(1)",
    "findings": [
      {
        "id": "121054c5-a603-4389-ad59-135a5f95ed51-ux-tap-target-1",
        "type": "ux-tap-target",
        "class": "ux",
        "severity": "medium",
        "confidence": "confirmed",
        "title": "Tap target is too small on mobile",
        "detail": "\"Cookie Policy\" renders at 73x14px in the first mobile viewport.",
        "evidence": {
          "selector": "#cookie-consent-description > a:nth-of-type(1)",
          "request": null,
          "screenshot": "/audit-artifacts/121054c5-a603-4389-ad59-135a5f95ed51/page.png",
          "prominence": 0.004069340329835082
        },
        "page": "https://floov.co/",
        "firstSeen": 1,
        "evidenceChip": "#cookie-consent-description > a:nth-of-type(1)"
      },
      {
        "id": "121054c5-a603-4389-ad59-135a5f95ed51-design-control-drift-3",
        "type": "design-control-drift",
        "class": "design",
        "severity": "medium",
        "confidence": "confirmed",
        "title": "Buttons on this page are styled inconsistently",
        "detail": "9 visually distinct button treatments render on one page, counting background, text colour, border, corner radius and weight (including \"Start Building for Free\", \"View Features\", \"Is the Free plan really free forever?\", \"Cookie Preferences\", \"Preferences\"). When every button looks different, none of them reads as the primary action, and people hesitate over which one to press.",
        "evidence": {
          "selector": "button[aria-label=\"Open Menu\"]",
          "request": null,
          "screenshot": "/audit-artifacts/121054c5-a603-4389-ad59-135a5f95ed51/page.png",
          "prominence": 0
        },
        "page": "https://floov.co/",
        "firstSeen": 3,
        "evidenceChip": "button[aria-label=\"Open Menu\"]"
      },
      {
        "id": "121054c5-a603-4389-ad59-135a5f95ed51-missing-security-header-0",
        "type": "missing-security-header",
        "class": "security",
        "severity": "low",
        "confidence": "confirmed",
        "title": "Important browser security headers are missing",
        "detail": "Missing: content-security-policy, strict-transport-security",
        "evidence": {
          "selector": null,
          "request": {
            "method": "GET",
            "url": "https://floov.co/",
            "status": 200
          },
          "screenshot": null,
          "prominence": 0
        },
        "page": "https://floov.co/",
        "firstSeen": 0,
        "evidenceChip": "GET / -> 200"
      }
    ],
    "severityCounts": {
      "critical": 0,
      "high": 0,
      "medium": 2,
      "low": 2
    },
    "interceptSummary": {
      "totalRequests": 122,
      "targetRequests": 120,
      "targetMethods": [
        "GET"
      ],
      "methodCounts": {
        "GET": 122
      },
      "nonGetToTargetAllowed": 0,
      "nonGetToTargetBlocked": 0,
      "audeepAuthoredThirdParty": 0,
      "observeOnlyPass": true,
      "renderedPages": 1,
      "followInternalLinks": false
    },
    "displayHost": "floov.co",
    "displayUrl": "floov.co",
    "metaTitle": "Grade B - floov.co",
    "metaDescription": "Tap target is too small on mobile - +3 other issues found. Observe-only audit by Audeep.",
    "shareText": "My site scored B on Audeep: Tap target is too small on mobile",
    "pageScreenshot": "/audit-artifacts/121054c5-a603-4389-ad59-135a5f95ed51/page.png"
  }
}