{
  "schema_version": "1.0.0",
  "scanner": {
    "name": "global-capability-catalog",
    "version": "0.1.0"
  },
  "repo": {
    "id": "github-recent__mbarbine__instant-snap-postcard",
    "name": "mbarbine__instant-snap-postcard",
    "path": "/Users/bwm.barbinewarnermichael/Documents/github/repositories/github-recent/mbarbine__instant-snap-postcard",
    "relative_path": "github-recent/mbarbine__instant-snap-postcard",
    "remote_url": "git@github.com:mbarbine/instant-snap-postcard.git",
    "default_branch": "main",
    "current_commit": "883f44bb4b1cad8cdd073acc3b11342559438a72"
  },
  "languages": [
    {
      "language": "JSON",
      "files": 6,
      "bytes": 253170
    },
    {
      "language": "TypeScript",
      "files": 68,
      "bytes": 198029
    },
    {
      "language": "CSS",
      "files": 2,
      "bytes": 2895
    },
    {
      "language": "SQL",
      "files": 2,
      "bytes": 2347
    },
    {
      "language": "Markdown",
      "files": 1,
      "bytes": 2141
    },
    {
      "language": "HTML",
      "files": 1,
      "bytes": 914
    },
    {
      "language": "JavaScript",
      "files": 2,
      "bytes": 846
    },
    {
      "language": "TOML",
      "files": 1,
      "bytes": 35
    }
  ],
  "frameworks": [
    {
      "name": "React",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Tailwind CSS",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Vite",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    }
  ],
  "packages": {
    "package_manager": "npm",
    "manifests": [
      {
        "path": "package.json",
        "name": "vite_react_shadcn_ts",
        "version": "0.0.0",
        "scripts": {
          "dev": "vite",
          "build": "vite build",
          "build:dev": "vite build --mode development",
          "lint": "eslint .",
          "preview": "vite preview"
        },
        "dependencies": {
          "@hookform/resolvers": "^3.10.0",
          "@radix-ui/react-accordion": "^1.2.11",
          "@radix-ui/react-alert-dialog": "^1.1.14",
          "@radix-ui/react-aspect-ratio": "^1.1.7",
          "@radix-ui/react-avatar": "^1.1.10",
          "@radix-ui/react-checkbox": "^1.3.2",
          "@radix-ui/react-collapsible": "^1.1.11",
          "@radix-ui/react-context-menu": "^2.2.15",
          "@radix-ui/react-dialog": "^1.1.14",
          "@radix-ui/react-dropdown-menu": "^2.1.15",
          "@radix-ui/react-hover-card": "^1.1.14",
          "@radix-ui/react-label": "^2.1.7",
          "@radix-ui/react-menubar": "^1.1.15",
          "@radix-ui/react-navigation-menu": "^1.2.13",
          "@radix-ui/react-popover": "^1.1.14",
          "@radix-ui/react-progress": "^1.1.7",
          "@radix-ui/react-radio-group": "^1.3.7",
          "@radix-ui/react-scroll-area": "^1.2.9",
          "@radix-ui/react-select": "^2.2.5",
          "@radix-ui/react-separator": "^1.1.7",
          "@radix-ui/react-slider": "^1.3.5",
          "@radix-ui/react-slot": "^1.2.3",
          "@radix-ui/react-switch": "^1.2.5",
          "@radix-ui/react-tabs": "^1.1.12",
          "@radix-ui/react-toast": "^1.2.14",
          "@radix-ui/react-toggle": "^1.1.9",
          "@radix-ui/react-toggle-group": "^1.1.10",
          "@radix-ui/react-tooltip": "^1.2.7",
          "@supabase/supabase-js": "^2.75.0",
          "@tanstack/react-query": "^5.83.0",
          "class-variance-authority": "^0.7.1",
          "clsx": "^2.1.1",
          "cmdk": "^1.1.1",
          "date-fns": "^3.6.0",
          "embla-carousel-react": "^8.6.0",
          "input-otp": "^1.4.2",
          "lucide-react": "^0.462.0",
          "next-themes": "^0.3.0",
          "react": "^18.3.1",
          "react-day-picker": "^8.10.1",
          "react-dom": "^18.3.1",
          "react-hook-form": "^7.61.1",
          "react-resizable-panels": "^2.1.9",
          "react-router-dom": "^6.30.1",
          "recharts": "^2.15.4",
          "sonner": "^1.7.4",
          "tailwind-merge": "^2.6.0",
          "tailwindcss-animate": "^1.0.7",
          "vaul": "^0.9.9",
          "zod": "^3.25.76"
        },
        "dev_dependencies": {
          "@eslint/js": "^9.32.0",
          "@tailwindcss/typography": "^0.5.16",
          "@types/node": "^22.16.5",
          "@types/react": "^18.3.23",
          "@types/react-dom": "^18.3.7",
          "@vitejs/plugin-react-swc": "^3.11.0",
          "autoprefixer": "^10.4.21",
          "eslint": "^9.32.0",
          "eslint-plugin-react-hooks": "^5.2.0",
          "eslint-plugin-react-refresh": "^0.4.20",
          "globals": "^15.15.0",
          "lovable-tagger": "^1.1.10",
          "postcss": "^8.5.6",
          "tailwindcss": "^3.4.17",
          "typescript": "^5.8.3",
          "typescript-eslint": "^8.38.0",
          "vite": "^5.4.19"
        }
      }
    ]
  },
  "routes": {
    "api_routes": [],
    "app_routes": [
      {
        "route": "/Auth",
        "source_path": "src/pages/Auth.tsx",
        "kind": "next-pages-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/Index",
        "source_path": "src/pages/Index.tsx",
        "kind": "next-pages-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/NotFound",
        "source_path": "src/pages/NotFound.tsx",
        "kind": "next-pages-route",
        "methods": [
          "GET"
        ]
      }
    ]
  },
  "components": [
    {
      "name": "Auth",
      "kind": "ui-component",
      "source_path": "src/components/Auth.tsx"
    },
    {
      "name": "Camera",
      "kind": "ui-component",
      "source_path": "src/components/Camera.tsx"
    },
    {
      "name": "ContactList",
      "kind": "ui-component",
      "source_path": "src/components/ContactList.tsx"
    },
    {
      "name": "ContactsDialog",
      "kind": "ui-component",
      "source_path": "src/components/ContactsDialog.tsx"
    },
    {
      "name": "PostcardPreview",
      "kind": "ui-component",
      "source_path": "src/components/PostcardPreview.tsx"
    },
    {
      "name": "accordion",
      "kind": "ui-component",
      "source_path": "src/components/ui/accordion.tsx"
    },
    {
      "name": "alert-dialog",
      "kind": "ui-component",
      "source_path": "src/components/ui/alert-dialog.tsx"
    },
    {
      "name": "alert",
      "kind": "ui-component",
      "source_path": "src/components/ui/alert.tsx"
    },
    {
      "name": "aspect-ratio",
      "kind": "ui-component",
      "source_path": "src/components/ui/aspect-ratio.tsx"
    },
    {
      "name": "avatar",
      "kind": "ui-component",
      "source_path": "src/components/ui/avatar.tsx"
    },
    {
      "name": "badge",
      "kind": "ui-component",
      "source_path": "src/components/ui/badge.tsx"
    },
    {
      "name": "breadcrumb",
      "kind": "ui-component",
      "source_path": "src/components/ui/breadcrumb.tsx"
    },
    {
      "name": "button",
      "kind": "ui-component",
      "source_path": "src/components/ui/button.tsx"
    },
    {
      "name": "calendar",
      "kind": "ui-component",
      "source_path": "src/components/ui/calendar.tsx"
    },
    {
      "name": "card",
      "kind": "ui-component",
      "source_path": "src/components/ui/card.tsx"
    },
    {
      "name": "carousel",
      "kind": "ui-component",
      "source_path": "src/components/ui/carousel.tsx"
    },
    {
      "name": "chart",
      "kind": "ui-component",
      "source_path": "src/components/ui/chart.tsx"
    },
    {
      "name": "checkbox",
      "kind": "ui-component",
      "source_path": "src/components/ui/checkbox.tsx"
    },
    {
      "name": "collapsible",
      "kind": "ui-component",
      "source_path": "src/components/ui/collapsible.tsx"
    },
    {
      "name": "command",
      "kind": "ui-component",
      "source_path": "src/components/ui/command.tsx"
    },
    {
      "name": "context-menu",
      "kind": "ui-component",
      "source_path": "src/components/ui/context-menu.tsx"
    },
    {
      "name": "dialog",
      "kind": "ui-component",
      "source_path": "src/components/ui/dialog.tsx"
    },
    {
      "name": "drawer",
      "kind": "ui-component",
      "source_path": "src/components/ui/drawer.tsx"
    },
    {
      "name": "dropdown-menu",
      "kind": "ui-component",
      "source_path": "src/components/ui/dropdown-menu.tsx"
    },
    {
      "name": "form",
      "kind": "ui-component",
      "source_path": "src/components/ui/form.tsx"
    },
    {
      "name": "hover-card",
      "kind": "ui-component",
      "source_path": "src/components/ui/hover-card.tsx"
    },
    {
      "name": "input-otp",
      "kind": "ui-component",
      "source_path": "src/components/ui/input-otp.tsx"
    },
    {
      "name": "input",
      "kind": "ui-component",
      "source_path": "src/components/ui/input.tsx"
    },
    {
      "name": "label",
      "kind": "ui-component",
      "source_path": "src/components/ui/label.tsx"
    },
    {
      "name": "menubar",
      "kind": "ui-component",
      "source_path": "src/components/ui/menubar.tsx"
    },
    {
      "name": "navigation-menu",
      "kind": "ui-component",
      "source_path": "src/components/ui/navigation-menu.tsx"
    },
    {
      "name": "pagination",
      "kind": "ui-component",
      "source_path": "src/components/ui/pagination.tsx"
    },
    {
      "name": "popover",
      "kind": "ui-component",
      "source_path": "src/components/ui/popover.tsx"
    },
    {
      "name": "progress",
      "kind": "ui-component",
      "source_path": "src/components/ui/progress.tsx"
    },
    {
      "name": "radio-group",
      "kind": "ui-component",
      "source_path": "src/components/ui/radio-group.tsx"
    },
    {
      "name": "resizable",
      "kind": "ui-component",
      "source_path": "src/components/ui/resizable.tsx"
    },
    {
      "name": "scroll-area",
      "kind": "ui-component",
      "source_path": "src/components/ui/scroll-area.tsx"
    },
    {
      "name": "select",
      "kind": "ui-component",
      "source_path": "src/components/ui/select.tsx"
    },
    {
      "name": "separator",
      "kind": "ui-component",
      "source_path": "src/components/ui/separator.tsx"
    },
    {
      "name": "sheet",
      "kind": "ui-component",
      "source_path": "src/components/ui/sheet.tsx"
    },
    {
      "name": "sidebar",
      "kind": "ui-component",
      "source_path": "src/components/ui/sidebar.tsx"
    },
    {
      "name": "skeleton",
      "kind": "ui-component",
      "source_path": "src/components/ui/skeleton.tsx"
    },
    {
      "name": "slider",
      "kind": "ui-component",
      "source_path": "src/components/ui/slider.tsx"
    },
    {
      "name": "sonner",
      "kind": "ui-component",
      "source_path": "src/components/ui/sonner.tsx"
    },
    {
      "name": "switch",
      "kind": "ui-component",
      "source_path": "src/components/ui/switch.tsx"
    },
    {
      "name": "table",
      "kind": "ui-component",
      "source_path": "src/components/ui/table.tsx"
    },
    {
      "name": "tabs",
      "kind": "ui-component",
      "source_path": "src/components/ui/tabs.tsx"
    },
    {
      "name": "textarea",
      "kind": "ui-component",
      "source_path": "src/components/ui/textarea.tsx"
    },
    {
      "name": "toast",
      "kind": "ui-component",
      "source_path": "src/components/ui/toast.tsx"
    },
    {
      "name": "toaster",
      "kind": "ui-component",
      "source_path": "src/components/ui/toaster.tsx"
    },
    {
      "name": "toggle-group",
      "kind": "ui-component",
      "source_path": "src/components/ui/toggle-group.tsx"
    },
    {
      "name": "toggle",
      "kind": "ui-component",
      "source_path": "src/components/ui/toggle.tsx"
    },
    {
      "name": "tooltip",
      "kind": "ui-component",
      "source_path": "src/components/ui/tooltip.tsx"
    }
  ],
  "data_models": [
    {
      "name": "20251010042947_a6729554-ea20-4eb6-b6cd-4d1270ede0bc",
      "kind": "migration",
      "source_path": "supabase/migrations/20251010042947_a6729554-ea20-4eb6-b6cd-4d1270ede0bc.sql"
    },
    {
      "name": "20251010043010_57608228-9202-4834-8fea-c55ef94b4363",
      "kind": "migration",
      "source_path": "supabase/migrations/20251010043010_57608228-9202-4834-8fea-c55ef94b4363.sql"
    }
  ],
  "database": {
    "databases": [],
    "schemas": [],
    "migrations": [
      {
        "path": "supabase/migrations/20251010042947_a6729554-ea20-4eb6-b6cd-4d1270ede0bc.sql"
      },
      {
        "path": "supabase/migrations/20251010043010_57608228-9202-4834-8fea-c55ef94b4363.sql"
      }
    ]
  },
  "tests": [],
  "ci": {
    "workflows": []
  },
  "containers": {
    "dockerfiles": [],
    "compose_files": []
  },
  "env": {
    "example_files": [
      {
        "path": ".env"
      }
    ],
    "variables": [
      {
        "name": "STANNP_API_KEY",
        "source_paths": [
          "supabase/functions/send-postcard/index.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "SUPABASE_ANON_KEY",
        "source_paths": [
          "supabase/functions/send-postcard/index.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "SUPABASE_URL",
        "source_paths": [
          "supabase/functions/send-postcard/index.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "VITE_SUPABASE_PROJECT_ID",
        "source_paths": [
          ".env"
        ],
        "likely_secret": false
      },
      {
        "name": "VITE_SUPABASE_PUBLISHABLE_KEY",
        "source_paths": [
          ".env",
          "src/integrations/supabase/client.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "VITE_SUPABASE_URL",
        "source_paths": [
          ".env",
          "src/integrations/supabase/client.ts"
        ],
        "likely_secret": false
      }
    ]
  },
  "configs": [
    {
      "path": "eslint.config.js"
    },
    {
      "path": "package.json"
    },
    {
      "path": "postcss.config.js"
    },
    {
      "path": "tailwind.config.ts"
    },
    {
      "path": "tsconfig.app.json"
    },
    {
      "path": "tsconfig.json"
    },
    {
      "path": "tsconfig.node.json"
    },
    {
      "path": "vite.config.ts"
    }
  ],
  "docs": {
    "readme_paths": [
      {
        "path": "README.md"
      }
    ],
    "doc_paths": [],
    "llms_context_paths": []
  },
  "discovery_files": {
    "openapi": [],
    "mcp": [],
    "llms": [],
    "sitemaps": [],
    "feeds": [],
    "well_known": [],
    "robots": [
      {
        "path": "public/robots.txt"
      }
    ],
    "manifests": []
  },
  "integrations": [
    {
      "name": "Stannp",
      "confidence": "medium",
      "evidence_paths": [
        "package.json",
        "supabase/functions/send-postcard/index.ts"
      ]
    },
    {
      "name": "Supabase",
      "confidence": "medium",
      "evidence_paths": [
        ".env",
        "package-lock.json",
        "package.json",
        "src/integrations/supabase/client.ts",
        "src/pages/Index.tsx",
        "supabase/functions/send-postcard/index.ts"
      ]
    }
  ],
  "license": {
    "spdx": null,
    "paths": []
  },
  "comments": [
    {
      "kind": "security",
      "source_path": "supabase/migrations/20251010042947_a6729554-ea20-4eb6-b6cd-4d1270ede0bc.sql",
      "line": 31,
      "text": "ALTER TABLE public.contacts ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "supabase/migrations/20251010042947_a6729554-ea20-4eb6-b6cd-4d1270ede0bc.sql",
      "line": 32,
      "text": "ALTER TABLE public.postcards ENABLE ROW LEVEL SECURITY;"
    },
    {
      "kind": "security",
      "source_path": "supabase/migrations/20251010043010_57608228-9202-4834-8fea-c55ef94b4363.sql",
      "line": 5,
      "text": "SECURITY DEFINER"
    }
  ],
  "security": {
    "secret_risks": [],
    "unsafe_patterns": [
      {
        "name": "dangerously-set-html",
        "confidence": "medium",
        "evidence_paths": [
          "src/components/ui/chart.tsx"
        ]
      }
    ],
    "sensitive_data_indicators": [
      {
        "name": "api_key",
        "confidence": "medium",
        "evidence_paths": [
          "supabase/functions/send-postcard/index.ts"
        ]
      },
      {
        "name": "card",
        "confidence": "medium",
        "evidence_paths": [
          "index.html",
          "package-lock.json",
          "package.json",
          "src/App.css",
          "src/components/Auth.tsx",
          "src/components/Camera.tsx",
          "src/components/ContactList.tsx",
          "src/components/PostcardPreview.tsx",
          "src/components/ui/card.tsx",
          "src/components/ui/hover-card.tsx",
          "src/index.css",
          "src/integrations/supabase/types.ts",
          "src/pages/Auth.tsx",
          "src/pages/Index.tsx",
          "supabase/functions/send-postcard/index.ts",
          "supabase/migrations/20251010042947_a6729554-ea20-4eb6-b6cd-4d1270ede0bc.sql",
          "tailwind.config.ts"
        ]
      },
      {
        "name": "email",
        "confidence": "medium",
        "evidence_paths": [
          "src/components/Auth.tsx",
          "src/pages/Auth.tsx"
        ]
      },
      {
        "name": "location",
        "confidence": "medium",
        "evidence_paths": [
          "src/pages/Auth.tsx",
          "src/pages/NotFound.tsx"
        ]
      },
      {
        "name": "password",
        "confidence": "medium",
        "evidence_paths": [
          "src/components/Auth.tsx",
          "src/pages/Auth.tsx"
        ]
      },
      {
        "name": "secret-like environment variables",
        "confidence": "medium",
        "evidence_paths": [
          "package.json"
        ]
      },
      {
        "name": "token",
        "confidence": "medium",
        "evidence_paths": [
          "package-lock.json",
          "src/integrations/supabase/client.ts"
        ]
      }
    ]
  },
  "generated_at": "2026-05-16T16:44:09.069Z"
}
