github TypeScript re-analysis due

aicanvas-me/aicanvas

github

Open-core registry of animated React components, blocks, design systems, and templates. Real, editable code: install with one shadcn CLI command or let your AI agent pull it over MCP.

maintainer
aicanvas-me
licence
MIT
first seen
2026-09-06
last seen
2026-09-17
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 9 tools
transport stdio · http verified reported listed in the official MCP registry counts 9 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • get_component
  • get_install_command
  • get_system
  • get_template
  • list_categories
  • list_components
  • list_systems
  • list_templates
  • search_components
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 7862b1e · analyzer v33 · 14h ago

skills & prompt files 9

danger signals2

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 698

filesystem 35

  • fs aicanvas-me-aicanvas-7862b1e/app/_lib/andromeda-pro/andromeda-registry.ts :9 import { readFileSync } from 'fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/app/_lib/andromeda-pro/matrix/coverage.test.tsx :6 import { readFileSync, existsSync } from 'node:fs'
  • fs aicanvas-me-aicanvas-7862b1e/app/_lib/andromeda/andromeda-registry.ts :4 import { readFileSync } from 'fs'
  • fs aicanvas-me-aicanvas-7862b1e/app/api/andromeda-pro/image-pack/[file]/route.ts :1 import { readFile } from 'node:fs/promises'
  • fs aicanvas-me-aicanvas-7862b1e/app/design-systems/andromeda-pro/[component]/page.tsx :13 import { readFileSync } from 'fs'
  • fs aicanvas-me-aicanvas-7862b1e/app/design-systems/andromeda-pro/brain/explore/page.tsx :1 import { readFileSync } from 'node:fs'
  • fs aicanvas-me-aicanvas-7862b1e/app/design-systems/andromeda/brain/explore/page.tsx :1 import { readFileSync } from 'node:fs'
  • fs aicanvas-me-aicanvas-7862b1e/app/designsystem/page.tsx :1 import { readFileSync } from 'node:fs'
  • fs aicanvas-me-aicanvas-7862b1e/app/lib/available-design-systems.ts :2 import { existsSync } from 'node:fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/app/r/[file]/route.test.ts :2 import { existsSync } from 'node:fs'
  • fs aicanvas-me-aicanvas-7862b1e/app/r/[file]/route.ts :1 import { readFile } from 'node:fs/promises'
  • fs aicanvas-me-aicanvas-7862b1e/lib/registry/lookup.ts :2 import { readFileSync } from 'node:fs'
show 23 more
  • fs (weak) aicanvas-me-aicanvas-7862b1e/lib/theme/scope.test.ts :1 import { readFileSync, readdirSync, statSync } from 'node:fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/mcp/test/offline.mjs :25 import { readFile } from 'node:fs/promises'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/check-deps.mjs :8 import fs from 'node:fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/check-no-premium-leak.mjs :27 import { readFileSync } from 'node:fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/generate-component-codes.mjs :9 import { readFileSync, writeFileSync, readdirSync, statSync } from 'fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/generate-registry.mjs :11 import { readFileSync, writeFileSync, mkdirSync, readdirSync, statSync, unlinkSync, existsSync } from 'fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/gsc-audit.ts :16 import fs from 'fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/gsc-keywords.ts :20 import fs from 'fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/gsc-submit.ts :33 import fs from 'fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/inject-premium.mjs :31 import { readFileSync, writeFileSync, mkdirSync, rmSync, existsSync, readdirSync, statSync, cpSync } from 'node:fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/lib/imagekit.mjs :7 import { readFile } from 'fs/promises'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/lint-components.mjs :14 import { readFileSync, readdirSync, existsSync } from 'fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/lint-prompts.mjs :27 import { readFileSync, readdirSync, existsSync, writeFileSync } from 'fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/lint-registry-json.mjs :19 import { readFileSync, readdirSync } from 'fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/publish-premium.mjs :26 import { readFileSync, writeFileSync } from 'node:fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/readme-buttons.mjs :13 import { mkdir, writeFile, readFile } from 'node:fs/promises'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/replace-andromeda-shot.mjs :13 import { readFileSync, writeFileSync } from 'fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/screenshot-andromeda-templates.mjs :18 import { mkdir, rm } from 'fs/promises'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/screenshot-andromeda.mjs :21 import { mkdir, rm } from 'fs/promises'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/screenshot.mjs :10 import { mkdir, rm } from 'fs/promises'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/sync-brevo-contacts.mjs :14 import { readFileSync } from 'node:fs'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/upload-user-avatars.mjs :14 import { readdir } from 'fs/promises'
  • fs (weak) aicanvas-me-aicanvas-7862b1e/scripts/validate-registry-json.ts :1 import fs from 'fs'

shell / exec 8

  • shell (weak) aicanvas-me-aicanvas-7862b1e/mcp/test/client.mjs :5 import { spawn } from 'node:child_process'
  • shell (weak) aicanvas-me-aicanvas-7862b1e/next.config.ts :2 import { execSync } from "node:child_process";
  • shell (weak) aicanvas-me-aicanvas-7862b1e/scripts/check-deps.mjs :7 import { execSync } from 'node:child_process'
  • shell (weak) aicanvas-me-aicanvas-7862b1e/scripts/check-no-premium-leak.mjs :26 import { execSync } from 'node:child_process'
  • shell (weak) aicanvas-me-aicanvas-7862b1e/scripts/generate-component-codes.mjs :11 import { execSync } from 'child_process'
  • shell (weak) aicanvas-me-aicanvas-7862b1e/scripts/generate-registry.mjs :13 import { execSync } from 'child_process'
  • shell (weak) aicanvas-me-aicanvas-7862b1e/scripts/inject-premium.mjs :33 import { execSync } from 'node:child_process'
  • shell (weak) aicanvas-me-aicanvas-7862b1e/scripts/publish-premium.mjs :25 import { execSync } from 'node:child_process'

network 40

  • net aicanvas-me-aicanvas-7862b1e/app/_components/ShowcaseInstall.tsx :77 const res = await fetch(`/api/me/install-check?slug=${slug}`)
  • net aicanvas-me-aicanvas-7862b1e/app/_components/TemplatePreviewShell.tsx :702 const res = await fetch(`/api/me/install-check?slug=${templateSlug}`)
  • net aicanvas-me-aicanvas-7862b1e/app/_lib/useInstallToken.ts :17 fetch('/api/me/token')
  • net aicanvas-me-aicanvas-7862b1e/app/account/(member)/saved/SavedList.tsx :58 await fetch('/api/saved', {
  • net aicanvas-me-aicanvas-7862b1e/app/account/(member)/settings/AccountBilling.tsx :48 fetch('/api/me/subscription')
  • net aicanvas-me-aicanvas-7862b1e/app/account/auth/callback/route.ts :67 await fetch('https://api.resend.com/emails', {
  • net aicanvas-me-aicanvas-7862b1e/app/api/billing/cancel-confirm/route.ts :24 await fetch('https://api.resend.com/emails', {
  • net aicanvas-me-aicanvas-7862b1e/app/api/billing/cancel-request/route.ts :56 const cRes = await fetch(`${paddleApiBase()}/customers?email=${encodeURIComponent(email)}`, { headers })
  • net aicanvas-me-aicanvas-7862b1e/app/api/billing/portal/route.ts :24 const res = await fetch(
  • net aicanvas-me-aicanvas-7862b1e/app/api/checkout/completed/route.ts :41 const res = await fetch(`${paddleApiBase()}/transactions/${transactionId}`, {
  • net aicanvas-me-aicanvas-7862b1e/app/api/contact/route.ts :94 const res = await fetch('https://api.resend.com/emails', {
  • net aicanvas-me-aicanvas-7862b1e/app/api/cron/reconcile-subscriptions/route.ts :59 const res = await fetch(`${paddleApiBase()}/subscriptions/${row.paddle_subscription_id}`, {
show 28 more
  • net aicanvas-me-aicanvas-7862b1e/app/api/feedback/route.ts :171 const res = await fetch('https://api.resend.com/emails', {
  • net aicanvas-me-aicanvas-7862b1e/app/api/me/subscription/route.ts :39 const res = await fetch(`${paddleApiBase()}/subscriptions/${row.paddle_subscription_id}`, {
  • net aicanvas-me-aicanvas-7862b1e/app/api/webhooks/paddle/route.ts :26 const res = await fetch(`${paddleApiBase()}/customers/${customerId}`, {
  • net aicanvas-me-aicanvas-7862b1e/app/components/[slug]/ComponentPageView.tsx :190 const res = await fetch(`/api/component-code?slug=${slug}`)
  • net aicanvas-me-aicanvas-7862b1e/app/components/auth/SessionProvider.tsx :56 fetch('/api/saved', { method: 'GET' }),
  • net aicanvas-me-aicanvas-7862b1e/app/components/auth/SignInFormFields.tsx :59 const r = await fetch('/api/auth/login-hint', {
  • net aicanvas-me-aicanvas-7862b1e/app/components/billing/usePremiumStatus.ts :20 fetch('/api/me/entitlement')
  • net aicanvas-me-aicanvas-7862b1e/app/contact/page.tsx :40 const res = await fetch('/api/contact', {
  • net aicanvas-me-aicanvas-7862b1e/app/design-systems/andromeda-pro/[component]/AndromedaComponentView.tsx :126 fetch('/api/me/token')
  • net aicanvas-me-aicanvas-7862b1e/app/design-systems/andromeda-pro/image-pack/ImagePackProFiles.tsx :25 const res = await fetch(`/api/andromeda-pro/image-pack/${file}`)
  • net aicanvas-me-aicanvas-7862b1e/app/design-systems/andromeda/[component]/AndromedaComponentView.tsx :97 const res = await fetch(`/api/component-code?slug=${registrySlug}&system=andromeda`)
  • net aicanvas-me-aicanvas-7862b1e/app/feedback/page.tsx :141 const res = await fetch('/api/feedback', {
  • net aicanvas-me-aicanvas-7862b1e/app/kuendigen/page.tsx :85 const res = await fetch('/api/billing/cancel-request', {
  • net aicanvas-me-aicanvas-7862b1e/app/lab/60k-particles/page.tsx :97 fetch('/lab/ai-canvas-mark.webp')
  • net aicanvas-me-aicanvas-7862b1e/app/lib/analytics-server.ts :38 await fetch(`${POSTHOG_HOST}/i/v0/e/`, {
  • net aicanvas-me-aicanvas-7862b1e/app/lib/brevo.ts :43 const res = await fetch(`${BREVO_API}/contacts`, {
  • net aicanvas-me-aicanvas-7862b1e/app/lib/paddle/client.ts :36 fetch('/api/checkout/completed', {
  • net aicanvas-me-aicanvas-7862b1e/app/lib/registry-stats.ts :48 const res = await fetch(`${POSTHOG_API_HOST}/api/projects/${POSTHOG_PROJECT_ID}/query/`, {
  • net aicanvas-me-aicanvas-7862b1e/app/lib/track-install.ts :6 fetch('/api/history', {
  • net aicanvas-me-aicanvas-7862b1e/app/lib/turnstile.ts :22 const res = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', {
  • net aicanvas-me-aicanvas-7862b1e/app/mcp/InstallCards.tsx :247 fetch('/api/me/token')
  • net aicanvas-me-aicanvas-7862b1e/mcp/src/index.ts :151 const res = await fetch(META_URL, { headers: registryHeaders() })
  • net (weak) aicanvas-me-aicanvas-7862b1e/mcp/test/offline.mjs :24 import { createServer } from 'node:http'
  • net (weak) aicanvas-me-aicanvas-7862b1e/scripts/gsc-audit.ts :81 const res = await fetch(sitemapUrl)
  • net (weak) aicanvas-me-aicanvas-7862b1e/scripts/lib/imagekit.mjs :31 const res = await fetch(UPLOAD_URL, {
  • net (weak) aicanvas-me-aicanvas-7862b1e/scripts/publish-premium.mjs :112 const res = await fetch(`${SITE}/api/premium/health`, { cache: 'no-store' })
  • net (weak) aicanvas-me-aicanvas-7862b1e/scripts/replace-andromeda-shot.mjs :32 const listRes = await fetch('https://api.imagekit.io/v1/files?path=' + encodeURIComponent(SRC_FOLDER) + '&limit=300', { headers: { Authorization: `Basic ${auth}` } })
  • net (weak) aicanvas-me-aicanvas-7862b1e/scripts/sync-brevo-contacts.mjs :61 const res = await fetch('https://api.brevo.com/v3/contacts/import', {

secrets 29

  • secrets aicanvas-me-aicanvas-7862b1e/app/account/auth/callback/route.ts :47 const apiKey = process.env.RESEND_API_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/app/api/billing/cancel-confirm/route.ts :14 const apiKey = process.env.RESEND_API_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/app/api/billing/cancel-request/route.ts :52 const apiKey = process.env.PADDLE_API_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/app/api/billing/portal/route.ts :13 const apiKey = process.env.PADDLE_API_KEY
  • secrets (weak) aicanvas-me-aicanvas-7862b1e/app/api/checkout/completed/route.test.ts :48 process.env.PADDLE_API_KEY = 'test'
  • secrets aicanvas-me-aicanvas-7862b1e/app/api/checkout/completed/route.ts :32 const apiKey = process.env.PADDLE_API_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/app/api/contact/route.ts :51 const apiKey = process.env.RESEND_API_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/app/api/cron/reconcile-subscriptions/route.ts :25 const secret = process.env.CRON_SECRET
  • secrets (weak) aicanvas-me-aicanvas-7862b1e/app/api/feedback/route.test.ts :46 process.env.RESEND_API_KEY = 'test-key'
  • secrets aicanvas-me-aicanvas-7862b1e/app/api/feedback/route.ts :102 const apiKey = process.env.RESEND_API_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/app/api/me/subscription/route.ts :25 const apiKey = process.env.PADDLE_API_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/app/api/webhooks/brevo/route.ts :25 const secret = process.env.BREVO_WEBHOOK_SECRET
show 17 more
  • secrets aicanvas-me-aicanvas-7862b1e/app/api/webhooks/paddle/route.ts :23 const apiKey = process.env.PADDLE_API_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/app/lib/analytics-server.ts :10 const POSTHOG_KEY = process.env.POSTHOG_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/app/lib/billing/cancel-token.ts :15 const s = process.env.CANCEL_LINK_SECRET || process.env.SUPABASE_SECRET_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/app/lib/brevo.ts :18 const key = process.env.BREVO_API_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/app/lib/registry-stats.ts :45 const key = process.env.POSTHOG_PERSONAL_API_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/app/lib/supabase/admin.ts :12 const key = process.env.SUPABASE_SECRET_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/app/lib/turnstile.ts :13 const secret = process.env.TURNSTILE_SECRET_KEY
  • secrets aicanvas-me-aicanvas-7862b1e/mcp/src/index.ts :33 const USER_TOKEN = process.env.AICANVAS_TOKEN ?? ''
  • secrets (weak) aicanvas-me-aicanvas-7862b1e/scripts/gsc-audit.ts :36 const CREDS = process.env.GOOGLE_APPLICATION_CREDENTIALS
  • secrets (weak) aicanvas-me-aicanvas-7862b1e/scripts/gsc-keywords.ts :37 const CREDS = process.env.GOOGLE_APPLICATION_CREDENTIALS
  • secrets (weak) aicanvas-me-aicanvas-7862b1e/scripts/gsc-submit.ts :45 const CREDS = process.env.GOOGLE_APPLICATION_CREDENTIALS
  • secrets (weak) aicanvas-me-aicanvas-7862b1e/scripts/replace-andromeda-shot.mjs :18 const key = process.env.IMAGEKIT_PRIVATE_KEY
  • secrets (weak) aicanvas-me-aicanvas-7862b1e/scripts/screenshot-andromeda-templates.mjs :43 const IMAGEKIT_PRIVATE = process.env.IMAGEKIT_PRIVATE_KEY
  • secrets (weak) aicanvas-me-aicanvas-7862b1e/scripts/screenshot-andromeda.mjs :49 const IMAGEKIT_PRIVATE = process.env.IMAGEKIT_PRIVATE_KEY
  • secrets (weak) aicanvas-me-aicanvas-7862b1e/scripts/screenshot.mjs :107 const IMAGEKIT_PRIVATE = process.env.IMAGEKIT_PRIVATE_KEY
  • secrets (weak) aicanvas-me-aicanvas-7862b1e/scripts/sync-brevo-contacts.mjs :22 const { NEXT_PUBLIC_SUPABASE_URL, SUPABASE_SECRET_KEY, BREVO_API_KEY, BREVO_LIST_ID } = process.env
  • secrets (weak) aicanvas-me-aicanvas-7862b1e/scripts/upload-user-avatars.mjs :18 if (process.env.IMAGEKIT_PRIVATE_KEY === undefined) {

tool registrations 9

  • list_categories aicanvas-me-aicanvas-7862b1e/mcp/src/index.ts :286
  • list_components aicanvas-me-aicanvas-7862b1e/mcp/src/index.ts :320
  • search_components aicanvas-me-aicanvas-7862b1e/mcp/src/index.ts :390
  • get_component aicanvas-me-aicanvas-7862b1e/mcp/src/index.ts :463
  • get_install_command aicanvas-me-aicanvas-7862b1e/mcp/src/index.ts :560
  • list_systems aicanvas-me-aicanvas-7862b1e/mcp/src/index.ts :631
  • get_system aicanvas-me-aicanvas-7862b1e/mcp/src/index.ts :671
  • list_templates aicanvas-me-aicanvas-7862b1e/mcp/src/index.ts :744
  • get_template aicanvas-me-aicanvas-7862b1e/mcp/src/index.ts :803

install hooks 2

  • prepublishOnly aicanvas-me-aicanvas-7862b1e/mcp/package.json :54 npm run build
  • prepare aicanvas-me-aicanvas-7862b1e/package.json :7 git config core.hooksPath .githooks || true

declared dependencies 45

  • @carbon/icons-react@^11.78.0
  • @paddle/paddle-js@^1.6.4
  • @phosphor-icons/react@^2.1.10
  • @radix-ui/react-slot@^1.2.4
  • @react-three/drei@^10.7.7
  • @react-three/fiber@^9.5.0
  • @supabase/ssr@^0.10.3
  • @supabase/supabase-js@^2.105.4
  • @types/matter-js@^0.20.2
  • @types/three@^0.183.1
  • @vercel/analytics@^2.0.1
  • @vercel/speed-insights@^2.0.0
show 28 more
  • class-variance-authority@^0.7.1
  • clsx@^2.1.1
  • fflate@^0.8.3
  • framer-motion@^12.38.0
  • geist@^1.7.0
  • lucide-react@^1.7.0
  • matter-js@^0.20.0
  • mediabunny@^1.45.2
  • next@16.2.9
  • qrcode.react@^4.2.0
  • react@19.2.4
  • react-colorful@^5.7.0
  • react-dom@19.2.4
  • recharts@^3.8.1
  • server-only@^0.0.1
  • shiki@^4.0.2
  • tailwind-merge@^3.5.0
  • three@^0.183.2
  • @tailwindcss/postcss@^4
  • @types/node@^20
  • @types/react@^19
  • @types/react-dom@^19
  • babel-plugin-react-compiler@1.0.0
  • eslint@^9
  • eslint-config-next@16.2.9
  • fast-xml-parser@^5.7.3
  • googleapis@^171.4.0
  • jiti@^2.6.1

5 more not shown — this panel samples each group; the count above is the real total.

obfuscation 1

  • dynamic require()/import() aicanvas-me-aicanvas-7862b1e/scripts/lint-prompts.mjs :164 const mod = await import('data:text/javascript;base64,' + Buffer.from(src).toString('base64'))