[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M719S9ZKCCJ2QHZ7HJRCXV1P":3,"skill-same:01M719S9ZKCCJ2QHZ7HJRCXV1P":65},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":48,"ownerHtmlUrl":49,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":50,"install":51,"resources":64},"01M719S9ZKCCJ2QHZ7HJRCXV1P","vercel-deployment",null,"Vercel Edge and serverless deployment patterns for Next.js App Router. Use when optimizing API routes, configuring edge runtime, managing environment variables for deployment, or troubleshooting build\u002Fdeployment issues. Covers Kalmeron's deployment configuration on Replit.","dahaliztupe-sketch\u002FKalmeron-Two","dahaliztupe-sketch","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F271085317?v=4","01M719765Q83P08JCQ1SWNQR0N","01M719766HQBGF44W90MPJKTD2",1,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fdahaliztupe-sketch\u002FKalmeron-Two\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-deployment\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"vercel","vercel deployment","deployment","environment variables","app router","build","next","router","api","deployment patterns","Next.js","Variables","when","use","edge","issues","environment","runtime","for","app","2026-11-10 10:12:30",false,"---\nname: vercel-deployment\ndescription: Vercel Edge and serverless deployment patterns for Next.js App Router. Use when optimizing API routes, configuring edge runtime, managing environment variables for deployment, or troubleshooting build\u002Fdeployment issues. Covers Kalmeron's deployment configuration on Replit.\n---\n\n# Vercel Deployment Patterns for Next.js App Router\n\nOfficial patterns from Vercel engineering, adapted for Kalmeron's configuration.\n\n## Runtime Selection\n\n### Edge vs Node.js Runtimes\n```typescript\n\u002F\u002F Edge Runtime — faster cold start, global distribution, limited APIs\nexport const runtime = 'edge'; \u002F\u002F no fs, no child_process\n\n\u002F\u002F Node.js Runtime — full Node.js APIs (default for Kalmeron)\nexport const runtime = 'nodejs'; \u002F\u002F or just omit — default\n\n\u002F\u002F When to use Edge:\n\u002F\u002F - Simple auth checks, redirects, A\u002FB testing\n\u002F\u002F - Middleware (middleware.ts always runs on Edge)\n\n\u002F\u002F When to use Node.js (Kalmeron default):\n\u002F\u002F - Firebase Admin SDK (requires Node.js)\n\u002F\u002F - PDF processing, file operations\n\u002F\u002F - Complex AI inference calls\n```\n\n### Kalmeron-Specific Runtime Config\n```typescript\n\u002F\u002F middleware.ts — Edge (automatic, no config needed)\n\u002F\u002F app\u002Fapi\u002Fchat\u002Froute.ts — Node.js (Firebase + Gemini require it)\n\u002F\u002F app\u002Fapi\u002Fbilling\u002F — Node.js (Fawry API integration)\n```\n\n## Environment Variables\n\n### Required for Build (Kalmeron CI)\n```bash\nNEXT_TELEMETRY_DISABLED=1\nNEXT_PUBLIC_FIREBASE_API_KEY=\nNEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=\nNEXT_PUBLIC_FIREBASE_PROJECT_ID=\nNEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=\nNEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=\nNEXT_PUBLIC_FIREBASE_APP_ID=\nGEMINI_API_KEY=          # server-side only\nMOCK_AUTH=true           # CI builds only\n```\n\n### NEXT_PUBLIC_ Rule\n```typescript\n\u002F\u002F NEXT_PUBLIC_ prefix = exposed to browser bundle\n\u002F\u002F Without prefix = server-side only (never in client bundle)\n\n\u002F\u002F ✅ SAFE: API key server-side only\nconst key = process.env.GEMINI_API_KEY; \u002F\u002F server only\n\n\u002F\u002F ❌ DANGEROUS: would expose to client\nconst key = process.env.NEXT_PUBLIC_GEMINI_API_KEY; \u002F\u002F in browser!\n```\n\n## Next.js Config Optimization\n```typescript\n\u002F\u002F next.config.ts — Kalmeron production settings\nconst config: NextConfig = {\n  \u002F\u002F Image optimization\n  images: {\n    domains: ['firebasestorage.googleapis.com'],\n    formats: ['image\u002Favif', 'image\u002Fwebp'],\n  },\n  \u002F\u002F Bundle size\n  experimental: {\n    optimizeCss: true,\n  },\n  \u002F\u002F Security headers\n  async headers() {\n    return [{\n      source: '\u002F(.*)',\n      headers: [\n        { key: 'X-Content-Type-Options', value: 'nosniff' },\n        { key: 'X-Frame-Options', value: 'DENY' },\n        { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },\n      ],\n    }];\n  },\n};\n```\n\n## Build Optimization\n\n### Dynamic Imports for Heavy Components\n```typescript\n\u002F\u002F Lazy load heavy dependencies\nconst HeavyChart = dynamic(() => import('@\u002Fcomponents\u002Fcharts\u002FHeavyChart'), {\n  loading: () => \u003CPageSkeleton \u002F>,\n  ssr: false, \u002F\u002F if chart uses browser APIs\n});\n```\n\n### Bundle Analysis\n```bash\n# Check bundle size\nANALYZE=true npm run build\n# Look for: large vendor chunks, duplicate dependencies\n```\n\n## Replit-Specific Notes\n\n- Port: `5000` (configured in Replit workflow)\n- Host: `0.0.0.0` (required for Replit preview proxy)\n- `$REPLIT_DEV_DOMAIN` — use for webhooks\u002Fcallbacks during development\n- Deployment: Replit managed (not Vercel) — but patterns still apply\n\n## Common Build Failures\n\n| Error | Fix |\n|---|---|\n| `Module not found: firebase-admin` | Add to `serverComponentsExternalPackages` in next.config.ts |\n| `NEXT_PUBLIC_* undefined` | Set in Replit Secrets, not .env |\n| `Edge runtime: fs not supported` | Move to Node.js runtime or app\u002F(dynamic)\u002F |\n| Type error on build | Run `npx tsc --noEmit` locally first |\n","# Vercel Deployment Patterns for Next.js App Router\n\nOfficial patterns from Vercel engineering, adapted for Kalmeron's configuration.\n\n## Runtime Selection\n\n### Edge vs Node.js Runtimes\n```typescript\n\u002F\u002F Edge Runtime — faster cold start, global distribution, limited APIs\nexport const runtime = 'edge'; \u002F\u002F no fs, no child_process\n\n\u002F\u002F Node.js Runtime — full Node.js APIs (default for Kalmeron)\nexport const runtime = 'nodejs'; \u002F\u002F or just omit — default\n\n\u002F\u002F When to use Edge:\n\u002F\u002F - Simple auth checks, redirects, A\u002FB testing\n\u002F\u002F - Middleware (middleware.ts always runs on Edge)\n\n\u002F\u002F When to use Node.js (Kalmeron default):\n\u002F\u002F - Firebase Admin SDK (requires Node.js)\n\u002F\u002F - PDF processing, file operations\n\u002F\u002F - Complex AI inference calls\n```\n\n### Kalmeron-Specific Runtime Config\n```typescript\n\u002F\u002F middleware.ts — Edge (automatic, no config needed)\n\u002F\u002F app\u002Fapi\u002Fchat\u002Froute.ts — Node.js (Firebase + Gemini require it)\n\u002F\u002F app\u002Fapi\u002Fbilling\u002F — Node.js (Fawry API integration)\n```\n\n## Environment Variables\n\n### Required for Build (Kalmeron CI)\n```bash\nNEXT_TELEMETRY_DISABLED=1\nNEXT_PUBLIC_FIREBASE_API_KEY=\nNEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=\nNEXT_PUBLIC_FIREBASE_PROJECT_ID=\nNEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=\nNEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=\nNEXT_PUBLIC_FIREBASE_APP_ID=\nGEMINI_API_KEY=          # server-side only\nMOCK_AUTH=true           # CI builds only\n```\n\n### NEXT_PUBLIC_ Rule\n```typescript\n\u002F\u002F NEXT_PUBLIC_ prefix = exposed to browser bundle\n\u002F\u002F Without prefix = server-side only (never in client bundle)\n\n\u002F\u002F ✅ SAFE: API key server-side only\nconst key = process.env.GEMINI_API_KEY; \u002F\u002F server only\n\n\u002F\u002F ❌ DANGEROUS: would expose to client\nconst key = process.env.NEXT_PUBLIC_GEMINI_API_KEY; \u002F\u002F in browser!\n```\n\n## Next.js Config Optimization\n```typescript\n\u002F\u002F next.config.ts — Kalmeron production settings\nconst config: NextConfig = {\n  \u002F\u002F Image optimization\n  images: {\n    domains: ['firebasestorage.googleapis.com'],\n    formats: ['image\u002Favif', 'image\u002Fwebp'],\n  },\n  \u002F\u002F Bundle size\n  experimental: {\n    optimizeCss: true,\n  },\n  \u002F\u002F Security headers\n  async headers() {\n    return [{\n      source: '\u002F(.*)',\n      headers: [\n        { key: 'X-Content-Type-Options', value: 'nosniff' },\n        { key: 'X-Frame-Options', value: 'DENY' },\n        { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },\n      ],\n    }];\n  },\n};\n```\n\n## Build Optimization\n\n### Dynamic Imports for Heavy Components\n```typescript\n\u002F\u002F Lazy load heavy dependencies\nconst HeavyChart = dynamic(() => import('@\u002Fcomponents\u002Fcharts\u002FHeavyChart'), {\n  loading: () => \u003CPageSkeleton \u002F>,\n  ssr: false, \u002F\u002F if chart uses browser APIs\n});\n```\n\n### Bundle Analysis\n```bash\n# Check bundle size\nANALYZE=true npm run build\n# Look for: large vendor chunks, duplicate dependencies\n```\n\n## Replit-Specific Notes\n\n- Port: `5000` (configured in Replit workflow)\n- Host: `0.0.0.0` (required for Replit preview proxy)\n- `$REPLIT_DEV_DOMAIN` — use for webhooks\u002Fcallbacks during development\n- Deployment: Replit managed (not Vercel) — but patterns still apply\n\n## Common Build Failures\n\n| Error | Fix |\n|---|---|\n| `Module not found: firebase-admin` | Add to `serverComponentsExternalPackages` in next.config.ts |\n| `NEXT_PUBLIC_* undefined` | Set in Replit Secrets, not .env |\n| `Edge runtime: fs not supported` | Move to Node.js runtime or app\u002F(dynamic)\u002F |\n| Type error on build | Run `npx tsc --noEmit` locally first |\n",{"name":5,"description":7},"main","13d9afadbb6a87d6209fe4bd6ca2bbe4553119ac",".agents\u002Fskills\u002Fvercel-deployment",0,"https:\u002F\u002Fgithub.com\u002Fdahaliztupe-sketch\u002FKalmeron-Two","https:\u002F\u002Fkalmeron-two.vercel.app","https:\u002F\u002Fgithub.com\u002Fdahaliztupe-sketch","2026-10-05 12:24:53",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add dahaliztupe-sketch\u002FKalmeron-Two --skill vercel-deployment",{"tool":57,"command":58},"bunx","bunx skills add dahaliztupe-sketch\u002FKalmeron-Two --skill vercel-deployment",{"tool":60,"command":61},"pnpm","pnpm dlx skills add dahaliztupe-sketch\u002FKalmeron-Two --skill vercel-deployment","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdahaliztupe-sketch\u002FKalmeron-Two\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-deployment\u002FSKILL.md",true,[],[66,83,106,124,152,183],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":70,"sourceHtmlUrl":71,"categories":72,"keywords":78,"publishedAt":38},"01M719SWYD9RGS97HJ69PXWY62","add-new-agent","خطوات تفصيليّة لإضافة وكيل ذكاء اصطناعي جديد إلى منصّة Kalmeron من الفكرة إلى الإنتاج","https:\u002F\u002Fgithub.com\u002Fdahaliztupe-sketch\u002FKalmeron-Two\u002Fblob\u002Fmain\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fdahaliztupe-sketch\u002FKalmeron-Two\u002Fblob\u002Fmain\u002FSKILL.md",[73],{"categoryNo":74,"categoryName":75,"taxonomyType":76,"taxonomyTypeDesc":77},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[79,80,81,82],"add","add new agent","new","new agent",{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":100,"publishedAt":38},"01M719SSKNBA7T5NS7V6DP0PX4","writing-skills","Use when creating new skills, editing existing skills, or verifying skills work before deployment","https:\u002F\u002Fgithub.com\u002Fdahaliztupe-sketch\u002FKalmeron-Two\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwriting-skills\u002FSKILL.md",[89,92,95],{"categoryNo":90,"categoryName":91,"taxonomyType":76,"taxonomyTypeDesc":77},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":93,"categoryName":94,"taxonomyType":76,"taxonomyTypeDesc":77},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[101,102,81,30,103,104,20,31,105],"writing skills","writing","work","editing","Existing",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":114,"publishedAt":38},"01M719SRFDNKA3044QD3FYZ05R","writing-plans","Use when you have a spec or requirements for a multi-step task, before touching code","https:\u002F\u002Fgithub.com\u002Fdahaliztupe-sketch\u002FKalmeron-Two\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwriting-plans\u002FSKILL.md",[112,113],{"categoryNo":93,"categoryName":94,"taxonomyType":76,"taxonomyTypeDesc":77},{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},[115,102,116,117,118,119,30,31,36,120,121,122,123],"writing plans","plans","code","requirements","you","task","multi","spec","multi-step task",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":136,"publishedAt":38},"01M719SPN5FM1JYJSR9DGJQPZ0","web-design-guidelines","Review UI code for Web Interface Guidelines compliance. Use when asked to \"review my UI\", \"check accessibility\", \"audit design\", \"review UX\", or \"check my site against best practices\".","https:\u002F\u002Fgithub.com\u002Fdahaliztupe-sketch\u002FKalmeron-Two\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fweb-design-guidelines\u002FSKILL.md",[130,133],{"categoryNo":131,"categoryName":132,"taxonomyType":76,"taxonomyTypeDesc":77},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":134,"categoryName":135,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000032","设计师",[137,138,139,140,141,142,143,144,145,146,147,117,36,18,148,149,31,30,150,151],"web design","web design guidelines","web","design","guidelines","review","accessibility","ux","audit","compliance","check","interface","web interface guidelines","best practices","file",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":156,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":163,"publishedAt":38},"01M719SK11T05QYVPTWWYMYY5B","vitest","Set up Vitest testing in any project — detects project type (Cloudflare Workers, React, Node), generates vitest.config.ts, test setup, utilities, and sample tests. Also covers mocking patterns, coverage config, workspace setup, and Jest migration. Trigger with 'set up vitest', 'add tests', 'configure vitest', 'migrate from jest', 'vitest config', 'add unit tests', or 'testing setup'.","MIT","https:\u002F\u002Fgithub.com\u002Fdahaliztupe-sketch\u002FKalmeron-Two\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvitest\u002FSKILL.md",[159,160],{"categoryNo":90,"categoryName":91,"taxonomyType":76,"taxonomyTypeDesc":77},{"categoryNo":161,"categoryName":162,"taxonomyType":76,"taxonomyTypeDesc":77},"01JBSEEDCAT000000000000009","前端开发",[154,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182],"cloudflare","cloudflare workers","config","node","sample","react","jest","migrate","configure","Utilities","up","testing","workspace setup","project","unit","SET","coverage","test setup","patterns",{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":187,"categories":188,"keywords":189,"publishedAt":38},"01M719SGV9R1N88QWAB7Y925HD","verification-loops","Use when about to claim work is complete, fixed, or passing, before committing or creating PRs. Requires running verification commands and confirming output before making any success claims. Evidence before assertions always.","https:\u002F\u002Fgithub.com\u002Fdahaliztupe-sketch\u002FKalmeron-Two\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fverification-loops\u002FSKILL.md",[],[190,191,192,193,31,194,195,196,197,198,199,200,103,201,202,30],"loops","verification","verification loops","claim","assertions","prs","complete","evidence","running","commands","about","claims","output"]