{
  "name": "vibecarbon-template",
  "version": "0.1.0",
  "private": true,
  "type": "module",
  "engines": {
    "node": ">=24.15.0"
  },
  "scripts": {
    "dev:init": "node scripts/dev-init.js",
    "dev:start": "node scripts/docker-up.js && npm run db:migrate && exec node scripts/dev.js",
    "dev:start:all": "node scripts/docker-up.js --all && npm run db:migrate && exec node scripts/dev.js",
    "dev:stop": "node scripts/docker-down.js",
    "dev:stop:all": "node scripts/docker-down.js --all",
    "dev:reset": "node scripts/docker-down.js -v --rmi",
    "dev:reset:all": "node scripts/docker-down.js -v --rmi --all",
    "dev": "exec node scripts/dev.js",
    "dev:server": "tsx watch --env-file=.env.local src/server/index.ts",
    "dev:client": "vite",
    "build": "npm run build:client && npm run build:server",
    "build:client": "vite build && tsx scripts/generate-sitemap.ts && tsx scripts/generate-rss.ts && tsx scripts/generate-seo.ts",
    "build:server": "esbuild src/server/index.ts --bundle --platform=node --target=node24 --format=esm --outfile=dist/server/index.js --external:pino --external:pino-pretty --banner:js=\"import{createRequire as __cr}from'module';const require=__cr(import.meta.url);\"",
    "start": "node dist/server/index.js",
    "lint": "biome check .",
    "lint:fix": "biome check --write .",
    "format": "biome format --write .",
    "typecheck": "tsc --noEmit && tsc -p tsconfig.server.json --noEmit",
    "test": "vitest run",
    "test:watch": "vitest",
    "test:unit": "vitest run --project unit",
    "test:component": "vitest run --project component",
    "test:integration": "vitest run --project integration",
    "test:security": "vitest run tests/structural/security-invariants.test.ts",
    "test:coverage": "vitest run --coverage",
    "test:prepush": "npm run lint && npm run test:unit && npm run test:component && npm run test:integration",
    "docker:up": "node scripts/docker-up.js",
    "docker:up:all": "node scripts/docker-up.js --all",
    "docker:down": "node scripts/docker-down.js",
    "docker:down:all": "node scripts/docker-down.js --all",
    "docker:logs": "node scripts/docker-logs.js",
    "docker:reset": "node scripts/docker-down.js -v --rmi",
    "docker:reset:all": "node scripts/docker-down.js -v --rmi --all",
    "docker:prod:up": "node scripts/docker-up.js --prod",
    "docker:prod:down": "node scripts/docker-down.js --prod",
    "db:migrate": "node scripts/db-migrate.js",
    "db:reset": "node scripts/docker-down.js -v && node scripts/docker-up.js",
    "k8s:apply": "node scripts/k8s-apply.js",
    "k8s:delete": "node scripts/k8s-delete.js",
    "k8s:local:up": "./k8s/test-local.sh",
    "k8s:local:status": "./k8s/test-local.sh status",
    "k8s:local:debug": "./k8s/test-local.sh debug",
    "k8s:local:down": "./k8s/test-local.sh delete",
    "stripe:listen": "stripe listen --forward-to localhost:3000/api/webhooks/stripe"
  },
  "dependencies": {
    "@base-ui/react": "^1.8.0",
    "@fontsource-variable/noto-sans": "^5.3.0",
    "@fontsource/jetbrains-mono": "^5.3.0",
    "@hono/node-server": "^2.1.1",
    "@hono/zod-openapi": "^1.6.3",
    "@hookform/resolvers": "^5.9.1",
    "@mdx-js/react": "^3.1.1",
    "@mdx-js/rollup": "^3.1.1",
    "@scalar/api-reference-react": "^0.9.69",
    "@supabase/supabase-js": "^2.116.0",
    "@tabler/icons-react": "^3.45.0",
    "@tanstack/react-query": "^5.103.1",
    "class-variance-authority": "^0.7.1",
    "clsx": "^2.1.1",
    "cmdk": "^1.1.1",
    "date-fns": "^4.4.0",
    "embla-carousel-react": "^8.6.0",
    "framer-motion": "^13.4.0",
    "hono": "^4.13.8",
    "i18next": "^26.4.2",
    "i18next-browser-languagedetector": "^8.2.1",
    "input-otp": "^1.5.0",
    "ioredis": "^6.0.0",
    "lenis": "^1.3.26",
    "next-themes": "^0.4.6",
    "nodemailer": "^10.0.10",
    "pino": "^10.3.1",
    "react": "^19.2.8",
    "react-day-picker": "^10.0.1",
    "react-dom": "^19.3.0",
    "react-hook-form": "^7.88.0",
    "react-i18next": "^17.0.14",
    "react-resizable-panels": "^4.12.4",
    "react-router": "^8.4.0",
    "recharts": "^3.10.1",
    "rehype-autolink-headings": "^7.1.0",
    "rehype-slug": "^6.0.0",
    "remark-frontmatter": "^5.0.0",
    "remark-mdx-frontmatter": "^5.2.0",
    "sonner": "^2.0.8",
    "stripe": "^22.6.2",
    "tailwind-merge": "^3.7.0",
    "vaul": "^1.1.2",
    "zod": "^4.6.5"
  },
  "overrides": {
    "dompurify": "^3.4.0",
    "unhead": ">=2.1.13",
    "defu": ">=6.1.5",
    "path-to-regexp@>=8.0.0": ">=8.4.0",
    "postcss@<8.5.10": ">=8.5.10",
    "ip-address@<10.1.1": ">=10.1.1",
    "fast-uri@<3.1.2": ">=3.1.2",
    "protobufjs@<7.5.6": "^7.5.6",
    "@protobufjs/utf8@<1.1.1": "^1.1.1",
    "@hono/node-server@<2.0.5": ">=2.0.5",
    "toml@<4.2.0": ">=4.2.0",
    "undici@<7.29.0": "^7.29.0",
    "@ai-sdk/provider-utils@<4.0.33": ">=4.0.33 <5"
  },
  "pnpm": {
    "onlyBuiltDependencies": [
      "esbuild",
      "msw",
      "fsevents"
    ],
    "ignoredBuiltDependencies": [
      "vue-demi"
    ],
    "allowedDeprecatedVersions": {
      "node-domexception": "1.0.0"
    },
    "overrides": {
      "dompurify": "^3.4.0",
      "unhead": ">=2.1.13",
      "defu": ">=6.1.5",
      "path-to-regexp@>=8.0.0": ">=8.4.0",
      "postcss@<8.5.10": ">=8.5.10",
      "ip-address@<10.1.1": ">=10.1.1",
      "fast-uri@<3.1.2": ">=3.1.2",
      "protobufjs@<7.5.6": "^7.5.6",
      "@protobufjs/utf8@<1.1.1": "^1.1.1",
      "@hono/node-server@<2.0.5": ">=2.0.5",
      "toml@<4.2.0": ">=4.2.0",
      "undici@<7.29.0": "^7.29.0",
      "@ai-sdk/provider-utils@<4.0.33": ">=4.0.33 <5"
    },
    "peerDependencyRules": {
      "allowedVersions": {
        "typescript": "*"
      }
    }
  },
  "devDependencies": {
    "@biomejs/biome": "^2.5.14",
    "@hono/swagger-ui": "^0.6.1",
    "@mdx-js/mdx": "3.1.1",
    "@scalar/hono-api-reference": "^0.12.2",
    "@tailwindcss/typography": "^0.5.20",
    "@tailwindcss/vite": "^4.3.3",
    "@testing-library/jest-dom": "^7.0.1",
    "@testing-library/react": "^16.3.3",
    "@testing-library/user-event": "^14.6.7",
    "@types/node": "^26.6.1",
    "@types/nodemailer": "^8.0.2",
    "@types/pg": "^8.23.1",
    "@types/react": "^19.2.17",
    "@types/react-dom": "^19.3.0",
    "@vitejs/plugin-react": "^6.1.1",
    "@vitest/coverage-v8": "^5.0.1",
    "esbuild": "^0.28.2",
    "jsdom": "^30.1.0",
    "pg": "^8.23.0",
    "pino-pretty": "^13.1.3",
    "rehype-stringify": "^10.0.1",
    "remark-gfm": "^4.0.1",
    "remark-parse": "^11.0.0",
    "remark-rehype": "^11.1.2",
    "shadcn": "^4.21.0",
    "tailwindcss": "^4.3.3",
    "tsx": "^4.23.13",
    "tw-animate-css": "^1.4.0",
    "typescript": "^7.0.2",
    "unified": "^11.0.5",
    "vite": "^8.3.0",
    "vitest": "^5.0.1",
    "yaml": "^2.9.1"
  }
}
