{
 "bomFormat": "CycloneDX",
 "specVersion": "1.5",
 "serialNumber": "urn:uuid:d712045af4e6-councilof-ai",
 "version": 1,
 "metadata": {
  "timestamp": "2026-08-25T13:20:09.662086+00:00",
  "tools": [
   {
    "name": "scripts/gen_sbom.py",
    "version": "1.0"
   }
  ],
  "properties": [
   {
    "name": "repo",
    "value": "github.com/CSOAI-ORG/councilof-ai"
   },
   {
    "name": "commit",
    "value": "d712045af4e6"
   },
   {
    "name": "scope_notes",
    "value": "Attestation engine = Python stdlib-only (verified imports). Web runtime components listed from package.json. xrpl.js CVE-2025-32965 not in dependency tree (no xrpl dep)."
   }
  ]
 },
 "components": [
  {
   "type": "library",
   "name": "@anthropic-ai/sdk",
   "version": "0.30.0",
   "purl": "pkg:npm/@anthropic-ai/sdk@0.30.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@aws-sdk/client-s3",
   "version": "3.693.0",
   "purl": "pkg:npm/@aws-sdk/client-s3@3.693.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@aws-sdk/s3-request-presigner",
   "version": "3.693.0",
   "purl": "pkg:npm/@aws-sdk/s3-request-presigner@3.693.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@deck.gl/layers",
   "version": "9.3.9",
   "purl": "pkg:npm/@deck.gl/layers@9.3.9",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@deck.gl/react",
   "version": "9.3.9",
   "purl": "pkg:npm/@deck.gl/react@9.3.9",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@google/generative-ai",
   "version": "0.24.1",
   "purl": "pkg:npm/@google/generative-ai@0.24.1",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@hookform/resolvers",
   "version": "5.2.2",
   "purl": "pkg:npm/@hookform/resolvers@5.2.2",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-accordion",
   "version": "1.2.12",
   "purl": "pkg:npm/@radix-ui/react-accordion@1.2.12",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-alert-dialog",
   "version": "1.1.15",
   "purl": "pkg:npm/@radix-ui/react-alert-dialog@1.1.15",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-aspect-ratio",
   "version": "1.1.7",
   "purl": "pkg:npm/@radix-ui/react-aspect-ratio@1.1.7",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-avatar",
   "version": "1.1.10",
   "purl": "pkg:npm/@radix-ui/react-avatar@1.1.10",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-checkbox",
   "version": "1.3.3",
   "purl": "pkg:npm/@radix-ui/react-checkbox@1.3.3",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-collapsible",
   "version": "1.1.12",
   "purl": "pkg:npm/@radix-ui/react-collapsible@1.1.12",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-context-menu",
   "version": "2.2.16",
   "purl": "pkg:npm/@radix-ui/react-context-menu@2.2.16",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-dialog",
   "version": "1.1.15",
   "purl": "pkg:npm/@radix-ui/react-dialog@1.1.15",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-dropdown-menu",
   "version": "2.1.16",
   "purl": "pkg:npm/@radix-ui/react-dropdown-menu@2.1.16",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-hover-card",
   "version": "1.1.15",
   "purl": "pkg:npm/@radix-ui/react-hover-card@1.1.15",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-label",
   "version": "2.1.7",
   "purl": "pkg:npm/@radix-ui/react-label@2.1.7",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-menubar",
   "version": "1.1.16",
   "purl": "pkg:npm/@radix-ui/react-menubar@1.1.16",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-navigation-menu",
   "version": "1.2.14",
   "purl": "pkg:npm/@radix-ui/react-navigation-menu@1.2.14",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-popover",
   "version": "1.1.15",
   "purl": "pkg:npm/@radix-ui/react-popover@1.1.15",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-progress",
   "version": "1.1.7",
   "purl": "pkg:npm/@radix-ui/react-progress@1.1.7",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-radio-group",
   "version": "1.3.8",
   "purl": "pkg:npm/@radix-ui/react-radio-group@1.3.8",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-scroll-area",
   "version": "1.2.10",
   "purl": "pkg:npm/@radix-ui/react-scroll-area@1.2.10",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-select",
   "version": "2.2.6",
   "purl": "pkg:npm/@radix-ui/react-select@2.2.6",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-separator",
   "version": "1.1.7",
   "purl": "pkg:npm/@radix-ui/react-separator@1.1.7",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-slider",
   "version": "1.3.6",
   "purl": "pkg:npm/@radix-ui/react-slider@1.3.6",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-slot",
   "version": "1.2.3",
   "purl": "pkg:npm/@radix-ui/react-slot@1.2.3",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-switch",
   "version": "1.2.6",
   "purl": "pkg:npm/@radix-ui/react-switch@1.2.6",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-tabs",
   "version": "1.1.13",
   "purl": "pkg:npm/@radix-ui/react-tabs@1.1.13",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-toggle",
   "version": "1.1.10",
   "purl": "pkg:npm/@radix-ui/react-toggle@1.1.10",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-toggle-group",
   "version": "1.1.11",
   "purl": "pkg:npm/@radix-ui/react-toggle-group@1.1.11",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@radix-ui/react-tooltip",
   "version": "1.2.8",
   "purl": "pkg:npm/@radix-ui/react-tooltip@1.2.8",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@tanstack/react-query",
   "version": "5.90.2",
   "purl": "pkg:npm/@tanstack/react-query@5.90.2",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@trpc/client",
   "version": "11.6.0",
   "purl": "pkg:npm/@trpc/client@11.6.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@trpc/react-query",
   "version": "11.6.0",
   "purl": "pkg:npm/@trpc/react-query@11.6.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@trpc/server",
   "version": "11.8.1",
   "purl": "pkg:npm/@trpc/server@11.8.1",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "axios",
   "version": "1.12.0",
   "purl": "pkg:npm/axios@1.12.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "canvas",
   "version": "3.2.1",
   "purl": "pkg:npm/canvas@3.2.1",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "canvas-confetti",
   "version": "1.9.4",
   "purl": "pkg:npm/canvas-confetti@1.9.4",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "class-variance-authority",
   "version": "0.7.1",
   "purl": "pkg:npm/class-variance-authority@0.7.1",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "clsx",
   "version": "2.1.1",
   "purl": "pkg:npm/clsx@2.1.1",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "cmdk",
   "version": "1.1.1",
   "purl": "pkg:npm/cmdk@1.1.1",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "concurrently",
   "version": "9.0.0",
   "purl": "pkg:npm/concurrently@9.0.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "cookie",
   "version": "1.0.2",
   "purl": "pkg:npm/cookie@1.0.2",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "cors",
   "version": "2.8.5",
   "purl": "pkg:npm/cors@2.8.5",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "date-fns",
   "version": "4.1.0",
   "purl": "pkg:npm/date-fns@4.1.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "deck.gl",
   "version": "9.3.9",
   "purl": "pkg:npm/deck.gl@9.3.9",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "dockview",
   "version": "8.0.0",
   "purl": "pkg:npm/dockview@8.0.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "dockview-react",
   "version": "8.0.0",
   "purl": "pkg:npm/dockview-react@8.0.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "dotenv",
   "version": "17.2.2",
   "purl": "pkg:npm/dotenv@17.2.2",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "driver.js",
   "version": "1.4.0",
   "purl": "pkg:npm/driver.js@1.4.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "drizzle-orm",
   "version": "0.44.7",
   "purl": "pkg:npm/drizzle-orm@0.44.7",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "embla-carousel-react",
   "version": "8.6.0",
   "purl": "pkg:npm/embla-carousel-react@8.6.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "express",
   "version": "4.21.2",
   "purl": "pkg:npm/express@4.21.2",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "framer-motion",
   "version": "12.23.22",
   "purl": "pkg:npm/framer-motion@12.23.22",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "html2canvas",
   "version": "1.4.1",
   "purl": "pkg:npm/html2canvas@1.4.1",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "html5-qrcode",
   "version": "2.3.8",
   "purl": "pkg:npm/html5-qrcode@2.3.8",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "i18next",
   "version": "26.3.6",
   "purl": "pkg:npm/i18next@26.3.6",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "i18next-browser-languagedetector",
   "version": "8.2.1",
   "purl": "pkg:npm/i18next-browser-languagedetector@8.2.1",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "input-otp",
   "version": "1.4.2",
   "purl": "pkg:npm/input-otp@1.4.2",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "jose",
   "version": "6.1.0",
   "purl": "pkg:npm/jose@6.1.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "jspdf",
   "version": "4.0.0",
   "purl": "pkg:npm/jspdf@4.0.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "lucide-react",
   "version": "0.453.0",
   "purl": "pkg:npm/lucide-react@0.453.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "maplibre-gl",
   "version": "6.3.0",
   "purl": "pkg:npm/maplibre-gl@6.3.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "micromark-util-decode-numeric-character-reference",
   "version": "2.0.2",
   "purl": "pkg:npm/micromark-util-decode-numeric-character-reference@2.0.2",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "mysql2",
   "version": "3.15.0",
   "purl": "pkg:npm/mysql2@3.15.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "nanoid",
   "version": "5.1.5",
   "purl": "pkg:npm/nanoid@5.1.5",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "next-themes",
   "version": "0.4.6",
   "purl": "pkg:npm/next-themes@0.4.6",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "nodemailer",
   "version": "7.0.12",
   "purl": "pkg:npm/nodemailer@7.0.12",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "openai",
   "version": "4.70.0",
   "purl": "pkg:npm/openai@4.70.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "papaparse",
   "version": "5.5.3",
   "purl": "pkg:npm/papaparse@5.5.3",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "pdf-lib",
   "version": "1.17.1",
   "purl": "pkg:npm/pdf-lib@1.17.1",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "pdfkit",
   "version": "0.17.2",
   "purl": "pkg:npm/pdfkit@0.17.2",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "postgres",
   "version": "3.4.7",
   "purl": "pkg:npm/postgres@3.4.7",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "qrcode",
   "version": "1.5.4",
   "purl": "pkg:npm/qrcode@1.5.4",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "react",
   "version": "19.2.1",
   "purl": "pkg:npm/react@19.2.1",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "react-day-picker",
   "version": "9.11.1",
   "purl": "pkg:npm/react-day-picker@9.11.1",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "react-dom",
   "version": "19.2.1",
   "purl": "pkg:npm/react-dom@19.2.1",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "react-helmet-async",
   "version": "3.0.0",
   "purl": "pkg:npm/react-helmet-async@3.0.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "react-hook-form",
   "version": "7.64.0",
   "purl": "pkg:npm/react-hook-form@7.64.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "react-i18next",
   "version": "17.0.11",
   "purl": "pkg:npm/react-i18next@17.0.11",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "react-markdown",
   "version": "10.1.0",
   "purl": "pkg:npm/react-markdown@10.1.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "react-resizable-panels",
   "version": "3.0.6",
   "purl": "pkg:npm/react-resizable-panels@3.0.6",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "recharts",
   "version": "2.15.4",
   "purl": "pkg:npm/recharts@2.15.4",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "sonner",
   "version": "2.0.7",
   "purl": "pkg:npm/sonner@2.0.7",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "streamdown",
   "version": "1.4.0",
   "purl": "pkg:npm/streamdown@1.4.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "stripe",
   "version": "20.1.0",
   "purl": "pkg:npm/stripe@20.1.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "superjson",
   "version": "1.13.3",
   "purl": "pkg:npm/superjson@1.13.3",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "tailwind-merge",
   "version": "3.4.0",
   "purl": "pkg:npm/tailwind-merge@3.4.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "tailwindcss-animate",
   "version": "1.0.7",
   "purl": "pkg:npm/tailwindcss-animate@1.0.7",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "topojson-client",
   "version": "3.1.0",
   "purl": "pkg:npm/topojson-client@3.1.0",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "vaul",
   "version": "1.1.2",
   "purl": "pkg:npm/vaul@1.1.2",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "workers-og",
   "version": "0.0.25",
   "purl": "pkg:npm/workers-og@0.0.25",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "wouter",
   "version": "3.3.5",
   "purl": "pkg:npm/wouter@3.3.5",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "xlsx",
   "version": "0.18.5",
   "purl": "pkg:npm/xlsx@0.18.5",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "zod",
   "version": "3.25.76",
   "purl": "pkg:npm/zod@3.25.76",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "zustand",
   "version": "5.0.14",
   "purl": "pkg:npm/zustand@5.0.14",
   "scope": "required"
  },
  {
   "type": "library",
   "name": "@playwright/test",
   "version": "1.57.0",
   "purl": "pkg:npm/@playwright/test@1.57.0",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@tailwindcss/typography",
   "version": "0.5.15",
   "purl": "pkg:npm/@tailwindcss/typography@0.5.15",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@tailwindcss/vite",
   "version": "4.1.3",
   "purl": "pkg:npm/@tailwindcss/vite@4.1.3",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@types/canvas-confetti",
   "version": "1.9.0",
   "purl": "pkg:npm/@types/canvas-confetti@1.9.0",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@types/cors",
   "version": "2.8.17",
   "purl": "pkg:npm/@types/cors@2.8.17",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@types/express",
   "version": "4.17.21",
   "purl": "pkg:npm/@types/express@4.17.21",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@types/node",
   "version": "24.7.0",
   "purl": "pkg:npm/@types/node@24.7.0",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@types/nodemailer",
   "version": "7.0.4",
   "purl": "pkg:npm/@types/nodemailer@7.0.4",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@types/papaparse",
   "version": "5.5.2",
   "purl": "pkg:npm/@types/papaparse@5.5.2",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@types/pdfkit",
   "version": "0.17.4",
   "purl": "pkg:npm/@types/pdfkit@0.17.4",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@types/qrcode",
   "version": "1.5.6",
   "purl": "pkg:npm/@types/qrcode@1.5.6",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@types/react",
   "version": "19.2.1",
   "purl": "pkg:npm/@types/react@19.2.1",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@types/react-dom",
   "version": "19.2.1",
   "purl": "pkg:npm/@types/react-dom@19.2.1",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@types/topojson-client",
   "version": "3.1.5",
   "purl": "pkg:npm/@types/topojson-client@3.1.5",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "@vitejs/plugin-react",
   "version": "5.0.4",
   "purl": "pkg:npm/@vitejs/plugin-react@5.0.4",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "autoprefixer",
   "version": "10.4.20",
   "purl": "pkg:npm/autoprefixer@10.4.20",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "cypress",
   "version": "15.8.2",
   "purl": "pkg:npm/cypress@15.8.2",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "drizzle-kit",
   "version": "0.31.4",
   "purl": "pkg:npm/drizzle-kit@0.31.4",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "esbuild",
   "version": "0.25.0",
   "purl": "pkg:npm/esbuild@0.25.0",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "postcss",
   "version": "8.4.47",
   "purl": "pkg:npm/postcss@8.4.47",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "prettier",
   "version": "3.6.2",
   "purl": "pkg:npm/prettier@3.6.2",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "tailwindcss",
   "version": "4.1.14",
   "purl": "pkg:npm/tailwindcss@4.1.14",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "tsx",
   "version": "4.19.1",
   "purl": "pkg:npm/tsx@4.19.1",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "tw-animate-css",
   "version": "1.4.0",
   "purl": "pkg:npm/tw-animate-css@1.4.0",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "typescript",
   "version": "5.9.3",
   "purl": "pkg:npm/typescript@5.9.3",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "vite",
   "version": "7.1.7",
   "purl": "pkg:npm/vite@7.1.7",
   "scope": "dev"
  },
  {
   "type": "library",
   "name": "vitest",
   "version": "2.1.4",
   "purl": "pkg:npm/vitest@2.1.4",
   "scope": "dev"
  },
  {
   "type": "application",
   "name": "council-ai-rwa-attest-engine",
   "version": "0.1.0",
   "description": "Python stdlib-only attestation engine (no third-party components)."
  }
 ],
 "vulnerabilities": []
}