{
  "schema_version": "1.0.0",
  "scanner": {
    "name": "global-capability-catalog",
    "version": "0.1.0"
  },
  "repo": {
    "id": "github-recent__mbarbine__ja4-vercel-lab-2",
    "name": "mbarbine__ja4-vercel-lab-2",
    "path": "/Users/bwm.barbinewarnermichael/Documents/github/repositories/github-recent/mbarbine__ja4-vercel-lab-2",
    "relative_path": "github-recent/mbarbine__ja4-vercel-lab-2",
    "remote_url": "git@github.com:mbarbine/ja4-vercel-lab-2.git",
    "default_branch": "main",
    "current_commit": "0a7e80b7428895ace35d3217032e42d5a75d42dd"
  },
  "languages": [
    {
      "language": "YAML",
      "files": 1,
      "bytes": 186713
    },
    {
      "language": "TypeScript",
      "files": 10,
      "bytes": 22507
    },
    {
      "language": "JavaScript",
      "files": 9,
      "bytes": 13111
    },
    {
      "language": "TOML",
      "files": 1,
      "bytes": 10161
    },
    {
      "language": "SQL",
      "files": 3,
      "bytes": 8878
    },
    {
      "language": "Markdown",
      "files": 4,
      "bytes": 6968
    },
    {
      "language": "Shell",
      "files": 2,
      "bytes": 3515
    },
    {
      "language": "CSS",
      "files": 1,
      "bytes": 2792
    },
    {
      "language": "JSON",
      "files": 4,
      "bytes": 2322
    }
  ],
  "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"
      ]
    }
  ],
  "packages": {
    "package_manager": "pnpm",
    "manifests": [
      {
        "path": "package.json",
        "name": "nextjs",
        "version": "0.1.0",
        "scripts": {
          "dev": "next dev --turbopack",
          "build": "next build",
          "start": "next start",
          "lint": "next lint"
        },
        "dependencies": {
          "@emotion/react": "^11.14.0",
          "@emotion/styled": "^11.14.0",
          "@material-ui/core": "^4.12.4",
          "@mui/material": "^6.4.4",
          "@supabase/supabase-js": "^2.48.1",
          "@types/recharts": "^1.8.29",
          "@vercel/analytics": "^1.5.0",
          "@vercel/sdk": "^1.3.1",
          "Button": "link:@/components/ui/Button",
          "card": "link:@components/ui/card",
          "card\n\n": "link:@/components/ui/card\n\n",
          "duckdb": "^1.2.0",
          "install": "^0.13.0",
          "next": "15.1.11",
          "node-fetch": "^3.3.2",
          "react": "^19.0.0",
          "react-dom": "^19.0.0",
          "react-hot-toast": "^2.5.2",
          "recharts": "^2.15.1"
        },
        "dev_dependencies": {
          "@eslint/eslintrc": "^3",
          "@types/node": "^20",
          "@types/react": "^19",
          "@types/react-dom": "^19",
          "eslint": "^9",
          "eslint-config-next": "15.1.6",
          "postcss": "^8",
          "tailwindcss": "^3.4.1",
          "typescript": "^5"
        }
      }
    ]
  },
  "routes": {
    "api_routes": [],
    "app_routes": [
      {
        "route": "/test-get",
        "source_path": "app/test-get/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      }
    ]
  },
  "components": [
    {
      "name": "Dashboard",
      "kind": "ui-component",
      "source_path": "app/components/Dashboard.tsx"
    },
    {
      "name": "ToasterProvider",
      "kind": "ui-component",
      "source_path": "app/components/ToasterProvider.tsx"
    },
    {
      "name": "VercelDashboard",
      "kind": "ui-component",
      "source_path": "app/components/VercelDashboard.tsx"
    }
  ],
  "data_models": [
    {
      "name": "20250217202548_remote_schema",
      "kind": "migration",
      "source_path": "supabase/migrations/20250217202548_remote_schema.sql"
    },
    {
      "name": "20250217202726_remote_schema",
      "kind": "migration",
      "source_path": "supabase/migrations/20250217202726_remote_schema.sql"
    },
    {
      "name": "20250217204148_remote_schema",
      "kind": "migration",
      "source_path": "supabase/migrations/20250217204148_remote_schema.sql"
    }
  ],
  "database": {
    "databases": [],
    "schemas": [
      {
        "path": "supabase/migrations/20250217202548_remote_schema.sql"
      },
      {
        "path": "supabase/migrations/20250217202726_remote_schema.sql"
      },
      {
        "path": "supabase/migrations/20250217204148_remote_schema.sql"
      }
    ],
    "migrations": [
      {
        "path": "supabase/migrations/20250217202548_remote_schema.sql"
      },
      {
        "path": "supabase/migrations/20250217202726_remote_schema.sql"
      },
      {
        "path": "supabase/migrations/20250217204148_remote_schema.sql"
      }
    ]
  },
  "tests": [
    {
      "name": "page.tsx",
      "kind": "unit-or-integration",
      "source_path": "app/test-get/page.tsx"
    }
  ],
  "ci": {
    "workflows": []
  },
  "containers": {
    "dockerfiles": [],
    "compose_files": []
  },
  "env": {
    "example_files": [],
    "variables": [
      {
        "name": "API_SECRET_KEY",
        "source_paths": [
          "app/pages/api/cron.ts",
          "app/pages/api/update-status.js"
        ],
        "likely_secret": true
      },
      {
        "name": "NEXT_PUBLIC_SUPABASE_ANON_KEY",
        "source_paths": [
          "app/components/Dashboard.tsx",
          "app/lib/supabase.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "NEXT_PUBLIC_SUPABASE_URL",
        "source_paths": [
          "app/components/Dashboard.tsx",
          "app/lib/supabase.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "NEXT_PUBLIC_VERCEL_FIREWALL_API",
        "source_paths": [
          "app/components/VercelDashboard.tsx"
        ],
        "likely_secret": false
      },
      {
        "name": "SUPABASE_ANON_KEY",
        "source_paths": [
          "app/middleware/middleware.js",
          "app/pages/api/logs.js",
          "app/pages/api/poll-vercel.js",
          "app/pages/api/stats.js",
          "app/pages/api/update-status.js"
        ],
        "likely_secret": true
      },
      {
        "name": "SUPABASE_URL",
        "source_paths": [
          "app/middleware/middleware.js",
          "app/pages/api/logs.js",
          "app/pages/api/poll-vercel.js",
          "app/pages/api/stats.js",
          "app/pages/api/update-status.js"
        ],
        "likely_secret": false
      },
      {
        "name": "VERCEL_API_TOKEN",
        "source_paths": [
          "app/middleware/middleware.js",
          "app/pages/api/cron.ts",
          "app/pages/api/poll-vercel.js",
          "app/test-get/page.tsx",
          "scripts/verify-vercel.js"
        ],
        "likely_secret": true
      },
      {
        "name": "VERCEL_FIREWALL_API",
        "source_paths": [
          "app/pages/api/cron.ts",
          "app/pages/api/poll-vercel.js",
          "app/test-get/page.tsx",
          "scripts/verify-vercel.js"
        ],
        "likely_secret": false
      },
      {
        "name": "VERCEL_FIREWALL_CONFIG_API",
        "source_paths": [
          "app/middleware/middleware.js",
          "app/pages/api/poll-vercel.js"
        ],
        "likely_secret": false
      },
      {
        "name": "VERCEL_PROJECT_ID",
        "source_paths": [
          "app/pages/api/cron.ts",
          "app/pages/api/poll-vercel.js",
          "app/test-get/page.tsx"
        ],
        "likely_secret": false
      }
    ]
  },
  "configs": [
    {
      "path": "eslint.config.mjs"
    },
    {
      "path": "next.config.ts"
    },
    {
      "path": "package.json"
    },
    {
      "path": "postcss.config.mjs"
    },
    {
      "path": "public/vercel.svg"
    },
    {
      "path": "tailwind.config.ts"
    },
    {
      "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": "Supabase",
      "confidence": "medium",
      "evidence_paths": [
        ".jules/bolt.md",
        "app/components/Dashboard.tsx",
        "app/lib/supabase.ts",
        "app/middleware/middleware.js",
        "app/pages/api/logs.js",
        "app/pages/api/poll-vercel.js",
        "app/pages/api/stats.js",
        "app/pages/api/update-status.js",
        "package.json",
        "scripts/setup-supabase.sh"
      ]
    },
    {
      "name": "Vercel",
      "confidence": "medium",
      "evidence_paths": [
        "app/components/VercelDashboard.tsx",
        "app/layout.tsx",
        "app/middleware/middleware.js",
        "app/pages/api/cron.ts",
        "app/pages/api/poll-vercel.js",
        "app/test-get/page.tsx",
        "package.json",
        "pnpm-lock.yaml",
        "scripts/verify-vercel.js"
      ]
    }
  ],
  "license": {
    "spdx": null,
    "paths": []
  },
  "comments": [
    {
      "kind": "security",
      "source_path": ".jules/sentinel.md",
      "line": 4,
      "text": "**Prevention:** Ensure all sensitive API endpoints, especially those modifying application state or security configurations, validate an `Authorization` header against a secure `API_SECRET_KEY` or implement robust role-based access control."
    },
    {
      "kind": "unsafe",
      "source_path": ".vscode/settings.json",
      "line": 10,
      "text": "\"unsafe-proto\","
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 408,
      "text": "deprecated: Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5."
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 420,
      "text": "deprecated: Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5."
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 612,
      "text": "deprecated: This functionality has been moved to @npmcli/fs"
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 875,
      "text": "deprecated: This package is no longer supported."
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 1478,
      "text": "deprecated: This package is no longer supported."
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 1509,
      "text": "deprecated: Glob versions prior to v9 are no longer supported"
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 1514,
      "text": "deprecated: Glob versions prior to v9 are no longer supported"
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 1622,
      "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": 2005,
      "text": "deprecated: Use your platform's native DOMException instead"
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 2042,
      "text": "deprecated: This package is no longer supported."
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 2329,
      "text": "deprecated: Rimraf versions prior to v4 are no longer supported"
    },
    {
      "kind": "security",
      "source_path": "README.md",
      "line": 2,
      "text": "# Start here - https://vercel.com/docs/rest-api/sdk/reference#tag/security/read-system-bypass"
    },
    {
      "kind": "security",
      "source_path": "scripts/setup-supabase.sh",
      "line": 74,
      "text": "ALTER TABLE ja4_fingerprints ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/setup-supabase.sh",
      "line": 75,
      "text": "ALTER TABLE ja4_logs ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "deprecated",
      "source_path": "supabase/config.toml",
      "line": 267,
      "text": "# Experimental features may be deprecated any time"
    },
    {
      "kind": "security",
      "source_path": "supabase/migrations/20250217202726_remote_schema.sql",
      "line": 11,
      "text": "alter table \"public\".\"ja4_fingerprints\" enable row level security;"
    },
    {
      "kind": "security",
      "source_path": "supabase/migrations/20250217204148_remote_schema.sql",
      "line": 64,
      "text": "alter table \"public\".\"ja4_fingerprints\" disable row level security;"
    }
  ],
  "security": {
    "secret_risks": [],
    "unsafe_patterns": [],
    "sensitive_data_indicators": [
      {
        "name": "api_key",
        "confidence": "medium",
        "evidence_paths": [
          "supabase/config.toml"
        ]
      },
      {
        "name": "card",
        "confidence": "medium",
        "evidence_paths": [
          "app/components/Dashboard.tsx",
          "app/components/VercelDashboard.tsx",
          "app/globals.css",
          "package.json",
          "pnpm-lock.yaml"
        ]
      },
      {
        "name": "email",
        "confidence": "medium",
        "evidence_paths": [
          "supabase/config.toml"
        ]
      },
      {
        "name": "fingerprint",
        "confidence": "medium",
        "evidence_paths": [
          ".jules/bolt.md",
          ".jules/sentinel.md",
          "app/components/Dashboard.tsx",
          "app/components/VercelDashboard.tsx",
          "app/layout.tsx",
          "app/middleware/middleware.js",
          "app/page.tsx",
          "app/pages/api/cron.ts",
          "app/pages/api/logs.js",
          "app/pages/api/poll-vercel.js",
          "app/pages/api/stats.js",
          "app/pages/api/update-status.js",
          "scripts/setup-supabase.sh",
          "supabase/migrations/20250217202726_remote_schema.sql",
          "supabase/migrations/20250217204148_remote_schema.sql"
        ]
      },
      {
        "name": "oauth",
        "confidence": "medium",
        "evidence_paths": [
          "supabase/config.toml"
        ]
      },
      {
        "name": "password",
        "confidence": "medium",
        "evidence_paths": [
          "supabase/config.toml"
        ]
      },
      {
        "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": [
          "app/middleware/middleware.js",
          "app/pages/api/cron.ts",
          "app/pages/api/poll-vercel.js",
          "app/pages/api/update-status.js",
          "app/test-get/page.tsx",
          "pnpm-lock.yaml",
          "scripts/verify-vercel.js",
          "supabase/config.toml"
        ]
      }
    ]
  },
  "generated_at": "2026-05-16T16:44:09.269Z"
}
