{
  "schema_version": "1.0.0",
  "scanner": {
    "name": "global-capability-catalog",
    "version": "0.1.0"
  },
  "repo": {
    "id": "github-recent__mbarbine__legacy-platphorm-news",
    "name": "mbarbine__legacy-platphorm-news",
    "path": "/Users/bwm.barbinewarnermichael/Documents/github/repositories/github-recent/mbarbine__legacy-platphorm-news",
    "relative_path": "github-recent/mbarbine__legacy-platphorm-news",
    "remote_url": "git@github.com:mbarbine/legacy-platphorm-news.git",
    "default_branch": "main",
    "current_commit": "4d81e9e93ceb62dc26af3829da8d782aad0a2734"
  },
  "languages": [
    {
      "language": "Svelte",
      "files": 44,
      "bytes": 156978
    },
    {
      "language": "TypeScript",
      "files": 27,
      "bytes": 81021
    },
    {
      "language": "JavaScript",
      "files": 23,
      "bytes": 56301
    },
    {
      "language": "CSS",
      "files": 4,
      "bytes": 15143
    },
    {
      "language": "HTML",
      "files": 3,
      "bytes": 11525
    },
    {
      "language": "JSON",
      "files": 5,
      "bytes": 5455
    },
    {
      "language": "YAML",
      "files": 6,
      "bytes": 4479
    },
    {
      "language": "Markdown",
      "files": 2,
      "bytes": 1947
    },
    {
      "language": "Dockerfile",
      "files": 1,
      "bytes": 1023
    },
    {
      "language": "Shell",
      "files": 1,
      "bytes": 203
    }
  ],
  "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": "npm",
    "manifests": [
      {
        "path": "package.json",
        "name": "@platphorm/news",
        "version": "0.2.0",
        "scripts": {
          "dev": "vite dev",
          "build": "vite build",
          "preview": "vite preview",
          "test": "playwright test",
          "test:unit": "vitest run",
          "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",
          "dotenv": "^16.5.0",
          "firebase": "^10.14.1",
          "newsapi": "^2.4.1",
          "node-fetch": "^3.3.2",
          "sanitize-html": "^2.16.0",
          "svelte": "^5.28.2",
          "tailwindcss": "^3.4.17",
          "vite-imagetools": "^7.1.0",
          "web-vitals": "^4.2.4"
        },
        "dev_dependencies": {
          "@fullhuman/postcss-purgecss": "^4.1.3",
          "@neoconfetti/svelte": "^2.2.2",
          "@poppanator/sveltekit-svg": "^4.2.1",
          "@sveltejs/adapter-auto": "^6.0.0",
          "@sveltejs/adapter-vercel": "^5.7.2",
          "@sveltejs/kit": "^2.20.8",
          "@sveltejs/vite-plugin-svelte": "^5.0.3",
          "@tailwindcss/typography": "^0.5.16",
          "@tsconfig/svelte": "^5.0.4",
          "@types/sanitize-html": "^2.16.0",
          "autoprefixer": "^10.4.21",
          "playwright": "^1.52.0",
          "postcss": "^8.5.3",
          "postcss-preset-env": "^7.8.3",
          "prettier": "^3.5.3",
          "prettier-plugin-svelte": "^3.3.3",
          "svelte": "^5.28.1",
          "svelte-check": "^3.8.6",
          "svelte-preprocess": "^6.0.3",
          "typescript": "^5.8.3",
          "vite": "^6.3.5",
          "vite-plugin-node-polyfills": "^0.23.0",
          "vitest": "^2.1.9"
        }
      }
    ]
  },
  "routes": {
    "api_routes": [
      {
        "route": "/api/auth/login",
        "source_path": "src/routes/api/auth/login/+server.ts",
        "kind": "sveltekit-server-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/api/auth/signup",
        "source_path": "src/routes/api/auth/signup/+server.ts",
        "kind": "sveltekit-server-route",
        "methods": [
          "POST"
        ]
      },
      {
        "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/getTopStories",
        "source_path": "src/routes/api/getTopStories/+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/getStoryDetails",
        "source_path": "src/routes/api/hackernews/getStoryDetails/+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": [
          "GET"
        ]
      },
      {
        "route": "/llms.txt",
        "source_path": "src/routes/llms.txt/+server.ts",
        "kind": "sveltekit-server-route",
        "methods": [
          "UNKNOWN"
        ]
      },
      {
        "route": "/sitemap-main.xml",
        "source_path": "src/routes/sitemap-main.xml/+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": "/story/[id]",
        "source_path": "src/routes/story/[id]/+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": "JobDetails",
      "kind": "ui-component",
      "source_path": "src/components/JobDetails.svelte"
    },
    {
      "name": "JobStories",
      "kind": "ui-component",
      "source_path": "src/components/JobStories.svelte"
    },
    {
      "name": "Layout",
      "kind": "ui-component",
      "source_path": "src/components/Layout.svelte"
    },
    {
      "name": "NavigationTree",
      "kind": "ui-component",
      "source_path": "src/components/NavigationTree.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": "SearchBar",
      "kind": "ui-component",
      "source_path": "src/components/SearchBar.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": [
    {
      "name": "legacy.test.js",
      "kind": "unit-or-integration",
      "source_path": "src/tests/legacy.test.js"
    }
  ],
  "ci": {
    "workflows": [
      {
        "path": ".github/workflows/test-docker-no-compose.yml"
      },
      {
        "path": ".github/workflows/test-docker.yml"
      }
    ]
  },
  "containers": {
    "dockerfiles": [
      {
        "path": "Dockerfile"
      }
    ],
    "compose_files": [
      {
        "path": "compose.yaml"
      },
      {
        "path": "docker-compose.override.yml"
      },
      {
        "path": "docker-compose.yml"
      }
    ]
  },
  "env": {
    "example_files": [
      {
        "path": ".env"
      }
    ],
    "variables": [
      {
        "name": "EXPERIMENTATION_CONFIG",
        "source_paths": [
          ".env"
        ],
        "likely_secret": false
      },
      {
        "name": "EXPERIMENTATION_CONFIG_ITEM_KEY",
        "source_paths": [
          ".env"
        ],
        "likely_secret": true
      },
      {
        "name": "GOOGLE_API_KEY",
        "source_paths": [
          ".env"
        ],
        "likely_secret": true
      },
      {
        "name": "HACKER_NEWS_API_KEY",
        "source_paths": [
          ".env"
        ],
        "likely_secret": true
      },
      {
        "name": "HACKER_NEWS_API_URL",
        "source_paths": [
          ".env",
          "src/routes/api/getLatestNews/+server.ts",
          "src/routes/api/getNewsDetails/+server.ts",
          "src/routes/api/getTopStories/+server.ts",
          "src/routes/api/hackernews/getAskStories/+server.ts",
          "src/routes/api/hackernews/getTopStories/+server.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "NEWS_API_KEY",
        "source_paths": [
          ".env",
          "src/routes/api/getLatestNews/+server.ts",
          "src/routes/api/getNewsDetails/+server.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "NEWS_API_URL",
        "source_paths": [
          ".env",
          "src/routes/api/getLatestNews/+server.ts",
          "src/routes/api/getNewsDetails/+server.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "NEXT_PUBLIC_STATSIG_CLIENT_KEY",
        "source_paths": [
          ".env"
        ],
        "likely_secret": true
      },
      {
        "name": "OPENAI_API_KEY",
        "source_paths": [
          ".env"
        ],
        "likely_secret": true
      },
      {
        "name": "STATSIG_SERVER_API_KEY",
        "source_paths": [
          ".env"
        ],
        "likely_secret": true
      },
      {
        "name": "VERCEL_ANALYTICS_ID",
        "source_paths": [
          "vite.config.js"
        ],
        "likely_secret": false
      },
      {
        "name": "VERCEL_OIDC_TOKEN",
        "source_paths": [
          ".env"
        ],
        "likely_secret": true
      },
      {
        "name": "XAI_API_KEY",
        "source_paths": [
          ".env"
        ],
        "likely_secret": true
      }
    ]
  },
  "configs": [
    {
      "path": "compose.yaml"
    },
    {
      "path": "docker-compose.yml"
    },
    {
      "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": [],
    "doc_paths": [],
    "llms_context_paths": []
  },
  "discovery_files": {
    "openapi": [],
    "mcp": [],
    "llms": [],
    "sitemaps": [],
    "feeds": [],
    "well_known": [],
    "robots": [
      {
        "path": "src/static/robots.txt"
      }
    ],
    "manifests": []
  },
  "integrations": [
    {
      "name": "Google",
      "confidence": "medium",
      "evidence_paths": [
        ".env",
        "package.json"
      ]
    },
    {
      "name": "OpenAI",
      "confidence": "medium",
      "evidence_paths": [
        ".env",
        "package.json"
      ]
    },
    {
      "name": "Supabase",
      "confidence": "medium",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Vercel",
      "confidence": "medium",
      "evidence_paths": [
        ".env",
        "package.json",
        "src/+layout.svelte",
        "src/app.svelte",
        "src/components/NewsHeader.svelte",
        "src/routes/+layout.svelte",
        "src/routes/app.svelte",
        "src/routes/news.svelte",
        "src/routes/show.svelte",
        "vite.config.js"
      ]
    }
  ],
  "license": {
    "spdx": null,
    "paths": []
  },
  "comments": [
    {
      "kind": "security",
      "source_path": "src/hooks.server.ts",
      "line": 24,
      "text": "'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload',"
    }
  ],
  "security": {
    "secret_risks": [
      {
        "kind": "openai-key",
        "source_path": ".env",
        "line": 10,
        "redacted_sample": "OPENAI_API_KEY= [REDACTED]"
      }
    ],
    "unsafe_patterns": [
      {
        "name": "ssrf-review-needed",
        "confidence": "medium",
        "evidence_paths": [
          "src/routes/api/getLatestNews/+server.ts",
          "src/routes/api/getNewsDetails/+server.ts",
          "src/routes/api/getTopStories/+server.ts",
          "src/routes/api/hackernews/getAskStories/+server.ts",
          "src/routes/api/hackernews/getStoryDetails/+server.ts",
          "src/routes/api/hackernews/getTopStories/+server.ts",
          "src/routes/show.svelte",
          "src/routes/show/+page.svelte",
          "src/routes/story/[id]/+page.svelte",
          "src/services/hackernewsService.js",
          "src/utils/utils.ts"
        ]
      }
    ],
    "sensitive_data_indicators": [
      {
        "name": "api_key",
        "confidence": "medium",
        "evidence_paths": [
          ".env",
          "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/components/ShowStories.svelte",
          "src/constants.js",
          "src/hooks.server.ts",
          "src/index.html",
          "src/news.html",
          "src/routes/+layout.svelte",
          "src/routes/+page.svelte",
          "src/routes/api/hackernews/constants.ts"
        ]
      },
      {
        "name": "email",
        "confidence": "medium",
        "evidence_paths": [
          "src/app.html",
          "src/constants.js",
          "src/hooks.server.ts",
          "src/index.html",
          "src/news.html",
          "src/routes/api/hackernews/constants.ts"
        ]
      },
      {
        "name": "health",
        "confidence": "medium",
        "evidence_paths": [
          "Dockerfile"
        ]
      },
      {
        "name": "location",
        "confidence": "medium",
        "evidence_paths": [
          "src/components/Layout.svelte",
          "src/hooks.server.ts",
          "src/routes/+error.svelte",
          "src/utils/vitals.js"
        ]
      },
      {
        "name": "password",
        "confidence": "medium",
        "evidence_paths": [
          ".github/workflows/test-docker-no-compose.yml",
          ".github/workflows/test-docker.yml",
          "compose.yaml",
          "docker-compose.yml",
          "src/components/Auth.svelte",
          "src/routes/api/auth/login.js",
          "src/routes/api/auth/login.svelte",
          "src/routes/api/auth/login/+server.ts",
          "src/routes/api/auth/signup.js",
          "src/routes/api/auth/signup.svelte",
          "src/routes/api/auth/signup/+server.ts",
          "src/routes/login.svelte",
          "src/routes/login/+page.svelte",
          "src/routes/signup.svelte",
          "src/routes/signup/+page.svelte"
        ]
      },
      {
        "name": "secret-like environment variables",
        "confidence": "medium",
        "evidence_paths": [
          "package.json"
        ]
      },
      {
        "name": "token",
        "confidence": "medium",
        "evidence_paths": [
          ".env",
          ".github/workflows/test-docker-no-compose.yml",
          ".github/workflows/test-docker.yml",
          "src/app.d.ts",
          "src/routes/api/auth/login.svelte",
          "src/utils/form.js"
        ]
      }
    ]
  },
  "generated_at": "2026-05-16T16:44:09.985Z"
}
