{
  "schema_version": "1.0.0",
  "scanner": {
    "name": "global-capability-catalog",
    "version": "0.1.0"
  },
  "repo": {
    "id": "github-recent__mbarbine__platphorm-real-estate-nad",
    "name": "mbarbine__platphorm-real-estate-NAD",
    "path": "/Users/bwm.barbinewarnermichael/Documents/github/repositories/github-recent/mbarbine__platphorm-real-estate-NAD",
    "relative_path": "github-recent/mbarbine__platphorm-real-estate-NAD",
    "remote_url": "git@github.com:mbarbine/platphorm-real-estate-NAD.git",
    "default_branch": "main",
    "current_commit": "dc28e1e483aaf7e4f156db52515254d8f120719d"
  },
  "languages": [
    {
      "language": "TypeScript",
      "files": 170,
      "bytes": 563590
    },
    {
      "language": "YAML",
      "files": 1,
      "bytes": 235848
    },
    {
      "language": "SQL",
      "files": 18,
      "bytes": 107029
    },
    {
      "language": "JavaScript",
      "files": 6,
      "bytes": 19874
    },
    {
      "language": "Markdown",
      "files": 4,
      "bytes": 14749
    },
    {
      "language": "CSS",
      "files": 2,
      "bytes": 10960
    },
    {
      "language": "Python",
      "files": 2,
      "bytes": 10811
    },
    {
      "language": "JSON",
      "files": 3,
      "bytes": 4125
    }
  ],
  "frameworks": [
    {
      "name": "MCP SDK",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "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",
          "gen:sql": "node scripts/generate-combined-sql.mjs",
          "lint": "eslint .",
          "reset:seed": "node scripts/reset-and-seed.mjs",
          "start": "next start",
          "test": "pnpm run test:health",
          "test:health": "node scripts/test-health.mjs"
        },
        "dependencies": {
          "@fal-ai/serverless-client": "latest",
          "@hookform/resolvers": "^3.10.0",
          "@modelcontextprotocol/sdk": "^1.27.1",
          "@neondatabase/serverless": "latest",
          "@radix-ui/react-accordion": "1.2.2",
          "@radix-ui/react-alert-dialog": "1.1.4",
          "@radix-ui/react-aspect-ratio": "1.1.1",
          "@radix-ui/react-avatar": "latest",
          "@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": "latest",
          "@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": "latest",
          "@radix-ui/react-popover": "1.1.4",
          "@radix-ui/react-progress": "1.1.1",
          "@radix-ui/react-radio-group": "1.2.2",
          "@radix-ui/react-scroll-area": "latest",
          "@radix-ui/react-select": "latest",
          "@radix-ui/react-separator": "latest",
          "@radix-ui/react-slider": "latest",
          "@radix-ui/react-slot": "latest",
          "@radix-ui/react-switch": "latest",
          "@radix-ui/react-tabs": "latest",
          "@radix-ui/react-toast": "latest",
          "@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",
          "@vercel/blob": "latest",
          "@vercel/speed-insights": "latest",
          "autoprefixer": "^10.4.22",
          "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",
          "fs": "latest",
          "input-otp": "1.4.1",
          "lucide-react": "^0.454.0",
          "next": "16.0.10",
          "path": "latest",
          "react": "19.2.0",
          "react-day-picker": "9.8.0",
          "react-dom": "19.2.0",
          "react-hook-form": "^7.66.1",
          "react-resizable-panels": "^2.1.9",
          "recharts": "latest",
          "sonner": "^1.7.4",
          "stripe": "latest",
          "tailwind-merge": "^2.5.5",
          "tailwindcss-animate": "^1.0.7",
          "vaul": "^0.9.9",
          "vue-router": "latest",
          "zod": "3.25.76"
        },
        "dev_dependencies": {
          "@tailwindcss/postcss": "^4.1.17",
          "@testing-library/dom": "^10.4.1",
          "@testing-library/jest-dom": "^6.9.1",
          "@testing-library/react": "^16.3.2",
          "@types/node": "^22",
          "@types/react": "^19.2.5",
          "@types/react-dom": "^19.2.3",
          "@vitejs/plugin-react": "^6.0.1",
          "jsdom": "^29.0.1",
          "postcss": "^8.5",
          "tailwindcss": "^4.1.17",
          "tw-animate-css": "1.3.3",
          "typescript": "^5",
          "vite-tsconfig-paths": "^6.1.1",
          "vitest": "^4.1.1"
        }
      }
    ]
  },
  "routes": {
    "api_routes": [
      {
        "route": "/agents",
        "source_path": "app/api/agents/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/analytics/market",
        "source_path": "app/api/analytics/market/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/analytics/pageview",
        "source_path": "app/api/analytics/pageview/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/bridge/agent-reviews",
        "source_path": "app/api/bridge/agent-reviews/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/bridge/fetch-by-mls",
        "source_path": "app/api/bridge/fetch-by-mls/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/bridge/fetch-listings",
        "source_path": "app/api/bridge/fetch-listings/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      },
      {
        "route": "/bridge/sync-properties",
        "source_path": "app/api/bridge/sync-properties/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/errors",
        "source_path": "app/api/errors/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      },
      {
        "route": "/favorites",
        "source_path": "app/api/favorites/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      },
      {
        "route": "/health",
        "source_path": "app/api/health/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/log-error",
        "source_path": "app/api/log-error/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/mcp",
        "source_path": "app/api/mcp/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/metrics",
        "source_path": "app/api/metrics/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/properties/[id]",
        "source_path": "app/api/properties/[id]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "DELETE",
          "GET",
          "PUT"
        ]
      },
      {
        "route": "/properties/generate-image",
        "source_path": "app/api/properties/generate-image/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/properties",
        "source_path": "app/api/properties/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      },
      {
        "route": "/properties/sync",
        "source_path": "app/api/properties/sync/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/reports",
        "source_path": "app/api/reports/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/saved-searches",
        "source_path": "app/api/saved-searches/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      },
      {
        "route": "/seller-opportunities",
        "source_path": "app/api/seller-opportunities/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/sessions/end",
        "source_path": "app/api/sessions/end/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      },
      {
        "route": "/sessions/event",
        "source_path": "app/api/sessions/event/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      },
      {
        "route": "/sessions",
        "source_path": "app/api/sessions/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      },
      {
        "route": "/sessions/update",
        "source_path": "app/api/sessions/update/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      },
      {
        "route": "/stripe/create-checkout-session",
        "source_path": "app/api/stripe/create-checkout-session/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/stripe/webhook",
        "source_path": "app/api/stripe/webhook/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/webhooks",
        "source_path": "app/api/webhooks/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/zillow/market/[regionId]",
        "source_path": "app/api/zillow/market/[regionId]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/zillow/regions",
        "source_path": "app/api/zillow/regions/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      }
    ],
    "app_routes": [
      {
        "route": "/admin/analytics",
        "source_path": "app/admin/analytics/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/agents",
        "source_path": "app/agents/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/agents/reviews",
        "source_path": "app/agents/reviews/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/alerts",
        "source_path": "app/alerts/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/analytics/forecasts",
        "source_path": "app/analytics/forecasts/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/analytics/market",
        "source_path": "app/analytics/market/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/analytics",
        "source_path": "app/analytics/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/api-docs",
        "source_path": "app/api-docs/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/billing",
        "source_path": "app/billing/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/dashboard",
        "source_path": "app/dashboard/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/favorites",
        "source_path": "app/favorites/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/integrations",
        "source_path": "app/integrations/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/pricing",
        "source_path": "app/pricing/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/properties/[id]",
        "source_path": "app/properties/[id]/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/properties",
        "source_path": "app/properties/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/reports",
        "source_path": "app/reports/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/saved-searches",
        "source_path": "app/saved-searches/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/sellers",
        "source_path": "app/sellers/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/settings",
        "source_path": "app/settings/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/zillow",
        "source_path": "app/zillow/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      }
    ]
  },
  "components": [
    {
      "name": "error-log-analytics",
      "kind": "ui-component",
      "source_path": "components/admin/error-log-analytics.tsx"
    },
    {
      "name": "performance-metrics",
      "kind": "ui-component",
      "source_path": "components/admin/performance-metrics.tsx"
    },
    {
      "name": "session-analytics",
      "kind": "ui-component",
      "source_path": "components/admin/session-analytics.tsx"
    },
    {
      "name": "user-activity-feed",
      "kind": "ui-component",
      "source_path": "components/admin/user-activity-feed.tsx"
    },
    {
      "name": "agent-filters",
      "kind": "ui-component",
      "source_path": "components/agents/agent-filters.tsx"
    },
    {
      "name": "agents-grid",
      "kind": "ui-component",
      "source_path": "components/agents/agents-grid.tsx"
    },
    {
      "name": "geographic-heatmap",
      "kind": "ui-component",
      "source_path": "components/analytics/geographic-heatmap.tsx"
    },
    {
      "name": "market-overview",
      "kind": "ui-component",
      "source_path": "components/analytics/market-overview.tsx"
    },
    {
      "name": "price-distribution",
      "kind": "ui-component",
      "source_path": "components/analytics/price-distribution.tsx"
    },
    {
      "name": "property-trends",
      "kind": "ui-component",
      "source_path": "components/analytics/property-trends.tsx"
    },
    {
      "name": "recent-activity",
      "kind": "ui-component",
      "source_path": "components/analytics/recent-activity.tsx"
    },
    {
      "name": "error-boundary",
      "kind": "ui-component",
      "source_path": "components/error-boundary.tsx"
    },
    {
      "name": "favorites-list",
      "kind": "ui-component",
      "source_path": "components/favorites/favorites-list.tsx"
    },
    {
      "name": "footer",
      "kind": "ui-component",
      "source_path": "components/layout/footer.tsx"
    },
    {
      "name": "header",
      "kind": "ui-component",
      "source_path": "components/layout/header.tsx"
    },
    {
      "name": "page-wrapper",
      "kind": "ui-component",
      "source_path": "components/layout/page-wrapper.tsx"
    },
    {
      "name": "sidebar",
      "kind": "ui-component",
      "source_path": "components/layout/sidebar.tsx"
    },
    {
      "name": "loading-boundary",
      "kind": "ui-component",
      "source_path": "components/loading-boundary.tsx"
    },
    {
      "name": "forecast-table",
      "kind": "ui-component",
      "source_path": "components/market/forecast-table.tsx"
    },
    {
      "name": "market-heatmap",
      "kind": "ui-component",
      "source_path": "components/market/market-heatmap.tsx"
    },
    {
      "name": "market-trends-chart",
      "kind": "ui-component",
      "source_path": "components/market/market-trends-chart.tsx"
    },
    {
      "name": "price-growth-indicators",
      "kind": "ui-component",
      "source_path": "components/market/price-growth-indicators.tsx"
    },
    {
      "name": "top-markets",
      "kind": "ui-component",
      "source_path": "components/market/top-markets.tsx"
    },
    {
      "name": "pricing-cards",
      "kind": "ui-component",
      "source_path": "components/pricing/pricing-cards.tsx"
    },
    {
      "name": "ai-image-generator",
      "kind": "ui-component",
      "source_path": "components/properties/ai-image-generator.tsx"
    },
    {
      "name": "mls-import-dialog",
      "kind": "ui-component",
      "source_path": "components/properties/mls-import-dialog.tsx"
    },
    {
      "name": "property-card",
      "kind": "ui-component",
      "source_path": "components/properties/property-card.tsx"
    },
    {
      "name": "property-details",
      "kind": "ui-component",
      "source_path": "components/properties/property-details.tsx"
    },
    {
      "name": "property-filters",
      "kind": "ui-component",
      "source_path": "components/properties/property-filters.tsx"
    },
    {
      "name": "property-grid",
      "kind": "ui-component",
      "source_path": "components/properties/property-grid.tsx"
    },
    {
      "name": "property-search",
      "kind": "ui-component",
      "source_path": "components/properties/property-search.tsx"
    },
    {
      "name": "error-boundary",
      "kind": "ui-component",
      "source_path": "components/providers/error-boundary.tsx"
    },
    {
      "name": "monitoring-provider",
      "kind": "ui-component",
      "source_path": "components/providers/monitoring-provider.tsx"
    },
    {
      "name": "theme-provider",
      "kind": "ui-component",
      "source_path": "components/providers/theme-provider.tsx"
    },
    {
      "name": "market-insights",
      "kind": "ui-component",
      "source_path": "components/reports/market-insights.tsx"
    },
    {
      "name": "portfolio-stats",
      "kind": "ui-component",
      "source_path": "components/reports/portfolio-stats.tsx"
    },
    {
      "name": "price-distribution-chart",
      "kind": "ui-component",
      "source_path": "components/reports/price-distribution-chart.tsx"
    },
    {
      "name": "create-search-dialog",
      "kind": "ui-component",
      "source_path": "components/saved-searches/create-search-dialog.tsx"
    },
    {
      "name": "saved-searches-list",
      "kind": "ui-component",
      "source_path": "components/saved-searches/saved-searches-list.tsx"
    },
    {
      "name": "seller-finder-dashboard",
      "kind": "ui-component",
      "source_path": "components/sellers/seller-finder-dashboard.tsx"
    },
    {
      "name": "seller-finder-filters",
      "kind": "ui-component",
      "source_path": "components/sellers/seller-finder-filters.tsx"
    },
    {
      "name": "top-opportunities",
      "kind": "ui-component",
      "source_path": "components/sellers/top-opportunities.tsx"
    },
    {
      "name": "theme-provider",
      "kind": "ui-component",
      "source_path": "components/theme-provider.tsx"
    },
    {
      "name": "alert",
      "kind": "ui-component",
      "source_path": "components/ui/alert.tsx"
    },
    {
      "name": "avatar",
      "kind": "ui-component",
      "source_path": "components/ui/avatar.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": "chart",
      "kind": "ui-component",
      "source_path": "components/ui/chart.tsx"
    },
    {
      "name": "checkbox",
      "kind": "ui-component",
      "source_path": "components/ui/checkbox.tsx"
    },
    {
      "name": "dialog",
      "kind": "ui-component",
      "source_path": "components/ui/dialog.tsx"
    },
    {
      "name": "dropdown-menu",
      "kind": "ui-component",
      "source_path": "components/ui/dropdown-menu.tsx"
    },
    {
      "name": "input",
      "kind": "ui-component",
      "source_path": "components/ui/input.tsx"
    },
    {
      "name": "label",
      "kind": "ui-component",
      "source_path": "components/ui/label.tsx"
    },
    {
      "name": "navigation-menu",
      "kind": "ui-component",
      "source_path": "components/ui/navigation-menu.tsx"
    },
    {
      "name": "scroll-area",
      "kind": "ui-component",
      "source_path": "components/ui/scroll-area.tsx"
    },
    {
      "name": "select",
      "kind": "ui-component",
      "source_path": "components/ui/select.tsx"
    },
    {
      "name": "separator",
      "kind": "ui-component",
      "source_path": "components/ui/separator.tsx"
    },
    {
      "name": "sheet",
      "kind": "ui-component",
      "source_path": "components/ui/sheet.tsx"
    },
    {
      "name": "skeleton",
      "kind": "ui-component",
      "source_path": "components/ui/skeleton.tsx"
    },
    {
      "name": "slider",
      "kind": "ui-component",
      "source_path": "components/ui/slider.tsx"
    },
    {
      "name": "switch",
      "kind": "ui-component",
      "source_path": "components/ui/switch.tsx"
    },
    {
      "name": "table",
      "kind": "ui-component",
      "source_path": "components/ui/table.tsx"
    },
    {
      "name": "tabs",
      "kind": "ui-component",
      "source_path": "components/ui/tabs.tsx"
    },
    {
      "name": "theme-toggle",
      "kind": "ui-component",
      "source_path": "components/ui/theme-toggle.tsx"
    },
    {
      "name": "toast",
      "kind": "ui-component",
      "source_path": "components/ui/toast.tsx"
    },
    {
      "name": "toaster",
      "kind": "ui-component",
      "source_path": "components/ui/toaster.tsx"
    }
  ],
  "data_models": [],
  "database": {
    "databases": [],
    "schemas": [
      {
        "path": "scripts/_combined_schema.sql"
      }
    ],
    "migrations": []
  },
  "tests": [
    {
      "name": "page.test.tsx",
      "kind": "unit-or-integration",
      "source_path": "__tests__/page.test.tsx"
    },
    {
      "name": "sitemap.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/sitemap.test.ts"
    },
    {
      "name": "test-health.mjs",
      "kind": "unit-or-integration",
      "source_path": "scripts/test-health.mjs"
    }
  ],
  "ci": {
    "workflows": []
  },
  "containers": {
    "dockerfiles": [],
    "compose_files": []
  },
  "env": {
    "example_files": [],
    "variables": [
      {
        "name": "ALLOW_SYNC_BRIDGE",
        "source_paths": [
          "scripts/reset-and-seed.mjs",
          "scripts/test-health.mjs"
        ],
        "likely_secret": false
      },
      {
        "name": "API_BASE_URL",
        "source_paths": [
          "scripts/reset-and-seed.mjs",
          "scripts/test-health.mjs"
        ],
        "likely_secret": false
      },
      {
        "name": "BRIDGE_BROWSER_TOKEN",
        "source_paths": [
          "lib/bridge-api/client.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "BRIDGE_CLIENT_ID",
        "source_paths": [
          "app/api/health/route.ts",
          "lib/bridge-api/client.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "BRIDGE_CLIENT_SECRET",
        "source_paths": [
          "app/api/health/route.ts",
          "lib/bridge-api/client.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "BRIDGE_SERVER_TOKEN",
        "source_paths": [
          "app/api/health/route.ts",
          "lib/bridge-api/client.ts",
          "scripts/import-bridge-data.ts",
          "scripts/test-health.mjs"
        ],
        "likely_secret": true
      },
      {
        "name": "DATABASE_URL",
        "source_paths": [
          "app/api/analytics/market/route.ts",
          "app/api/analytics/pageview/route.ts",
          "app/api/bridge/fetch-by-mls/route.ts",
          "app/api/bridge/fetch-listings/route.ts",
          "app/api/bridge/sync-properties/route.ts",
          "app/api/errors/route.ts",
          "app/api/health/route.ts",
          "app/api/log-error/route.ts",
          "app/api/metrics/route.ts",
          "app/api/properties/[id]/route.ts",
          "app/api/properties/route.ts",
          "app/api/saved-searches/route.ts",
          "app/api/sessions/end/route.ts",
          "app/api/sessions/event/route.ts",
          "app/api/sessions/route.ts",
          "app/api/sessions/update/route.ts",
          "app/api/stripe/webhook/route.ts",
          "app/api/webhooks/route.ts",
          "lib/data-sync.ts",
          "lib/db/agents.ts",
          "lib/db/client.ts",
          "lib/db/favorites.ts",
          "lib/db/market-forecasts.ts",
          "lib/db/properties.ts",
          "lib/db/reports.ts",
          "lib/db/saved-searches.ts",
          "lib/db/seller-opportunities.ts",
          "lib/db/zillow.ts",
          "scripts/FINAL_SEED_PROPERTIES.ts",
          "scripts/import-bridge-data.ts",
          "scripts/import-local-data.ts",
          "scripts/INSERT_DATA_ONLY.ts",
          "scripts/INSERT_PROPERTIES.ts",
          "scripts/reset-and-seed.mjs",
          "scripts/SEED_DATABASE_NOW.ts",
          "scripts/seed-complete-database.ts",
          "scripts/seed-comprehensive.ts",
          "scripts/seed-database.ts",
          "scripts/seed-production-data.ts",
          "scripts/seed-production.ts",
          "scripts/seed-properties-now.ts",
          "scripts/seed-users.ts",
          "scripts/test-health.mjs"
        ],
        "likely_secret": true
      },
      {
        "name": "FAL_KEY",
        "source_paths": [
          "app/api/properties/generate-image/route.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "NEXT_PUBLIC_API_URL",
        "source_paths": [
          "lib/api-client.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "NEXT_PUBLIC_SITE_URL",
        "source_paths": [
          "app/sitemap.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "STRIPE_SECRET_KEY",
        "source_paths": [
          "app/api/stripe/create-checkout-session/route.ts",
          "app/api/stripe/webhook/route.ts",
          "lib/stripe.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "STRIPE_WEBHOOK_SECRET",
        "source_paths": [
          "app/api/stripe/webhook/route.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "TEST_TIMEOUT_MS",
        "source_paths": [
          "scripts/test-health.mjs"
        ],
        "likely_secret": false
      }
    ]
  },
  "configs": [
    {
      "path": "next.config.mjs"
    },
    {
      "path": "package.json"
    },
    {
      "path": "postcss.config.mjs"
    },
    {
      "path": "tsconfig.json"
    },
    {
      "path": "tsconfig.tsbuildinfo"
    }
  ],
  "docs": {
    "readme_paths": [
      {
        "path": "README.md"
      }
    ],
    "doc_paths": [],
    "llms_context_paths": []
  },
  "discovery_files": {
    "openapi": [],
    "mcp": [
      {
        "path": "app/api/mcp/route.ts"
      }
    ],
    "llms": [],
    "sitemaps": [],
    "feeds": [],
    "well_known": [
      {
        "path": "app/.well-known/llms-full.txt/route.ts"
      },
      {
        "path": "app/.well-known/llms-index.txt/route.ts"
      },
      {
        "path": "app/.well-known/llms.txt/route.ts"
      },
      {
        "path": "app/.well-known/mcp/route.ts"
      }
    ],
    "robots": [],
    "manifests": []
  },
  "integrations": [
    {
      "name": "Postgres",
      "confidence": "medium",
      "evidence_paths": [
        "app/api/analytics/market/route.ts",
        "app/api/analytics/pageview/route.ts",
        "app/api/bridge/fetch-by-mls/route.ts",
        "app/api/bridge/fetch-listings/route.ts",
        "app/api/bridge/sync-properties/route.ts",
        "app/api/errors/route.ts",
        "app/api/health/route.ts",
        "app/api/log-error/route.ts",
        "package.json"
      ]
    },
    {
      "name": "Stripe",
      "confidence": "medium",
      "evidence_paths": [
        "app/api/stripe/create-checkout-session/route.ts",
        "app/api/stripe/webhook/route.ts",
        "components/pricing/pricing-cards.tsx",
        "lib/stripe.ts",
        "package.json",
        "pnpm-lock.yaml",
        "ROADMAP.md"
      ]
    },
    {
      "name": "Vercel",
      "confidence": "medium",
      "evidence_paths": [
        "app/api/properties/generate-image/route.ts",
        "app/layout.tsx",
        "package.json",
        "pnpm-lock.yaml"
      ]
    }
  ],
  "license": {
    "spdx": null,
    "paths": []
  },
  "comments": [
    {
      "kind": "unsafe",
      "source_path": "app/api/properties/route.ts",
      "line": 74,
      "text": "// Build parameterized query manually since neon doesn't support .unsafe with params"
    },
    {
      "kind": "unsafe",
      "source_path": "app/api/properties/route.ts",
      "line": 83,
      "text": "const result = await sql.unsafe(finalQuery)"
    },
    {
      "kind": "security",
      "source_path": "app/page.tsx",
      "line": 106,
      "text": "<CardTitle>Enterprise Security</CardTitle>"
    },
    {
      "kind": "security",
      "source_path": "app/page.tsx",
      "line": 108,
      "text": "Bank-level security, data encryption, and compliance with industry standards to protect your business"
    },
    {
      "kind": "security",
      "source_path": "app/settings/page.tsx",
      "line": 37,
      "text": "<TabsTrigger value=\"security\">"
    },
    {
      "kind": "security",
      "source_path": "app/settings/page.tsx",
      "line": 39,
      "text": "Security"
    },
    {
      "kind": "security",
      "source_path": "app/settings/page.tsx",
      "line": 130,
      "text": "<TabsContent value=\"security\" className=\"space-y-6\">"
    },
    {
      "kind": "security",
      "source_path": "app/settings/page.tsx",
      "line": 133,
      "text": "<CardTitle>Security Settings</CardTitle>"
    },
    {
      "kind": "security",
      "source_path": "app/settings/page.tsx",
      "line": 134,
      "text": "<CardDescription>Manage your account security</CardDescription>"
    },
    {
      "kind": "security",
      "source_path": "app/settings/page.tsx",
      "line": 154,
      "text": "<p className=\"text-sm text-muted-foreground\">Add an extra layer of security to your account</p>"
    },
    {
      "kind": "deprecated",
      "source_path": "components/theme-provider.tsx",
      "line": 3,
      "text": "// Deprecated wrapper previously using next-themes. We now use"
    },
    {
      "kind": "unsafe",
      "source_path": "lib/db/agents.ts",
      "line": 62,
      "text": "${sql.unsafe(whereClause)}"
    },
    {
      "kind": "security",
      "source_path": "lib/db/client.ts",
      "line": 18,
      "text": "* Sets the current user ID for Row Level Security policies"
    },
    {
      "kind": "unsafe",
      "source_path": "lib/db/zillow.ts",
      "line": 180,
      "text": "? sql` WHERE ${sql.unsafe(conditions.map((_, i) => `$${i + 1}`).join(' AND '))}`"
    },
    {
      "kind": "security",
      "source_path": "lib/fingerprint.ts",
      "line": 1,
      "text": "// Browser fingerprinting for analytics and security"
    },
    {
      "kind": "security",
      "source_path": "middleware.ts",
      "line": 12,
      "text": "// Add security headers"
    },
    {
      "kind": "security",
      "source_path": "pnpm-lock.yaml",
      "line": 133,
      "text": "version: 0.0.1-security"
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 341,
      "text": "deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."
    },
    {
      "kind": "security",
      "source_path": "pnpm-lock.yaml",
      "line": 2340,
      "text": "fs@0.0.1-security:"
    },
    {
      "kind": "security",
      "source_path": "pnpm-lock.yaml",
      "line": 5286,
      "text": "fs@0.0.1-security: {}"
    },
    {
      "kind": "security",
      "source_path": "ROADMAP.md",
      "line": 178,
      "text": "### Phase 7: Security & Compliance"
    },
    {
      "kind": "security",
      "source_path": "ROADMAP.md",
      "line": 179,
      "text": "- [ ] **Security Hardening**"
    },
    {
      "kind": "security",
      "source_path": "ROADMAP.md",
      "line": 180,
      "text": "- [ ] Row Level Security (RLS) policies for all tables"
    },
    {
      "kind": "security",
      "source_path": "ROADMAP.md",
      "line": 182,
      "text": "- [ ] Content Security Policy (CSP) headers"
    },
    {
      "kind": "security",
      "source_path": "ROADMAP.md",
      "line": 249,
      "text": "1. **Add Row Level Security (RLS)** to all database tables - critical for security"
    },
    {
      "kind": "security",
      "source_path": "ROADMAP.md",
      "line": 277,
      "text": "1. **Add RLS to database** (security critical)"
    },
    {
      "kind": "security",
      "source_path": "ROADMAP.md",
      "line": 294,
      "text": "- Zero critical security vulnerabilities"
    },
    {
      "kind": "security",
      "source_path": "scripts/_combined_schema.sql",
      "line": 286,
      "text": "ALTER TABLE error_logs ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/_combined_schema.sql",
      "line": 334,
      "text": "ALTER TABLE sessions ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/001_add_error_logs_table.sql",
      "line": 20,
      "text": "ALTER TABLE error_logs ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/002_add_session_tracking_table.sql",
      "line": 28,
      "text": "ALTER TABLE sessions ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 1,
      "text": "-- Enable Row Level Security (RLS) on all tables"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 2,
      "text": "-- This is critical for data security and multi-tenant support"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 8,
      "text": "ALTER TABLE users ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 9,
      "text": "ALTER TABLE properties ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 10,
      "text": "ALTER TABLE agents ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 11,
      "text": "ALTER TABLE market_analytics ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 12,
      "text": "ALTER TABLE market_forecasts ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 13,
      "text": "ALTER TABLE potential_sellers ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 14,
      "text": "ALTER TABLE property_analytics ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 15,
      "text": "ALTER TABLE property_inquiries ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 16,
      "text": "ALTER TABLE user_favorites ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 17,
      "text": "ALTER TABLE user_activities ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 18,
      "text": "ALTER TABLE saved_searches ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 19,
      "text": "ALTER TABLE webhooks ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 20,
      "text": "ALTER TABLE integrations ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 21,
      "text": "ALTER TABLE api_logs ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 281,
      "text": "$$ LANGUAGE plpgsql SECURITY DEFINER;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 292,
      "text": "$$ LANGUAGE plpgsql SECURITY DEFINER;"
    },
    {
      "kind": "security",
      "source_path": "scripts/02-enable-rls-policies.sql",
      "line": 303,
      "text": "$$ LANGUAGE plpgsql SECURITY DEFINER;"
    },
    {
      "kind": "security",
      "source_path": "scripts/09_seed_properties_now.sql",
      "line": 29,
      "text": "'{\"parking\": \"2 spaces + storage\", \"view\": \"City and Bay\", \"amenities\": [\"Infinity Pool\", \"Spa\", \"Theater\", \"Business Center\"], \"appliances\": [\"Bosch\", \"Sub-Zero\"], \"flooring\": \"Porcelain\", \"building_features\": [\"Valet\", \"24hr Security\"]}',"
    },
    {
      "kind": "unsafe",
      "source_path": "scripts/reset-and-seed.mjs",
      "line": 44,
      "text": "// Execute as a single unsafe batch; fallback to splitting if needed"
    },
    {
      "kind": "unsafe",
      "source_path": "scripts/reset-and-seed.mjs",
      "line": 46,
      "text": "await sql.unsafe(sqlText)"
    },
    {
      "kind": "unsafe",
      "source_path": "scripts/reset-and-seed.mjs",
      "line": 54,
      "text": "await sql.unsafe(stmt)"
    },
    {
      "kind": "unsafe",
      "source_path": "scripts/reset-and-seed.mjs",
      "line": 61,
      "text": "await sql.unsafe('DROP SCHEMA IF EXISTS public CASCADE')"
    },
    {
      "kind": "unsafe",
      "source_path": "scripts/reset-and-seed.mjs",
      "line": 62,
      "text": "await sql.unsafe('CREATE SCHEMA public')"
    },
    {
      "kind": "unsafe",
      "source_path": "scripts/test-health.mjs",
      "line": 98,
      "text": "// Safe because table names are from a whitelisted constant; use unsafe for identifier"
    },
    {
      "kind": "unsafe",
      "source_path": "scripts/test-health.mjs",
      "line": 99,
      "text": "const rows = await sql`SELECT COUNT(*) AS count FROM ${sql.unsafe(table)}`"
    },
    {
      "kind": "deprecated",
      "source_path": "setupTests.ts",
      "line": 9,
      "text": "addListener: () => {}, // deprecated"
    },
    {
      "kind": "deprecated",
      "source_path": "setupTests.ts",
      "line": 10,
      "text": "removeListener: () => {}, // deprecated"
    }
  ],
  "security": {
    "secret_risks": [],
    "unsafe_patterns": [
      {
        "name": "dangerously-set-html",
        "confidence": "medium",
        "evidence_paths": [
          "components/ui/chart.tsx"
        ]
      },
      {
        "name": "sql-injection-review-needed",
        "confidence": "medium",
        "evidence_paths": [
          "app/api/bridge/sync-properties/route.ts",
          "app/api/properties/[id]/route.ts",
          "components/favorites/favorites-list.tsx",
          "scripts/import-bridge-data.ts"
        ]
      },
      {
        "name": "ssrf-review-needed",
        "confidence": "medium",
        "evidence_paths": [
          "app/zillow/page.tsx",
          "components/admin/error-log-analytics.tsx",
          "scripts/import-bridge-data.ts",
          "scripts/reset-and-seed.mjs",
          "scripts/test-health.mjs"
        ]
      }
    ],
    "sensitive_data_indicators": [
      {
        "name": "api_key",
        "confidence": "medium",
        "evidence_paths": [
          "app/api-docs/page.tsx",
          "lib/api-auth.ts",
          "scripts/_combined_schema.sql",
          "scripts/_combined_seed.sql",
          "scripts/02_create_users_and_agents.sql",
          "scripts/02-enable-rls-policies.sql",
          "scripts/08_seed_comprehensive_data.sql",
          "scripts/seed-complete-database.ts",
          "scripts/seed-production-data.ts"
        ]
      },
      {
        "name": "card",
        "confidence": "medium",
        "evidence_paths": [
          ".Jules/palette.md",
          "app/admin/analytics/page.tsx",
          "app/agents/reviews/page.tsx",
          "app/alerts/page.tsx",
          "app/analytics/forecasts/page.tsx",
          "app/analytics/market/page.tsx",
          "app/analytics/page.tsx",
          "app/api-docs/page.tsx",
          "app/api/stripe/create-checkout-session/route.ts",
          "app/billing/page.tsx",
          "app/dashboard/page.tsx",
          "app/error.tsx",
          "app/globals.css",
          "app/integrations/page.tsx",
          "app/layout.tsx",
          "app/not-found.tsx",
          "app/page.tsx",
          "app/pricing/page.tsx",
          "app/properties/loading.tsx",
          "app/sellers/loading.tsx"
        ]
      },
      {
        "name": "email",
        "confidence": "medium",
        "evidence_paths": [
          "app/alerts/page.tsx",
          "app/api/saved-searches/route.ts",
          "app/integrations/page.tsx",
          "app/settings/page.tsx",
          "components/layout/footer.tsx",
          "components/pricing/pricing-cards.tsx",
          "components/properties/property-details.tsx",
          "lib/stripe.ts",
          "ROADMAP.md",
          "scripts/_combined_schema.sql",
          "scripts/_combined_seed.sql",
          "scripts/02_create_users_and_agents.sql",
          "scripts/04_create_favorites_and_searches.sql",
          "scripts/05_create_api_and_integrations.sql",
          "scripts/06_seed_sample_data.sql",
          "scripts/08_seed_comprehensive_data.sql",
          "scripts/reset-and-seed.mjs",
          "scripts/SEED_ALL_DATA.sql",
          "scripts/SEED_DATABASE_NOW.ts",
          "scripts/seed-complete-database.ts"
        ]
      },
      {
        "name": "financial",
        "confidence": "medium",
        "evidence_paths": [
          "scripts/09_seed_properties_now.sql",
          "scripts/SEED_ALL_DATA.sql"
        ]
      },
      {
        "name": "fingerprint",
        "confidence": "medium",
        "evidence_paths": [
          "app/api/analytics/pageview/route.ts",
          "app/api/errors/route.ts",
          "app/api/sessions/event/route.ts",
          "app/api/sessions/route.ts",
          "app/api/sessions/update/route.ts",
          "components/admin/error-log-analytics.tsx",
          "components/admin/session-analytics.tsx",
          "components/providers/monitoring-provider.tsx",
          "lib/error-logger.ts",
          "lib/fingerprint.ts",
          "lib/session-tracker.ts",
          "ROADMAP.md",
          "scripts/_combined_schema.sql",
          "scripts/001_add_error_logs_table.sql",
          "scripts/002_add_session_tracking_table.sql",
          "scripts/reset-and-seed.mjs"
        ]
      },
      {
        "name": "health",
        "confidence": "medium",
        "evidence_paths": [
          "app/admin/analytics/page.tsx",
          "package.json",
          "ROADMAP.md",
          "scripts/test-health.mjs"
        ]
      },
      {
        "name": "location",
        "confidence": "medium",
        "evidence_paths": [
          "app/api-docs/page.tsx",
          "app/error.tsx",
          "app/global-error.tsx",
          "components/error-boundary.tsx",
          "components/pricing/pricing-cards.tsx",
          "components/providers/error-boundary.tsx",
          "components/saved-searches/create-search-dialog.tsx",
          "lib/error-handler.ts",
          "lib/error-logger.ts",
          "lib/monitoring.ts",
          "lib/session-tracker.ts",
          "ROADMAP.md",
          "scripts/_combined_schema.sql",
          "scripts/01_create_properties_table.sql",
          "scripts/03_create_analytics_tables.sql",
          "scripts/09_seed_properties_now.sql",
          "scripts/SEED_ALL_DATA.sql",
          "scripts/seed_market_data.py",
          "scripts/seed-complete-database.ts",
          "scripts/seed-database.ts"
        ]
      },
      {
        "name": "oauth",
        "confidence": "medium",
        "evidence_paths": [
          "ROADMAP.md"
        ]
      },
      {
        "name": "password",
        "confidence": "medium",
        "evidence_paths": [
          "app/settings/page.tsx",
          "ROADMAP.md",
          "scripts/seed-users.ts"
        ]
      },
      {
        "name": "password_hash",
        "confidence": "medium",
        "evidence_paths": [
          "scripts/seed-users.ts"
        ]
      },
      {
        "name": "payment",
        "confidence": "medium",
        "evidence_paths": [
          "app/api/stripe/create-checkout-session/route.ts",
          "app/api/stripe/webhook/route.ts",
          "app/billing/page.tsx",
          "app/integrations/page.tsx",
          "lib/stripe.ts",
          "ROADMAP.md"
        ]
      },
      {
        "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/api/health/route.ts",
          "lib/bridge-api/client.ts",
          "pnpm-lock.yaml",
          "README.md",
          "scripts/import-bridge-data.ts",
          "scripts/test-health.mjs"
        ]
      }
    ]
  },
  "generated_at": "2026-05-16T16:44:20.188Z"
}
