{
  "schema_version": "1.0.0",
  "scanner": {
    "name": "global-capability-catalog",
    "version": "0.1.0"
  },
  "repo": {
    "id": "github-recent__mbarbine__news-api",
    "name": "mbarbine__news-api",
    "path": "/Users/bwm.barbinewarnermichael/Documents/github/repositories/github-recent/mbarbine__news-api",
    "relative_path": "github-recent/mbarbine__news-api",
    "remote_url": "git@github.com:mbarbine/news-api.git",
    "default_branch": "main",
    "current_commit": "a01353a1b0eddda7101b5ed1b48d6c89ea9ccc25"
  },
  "languages": [
    {
      "language": "YAML",
      "files": 2,
      "bytes": 204530
    },
    {
      "language": "Svelte",
      "files": 50,
      "bytes": 109957
    },
    {
      "language": "TypeScript",
      "files": 22,
      "bytes": 36618
    },
    {
      "language": "JavaScript",
      "files": 21,
      "bytes": 33208
    },
    {
      "language": "CSS",
      "files": 7,
      "bytes": 15205
    },
    {
      "language": "HTML",
      "files": 3,
      "bytes": 10443
    },
    {
      "language": "JSON",
      "files": 4,
      "bytes": 3048
    },
    {
      "language": "Markdown",
      "files": 1,
      "bytes": 1028
    }
  ],
  "frameworks": [
    {
      "name": "Playwright",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Svelte",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Tailwind CSS",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Vite",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Vitest",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    }
  ],
  "packages": {
    "package_manager": "pnpm",
    "manifests": [
      {
        "path": "package.json",
        "name": "@platphorm/news",
        "version": "0.2.0",
        "scripts": {
          "dev": "vite dev",
          "build": "vite build",
          "preview": "vite preview",
          "test": "playwright test",
          "check": "svelte-check --tsconfig ./tsconfig.json",
          "lint": "prettier --check ."
        },
        "dependencies": {
          "@supabase/supabase-js": "^2.49.4",
          "@vercel/analytics": "^1.5.0",
          "cookie": "^1.0.2",
          "crypto": "^1.0.1",
          "dotenv": "^16.5.0",
          "f": "^1.4.0",
          "firebase": "^10.14.1",
          "navigation": "link:@sveltejs/kit/navigation",
          "newsapi": "^2.4.1",
          "sanitize-html": "^2.16.0",
          "svelte": "^5.27.1",
          "tailwindcss": "^3.4.17",
          "vite-imagetools": "^7.0.5",
          "vite-plugin-node-polyfills": "^0.22.0"
        },
        "dev_dependencies": {
          "@fullhuman/postcss-purgecss": "^4.1.3",
          "@neoconfetti/svelte": "^2.2.2",
          "@poppanator/sveltekit-svg": "^4.2.1",
          "@sveltejs/adapter-auto": "^2.1.1",
          "@sveltejs/adapter-vercel": "^5.7.0",
          "@sveltejs/kit": "^2.20.7",
          "@sveltejs/vite-plugin-svelte": "^5.0.3",
          "@tailwindcss/typography": "^0.5.16",
          "@tsconfig/svelte": "^5.0.4",
          "autoprefixer": "^10.4.21",
          "playwright": "^1.51.1",
          "postcss": "^8.5.3",
          "postcss-preset-env": "^7.8.3",
          "prettier": "^3.5.3",
          "prettier-plugin-svelte": "^3.3.3",
          "svelte-check": "^3.8.6",
          "svelte-preprocess": "^6.0.3",
          "typescript": "^5.8.3",
          "vite": "^6.3.1",
          "vitest": "^2.1.9"
        }
      }
    ]
  },
  "routes": {
    "api_routes": [
      {
        "route": "/api/getLatestNews",
        "source_path": "src/routes/api/getLatestNews/+server.ts",
        "kind": "sveltekit-server-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/api/getNewsDetails",
        "source_path": "src/routes/api/getNewsDetails/+server.ts",
        "kind": "sveltekit-server-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/api/hackernews/getAskStories",
        "source_path": "src/routes/api/hackernews/getAskStories/+server.ts",
        "kind": "sveltekit-server-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/api/hackernews/getBestStories",
        "source_path": "src/routes/api/hackernews/getBestStories/+server.ts",
        "kind": "sveltekit-server-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/api/hackernews/getJobStories",
        "source_path": "src/routes/api/hackernews/getJobStories/+server.ts",
        "kind": "sveltekit-server-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/api/hackernews/getShowStories",
        "source_path": "src/routes/api/hackernews/getShowStories/+server.ts",
        "kind": "sveltekit-server-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/api/hackernews/getTopStories",
        "source_path": "src/routes/api/hackernews/getTopStories/+server.ts",
        "kind": "sveltekit-server-route",
        "methods": [
          "UNKNOWN"
        ]
      }
    ],
    "app_routes": [
      {
        "route": "/ask",
        "source_path": "src/routes/ask/+page.svelte",
        "kind": "sveltekit-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/best",
        "source_path": "src/routes/best/+page.svelte",
        "kind": "sveltekit-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/jobs",
        "source_path": "src/routes/jobs/+page.svelte",
        "kind": "sveltekit-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/login",
        "source_path": "src/routes/login/+page.svelte",
        "kind": "sveltekit-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/show",
        "source_path": "src/routes/show/+page.svelte",
        "kind": "sveltekit-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/signup",
        "source_path": "src/routes/signup/+page.svelte",
        "kind": "sveltekit-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/top",
        "source_path": "src/routes/top/+page.svelte",
        "kind": "sveltekit-page",
        "methods": [
          "GET"
        ]
      }
    ]
  },
  "components": [
    {
      "name": "AskStories",
      "kind": "ui-component",
      "source_path": "src/components/AskStories.svelte"
    },
    {
      "name": "Auth",
      "kind": "ui-component",
      "source_path": "src/components/Auth.svelte"
    },
    {
      "name": "BestStories",
      "kind": "ui-component",
      "source_path": "src/components/BestStories.svelte"
    },
    {
      "name": "Footer",
      "kind": "ui-component",
      "source_path": "src/components/Footer.svelte"
    },
    {
      "name": "Header",
      "kind": "ui-component",
      "source_path": "src/components/Header.svelte"
    },
    {
      "name": "JobStories",
      "kind": "ui-component",
      "source_path": "src/components/JobStories.svelte"
    },
    {
      "name": "Layout",
      "kind": "ui-component",
      "source_path": "src/components/Layout.svelte"
    },
    {
      "name": "News",
      "kind": "ui-component",
      "source_path": "src/components/News.svelte"
    },
    {
      "name": "NewsComments",
      "kind": "ui-component",
      "source_path": "src/components/NewsComments.svelte"
    },
    {
      "name": "NewsHeader",
      "kind": "ui-component",
      "source_path": "src/components/NewsHeader.svelte"
    },
    {
      "name": "NewsMore",
      "kind": "ui-component",
      "source_path": "src/components/NewsMore.svelte"
    },
    {
      "name": "ShowStories",
      "kind": "ui-component",
      "source_path": "src/components/ShowStories.svelte"
    },
    {
      "name": "Story",
      "kind": "ui-component",
      "source_path": "src/components/Story.svelte"
    },
    {
      "name": "TopStories",
      "kind": "ui-component",
      "source_path": "src/components/TopStories.svelte"
    }
  ],
  "data_models": [],
  "database": {
    "databases": [],
    "schemas": [],
    "migrations": []
  },
  "tests": [],
  "ci": {
    "workflows": []
  },
  "containers": {
    "dockerfiles": [],
    "compose_files": []
  },
  "env": {
    "example_files": [],
    "variables": [
      {
        "name": "HACKER_NEWS_API_URL",
        "source_paths": [
          "src/routes/api/getLatestNews/+server.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "NEWS_API_KEY",
        "source_paths": [
          "src/routes/api/getLatestNews/+server.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "NEWS_API_URL",
        "source_paths": [
          "src/routes/api/getLatestNews/+server.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "VERCEL_ANALYTICS_ID",
        "source_paths": [
          "vite.config.js"
        ],
        "likely_secret": false
      }
    ]
  },
  "configs": [
    {
      "path": "jsconfig.json"
    },
    {
      "path": "package.json"
    },
    {
      "path": "pnpm-workspace.yaml"
    },
    {
      "path": "src/vercel.json"
    },
    {
      "path": "svelte.config.js"
    },
    {
      "path": "tsconfig.json"
    },
    {
      "path": "vite.config.js"
    }
  ],
  "docs": {
    "readme_paths": [
      {
        "path": "README.md"
      }
    ],
    "doc_paths": [],
    "llms_context_paths": []
  },
  "discovery_files": {
    "openapi": [],
    "mcp": [],
    "llms": [],
    "sitemaps": [],
    "feeds": [],
    "well_known": [],
    "robots": [
      {
        "path": "src/static/robots.txt"
      },
      {
        "path": "static/robots.txt"
      }
    ],
    "manifests": []
  },
  "integrations": [
    {
      "name": "Supabase",
      "confidence": "medium",
      "evidence_paths": [
        "package.json",
        "pnpm-lock.yaml"
      ]
    },
    {
      "name": "Vercel",
      "confidence": "medium",
      "evidence_paths": [
        "package.json",
        "pnpm-lock.yaml",
        "src/+layout.svelte",
        "src/app.svelte",
        "src/news.svelte",
        "src/routes/+layout.svelte",
        "src/routes/app.svelte",
        "src/routes/news.svelte",
        "svelte.config.js",
        "vite.config.js"
      ]
    }
  ],
  "license": {
    "spdx": null,
    "paths": []
  },
  "comments": [
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 1608,
      "text": "deprecated: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in."
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 1903,
      "text": "deprecated: Glob versions prior to v9 are no longer supported"
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 1965,
      "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": 2625,
      "text": "deprecated: Rimraf versions prior to v4 are no longer supported"
    },
    {
      "kind": "todo",
      "source_path": "src/lib/header/Header.svelte",
      "line": 32,
      "text": "<!-- TODO put something else here? github link? -->"
    }
  ],
  "security": {
    "secret_risks": [],
    "unsafe_patterns": [
      {
        "name": "ssrf-review-needed",
        "confidence": "medium",
        "evidence_paths": [
          "src/routes/api/getLatestNews/+server.ts",
          "src/routes/api/getNewsDetails/+server.ts",
          "src/utils/utils.ts"
        ]
      }
    ],
    "sensitive_data_indicators": [
      {
        "name": "api_key",
        "confidence": "medium",
        "evidence_paths": [
          "src/routes/api/getLatestNews/+server.ts",
          "src/routes/api/getNewsDetails/+server.ts"
        ]
      },
      {
        "name": "card",
        "confidence": "medium",
        "evidence_paths": [
          "src/+layout.svelte",
          "src/app.html",
          "src/constants.js",
          "src/index.html",
          "src/news.html",
          "src/routes/+layout.svelte",
          "src/routes/api/hackernews/constants.ts"
        ]
      },
      {
        "name": "email",
        "confidence": "medium",
        "evidence_paths": [
          "src/app.html",
          "src/constants.js",
          "src/index.html",
          "src/news.html",
          "src/routes/api/hackernews/constants.ts"
        ]
      },
      {
        "name": "location",
        "confidence": "medium",
        "evidence_paths": [
          "src/components/Header.svelte",
          "src/components/Layout.svelte",
          "src/lib/vitals.js"
        ]
      },
      {
        "name": "password",
        "confidence": "medium",
        "evidence_paths": [
          "src/components/Auth.svelte",
          "src/login.svelte",
          "src/routes/api/auth/login.js",
          "src/routes/api/auth/signup.js",
          "src/routes/api/auth/signup.svelte",
          "src/routes/login.svelte",
          "src/routes/login/+page.svelte",
          "src/routes/signup.svelte",
          "src/routes/signup/+page.svelte",
          "src/signup.svelte"
        ]
      },
      {
        "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": [
          "src/lib/form.js"
        ]
      }
    ]
  },
  "generated_at": "2026-05-16T16:44:11.173Z"
}
