{
  "schema_version": "1.0.0",
  "scanner": {
    "name": "global-capability-catalog",
    "version": "0.1.0"
  },
  "repo": {
    "id": "github-recent__mbarbine__nuclear-power-plant-webby-npaas",
    "name": "mbarbine__nuclear-power-plant-webby-NPaaS",
    "path": "/Users/bwm.barbinewarnermichael/Documents/github/repositories/github-recent/mbarbine__nuclear-power-plant-webby-NPaaS",
    "relative_path": "github-recent/mbarbine__nuclear-power-plant-webby-NPaaS",
    "remote_url": "git@github.com:mbarbine/nuclear-power-plant-webby-NPaaS.git",
    "default_branch": "main",
    "current_commit": "0e6d30fda3879c2d4f729d6bffbbeaea598ab8f1"
  },
  "languages": [
    {
      "language": "YAML",
      "files": 2,
      "bytes": 280160
    },
    {
      "language": "TypeScript",
      "files": 49,
      "bytes": 221658
    },
    {
      "language": "CSS",
      "files": 2,
      "bytes": 11794
    },
    {
      "language": "Markdown",
      "files": 5,
      "bytes": 10861
    },
    {
      "language": "JSON",
      "files": 4,
      "bytes": 3603
    },
    {
      "language": "JavaScript",
      "files": 2,
      "bytes": 1762
    }
  ],
  "frameworks": [
    {
      "name": "Next.js",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "React",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Tailwind CSS",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Vitest",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    }
  ],
  "packages": {
    "package_manager": "pnpm",
    "manifests": [
      {
        "path": "package.json",
        "name": "my-v0-project",
        "version": "0.1.0",
        "scripts": {
          "build": "next build",
          "dev": "next dev",
          "lint": "next lint",
          "start": "next start",
          "test": "vitest run"
        },
        "dependencies": {
          "@hookform/resolvers": "^3.10.0",
          "@radix-ui/react-accordion": "latest",
          "@radix-ui/react-alert-dialog": "1.1.4",
          "@radix-ui/react-aspect-ratio": "1.1.1",
          "@radix-ui/react-avatar": "1.1.2",
          "@radix-ui/react-checkbox": "latest",
          "@radix-ui/react-collapsible": "1.1.2",
          "@radix-ui/react-context-menu": "2.2.4",
          "@radix-ui/react-dialog": "latest",
          "@radix-ui/react-dropdown-menu": "2.1.4",
          "@radix-ui/react-hover-card": "1.1.4",
          "@radix-ui/react-label": "latest",
          "@radix-ui/react-menubar": "1.1.4",
          "@radix-ui/react-navigation-menu": "1.2.3",
          "@radix-ui/react-popover": "1.1.4",
          "@radix-ui/react-progress": "latest",
          "@radix-ui/react-radio-group": "1.2.2",
          "@radix-ui/react-scroll-area": "1.2.2",
          "@radix-ui/react-select": "latest",
          "@radix-ui/react-separator": "1.1.1",
          "@radix-ui/react-slider": "1.2.2",
          "@radix-ui/react-slot": "latest",
          "@radix-ui/react-switch": "1.1.2",
          "@radix-ui/react-tabs": "latest",
          "@radix-ui/react-toast": "1.2.4",
          "@radix-ui/react-toggle": "1.1.1",
          "@radix-ui/react-toggle-group": "1.1.1",
          "@radix-ui/react-tooltip": "1.1.6",
          "@vercel/analytics": "latest",
          "autoprefixer": "^10.4.23",
          "class-variance-authority": "^0.7.1",
          "clsx": "^2.1.1",
          "cmdk": "1.0.4",
          "date-fns": "4.1.0",
          "embla-carousel-react": "8.5.1",
          "geist": "latest",
          "input-otp": "1.4.1",
          "lucide-react": "^0.454.0",
          "next": "14.2.35",
          "next-themes": "latest",
          "react": "^18.3.1",
          "react-day-picker": "9.8.0",
          "react-dom": "^18.3.1",
          "react-hook-form": "^7.70.0",
          "react-resizable-panels": "^2.1.9",
          "recharts": "2.15.4",
          "sonner": "^1.7.4",
          "tailwind-merge": "^2.6.0",
          "tailwindcss-animate": "^1.0.7",
          "vaul": "^0.9.9",
          "zod": "3.25.67"
        },
        "dev_dependencies": {
          "@tailwindcss/postcss": "^4.1.18",
          "@testing-library/react": "^16.3.2",
          "@types/node": "^22.19.3",
          "@types/react": "^18.3.27",
          "@types/react-dom": "^18.3.7",
          "@vitejs/plugin-react": "^6.0.1",
          "eslint": "^8.57.1",
          "eslint-config-next": "^14.2.35",
          "jsdom": "^29.0.1",
          "postcss": "^8.5.6",
          "tailwindcss": "^4.1.18",
          "tw-animate-css": "1.3.3",
          "typescript": "^5.9.3",
          "vitest": "^4.1.1"
        }
      }
    ]
  },
  "routes": {
    "api_routes": [
      {
        "route": "/fingerprint/collect",
        "source_path": "app/api/fingerprint/collect/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/fingerprint/label",
        "source_path": "app/api/fingerprint/label/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/health",
        "source_path": "app/api/health/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/ja4/test",
        "source_path": "app/api/ja4/test/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      }
    ],
    "app_routes": [
      {
        "route": "/contact",
        "source_path": "app/contact/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/faq",
        "source_path": "app/faq/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/jobs",
        "source_path": "app/jobs/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/resources",
        "source_path": "app/resources/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/roadmap",
        "source_path": "app/roadmap/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/safety",
        "source_path": "app/safety/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/services/compliance",
        "source_path": "app/services/compliance/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/services/energy-generation",
        "source_path": "app/services/energy-generation/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/services/maintenance",
        "source_path": "app/services/maintenance/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/services",
        "source_path": "app/services/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/services/safety-protocols",
        "source_path": "app/services/safety-protocols/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      }
    ]
  },
  "components": [
    {
      "name": "breadcrumbs",
      "kind": "ui-component",
      "source_path": "components/breadcrumbs.tsx"
    },
    {
      "name": "fingerprint-collector",
      "kind": "ui-component",
      "source_path": "components/fingerprint-collector.tsx"
    },
    {
      "name": "footer",
      "kind": "ui-component",
      "source_path": "components/footer.tsx"
    },
    {
      "name": "navigation",
      "kind": "ui-component",
      "source_path": "components/navigation.tsx"
    },
    {
      "name": "network-registration",
      "kind": "ui-component",
      "source_path": "components/network-registration.tsx"
    },
    {
      "name": "ph3ar-modal-ui",
      "kind": "ui-component",
      "source_path": "components/ph3ar-modal-ui.tsx"
    },
    {
      "name": "ph3ar-modal",
      "kind": "ui-component",
      "source_path": "components/ph3ar-modal.tsx"
    },
    {
      "name": "schema-markup",
      "kind": "ui-component",
      "source_path": "components/schema-markup.tsx"
    },
    {
      "name": "theme-provider",
      "kind": "ui-component",
      "source_path": "components/theme-provider.tsx"
    },
    {
      "name": "accordion",
      "kind": "ui-component",
      "source_path": "components/ui/accordion.tsx"
    },
    {
      "name": "badge",
      "kind": "ui-component",
      "source_path": "components/ui/badge.tsx"
    },
    {
      "name": "button",
      "kind": "ui-component",
      "source_path": "components/ui/button.tsx"
    },
    {
      "name": "card",
      "kind": "ui-component",
      "source_path": "components/ui/card.tsx"
    },
    {
      "name": "checkbox",
      "kind": "ui-component",
      "source_path": "components/ui/checkbox.tsx"
    },
    {
      "name": "dialog",
      "kind": "ui-component",
      "source_path": "components/ui/dialog.tsx"
    },
    {
      "name": "input",
      "kind": "ui-component",
      "source_path": "components/ui/input.tsx"
    },
    {
      "name": "label",
      "kind": "ui-component",
      "source_path": "components/ui/label.tsx"
    },
    {
      "name": "progress",
      "kind": "ui-component",
      "source_path": "components/ui/progress.tsx"
    },
    {
      "name": "select",
      "kind": "ui-component",
      "source_path": "components/ui/select.tsx"
    },
    {
      "name": "sheet",
      "kind": "ui-component",
      "source_path": "components/ui/sheet.tsx"
    },
    {
      "name": "tabs",
      "kind": "ui-component",
      "source_path": "components/ui/tabs.tsx"
    },
    {
      "name": "textarea",
      "kind": "ui-component",
      "source_path": "components/ui/textarea.tsx"
    }
  ],
  "data_models": [],
  "database": {
    "databases": [],
    "schemas": [],
    "migrations": []
  },
  "tests": [
    {
      "name": "health.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/health.test.ts"
    },
    {
      "name": "route.ts",
      "kind": "unit-or-integration",
      "source_path": "app/api/ja4/test/route.ts"
    }
  ],
  "ci": {
    "workflows": []
  },
  "containers": {
    "dockerfiles": [],
    "compose_files": []
  },
  "env": {
    "example_files": [],
    "variables": [
      {
        "name": "ADMIN_API_KEY",
        "source_paths": [
          "app/api/fingerprint/label/route.ts",
          "app/api/ja4/test/route.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "JA4DB_DEBUG",
        "source_paths": [
          "middleware.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "JA4DB_ENV",
        "source_paths": [
          "app/api/fingerprint/collect/route.ts",
          "lib/ja4-atlas.ts",
          "middleware.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "JA4DB_INGEST_TOKEN",
        "source_paths": [
          "lib/ja4-atlas.ts",
          "middleware.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "JA4DB_INGEST_URL",
        "source_paths": [
          "lib/ja4-atlas.ts",
          "middleware.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "JA4DB_SAMPLE_RATE",
        "source_paths": [
          "lib/ja4-atlas.ts",
          "middleware.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "JA4DB_SENSOR_NAME",
        "source_paths": [
          "app/api/fingerprint/collect/route.ts",
          "lib/ja4-atlas.ts",
          "middleware.ts"
        ],
        "likely_secret": false
      }
    ]
  },
  "configs": [
    {
      "path": "next.config.mjs"
    },
    {
      "path": "package.json"
    },
    {
      "path": "pnpm-workspace.yaml"
    },
    {
      "path": "postcss.config.mjs"
    },
    {
      "path": "tsconfig.json"
    }
  ],
  "docs": {
    "readme_paths": [
      {
        "path": "README.md"
      }
    ],
    "doc_paths": [],
    "llms_context_paths": []
  },
  "discovery_files": {
    "openapi": [],
    "mcp": [],
    "llms": [],
    "sitemaps": [],
    "feeds": [],
    "well_known": [],
    "robots": [],
    "manifests": []
  },
  "integrations": [
    {
      "name": "Vercel",
      "confidence": "medium",
      "evidence_paths": [
        "app/layout.tsx",
        "package.json",
        "pnpm-lock.yaml"
      ]
    }
  ],
  "license": {
    "spdx": null,
    "paths": []
  },
  "comments": [
    {
      "kind": "security",
      "source_path": ".jules/sentinel.md",
      "line": 9,
      "text": "**Prevention:** Treat test and debug endpoints with the same security rigor as production modification endpoints. Ensure authentication and authorization checks (like `ADMIN_API_KEY`) are present to restrict access to trusted administrators"
    },
    {
      "kind": "security",
      "source_path": ".jules/sentinel.md",
      "line": 11,
      "text": "## 2024-05-18 - [Missing Global Security Headers]"
    },
    {
      "kind": "security",
      "source_path": ".jules/sentinel.md",
      "line": 12,
      "text": "**Vulnerability:** Found that the application lacked foundational security headers, making it vulnerable to MIME sniffing, clickjacking, and connection downgrade attacks."
    },
    {
      "kind": "security",
      "source_path": ".jules/sentinel.md",
      "line": 13,
      "text": "**Learning:** Modern web frameworks often require manual configuration to add global security headers. Without them, even standard web traffic is exposed to fundamental browser-based attacks."
    },
    {
      "kind": "security",
      "source_path": ".jules/sentinel.md",
      "line": 14,
      "text": "**Prevention:** Implement `X-Content-Type-Options`, `X-Frame-Options`, `Strict-Transport-Security`, `Referrer-Policy`, and `X-XSS-Protection` via standard middleware or framework configuration globally across all routes."
    },
    {
      "kind": "security",
      "source_path": "app/faq/page.tsx",
      "line": 34,
      "text": "a: \"Standard NPaaS contracts range from 10 to 30 years, providing long-term energy price stability and security. We offer flexible terms tailored to your specific needs and can structure agreements to align with your business objectives.\","
    },
    {
      "kind": "security",
      "source_path": "app/faq/page.tsx",
      "line": 41,
      "text": "title: \"Safety & Security\","
    },
    {
      "kind": "security",
      "source_path": "app/faq/page.tsx",
      "line": 56,
      "text": "q: \"What security measures are in place?\","
    },
    {
      "kind": "security",
      "source_path": "app/faq/page.tsx",
      "line": 57,
      "text": "a: \"Security is multi-layered including physical barriers, armed security personnel, advanced surveillance systems, cyber security measures, and strict access controls. All security programs meet or exceed NRC requirements and are regularly"
    },
    {
      "kind": "security",
      "source_path": "app/faq/page.tsx",
      "line": 149,
      "text": "a: \"Yes. We encourage client visits and provide regular tours for stakeholders. All visitors must complete security screening and safety training. We also offer virtual monitoring capabilities so you can track performance in real-time from "
    },
    {
      "kind": "security",
      "source_path": "app/services/compliance/page.tsx",
      "line": 77,
      "text": "title: \"Security Compliance\","
    },
    {
      "kind": "security",
      "source_path": "app/services/compliance/page.tsx",
      "line": 79,
      "text": "\"Physical security programs\","
    },
    {
      "kind": "security",
      "source_path": "app/services/compliance/page.tsx",
      "line": 80,
      "text": "\"Cyber security measures\","
    },
    {
      "kind": "security",
      "source_path": "app/services/compliance/page.tsx",
      "line": 82,
      "text": "\"Security event reporting\","
    },
    {
      "kind": "security",
      "source_path": "JA4-ATLAS.md",
      "line": 160,
      "text": "## Security"
    },
    {
      "kind": "security",
      "source_path": "next.config.mjs",
      "line": 21,
      "text": "{ key: \"Strict-Transport-Security\", value: \"max-age=31536000; includeSubDomains; preload\" }"
    },
    {
      "kind": "security",
      "source_path": "next.config.mjs",
      "line": 26,
      "text": "{ key: \"Strict-Transport-Security\", value: \"max-age=31536000; includeSubDomains; preload\" },"
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 339,
      "text": "deprecated: Use @eslint/config-array instead"
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 347,
      "text": "deprecated: Use @eslint/object-schema instead"
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 2416,
      "text": "deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options."
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 2553,
      "text": "deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by cont"
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 2558,
      "text": "deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by cont"
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 2627,
      "text": "deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful."
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 3324,
      "text": "deprecated: Rimraf versions prior to v4 are no longer supported"
    }
  ],
  "security": {
    "secret_risks": [],
    "unsafe_patterns": [
      {
        "name": "dangerously-set-html",
        "confidence": "medium",
        "evidence_paths": [
          "components/schema-markup.tsx"
        ]
      }
    ],
    "sensitive_data_indicators": [
      {
        "name": "api_key",
        "confidence": "medium",
        "evidence_paths": [
          ".jules/sentinel.md",
          "app/api/fingerprint/label/route.ts",
          "app/api/ja4/test/route.ts"
        ]
      },
      {
        "name": "card",
        "confidence": "medium",
        "evidence_paths": [
          ".jules/palette.md",
          "app/contact/page.tsx",
          "app/faq/page.tsx",
          "app/globals.css",
          "app/jobs/page.tsx",
          "app/layout.tsx",
          "app/page.tsx",
          "app/resources/page.tsx",
          "app/roadmap/page.tsx",
          "app/safety/page.tsx",
          "app/services/compliance/page.tsx",
          "app/services/energy-generation/page.tsx",
          "app/services/maintenance/page.tsx",
          "app/services/page.tsx",
          "app/services/safety-protocols/page.tsx",
          "components/ui/card.tsx",
          "package.json",
          "pnpm-lock.yaml",
          "styles/globals.css"
        ]
      },
      {
        "name": "email",
        "confidence": "medium",
        "evidence_paths": [
          "app/contact/page.tsx",
          "app/resources/page.tsx",
          "components/schema-markup.tsx",
          "JA4-ATLAS.md"
        ]
      },
      {
        "name": "fingerprint",
        "confidence": "medium",
        "evidence_paths": [
          ".jules/bolt.md",
          ".jules/sentinel.md",
          "app/api/fingerprint/collect/route.ts",
          "app/api/fingerprint/label/route.ts",
          "components/fingerprint-collector.tsx",
          "JA4-ATLAS.md",
          "lib/fingerprint/client-collector.ts",
          "lib/fingerprint/correlator.ts",
          "lib/ja4-atlas.ts",
          "lib/types/ja4.ts",
          "middleware.ts"
        ]
      },
      {
        "name": "health",
        "confidence": "medium",
        "evidence_paths": [
          "__tests__/health.test.ts"
        ]
      },
      {
        "name": "location",
        "confidence": "medium",
        "evidence_paths": [
          "app/contact/page.tsx",
          "app/jobs/page.tsx"
        ]
      },
      {
        "name": "pii",
        "confidence": "medium",
        "evidence_paths": [
          "pnpm-lock.yaml"
        ]
      },
      {
        "name": "secret-like environment variables",
        "confidence": "medium",
        "evidence_paths": [
          "package.json"
        ]
      },
      {
        "name": "token",
        "confidence": "medium",
        "evidence_paths": [
          "JA4-ATLAS.md",
          "lib/ja4-atlas.ts",
          "middleware.ts",
          "next.config.mjs",
          "pnpm-lock.yaml"
        ]
      }
    ]
  },
  "generated_at": "2026-05-16T16:44:11.536Z"
}
