[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openai-vercel-storage":3,"mdc--xf3vir-key":36,"related-org-openai-vercel-storage":5192,"related-repo-openai-vercel-storage":5399},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"vercel-storage","use Vercel storage products","Vercel storage expert guidance — Blob, Edge Config, and Marketplace storage (Neon Postgres, Upstash Redis). Use when choosing, configuring, or using data storage with Vercel applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"openai","OpenAI","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenai.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Vercel","vercel","tag",{"name":17,"slug":18,"type":15},"Neon","neon",{"name":20,"slug":21,"type":15},"PostgreSQL","postgresql",{"name":23,"slug":24,"type":15},"Storage","storage",3992,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins","2026-04-06T18:40:48.204758",null,465,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"OpenAI Plugins","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Ftree\u002FHEAD\u002Fplugins\u002Fvercel\u002Fskills\u002Fvercel-storage","---\nname: vercel-storage\ndescription: Vercel storage expert guidance — Blob, Edge Config, and Marketplace storage (Neon Postgres, Upstash Redis). Use when choosing, configuring, or using data storage with Vercel applications.\nmetadata:\n  priority: 7\n  docs:\n    - \"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fstorage\"\n  sitemap: \"https:\u002F\u002Fvercel.com\u002Fsitemap\u002Fdocs.xml\"\n  pathPatterns:\n    - 'lib\u002Fblob\u002F**'\n    - 'lib\u002Fstorage\u002F**'\n    - 'src\u002Flib\u002Fblob\u002F**'\n    - 'src\u002Flib\u002Fstorage\u002F**'\n    - 'lib\u002Fblob.*'\n    - 'lib\u002Fstorage.*'\n    - 'lib\u002Fedge-config.*'\n    - 'src\u002Flib\u002Fblob.*'\n    - 'src\u002Flib\u002Fstorage.*'\n    - 'src\u002Flib\u002Fedge-config.*'\n    - 'supabase\u002F**'\n    - 'lib\u002Fsupabase.*'\n    - 'src\u002Flib\u002Fsupabase.*'\n    - 'prisma\u002Fschema.prisma'\n    - 'prisma\u002F**'\n  bashPatterns:\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fblob\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fblob\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fblob\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fblob\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fedge-config\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fedge-config\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fedge-config\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fedge-config\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@neondatabase\u002Fserverless\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@neondatabase\u002Fserverless\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@neondatabase\u002Fserverless\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@neondatabase\u002Fserverless\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@upstash\u002Fredis\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@upstash\u002Fredis\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@upstash\u002Fredis\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@upstash\u002Fredis\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fkv\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fkv\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fkv\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fkv\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fpostgres\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fpostgres\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fpostgres\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fpostgres\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fsupabase-js\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fsupabase-js\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fsupabase-js\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@supabase\u002Fsupabase-js\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fssr\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fssr\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fssr\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@supabase\u002Fssr\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@prisma\u002Fclient\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@prisma\u002Fclient\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@prisma\u002Fclient\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@prisma\u002Fclient\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*\\bmongodb\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*\\bconvex\\b'\n    - '\\bnpm\\s+(install|i|add)\\s+[^\\n]*@libsql\u002Fclient\\b'\n    - '\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@libsql\u002Fclient\\b'\n    - '\\bbun\\s+(install|i|add)\\s+[^\\n]*@libsql\u002Fclient\\b'\n    - '\\byarn\\s+add\\s+[^\\n]*@libsql\u002Fclient\\b'\n  importPatterns:\n    - \"@vercel\u002Fblob\"\n    - \"@vercel\u002Fedge-config\"\n    - \"@neondatabase\u002Fserverless\"\n    - \"@upstash\u002Fredis\"\n    - \"@vercel\u002Fkv\"\n    - \"@vercel\u002Fpostgres\"\n    - \"@supabase\u002Fsupabase-js\"\n    - \"@prisma\u002Fclient\"\n---\n\n# Vercel Storage\n\nYou are an expert in Vercel's storage options. Know which products are active, which are sunset, and when to use each.\n\n## Provider Choice for Bootstrap\n\nChoose storage provisioning paths in this order:\n\n1. **Preferred**: Vercel-managed Neon\u002FUpstash through the Vercel Marketplace (`vercel integration add ...` or dashboard). This path auto-provisions accounts\u002Fresources and injects environment variables into the linked Vercel project.\n2. **Fallback**: Provider CLI\u002Fmanual provisioning only when Marketplace is unavailable or you must use an existing external account.\n\nWhen using fallback\u002Fmanual provisioning, you must add\u002Fsync environment variables yourself and then re-run `vercel env pull .env.local --yes` locally.\n\n## Active First-Party Storage\n\n### Vercel Blob — File Storage\n\nFast, scalable storage for unstructured data (images, videos, documents, any files).\n\n```bash\nnpm install @vercel\u002Fblob\n```\n\n```ts\nimport { put, del, list, get } from '@vercel\u002Fblob'\n\n\u002F\u002F Upload from server (public)\nconst blob = await put('images\u002Fphoto.jpg', file, {\n  access: 'public',\n})\n\u002F\u002F blob.url → public URL\n\n\u002F\u002F Upload private file\nconst privateBlob = await put('docs\u002Fsecret.pdf', file, {\n  access: 'private',\n})\n\u002F\u002F Read private file back\nconst privateFile = await get(privateBlob.url) \u002F\u002F returns ReadableStream + metadata\n\n\u002F\u002F Client upload (up to 5 TB)\nimport { upload } from '@vercel\u002Fblob\u002Fclient'\nconst blob = await upload('video.mp4', file, {\n  access: 'public',\n  handleUploadUrl: '\u002Fapi\u002Fupload', \u002F\u002F Your token endpoint\n})\n\n\u002F\u002F List blobs\nconst { blobs } = await list()\n\n\u002F\u002F Conditional get with ETags\nconst response = await get('images\u002Fphoto.jpg', {\n  ifNoneMatch: previousETag,\n})\nif (response.statusCode === 304) {\n  \u002F\u002F Not modified, use cached version\n}\n\n\u002F\u002F Delete\nawait del('images\u002Fphoto.jpg')\n```\n\n**Private Storage** (public beta): Use `access: 'private'` for files that should not be publicly accessible. Read them back with `get()`. Do NOT use private access for files that need to be served publicly — it leads to slow delivery and high egress costs.\n\n**Blob Data Transfer**: Vercel Blob uses two delivery strategies — **Fast Data Transfer** (94 cities, latency-optimized) and **Blob Data Transfer** (18 hubs, volume-optimized for large assets). The system automatically routes via the optimal path.\n\n**Use when**: Media files, user uploads, documents, any large unstructured data.\n\n### Vercel Edge Config — Global Configuration\n\nUltra-low-latency key-value store for application configuration. Not a database — designed for config data that must be read instantly at the edge.\n\n```bash\nnpm install @vercel\u002Fedge-config\n```\n\n```ts\nimport { get, getAll, has } from '@vercel\u002Fedge-config'\n\n\u002F\u002F Read a single value (\u003C 1ms at the edge)\nconst isFeatureEnabled = await get('feature-new-ui')\n\n\u002F\u002F Read multiple values\nconst config = await getAll(['feature-new-ui', 'ab-test-variant', 'redirect-rules'])\n\n\u002F\u002F Check existence\nconst exists = await has('maintenance-mode')\n```\n\n**Use when**: Feature flags, A\u002FB testing config, dynamic routing rules, maintenance mode toggles. Anything that must be read at the edge with near-zero latency.\n\n**Do NOT use for**: User data, session state, frequently written data. Edge Config is optimized for reads, not writes.\n\n**Next.js 16**: `@vercel\u002Fedge-config@^1.4.3` supports `cacheComponents` and the renamed `proxy.ts` (formerly `middleware.ts`).\n\n## Marketplace Storage (Partner-Provided)\n\n### IMPORTANT: @vercel\u002Fpostgres and @vercel\u002Fkv are SUNSET\n\nThese packages no longer exist as first-party Vercel products. Use the marketplace replacements:\n\n### Neon Postgres (replaces @vercel\u002Fpostgres)\n\nServerless Postgres with branching, auto-scaling, and connection pooling. The driver is GA at `@neondatabase\u002Fserverless@^1.0.2` and requires **Node.js 19+**.\n\n```bash\nnpm install @neondatabase\u002Fserverless\n```\n\n```ts\n\u002F\u002F Direct Neon usage\nimport { neon } from '@neondatabase\u002Fserverless'\n\nconst sql = neon(process.env.DATABASE_URL!)\nconst users = await sql`SELECT * FROM users WHERE id = ${userId}`\n\n\u002F\u002F With Drizzle ORM\nimport { drizzle } from 'drizzle-orm\u002Fneon-http'\nimport { neon } from '@neondatabase\u002Fserverless'\n\nconst sql = neon(process.env.DATABASE_URL!)\nconst db = drizzle(sql)\n```\n\n**Build-time safety**: The `neon()` call above throws if `DATABASE_URL` is not set. Since Next.js evaluates top-level module code at build time, this will crash `next build` when env vars aren't yet configured (e.g., first deploy before Marketplace provisioning). Use lazy initialization:\n\n```ts\n\u002F\u002F src\u002Fdb\u002Findex.ts — lazy initialization (safe for build time)\nimport { neon } from '@neondatabase\u002Fserverless'\nimport { drizzle } from 'drizzle-orm\u002Fneon-http'\nimport * as schema from '.\u002Fschema'\n\nfunction createDb() {\n  const sql = neon(process.env.DATABASE_URL!)\n  return drizzle(sql, { schema })\n}\n\nlet _db: ReturnType\u003Ctypeof createDb> | null = null\n\nexport function getDb() {\n  if (!_db) _db = createDb()\n  return _db\n}\n```\n\n**WARNING: Do NOT use JavaScript `Proxy` wrappers around the DB client.** A common pattern is wrapping `db` in a `Proxy` for lazy initialization. This breaks libraries like NextAuth\u002FAuth.js that inspect the DB adapter object (e.g., checking method existence, iterating properties). The Proxy intercepts those checks and breaks the auth request chain, causing hangs with no error. Use a plain `getDb()` function or a simple module-level lazy `let` instead.\n\n**Drizzle Kit migrations**: `drizzle-kit` and `tsx` do NOT auto-load `.env.local`. Source env vars manually or use `dotenv`:\n\n```bash\n# Option 1: Source env vars before running\nsource \u003C(grep -v '^#' .env.local | sed 's\u002F^\u002Fexport \u002F') && npx drizzle-kit push\n\n# Option 2: Use dotenv-cli (recommended for scripts)\nnpm install -D dotenv-cli\nnpx dotenv -e .env.local -- npx drizzle-kit push\nnpx dotenv -e .env.local -- npx tsx scripts\u002Fseed.ts\n```\n\nThis applies to any Node script that needs Vercel-provisioned env vars — only Next.js auto-loads `.env.local`.\n\nInstall via Vercel Marketplace for automatic environment variable provisioning.\n\n#### Neon CLI Fallback Notes\n\nIf you use Neon CLI as the fallback path, account\u002Fproject setup is managed on Neon directly instead of through Vercel Marketplace automation.\n\nFor **Vercel-managed Neon projects**, CLI operations require a **Neon API key**; do not rely on normal browser-auth login flow alone.\n\n### Upstash Redis (replaces @vercel\u002Fkv)\n\nServerless Redis with same Vercel billing integration.\n\n```bash\nnpm install @upstash\u002Fredis\n```\n\n```ts\nimport { Redis } from '@upstash\u002Fredis'\n\nconst redis = Redis.fromEnv() \u002F\u002F Uses UPSTASH_REDIS_REST_URL & TOKEN\n\n\u002F\u002F Basic operations\nawait redis.set('session:abc', { userId: '123' }, { ex: 3600 })\nconst session = await redis.get('session:abc')\n\n\u002F\u002F Rate limiting\nimport { Ratelimit } from '@upstash\u002Fratelimit'\nconst ratelimit = new Ratelimit({\n  redis,\n  limiter: Ratelimit.slidingWindow(10, '10s'),\n})\nconst { success } = await ratelimit.limit('user:123')\n```\n\nInstall via Vercel Marketplace for automatic environment variable provisioning.\n\n### Supabase (Marketplace Native)\n\nFull Postgres database with built-in auth, realtime subscriptions, and storage. Native Vercel Marketplace integration.\n\n```bash\nnpm install @supabase\u002Fsupabase-js @supabase\u002Fssr\n```\n\n```ts\nimport { createClient } from '@supabase\u002Fsupabase-js'\n\nconst supabase = createClient(\n  process.env.NEXT_PUBLIC_SUPABASE_URL!,\n  process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!\n)\n\nconst { data, error } = await supabase.from('users').select('*')\n```\n\nInstall via Vercel Marketplace: `vercel integration add supabase`\n\n### Prisma ORM (Marketplace Native)\n\nType-safe ORM with auto-generated client, migrations, and Prisma Accelerate for connection pooling.\n\n```bash\nnpm install prisma @prisma\u002Fclient\nnpx prisma init\n```\n\n```ts\nimport { PrismaClient } from '@prisma\u002Fclient'\n\nconst prisma = new PrismaClient()\nconst users = await prisma.user.findMany()\n```\n\nInstall via Vercel Marketplace: `vercel integration add prisma`\n\n### MongoDB Atlas\n\nDocument database with flexible schemas. Available via Vercel Marketplace.\n\n```bash\nnpm install mongodb\n```\n\n```ts\nimport { MongoClient } from 'mongodb'\n\nconst client = new MongoClient(process.env.MONGODB_URI!)\nconst db = client.db('myapp')\nconst users = await db.collection('users').find({}).toArray()\n```\n\nInstall via Vercel Marketplace: `vercel integration add mongodb-atlas`\n\n### Convex\n\nReactive backend-as-a-service with real-time sync, serverless functions, and file storage.\n\n```bash\nnpm install convex\nnpx convex dev\n```\n\n```ts\nimport { query } from '.\u002F_generated\u002Fserver'\nimport { v } from 'convex\u002Fvalues'\n\nexport const getUsers = query({\n  args: {},\n  handler: async (ctx) => {\n    return await ctx.db.query('users').collect()\n  },\n})\n```\n\n### Turso (libSQL)\n\nEdge-native SQLite database with embedded replicas for ultra-low latency reads.\n\n```bash\nnpm install @libsql\u002Fclient\n```\n\n```ts\nimport { createClient } from '@libsql\u002Fclient'\n\nconst turso = createClient({\n  url: process.env.TURSO_DATABASE_URL!,\n  authToken: process.env.TURSO_AUTH_TOKEN!,\n})\n\nconst result = await turso.execute('SELECT * FROM users')\n```\n\nInstall via Vercel Marketplace: `vercel integration add turso`\n\n## Storage Decision Matrix\n\n| Need | Use | Package |\n|------|-----|---------|\n| File uploads, media, documents | Vercel Blob | `@vercel\u002Fblob` |\n| Feature flags, A\u002FB config | Edge Config | `@vercel\u002Fedge-config` |\n| Relational data, SQL queries | Neon Postgres | `@neondatabase\u002Fserverless` |\n| Key-value cache, sessions, rate limiting | Upstash Redis | `@upstash\u002Fredis` |\n| Postgres + auth + realtime + storage | Supabase | `@supabase\u002Fsupabase-js` |\n| Type-safe ORM with migrations | Prisma | `@prisma\u002Fclient` |\n| Document database, flexible schemas | MongoDB Atlas | `mongodb` |\n| Reactive backend with real-time sync | Convex | `convex` |\n| Edge-native SQLite with replicas | Turso | `@libsql\u002Fclient` |\n| Full-text search | Neon Postgres (pg_trgm) or Elasticsearch (Marketplace) | varies |\n| Vector embeddings | Neon Postgres (pgvector) or Pinecone (Marketplace) | varies |\n\n## Migration Guide\n\n### From @vercel\u002Fpostgres → Neon\n```diff\n- import { sql } from '@vercel\u002Fpostgres'\n+ import { neon } from '@neondatabase\u002Fserverless'\n+ const sql = neon(process.env.DATABASE_URL!)\n\n```\n\n**Drop-in replacement**: For minimal migration effort, use `@neondatabase\u002Fvercel-postgres-compat` which provides API-compatible wrappers for `@vercel\u002Fpostgres` imports.\n\n### From @vercel\u002Fkv → Upstash Redis\n```diff\n- import { kv } from '@vercel\u002Fkv'\n- await kv.set('key', 'value')\n- const value = await kv.get('key')\n+ import { Redis } from '@upstash\u002Fredis'\n+ const redis = Redis.fromEnv()\n+ await redis.set('key', 'value')\n+ const value = await redis.get('key')\n```\n\n## Installing Marketplace Storage\n\nUse the Vercel CLI or the Marketplace dashboard at `https:\u002F\u002Fvercel.com\u002Fdashboard\u002F{team}\u002Fstores`:\n\n```bash\n# Install a storage integration (auto-provisions env vars)\nvercel integration add neon\nvercel integration add upstash\n\n# List installed integrations\nvercel integration list\n```\n\nBrowse additional storage options at the [Vercel Marketplace](https:\u002F\u002Fvercel.com\u002Fmarketplace). Installing via the CLI or dashboard (`https:\u002F\u002Fvercel.com\u002Fdashboard\u002F{team}\u002Fintegrations`) automatically provisions accounts, creates databases, and sets environment variables.\n\n## Official Documentation\n\n- [Vercel Storage](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fstorage)\n- [Vercel Blob](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fvercel-blob)\n- [Edge Config](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fedge-config)\n- [Vercel Marketplace](https:\u002F\u002Fvercel.com\u002Fmarketplace) — Neon, Upstash, and other storage integrations\n- [Integrations](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fintegrations)\n- [GitHub: Vercel Storage](https:\u002F\u002Fgithub.com\u002Fvercel\u002Fstorage)\n",{"data":37,"body":117},{"name":4,"description":6,"metadata":38},{"priority":39,"docs":40,"sitemap":42,"pathPatterns":43,"bashPatterns":59,"importPatterns":108},7,[41],"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fstorage","https:\u002F\u002Fvercel.com\u002Fsitemap\u002Fdocs.xml",[44,45,46,47,48,49,50,51,52,53,54,55,56,57,58],"lib\u002Fblob\u002F**","lib\u002Fstorage\u002F**","src\u002Flib\u002Fblob\u002F**","src\u002Flib\u002Fstorage\u002F**","lib\u002Fblob.*","lib\u002Fstorage.*","lib\u002Fedge-config.*","src\u002Flib\u002Fblob.*","src\u002Flib\u002Fstorage.*","src\u002Flib\u002Fedge-config.*","supabase\u002F**","lib\u002Fsupabase.*","src\u002Flib\u002Fsupabase.*","prisma\u002Fschema.prisma","prisma\u002F**",[60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107],"\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fblob\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fblob\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fblob\\b","\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fblob\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fedge-config\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fedge-config\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fedge-config\\b","\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fedge-config\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@neondatabase\u002Fserverless\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@neondatabase\u002Fserverless\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@neondatabase\u002Fserverless\\b","\\byarn\\s+add\\s+[^\\n]*@neondatabase\u002Fserverless\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@upstash\u002Fredis\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@upstash\u002Fredis\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@upstash\u002Fredis\\b","\\byarn\\s+add\\s+[^\\n]*@upstash\u002Fredis\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fkv\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fkv\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fkv\\b","\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fkv\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fpostgres\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fpostgres\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@vercel\u002Fpostgres\\b","\\byarn\\s+add\\s+[^\\n]*@vercel\u002Fpostgres\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fsupabase-js\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fsupabase-js\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fsupabase-js\\b","\\byarn\\s+add\\s+[^\\n]*@supabase\u002Fsupabase-js\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fssr\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fssr\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@supabase\u002Fssr\\b","\\byarn\\s+add\\s+[^\\n]*@supabase\u002Fssr\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@prisma\u002Fclient\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@prisma\u002Fclient\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@prisma\u002Fclient\\b","\\byarn\\s+add\\s+[^\\n]*@prisma\u002Fclient\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bmongodb\\b","\\byarn\\s+add\\s+[^\\n]*\\bmongodb\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*\\bconvex\\b","\\byarn\\s+add\\s+[^\\n]*\\bconvex\\b","\\bnpm\\s+(install|i|add)\\s+[^\\n]*@libsql\u002Fclient\\b","\\bpnpm\\s+(install|i|add)\\s+[^\\n]*@libsql\u002Fclient\\b","\\bbun\\s+(install|i|add)\\s+[^\\n]*@libsql\u002Fclient\\b","\\byarn\\s+add\\s+[^\\n]*@libsql\u002Fclient\\b",[109,110,111,112,113,114,115,116],"@vercel\u002Fblob","@vercel\u002Fedge-config","@neondatabase\u002Fserverless","@upstash\u002Fredis","@vercel\u002Fkv","@vercel\u002Fpostgres","@supabase\u002Fsupabase-js","@prisma\u002Fclient",{"type":118,"children":119},"root",[120,128,134,141,146,181,194,200,207,212,246,1095,1121,1144,1154,1160,1165,1188,1463,1472,1482,1524,1530,1536,1541,1547,1566,1589,1915,1948,2360,2408,2448,2661,2672,2677,2684,2689,2708,2714,2719,2742,3229,3233,3239,3244,3272,3521,3532,3538,3543,3587,3710,3720,3726,3731,3754,3995,4005,4011,4016,4056,4320,4326,4331,4354,4580,4590,4596,4851,4857,4863,4896,4921,4927,4990,4996,5008,5096,5120,5126,5186],{"type":121,"tag":122,"props":123,"children":124},"element","h1",{"id":4},[125],{"type":126,"value":127},"text","Vercel Storage",{"type":121,"tag":129,"props":130,"children":131},"p",{},[132],{"type":126,"value":133},"You are an expert in Vercel's storage options. Know which products are active, which are sunset, and when to use each.",{"type":121,"tag":135,"props":136,"children":138},"h2",{"id":137},"provider-choice-for-bootstrap",[139],{"type":126,"value":140},"Provider Choice for Bootstrap",{"type":121,"tag":129,"props":142,"children":143},{},[144],{"type":126,"value":145},"Choose storage provisioning paths in this order:",{"type":121,"tag":147,"props":148,"children":149},"ol",{},[150,171],{"type":121,"tag":151,"props":152,"children":153},"li",{},[154,160,162,169],{"type":121,"tag":155,"props":156,"children":157},"strong",{},[158],{"type":126,"value":159},"Preferred",{"type":126,"value":161},": Vercel-managed Neon\u002FUpstash through the Vercel Marketplace (",{"type":121,"tag":163,"props":164,"children":166},"code",{"className":165},[],[167],{"type":126,"value":168},"vercel integration add ...",{"type":126,"value":170}," or dashboard). This path auto-provisions accounts\u002Fresources and injects environment variables into the linked Vercel project.",{"type":121,"tag":151,"props":172,"children":173},{},[174,179],{"type":121,"tag":155,"props":175,"children":176},{},[177],{"type":126,"value":178},"Fallback",{"type":126,"value":180},": Provider CLI\u002Fmanual provisioning only when Marketplace is unavailable or you must use an existing external account.",{"type":121,"tag":129,"props":182,"children":183},{},[184,186,192],{"type":126,"value":185},"When using fallback\u002Fmanual provisioning, you must add\u002Fsync environment variables yourself and then re-run ",{"type":121,"tag":163,"props":187,"children":189},{"className":188},[],[190],{"type":126,"value":191},"vercel env pull .env.local --yes",{"type":126,"value":193}," locally.",{"type":121,"tag":135,"props":195,"children":197},{"id":196},"active-first-party-storage",[198],{"type":126,"value":199},"Active First-Party Storage",{"type":121,"tag":201,"props":202,"children":204},"h3",{"id":203},"vercel-blob-file-storage",[205],{"type":126,"value":206},"Vercel Blob — File Storage",{"type":121,"tag":129,"props":208,"children":209},{},[210],{"type":126,"value":211},"Fast, scalable storage for unstructured data (images, videos, documents, any files).",{"type":121,"tag":213,"props":214,"children":219},"pre",{"className":215,"code":216,"language":217,"meta":218,"style":218},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install @vercel\u002Fblob\n","bash","",[220],{"type":121,"tag":163,"props":221,"children":222},{"__ignoreMap":218},[223],{"type":121,"tag":224,"props":225,"children":228},"span",{"class":226,"line":227},"line",1,[229,235,241],{"type":121,"tag":224,"props":230,"children":232},{"style":231},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[233],{"type":126,"value":234},"npm",{"type":121,"tag":224,"props":236,"children":238},{"style":237},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[239],{"type":126,"value":240}," install",{"type":121,"tag":224,"props":242,"children":243},{"style":237},[244],{"type":126,"value":245}," @vercel\u002Fblob\n",{"type":121,"tag":213,"props":247,"children":251},{"className":248,"code":249,"language":250,"meta":218,"style":218},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { put, del, list, get } from '@vercel\u002Fblob'\n\n\u002F\u002F Upload from server (public)\nconst blob = await put('images\u002Fphoto.jpg', file, {\n  access: 'public',\n})\n\u002F\u002F blob.url → public URL\n\n\u002F\u002F Upload private file\nconst privateBlob = await put('docs\u002Fsecret.pdf', file, {\n  access: 'private',\n})\n\u002F\u002F Read private file back\nconst privateFile = await get(privateBlob.url) \u002F\u002F returns ReadableStream + metadata\n\n\u002F\u002F Client upload (up to 5 TB)\nimport { upload } from '@vercel\u002Fblob\u002Fclient'\nconst blob = await upload('video.mp4', file, {\n  access: 'public',\n  handleUploadUrl: '\u002Fapi\u002Fupload', \u002F\u002F Your token endpoint\n})\n\n\u002F\u002F List blobs\nconst { blobs } = await list()\n\n\u002F\u002F Conditional get with ETags\nconst response = await get('images\u002Fphoto.jpg', {\n  ifNoneMatch: previousETag,\n})\nif (response.statusCode === 304) {\n  \u002F\u002F Not modified, use cached version\n}\n\n\u002F\u002F Delete\nawait del('images\u002Fphoto.jpg')\n","ts",[252],{"type":121,"tag":163,"props":253,"children":254},{"__ignoreMap":218},[255,328,338,348,415,448,462,470,478,487,545,574,586,595,640,648,657,695,752,780,815,827,835,844,883,891,900,949,971,983,1027,1036,1045,1053,1062],{"type":121,"tag":224,"props":256,"children":257},{"class":226,"line":227},[258,264,270,276,281,286,290,295,299,304,309,314,319,323],{"type":121,"tag":224,"props":259,"children":261},{"style":260},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[262],{"type":126,"value":263},"import",{"type":121,"tag":224,"props":265,"children":267},{"style":266},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[268],{"type":126,"value":269}," {",{"type":121,"tag":224,"props":271,"children":273},{"style":272},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[274],{"type":126,"value":275}," put",{"type":121,"tag":224,"props":277,"children":278},{"style":266},[279],{"type":126,"value":280},",",{"type":121,"tag":224,"props":282,"children":283},{"style":272},[284],{"type":126,"value":285}," del",{"type":121,"tag":224,"props":287,"children":288},{"style":266},[289],{"type":126,"value":280},{"type":121,"tag":224,"props":291,"children":292},{"style":272},[293],{"type":126,"value":294}," list",{"type":121,"tag":224,"props":296,"children":297},{"style":266},[298],{"type":126,"value":280},{"type":121,"tag":224,"props":300,"children":301},{"style":272},[302],{"type":126,"value":303}," get",{"type":121,"tag":224,"props":305,"children":306},{"style":266},[307],{"type":126,"value":308}," }",{"type":121,"tag":224,"props":310,"children":311},{"style":260},[312],{"type":126,"value":313}," from",{"type":121,"tag":224,"props":315,"children":316},{"style":266},[317],{"type":126,"value":318}," '",{"type":121,"tag":224,"props":320,"children":321},{"style":237},[322],{"type":126,"value":109},{"type":121,"tag":224,"props":324,"children":325},{"style":266},[326],{"type":126,"value":327},"'\n",{"type":121,"tag":224,"props":329,"children":331},{"class":226,"line":330},2,[332],{"type":121,"tag":224,"props":333,"children":335},{"emptyLinePlaceholder":334},true,[336],{"type":126,"value":337},"\n",{"type":121,"tag":224,"props":339,"children":341},{"class":226,"line":340},3,[342],{"type":121,"tag":224,"props":343,"children":345},{"style":344},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[346],{"type":126,"value":347},"\u002F\u002F Upload from server (public)\n",{"type":121,"tag":224,"props":349,"children":351},{"class":226,"line":350},4,[352,358,363,368,373,378,383,388,393,397,401,406,410],{"type":121,"tag":224,"props":353,"children":355},{"style":354},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[356],{"type":126,"value":357},"const",{"type":121,"tag":224,"props":359,"children":360},{"style":272},[361],{"type":126,"value":362}," blob ",{"type":121,"tag":224,"props":364,"children":365},{"style":266},[366],{"type":126,"value":367},"=",{"type":121,"tag":224,"props":369,"children":370},{"style":260},[371],{"type":126,"value":372}," await",{"type":121,"tag":224,"props":374,"children":376},{"style":375},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[377],{"type":126,"value":275},{"type":121,"tag":224,"props":379,"children":380},{"style":272},[381],{"type":126,"value":382},"(",{"type":121,"tag":224,"props":384,"children":385},{"style":266},[386],{"type":126,"value":387},"'",{"type":121,"tag":224,"props":389,"children":390},{"style":237},[391],{"type":126,"value":392},"images\u002Fphoto.jpg",{"type":121,"tag":224,"props":394,"children":395},{"style":266},[396],{"type":126,"value":387},{"type":121,"tag":224,"props":398,"children":399},{"style":266},[400],{"type":126,"value":280},{"type":121,"tag":224,"props":402,"children":403},{"style":272},[404],{"type":126,"value":405}," file",{"type":121,"tag":224,"props":407,"children":408},{"style":266},[409],{"type":126,"value":280},{"type":121,"tag":224,"props":411,"children":412},{"style":266},[413],{"type":126,"value":414}," {\n",{"type":121,"tag":224,"props":416,"children":418},{"class":226,"line":417},5,[419,425,430,434,439,443],{"type":121,"tag":224,"props":420,"children":422},{"style":421},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[423],{"type":126,"value":424},"  access",{"type":121,"tag":224,"props":426,"children":427},{"style":266},[428],{"type":126,"value":429},":",{"type":121,"tag":224,"props":431,"children":432},{"style":266},[433],{"type":126,"value":318},{"type":121,"tag":224,"props":435,"children":436},{"style":237},[437],{"type":126,"value":438},"public",{"type":121,"tag":224,"props":440,"children":441},{"style":266},[442],{"type":126,"value":387},{"type":121,"tag":224,"props":444,"children":445},{"style":266},[446],{"type":126,"value":447},",\n",{"type":121,"tag":224,"props":449,"children":451},{"class":226,"line":450},6,[452,457],{"type":121,"tag":224,"props":453,"children":454},{"style":266},[455],{"type":126,"value":456},"}",{"type":121,"tag":224,"props":458,"children":459},{"style":272},[460],{"type":126,"value":461},")\n",{"type":121,"tag":224,"props":463,"children":464},{"class":226,"line":39},[465],{"type":121,"tag":224,"props":466,"children":467},{"style":344},[468],{"type":126,"value":469},"\u002F\u002F blob.url → public URL\n",{"type":121,"tag":224,"props":471,"children":473},{"class":226,"line":472},8,[474],{"type":121,"tag":224,"props":475,"children":476},{"emptyLinePlaceholder":334},[477],{"type":126,"value":337},{"type":121,"tag":224,"props":479,"children":481},{"class":226,"line":480},9,[482],{"type":121,"tag":224,"props":483,"children":484},{"style":344},[485],{"type":126,"value":486},"\u002F\u002F Upload private file\n",{"type":121,"tag":224,"props":488,"children":490},{"class":226,"line":489},10,[491,495,500,504,508,512,516,520,525,529,533,537,541],{"type":121,"tag":224,"props":492,"children":493},{"style":354},[494],{"type":126,"value":357},{"type":121,"tag":224,"props":496,"children":497},{"style":272},[498],{"type":126,"value":499}," privateBlob ",{"type":121,"tag":224,"props":501,"children":502},{"style":266},[503],{"type":126,"value":367},{"type":121,"tag":224,"props":505,"children":506},{"style":260},[507],{"type":126,"value":372},{"type":121,"tag":224,"props":509,"children":510},{"style":375},[511],{"type":126,"value":275},{"type":121,"tag":224,"props":513,"children":514},{"style":272},[515],{"type":126,"value":382},{"type":121,"tag":224,"props":517,"children":518},{"style":266},[519],{"type":126,"value":387},{"type":121,"tag":224,"props":521,"children":522},{"style":237},[523],{"type":126,"value":524},"docs\u002Fsecret.pdf",{"type":121,"tag":224,"props":526,"children":527},{"style":266},[528],{"type":126,"value":387},{"type":121,"tag":224,"props":530,"children":531},{"style":266},[532],{"type":126,"value":280},{"type":121,"tag":224,"props":534,"children":535},{"style":272},[536],{"type":126,"value":405},{"type":121,"tag":224,"props":538,"children":539},{"style":266},[540],{"type":126,"value":280},{"type":121,"tag":224,"props":542,"children":543},{"style":266},[544],{"type":126,"value":414},{"type":121,"tag":224,"props":546,"children":548},{"class":226,"line":547},11,[549,553,557,561,566,570],{"type":121,"tag":224,"props":550,"children":551},{"style":421},[552],{"type":126,"value":424},{"type":121,"tag":224,"props":554,"children":555},{"style":266},[556],{"type":126,"value":429},{"type":121,"tag":224,"props":558,"children":559},{"style":266},[560],{"type":126,"value":318},{"type":121,"tag":224,"props":562,"children":563},{"style":237},[564],{"type":126,"value":565},"private",{"type":121,"tag":224,"props":567,"children":568},{"style":266},[569],{"type":126,"value":387},{"type":121,"tag":224,"props":571,"children":572},{"style":266},[573],{"type":126,"value":447},{"type":121,"tag":224,"props":575,"children":577},{"class":226,"line":576},12,[578,582],{"type":121,"tag":224,"props":579,"children":580},{"style":266},[581],{"type":126,"value":456},{"type":121,"tag":224,"props":583,"children":584},{"style":272},[585],{"type":126,"value":461},{"type":121,"tag":224,"props":587,"children":589},{"class":226,"line":588},13,[590],{"type":121,"tag":224,"props":591,"children":592},{"style":344},[593],{"type":126,"value":594},"\u002F\u002F Read private file back\n",{"type":121,"tag":224,"props":596,"children":598},{"class":226,"line":597},14,[599,603,608,612,616,620,625,630,635],{"type":121,"tag":224,"props":600,"children":601},{"style":354},[602],{"type":126,"value":357},{"type":121,"tag":224,"props":604,"children":605},{"style":272},[606],{"type":126,"value":607}," privateFile ",{"type":121,"tag":224,"props":609,"children":610},{"style":266},[611],{"type":126,"value":367},{"type":121,"tag":224,"props":613,"children":614},{"style":260},[615],{"type":126,"value":372},{"type":121,"tag":224,"props":617,"children":618},{"style":375},[619],{"type":126,"value":303},{"type":121,"tag":224,"props":621,"children":622},{"style":272},[623],{"type":126,"value":624},"(privateBlob",{"type":121,"tag":224,"props":626,"children":627},{"style":266},[628],{"type":126,"value":629},".",{"type":121,"tag":224,"props":631,"children":632},{"style":272},[633],{"type":126,"value":634},"url) ",{"type":121,"tag":224,"props":636,"children":637},{"style":344},[638],{"type":126,"value":639},"\u002F\u002F returns ReadableStream + metadata\n",{"type":121,"tag":224,"props":641,"children":643},{"class":226,"line":642},15,[644],{"type":121,"tag":224,"props":645,"children":646},{"emptyLinePlaceholder":334},[647],{"type":126,"value":337},{"type":121,"tag":224,"props":649,"children":651},{"class":226,"line":650},16,[652],{"type":121,"tag":224,"props":653,"children":654},{"style":344},[655],{"type":126,"value":656},"\u002F\u002F Client upload (up to 5 TB)\n",{"type":121,"tag":224,"props":658,"children":660},{"class":226,"line":659},17,[661,665,669,674,678,682,686,691],{"type":121,"tag":224,"props":662,"children":663},{"style":260},[664],{"type":126,"value":263},{"type":121,"tag":224,"props":666,"children":667},{"style":266},[668],{"type":126,"value":269},{"type":121,"tag":224,"props":670,"children":671},{"style":272},[672],{"type":126,"value":673}," upload",{"type":121,"tag":224,"props":675,"children":676},{"style":266},[677],{"type":126,"value":308},{"type":121,"tag":224,"props":679,"children":680},{"style":260},[681],{"type":126,"value":313},{"type":121,"tag":224,"props":683,"children":684},{"style":266},[685],{"type":126,"value":318},{"type":121,"tag":224,"props":687,"children":688},{"style":237},[689],{"type":126,"value":690},"@vercel\u002Fblob\u002Fclient",{"type":121,"tag":224,"props":692,"children":693},{"style":266},[694],{"type":126,"value":327},{"type":121,"tag":224,"props":696,"children":698},{"class":226,"line":697},18,[699,703,707,711,715,719,723,727,732,736,740,744,748],{"type":121,"tag":224,"props":700,"children":701},{"style":354},[702],{"type":126,"value":357},{"type":121,"tag":224,"props":704,"children":705},{"style":272},[706],{"type":126,"value":362},{"type":121,"tag":224,"props":708,"children":709},{"style":266},[710],{"type":126,"value":367},{"type":121,"tag":224,"props":712,"children":713},{"style":260},[714],{"type":126,"value":372},{"type":121,"tag":224,"props":716,"children":717},{"style":375},[718],{"type":126,"value":673},{"type":121,"tag":224,"props":720,"children":721},{"style":272},[722],{"type":126,"value":382},{"type":121,"tag":224,"props":724,"children":725},{"style":266},[726],{"type":126,"value":387},{"type":121,"tag":224,"props":728,"children":729},{"style":237},[730],{"type":126,"value":731},"video.mp4",{"type":121,"tag":224,"props":733,"children":734},{"style":266},[735],{"type":126,"value":387},{"type":121,"tag":224,"props":737,"children":738},{"style":266},[739],{"type":126,"value":280},{"type":121,"tag":224,"props":741,"children":742},{"style":272},[743],{"type":126,"value":405},{"type":121,"tag":224,"props":745,"children":746},{"style":266},[747],{"type":126,"value":280},{"type":121,"tag":224,"props":749,"children":750},{"style":266},[751],{"type":126,"value":414},{"type":121,"tag":224,"props":753,"children":755},{"class":226,"line":754},19,[756,760,764,768,772,776],{"type":121,"tag":224,"props":757,"children":758},{"style":421},[759],{"type":126,"value":424},{"type":121,"tag":224,"props":761,"children":762},{"style":266},[763],{"type":126,"value":429},{"type":121,"tag":224,"props":765,"children":766},{"style":266},[767],{"type":126,"value":318},{"type":121,"tag":224,"props":769,"children":770},{"style":237},[771],{"type":126,"value":438},{"type":121,"tag":224,"props":773,"children":774},{"style":266},[775],{"type":126,"value":387},{"type":121,"tag":224,"props":777,"children":778},{"style":266},[779],{"type":126,"value":447},{"type":121,"tag":224,"props":781,"children":783},{"class":226,"line":782},20,[784,789,793,797,802,806,810],{"type":121,"tag":224,"props":785,"children":786},{"style":421},[787],{"type":126,"value":788},"  handleUploadUrl",{"type":121,"tag":224,"props":790,"children":791},{"style":266},[792],{"type":126,"value":429},{"type":121,"tag":224,"props":794,"children":795},{"style":266},[796],{"type":126,"value":318},{"type":121,"tag":224,"props":798,"children":799},{"style":237},[800],{"type":126,"value":801},"\u002Fapi\u002Fupload",{"type":121,"tag":224,"props":803,"children":804},{"style":266},[805],{"type":126,"value":387},{"type":121,"tag":224,"props":807,"children":808},{"style":266},[809],{"type":126,"value":280},{"type":121,"tag":224,"props":811,"children":812},{"style":344},[813],{"type":126,"value":814}," \u002F\u002F Your token endpoint\n",{"type":121,"tag":224,"props":816,"children":818},{"class":226,"line":817},21,[819,823],{"type":121,"tag":224,"props":820,"children":821},{"style":266},[822],{"type":126,"value":456},{"type":121,"tag":224,"props":824,"children":825},{"style":272},[826],{"type":126,"value":461},{"type":121,"tag":224,"props":828,"children":830},{"class":226,"line":829},22,[831],{"type":121,"tag":224,"props":832,"children":833},{"emptyLinePlaceholder":334},[834],{"type":126,"value":337},{"type":121,"tag":224,"props":836,"children":838},{"class":226,"line":837},23,[839],{"type":121,"tag":224,"props":840,"children":841},{"style":344},[842],{"type":126,"value":843},"\u002F\u002F List blobs\n",{"type":121,"tag":224,"props":845,"children":847},{"class":226,"line":846},24,[848,852,856,861,865,870,874,878],{"type":121,"tag":224,"props":849,"children":850},{"style":354},[851],{"type":126,"value":357},{"type":121,"tag":224,"props":853,"children":854},{"style":266},[855],{"type":126,"value":269},{"type":121,"tag":224,"props":857,"children":858},{"style":272},[859],{"type":126,"value":860}," blobs ",{"type":121,"tag":224,"props":862,"children":863},{"style":266},[864],{"type":126,"value":456},{"type":121,"tag":224,"props":866,"children":867},{"style":266},[868],{"type":126,"value":869}," =",{"type":121,"tag":224,"props":871,"children":872},{"style":260},[873],{"type":126,"value":372},{"type":121,"tag":224,"props":875,"children":876},{"style":375},[877],{"type":126,"value":294},{"type":121,"tag":224,"props":879,"children":880},{"style":272},[881],{"type":126,"value":882},"()\n",{"type":121,"tag":224,"props":884,"children":886},{"class":226,"line":885},25,[887],{"type":121,"tag":224,"props":888,"children":889},{"emptyLinePlaceholder":334},[890],{"type":126,"value":337},{"type":121,"tag":224,"props":892,"children":894},{"class":226,"line":893},26,[895],{"type":121,"tag":224,"props":896,"children":897},{"style":344},[898],{"type":126,"value":899},"\u002F\u002F Conditional get with ETags\n",{"type":121,"tag":224,"props":901,"children":903},{"class":226,"line":902},27,[904,908,913,917,921,925,929,933,937,941,945],{"type":121,"tag":224,"props":905,"children":906},{"style":354},[907],{"type":126,"value":357},{"type":121,"tag":224,"props":909,"children":910},{"style":272},[911],{"type":126,"value":912}," response ",{"type":121,"tag":224,"props":914,"children":915},{"style":266},[916],{"type":126,"value":367},{"type":121,"tag":224,"props":918,"children":919},{"style":260},[920],{"type":126,"value":372},{"type":121,"tag":224,"props":922,"children":923},{"style":375},[924],{"type":126,"value":303},{"type":121,"tag":224,"props":926,"children":927},{"style":272},[928],{"type":126,"value":382},{"type":121,"tag":224,"props":930,"children":931},{"style":266},[932],{"type":126,"value":387},{"type":121,"tag":224,"props":934,"children":935},{"style":237},[936],{"type":126,"value":392},{"type":121,"tag":224,"props":938,"children":939},{"style":266},[940],{"type":126,"value":387},{"type":121,"tag":224,"props":942,"children":943},{"style":266},[944],{"type":126,"value":280},{"type":121,"tag":224,"props":946,"children":947},{"style":266},[948],{"type":126,"value":414},{"type":121,"tag":224,"props":950,"children":952},{"class":226,"line":951},28,[953,958,962,967],{"type":121,"tag":224,"props":954,"children":955},{"style":421},[956],{"type":126,"value":957},"  ifNoneMatch",{"type":121,"tag":224,"props":959,"children":960},{"style":266},[961],{"type":126,"value":429},{"type":121,"tag":224,"props":963,"children":964},{"style":272},[965],{"type":126,"value":966}," previousETag",{"type":121,"tag":224,"props":968,"children":969},{"style":266},[970],{"type":126,"value":447},{"type":121,"tag":224,"props":972,"children":974},{"class":226,"line":973},29,[975,979],{"type":121,"tag":224,"props":976,"children":977},{"style":266},[978],{"type":126,"value":456},{"type":121,"tag":224,"props":980,"children":981},{"style":272},[982],{"type":126,"value":461},{"type":121,"tag":224,"props":984,"children":986},{"class":226,"line":985},30,[987,992,997,1001,1006,1011,1017,1022],{"type":121,"tag":224,"props":988,"children":989},{"style":260},[990],{"type":126,"value":991},"if",{"type":121,"tag":224,"props":993,"children":994},{"style":272},[995],{"type":126,"value":996}," (response",{"type":121,"tag":224,"props":998,"children":999},{"style":266},[1000],{"type":126,"value":629},{"type":121,"tag":224,"props":1002,"children":1003},{"style":272},[1004],{"type":126,"value":1005},"statusCode ",{"type":121,"tag":224,"props":1007,"children":1008},{"style":266},[1009],{"type":126,"value":1010},"===",{"type":121,"tag":224,"props":1012,"children":1014},{"style":1013},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1015],{"type":126,"value":1016}," 304",{"type":121,"tag":224,"props":1018,"children":1019},{"style":272},[1020],{"type":126,"value":1021},") ",{"type":121,"tag":224,"props":1023,"children":1024},{"style":266},[1025],{"type":126,"value":1026},"{\n",{"type":121,"tag":224,"props":1028,"children":1030},{"class":226,"line":1029},31,[1031],{"type":121,"tag":224,"props":1032,"children":1033},{"style":344},[1034],{"type":126,"value":1035},"  \u002F\u002F Not modified, use cached version\n",{"type":121,"tag":224,"props":1037,"children":1039},{"class":226,"line":1038},32,[1040],{"type":121,"tag":224,"props":1041,"children":1042},{"style":266},[1043],{"type":126,"value":1044},"}\n",{"type":121,"tag":224,"props":1046,"children":1048},{"class":226,"line":1047},33,[1049],{"type":121,"tag":224,"props":1050,"children":1051},{"emptyLinePlaceholder":334},[1052],{"type":126,"value":337},{"type":121,"tag":224,"props":1054,"children":1056},{"class":226,"line":1055},34,[1057],{"type":121,"tag":224,"props":1058,"children":1059},{"style":344},[1060],{"type":126,"value":1061},"\u002F\u002F Delete\n",{"type":121,"tag":224,"props":1063,"children":1065},{"class":226,"line":1064},35,[1066,1071,1075,1079,1083,1087,1091],{"type":121,"tag":224,"props":1067,"children":1068},{"style":260},[1069],{"type":126,"value":1070},"await",{"type":121,"tag":224,"props":1072,"children":1073},{"style":375},[1074],{"type":126,"value":285},{"type":121,"tag":224,"props":1076,"children":1077},{"style":272},[1078],{"type":126,"value":382},{"type":121,"tag":224,"props":1080,"children":1081},{"style":266},[1082],{"type":126,"value":387},{"type":121,"tag":224,"props":1084,"children":1085},{"style":237},[1086],{"type":126,"value":392},{"type":121,"tag":224,"props":1088,"children":1089},{"style":266},[1090],{"type":126,"value":387},{"type":121,"tag":224,"props":1092,"children":1093},{"style":272},[1094],{"type":126,"value":461},{"type":121,"tag":129,"props":1096,"children":1097},{},[1098,1103,1105,1111,1113,1119],{"type":121,"tag":155,"props":1099,"children":1100},{},[1101],{"type":126,"value":1102},"Private Storage",{"type":126,"value":1104}," (public beta): Use ",{"type":121,"tag":163,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":126,"value":1110},"access: 'private'",{"type":126,"value":1112}," for files that should not be publicly accessible. Read them back with ",{"type":121,"tag":163,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":126,"value":1118},"get()",{"type":126,"value":1120},". Do NOT use private access for files that need to be served publicly — it leads to slow delivery and high egress costs.",{"type":121,"tag":129,"props":1122,"children":1123},{},[1124,1129,1131,1136,1138,1142],{"type":121,"tag":155,"props":1125,"children":1126},{},[1127],{"type":126,"value":1128},"Blob Data Transfer",{"type":126,"value":1130},": Vercel Blob uses two delivery strategies — ",{"type":121,"tag":155,"props":1132,"children":1133},{},[1134],{"type":126,"value":1135},"Fast Data Transfer",{"type":126,"value":1137}," (94 cities, latency-optimized) and ",{"type":121,"tag":155,"props":1139,"children":1140},{},[1141],{"type":126,"value":1128},{"type":126,"value":1143}," (18 hubs, volume-optimized for large assets). The system automatically routes via the optimal path.",{"type":121,"tag":129,"props":1145,"children":1146},{},[1147,1152],{"type":121,"tag":155,"props":1148,"children":1149},{},[1150],{"type":126,"value":1151},"Use when",{"type":126,"value":1153},": Media files, user uploads, documents, any large unstructured data.",{"type":121,"tag":201,"props":1155,"children":1157},{"id":1156},"vercel-edge-config-global-configuration",[1158],{"type":126,"value":1159},"Vercel Edge Config — Global Configuration",{"type":121,"tag":129,"props":1161,"children":1162},{},[1163],{"type":126,"value":1164},"Ultra-low-latency key-value store for application configuration. Not a database — designed for config data that must be read instantly at the edge.",{"type":121,"tag":213,"props":1166,"children":1168},{"className":215,"code":1167,"language":217,"meta":218,"style":218},"npm install @vercel\u002Fedge-config\n",[1169],{"type":121,"tag":163,"props":1170,"children":1171},{"__ignoreMap":218},[1172],{"type":121,"tag":224,"props":1173,"children":1174},{"class":226,"line":227},[1175,1179,1183],{"type":121,"tag":224,"props":1176,"children":1177},{"style":231},[1178],{"type":126,"value":234},{"type":121,"tag":224,"props":1180,"children":1181},{"style":237},[1182],{"type":126,"value":240},{"type":121,"tag":224,"props":1184,"children":1185},{"style":237},[1186],{"type":126,"value":1187}," @vercel\u002Fedge-config\n",{"type":121,"tag":213,"props":1189,"children":1191},{"className":248,"code":1190,"language":250,"meta":218,"style":218},"import { get, getAll, has } from '@vercel\u002Fedge-config'\n\n\u002F\u002F Read a single value (\u003C 1ms at the edge)\nconst isFeatureEnabled = await get('feature-new-ui')\n\n\u002F\u002F Read multiple values\nconst config = await getAll(['feature-new-ui', 'ab-test-variant', 'redirect-rules'])\n\n\u002F\u002F Check existence\nconst exists = await has('maintenance-mode')\n",[1192],{"type":121,"tag":163,"props":1193,"children":1194},{"__ignoreMap":218},[1195,1248,1255,1263,1308,1315,1323,1403,1410,1418],{"type":121,"tag":224,"props":1196,"children":1197},{"class":226,"line":227},[1198,1202,1206,1210,1214,1219,1223,1228,1232,1236,1240,1244],{"type":121,"tag":224,"props":1199,"children":1200},{"style":260},[1201],{"type":126,"value":263},{"type":121,"tag":224,"props":1203,"children":1204},{"style":266},[1205],{"type":126,"value":269},{"type":121,"tag":224,"props":1207,"children":1208},{"style":272},[1209],{"type":126,"value":303},{"type":121,"tag":224,"props":1211,"children":1212},{"style":266},[1213],{"type":126,"value":280},{"type":121,"tag":224,"props":1215,"children":1216},{"style":272},[1217],{"type":126,"value":1218}," getAll",{"type":121,"tag":224,"props":1220,"children":1221},{"style":266},[1222],{"type":126,"value":280},{"type":121,"tag":224,"props":1224,"children":1225},{"style":272},[1226],{"type":126,"value":1227}," has",{"type":121,"tag":224,"props":1229,"children":1230},{"style":266},[1231],{"type":126,"value":308},{"type":121,"tag":224,"props":1233,"children":1234},{"style":260},[1235],{"type":126,"value":313},{"type":121,"tag":224,"props":1237,"children":1238},{"style":266},[1239],{"type":126,"value":318},{"type":121,"tag":224,"props":1241,"children":1242},{"style":237},[1243],{"type":126,"value":110},{"type":121,"tag":224,"props":1245,"children":1246},{"style":266},[1247],{"type":126,"value":327},{"type":121,"tag":224,"props":1249,"children":1250},{"class":226,"line":330},[1251],{"type":121,"tag":224,"props":1252,"children":1253},{"emptyLinePlaceholder":334},[1254],{"type":126,"value":337},{"type":121,"tag":224,"props":1256,"children":1257},{"class":226,"line":340},[1258],{"type":121,"tag":224,"props":1259,"children":1260},{"style":344},[1261],{"type":126,"value":1262},"\u002F\u002F Read a single value (\u003C 1ms at the edge)\n",{"type":121,"tag":224,"props":1264,"children":1265},{"class":226,"line":350},[1266,1270,1275,1279,1283,1287,1291,1295,1300,1304],{"type":121,"tag":224,"props":1267,"children":1268},{"style":354},[1269],{"type":126,"value":357},{"type":121,"tag":224,"props":1271,"children":1272},{"style":272},[1273],{"type":126,"value":1274}," isFeatureEnabled ",{"type":121,"tag":224,"props":1276,"children":1277},{"style":266},[1278],{"type":126,"value":367},{"type":121,"tag":224,"props":1280,"children":1281},{"style":260},[1282],{"type":126,"value":372},{"type":121,"tag":224,"props":1284,"children":1285},{"style":375},[1286],{"type":126,"value":303},{"type":121,"tag":224,"props":1288,"children":1289},{"style":272},[1290],{"type":126,"value":382},{"type":121,"tag":224,"props":1292,"children":1293},{"style":266},[1294],{"type":126,"value":387},{"type":121,"tag":224,"props":1296,"children":1297},{"style":237},[1298],{"type":126,"value":1299},"feature-new-ui",{"type":121,"tag":224,"props":1301,"children":1302},{"style":266},[1303],{"type":126,"value":387},{"type":121,"tag":224,"props":1305,"children":1306},{"style":272},[1307],{"type":126,"value":461},{"type":121,"tag":224,"props":1309,"children":1310},{"class":226,"line":417},[1311],{"type":121,"tag":224,"props":1312,"children":1313},{"emptyLinePlaceholder":334},[1314],{"type":126,"value":337},{"type":121,"tag":224,"props":1316,"children":1317},{"class":226,"line":450},[1318],{"type":121,"tag":224,"props":1319,"children":1320},{"style":344},[1321],{"type":126,"value":1322},"\u002F\u002F Read multiple values\n",{"type":121,"tag":224,"props":1324,"children":1325},{"class":226,"line":39},[1326,1330,1335,1339,1343,1347,1352,1356,1360,1364,1368,1372,1377,1381,1385,1389,1394,1398],{"type":121,"tag":224,"props":1327,"children":1328},{"style":354},[1329],{"type":126,"value":357},{"type":121,"tag":224,"props":1331,"children":1332},{"style":272},[1333],{"type":126,"value":1334}," config ",{"type":121,"tag":224,"props":1336,"children":1337},{"style":266},[1338],{"type":126,"value":367},{"type":121,"tag":224,"props":1340,"children":1341},{"style":260},[1342],{"type":126,"value":372},{"type":121,"tag":224,"props":1344,"children":1345},{"style":375},[1346],{"type":126,"value":1218},{"type":121,"tag":224,"props":1348,"children":1349},{"style":272},[1350],{"type":126,"value":1351},"([",{"type":121,"tag":224,"props":1353,"children":1354},{"style":266},[1355],{"type":126,"value":387},{"type":121,"tag":224,"props":1357,"children":1358},{"style":237},[1359],{"type":126,"value":1299},{"type":121,"tag":224,"props":1361,"children":1362},{"style":266},[1363],{"type":126,"value":387},{"type":121,"tag":224,"props":1365,"children":1366},{"style":266},[1367],{"type":126,"value":280},{"type":121,"tag":224,"props":1369,"children":1370},{"style":266},[1371],{"type":126,"value":318},{"type":121,"tag":224,"props":1373,"children":1374},{"style":237},[1375],{"type":126,"value":1376},"ab-test-variant",{"type":121,"tag":224,"props":1378,"children":1379},{"style":266},[1380],{"type":126,"value":387},{"type":121,"tag":224,"props":1382,"children":1383},{"style":266},[1384],{"type":126,"value":280},{"type":121,"tag":224,"props":1386,"children":1387},{"style":266},[1388],{"type":126,"value":318},{"type":121,"tag":224,"props":1390,"children":1391},{"style":237},[1392],{"type":126,"value":1393},"redirect-rules",{"type":121,"tag":224,"props":1395,"children":1396},{"style":266},[1397],{"type":126,"value":387},{"type":121,"tag":224,"props":1399,"children":1400},{"style":272},[1401],{"type":126,"value":1402},"])\n",{"type":121,"tag":224,"props":1404,"children":1405},{"class":226,"line":472},[1406],{"type":121,"tag":224,"props":1407,"children":1408},{"emptyLinePlaceholder":334},[1409],{"type":126,"value":337},{"type":121,"tag":224,"props":1411,"children":1412},{"class":226,"line":480},[1413],{"type":121,"tag":224,"props":1414,"children":1415},{"style":344},[1416],{"type":126,"value":1417},"\u002F\u002F Check existence\n",{"type":121,"tag":224,"props":1419,"children":1420},{"class":226,"line":489},[1421,1425,1430,1434,1438,1442,1446,1450,1455,1459],{"type":121,"tag":224,"props":1422,"children":1423},{"style":354},[1424],{"type":126,"value":357},{"type":121,"tag":224,"props":1426,"children":1427},{"style":272},[1428],{"type":126,"value":1429}," exists ",{"type":121,"tag":224,"props":1431,"children":1432},{"style":266},[1433],{"type":126,"value":367},{"type":121,"tag":224,"props":1435,"children":1436},{"style":260},[1437],{"type":126,"value":372},{"type":121,"tag":224,"props":1439,"children":1440},{"style":375},[1441],{"type":126,"value":1227},{"type":121,"tag":224,"props":1443,"children":1444},{"style":272},[1445],{"type":126,"value":382},{"type":121,"tag":224,"props":1447,"children":1448},{"style":266},[1449],{"type":126,"value":387},{"type":121,"tag":224,"props":1451,"children":1452},{"style":237},[1453],{"type":126,"value":1454},"maintenance-mode",{"type":121,"tag":224,"props":1456,"children":1457},{"style":266},[1458],{"type":126,"value":387},{"type":121,"tag":224,"props":1460,"children":1461},{"style":272},[1462],{"type":126,"value":461},{"type":121,"tag":129,"props":1464,"children":1465},{},[1466,1470],{"type":121,"tag":155,"props":1467,"children":1468},{},[1469],{"type":126,"value":1151},{"type":126,"value":1471},": Feature flags, A\u002FB testing config, dynamic routing rules, maintenance mode toggles. Anything that must be read at the edge with near-zero latency.",{"type":121,"tag":129,"props":1473,"children":1474},{},[1475,1480],{"type":121,"tag":155,"props":1476,"children":1477},{},[1478],{"type":126,"value":1479},"Do NOT use for",{"type":126,"value":1481},": User data, session state, frequently written data. Edge Config is optimized for reads, not writes.",{"type":121,"tag":129,"props":1483,"children":1484},{},[1485,1490,1492,1498,1500,1506,1508,1514,1516,1522],{"type":121,"tag":155,"props":1486,"children":1487},{},[1488],{"type":126,"value":1489},"Next.js 16",{"type":126,"value":1491},": ",{"type":121,"tag":163,"props":1493,"children":1495},{"className":1494},[],[1496],{"type":126,"value":1497},"@vercel\u002Fedge-config@^1.4.3",{"type":126,"value":1499}," supports ",{"type":121,"tag":163,"props":1501,"children":1503},{"className":1502},[],[1504],{"type":126,"value":1505},"cacheComponents",{"type":126,"value":1507}," and the renamed ",{"type":121,"tag":163,"props":1509,"children":1511},{"className":1510},[],[1512],{"type":126,"value":1513},"proxy.ts",{"type":126,"value":1515}," (formerly ",{"type":121,"tag":163,"props":1517,"children":1519},{"className":1518},[],[1520],{"type":126,"value":1521},"middleware.ts",{"type":126,"value":1523},").",{"type":121,"tag":135,"props":1525,"children":1527},{"id":1526},"marketplace-storage-partner-provided",[1528],{"type":126,"value":1529},"Marketplace Storage (Partner-Provided)",{"type":121,"tag":201,"props":1531,"children":1533},{"id":1532},"important-vercelpostgres-and-vercelkv-are-sunset",[1534],{"type":126,"value":1535},"IMPORTANT: @vercel\u002Fpostgres and @vercel\u002Fkv are SUNSET",{"type":121,"tag":129,"props":1537,"children":1538},{},[1539],{"type":126,"value":1540},"These packages no longer exist as first-party Vercel products. Use the marketplace replacements:",{"type":121,"tag":201,"props":1542,"children":1544},{"id":1543},"neon-postgres-replaces-vercelpostgres",[1545],{"type":126,"value":1546},"Neon Postgres (replaces @vercel\u002Fpostgres)",{"type":121,"tag":129,"props":1548,"children":1549},{},[1550,1552,1558,1560,1565],{"type":126,"value":1551},"Serverless Postgres with branching, auto-scaling, and connection pooling. The driver is GA at ",{"type":121,"tag":163,"props":1553,"children":1555},{"className":1554},[],[1556],{"type":126,"value":1557},"@neondatabase\u002Fserverless@^1.0.2",{"type":126,"value":1559}," and requires ",{"type":121,"tag":155,"props":1561,"children":1562},{},[1563],{"type":126,"value":1564},"Node.js 19+",{"type":126,"value":629},{"type":121,"tag":213,"props":1567,"children":1569},{"className":215,"code":1568,"language":217,"meta":218,"style":218},"npm install @neondatabase\u002Fserverless\n",[1570],{"type":121,"tag":163,"props":1571,"children":1572},{"__ignoreMap":218},[1573],{"type":121,"tag":224,"props":1574,"children":1575},{"class":226,"line":227},[1576,1580,1584],{"type":121,"tag":224,"props":1577,"children":1578},{"style":231},[1579],{"type":126,"value":234},{"type":121,"tag":224,"props":1581,"children":1582},{"style":237},[1583],{"type":126,"value":240},{"type":121,"tag":224,"props":1585,"children":1586},{"style":237},[1587],{"type":126,"value":1588}," @neondatabase\u002Fserverless\n",{"type":121,"tag":213,"props":1590,"children":1592},{"className":248,"code":1591,"language":250,"meta":218,"style":218},"\u002F\u002F Direct Neon usage\nimport { neon } from '@neondatabase\u002Fserverless'\n\nconst sql = neon(process.env.DATABASE_URL!)\nconst users = await sql`SELECT * FROM users WHERE id = ${userId}`\n\n\u002F\u002F With Drizzle ORM\nimport { drizzle } from 'drizzle-orm\u002Fneon-http'\nimport { neon } from '@neondatabase\u002Fserverless'\n\nconst sql = neon(process.env.DATABASE_URL!)\nconst db = drizzle(sql)\n",[1593],{"type":121,"tag":163,"props":1594,"children":1595},{"__ignoreMap":218},[1596,1604,1640,1647,1699,1749,1756,1764,1801,1836,1843,1890],{"type":121,"tag":224,"props":1597,"children":1598},{"class":226,"line":227},[1599],{"type":121,"tag":224,"props":1600,"children":1601},{"style":344},[1602],{"type":126,"value":1603},"\u002F\u002F Direct Neon usage\n",{"type":121,"tag":224,"props":1605,"children":1606},{"class":226,"line":330},[1607,1611,1615,1620,1624,1628,1632,1636],{"type":121,"tag":224,"props":1608,"children":1609},{"style":260},[1610],{"type":126,"value":263},{"type":121,"tag":224,"props":1612,"children":1613},{"style":266},[1614],{"type":126,"value":269},{"type":121,"tag":224,"props":1616,"children":1617},{"style":272},[1618],{"type":126,"value":1619}," neon",{"type":121,"tag":224,"props":1621,"children":1622},{"style":266},[1623],{"type":126,"value":308},{"type":121,"tag":224,"props":1625,"children":1626},{"style":260},[1627],{"type":126,"value":313},{"type":121,"tag":224,"props":1629,"children":1630},{"style":266},[1631],{"type":126,"value":318},{"type":121,"tag":224,"props":1633,"children":1634},{"style":237},[1635],{"type":126,"value":111},{"type":121,"tag":224,"props":1637,"children":1638},{"style":266},[1639],{"type":126,"value":327},{"type":121,"tag":224,"props":1641,"children":1642},{"class":226,"line":340},[1643],{"type":121,"tag":224,"props":1644,"children":1645},{"emptyLinePlaceholder":334},[1646],{"type":126,"value":337},{"type":121,"tag":224,"props":1648,"children":1649},{"class":226,"line":350},[1650,1654,1659,1663,1667,1672,1676,1681,1685,1690,1695],{"type":121,"tag":224,"props":1651,"children":1652},{"style":354},[1653],{"type":126,"value":357},{"type":121,"tag":224,"props":1655,"children":1656},{"style":272},[1657],{"type":126,"value":1658}," sql ",{"type":121,"tag":224,"props":1660,"children":1661},{"style":266},[1662],{"type":126,"value":367},{"type":121,"tag":224,"props":1664,"children":1665},{"style":375},[1666],{"type":126,"value":1619},{"type":121,"tag":224,"props":1668,"children":1669},{"style":272},[1670],{"type":126,"value":1671},"(process",{"type":121,"tag":224,"props":1673,"children":1674},{"style":266},[1675],{"type":126,"value":629},{"type":121,"tag":224,"props":1677,"children":1678},{"style":272},[1679],{"type":126,"value":1680},"env",{"type":121,"tag":224,"props":1682,"children":1683},{"style":266},[1684],{"type":126,"value":629},{"type":121,"tag":224,"props":1686,"children":1687},{"style":272},[1688],{"type":126,"value":1689},"DATABASE_URL",{"type":121,"tag":224,"props":1691,"children":1692},{"style":266},[1693],{"type":126,"value":1694},"!",{"type":121,"tag":224,"props":1696,"children":1697},{"style":272},[1698],{"type":126,"value":461},{"type":121,"tag":224,"props":1700,"children":1701},{"class":226,"line":417},[1702,1706,1711,1715,1719,1724,1729,1734,1739,1744],{"type":121,"tag":224,"props":1703,"children":1704},{"style":354},[1705],{"type":126,"value":357},{"type":121,"tag":224,"props":1707,"children":1708},{"style":272},[1709],{"type":126,"value":1710}," users ",{"type":121,"tag":224,"props":1712,"children":1713},{"style":266},[1714],{"type":126,"value":367},{"type":121,"tag":224,"props":1716,"children":1717},{"style":260},[1718],{"type":126,"value":372},{"type":121,"tag":224,"props":1720,"children":1721},{"style":375},[1722],{"type":126,"value":1723}," sql",{"type":121,"tag":224,"props":1725,"children":1726},{"style":266},[1727],{"type":126,"value":1728},"`",{"type":121,"tag":224,"props":1730,"children":1731},{"style":237},[1732],{"type":126,"value":1733},"SELECT * FROM users WHERE id = ",{"type":121,"tag":224,"props":1735,"children":1736},{"style":266},[1737],{"type":126,"value":1738},"${",{"type":121,"tag":224,"props":1740,"children":1741},{"style":272},[1742],{"type":126,"value":1743},"userId",{"type":121,"tag":224,"props":1745,"children":1746},{"style":266},[1747],{"type":126,"value":1748},"}`\n",{"type":121,"tag":224,"props":1750,"children":1751},{"class":226,"line":450},[1752],{"type":121,"tag":224,"props":1753,"children":1754},{"emptyLinePlaceholder":334},[1755],{"type":126,"value":337},{"type":121,"tag":224,"props":1757,"children":1758},{"class":226,"line":39},[1759],{"type":121,"tag":224,"props":1760,"children":1761},{"style":344},[1762],{"type":126,"value":1763},"\u002F\u002F With Drizzle ORM\n",{"type":121,"tag":224,"props":1765,"children":1766},{"class":226,"line":472},[1767,1771,1775,1780,1784,1788,1792,1797],{"type":121,"tag":224,"props":1768,"children":1769},{"style":260},[1770],{"type":126,"value":263},{"type":121,"tag":224,"props":1772,"children":1773},{"style":266},[1774],{"type":126,"value":269},{"type":121,"tag":224,"props":1776,"children":1777},{"style":272},[1778],{"type":126,"value":1779}," drizzle",{"type":121,"tag":224,"props":1781,"children":1782},{"style":266},[1783],{"type":126,"value":308},{"type":121,"tag":224,"props":1785,"children":1786},{"style":260},[1787],{"type":126,"value":313},{"type":121,"tag":224,"props":1789,"children":1790},{"style":266},[1791],{"type":126,"value":318},{"type":121,"tag":224,"props":1793,"children":1794},{"style":237},[1795],{"type":126,"value":1796},"drizzle-orm\u002Fneon-http",{"type":121,"tag":224,"props":1798,"children":1799},{"style":266},[1800],{"type":126,"value":327},{"type":121,"tag":224,"props":1802,"children":1803},{"class":226,"line":480},[1804,1808,1812,1816,1820,1824,1828,1832],{"type":121,"tag":224,"props":1805,"children":1806},{"style":260},[1807],{"type":126,"value":263},{"type":121,"tag":224,"props":1809,"children":1810},{"style":266},[1811],{"type":126,"value":269},{"type":121,"tag":224,"props":1813,"children":1814},{"style":272},[1815],{"type":126,"value":1619},{"type":121,"tag":224,"props":1817,"children":1818},{"style":266},[1819],{"type":126,"value":308},{"type":121,"tag":224,"props":1821,"children":1822},{"style":260},[1823],{"type":126,"value":313},{"type":121,"tag":224,"props":1825,"children":1826},{"style":266},[1827],{"type":126,"value":318},{"type":121,"tag":224,"props":1829,"children":1830},{"style":237},[1831],{"type":126,"value":111},{"type":121,"tag":224,"props":1833,"children":1834},{"style":266},[1835],{"type":126,"value":327},{"type":121,"tag":224,"props":1837,"children":1838},{"class":226,"line":489},[1839],{"type":121,"tag":224,"props":1840,"children":1841},{"emptyLinePlaceholder":334},[1842],{"type":126,"value":337},{"type":121,"tag":224,"props":1844,"children":1845},{"class":226,"line":547},[1846,1850,1854,1858,1862,1866,1870,1874,1878,1882,1886],{"type":121,"tag":224,"props":1847,"children":1848},{"style":354},[1849],{"type":126,"value":357},{"type":121,"tag":224,"props":1851,"children":1852},{"style":272},[1853],{"type":126,"value":1658},{"type":121,"tag":224,"props":1855,"children":1856},{"style":266},[1857],{"type":126,"value":367},{"type":121,"tag":224,"props":1859,"children":1860},{"style":375},[1861],{"type":126,"value":1619},{"type":121,"tag":224,"props":1863,"children":1864},{"style":272},[1865],{"type":126,"value":1671},{"type":121,"tag":224,"props":1867,"children":1868},{"style":266},[1869],{"type":126,"value":629},{"type":121,"tag":224,"props":1871,"children":1872},{"style":272},[1873],{"type":126,"value":1680},{"type":121,"tag":224,"props":1875,"children":1876},{"style":266},[1877],{"type":126,"value":629},{"type":121,"tag":224,"props":1879,"children":1880},{"style":272},[1881],{"type":126,"value":1689},{"type":121,"tag":224,"props":1883,"children":1884},{"style":266},[1885],{"type":126,"value":1694},{"type":121,"tag":224,"props":1887,"children":1888},{"style":272},[1889],{"type":126,"value":461},{"type":121,"tag":224,"props":1891,"children":1892},{"class":226,"line":576},[1893,1897,1902,1906,1910],{"type":121,"tag":224,"props":1894,"children":1895},{"style":354},[1896],{"type":126,"value":357},{"type":121,"tag":224,"props":1898,"children":1899},{"style":272},[1900],{"type":126,"value":1901}," db ",{"type":121,"tag":224,"props":1903,"children":1904},{"style":266},[1905],{"type":126,"value":367},{"type":121,"tag":224,"props":1907,"children":1908},{"style":375},[1909],{"type":126,"value":1779},{"type":121,"tag":224,"props":1911,"children":1912},{"style":272},[1913],{"type":126,"value":1914},"(sql)\n",{"type":121,"tag":129,"props":1916,"children":1917},{},[1918,1923,1925,1931,1933,1938,1940,1946],{"type":121,"tag":155,"props":1919,"children":1920},{},[1921],{"type":126,"value":1922},"Build-time safety",{"type":126,"value":1924},": The ",{"type":121,"tag":163,"props":1926,"children":1928},{"className":1927},[],[1929],{"type":126,"value":1930},"neon()",{"type":126,"value":1932}," call above throws if ",{"type":121,"tag":163,"props":1934,"children":1936},{"className":1935},[],[1937],{"type":126,"value":1689},{"type":126,"value":1939}," is not set. Since Next.js evaluates top-level module code at build time, this will crash ",{"type":121,"tag":163,"props":1941,"children":1943},{"className":1942},[],[1944],{"type":126,"value":1945},"next build",{"type":126,"value":1947}," when env vars aren't yet configured (e.g., first deploy before Marketplace provisioning). Use lazy initialization:",{"type":121,"tag":213,"props":1949,"children":1951},{"className":248,"code":1950,"language":250,"meta":218,"style":218},"\u002F\u002F src\u002Fdb\u002Findex.ts — lazy initialization (safe for build time)\nimport { neon } from '@neondatabase\u002Fserverless'\nimport { drizzle } from 'drizzle-orm\u002Fneon-http'\nimport * as schema from '.\u002Fschema'\n\nfunction createDb() {\n  const sql = neon(process.env.DATABASE_URL!)\n  return drizzle(sql, { schema })\n}\n\nlet _db: ReturnType\u003Ctypeof createDb> | null = null\n\nexport function getDb() {\n  if (!_db) _db = createDb()\n  return _db\n}\n",[1952],{"type":121,"tag":163,"props":1953,"children":1954},{"__ignoreMap":218},[1955,1963,1998,2033,2073,2080,2102,2155,2197,2204,2211,2266,2273,2299,2341,2353],{"type":121,"tag":224,"props":1956,"children":1957},{"class":226,"line":227},[1958],{"type":121,"tag":224,"props":1959,"children":1960},{"style":344},[1961],{"type":126,"value":1962},"\u002F\u002F src\u002Fdb\u002Findex.ts — lazy initialization (safe for build time)\n",{"type":121,"tag":224,"props":1964,"children":1965},{"class":226,"line":330},[1966,1970,1974,1978,1982,1986,1990,1994],{"type":121,"tag":224,"props":1967,"children":1968},{"style":260},[1969],{"type":126,"value":263},{"type":121,"tag":224,"props":1971,"children":1972},{"style":266},[1973],{"type":126,"value":269},{"type":121,"tag":224,"props":1975,"children":1976},{"style":272},[1977],{"type":126,"value":1619},{"type":121,"tag":224,"props":1979,"children":1980},{"style":266},[1981],{"type":126,"value":308},{"type":121,"tag":224,"props":1983,"children":1984},{"style":260},[1985],{"type":126,"value":313},{"type":121,"tag":224,"props":1987,"children":1988},{"style":266},[1989],{"type":126,"value":318},{"type":121,"tag":224,"props":1991,"children":1992},{"style":237},[1993],{"type":126,"value":111},{"type":121,"tag":224,"props":1995,"children":1996},{"style":266},[1997],{"type":126,"value":327},{"type":121,"tag":224,"props":1999,"children":2000},{"class":226,"line":340},[2001,2005,2009,2013,2017,2021,2025,2029],{"type":121,"tag":224,"props":2002,"children":2003},{"style":260},[2004],{"type":126,"value":263},{"type":121,"tag":224,"props":2006,"children":2007},{"style":266},[2008],{"type":126,"value":269},{"type":121,"tag":224,"props":2010,"children":2011},{"style":272},[2012],{"type":126,"value":1779},{"type":121,"tag":224,"props":2014,"children":2015},{"style":266},[2016],{"type":126,"value":308},{"type":121,"tag":224,"props":2018,"children":2019},{"style":260},[2020],{"type":126,"value":313},{"type":121,"tag":224,"props":2022,"children":2023},{"style":266},[2024],{"type":126,"value":318},{"type":121,"tag":224,"props":2026,"children":2027},{"style":237},[2028],{"type":126,"value":1796},{"type":121,"tag":224,"props":2030,"children":2031},{"style":266},[2032],{"type":126,"value":327},{"type":121,"tag":224,"props":2034,"children":2035},{"class":226,"line":350},[2036,2040,2045,2050,2055,2060,2064,2069],{"type":121,"tag":224,"props":2037,"children":2038},{"style":260},[2039],{"type":126,"value":263},{"type":121,"tag":224,"props":2041,"children":2042},{"style":266},[2043],{"type":126,"value":2044}," *",{"type":121,"tag":224,"props":2046,"children":2047},{"style":260},[2048],{"type":126,"value":2049}," as",{"type":121,"tag":224,"props":2051,"children":2052},{"style":272},[2053],{"type":126,"value":2054}," schema ",{"type":121,"tag":224,"props":2056,"children":2057},{"style":260},[2058],{"type":126,"value":2059},"from",{"type":121,"tag":224,"props":2061,"children":2062},{"style":266},[2063],{"type":126,"value":318},{"type":121,"tag":224,"props":2065,"children":2066},{"style":237},[2067],{"type":126,"value":2068},".\u002Fschema",{"type":121,"tag":224,"props":2070,"children":2071},{"style":266},[2072],{"type":126,"value":327},{"type":121,"tag":224,"props":2074,"children":2075},{"class":226,"line":417},[2076],{"type":121,"tag":224,"props":2077,"children":2078},{"emptyLinePlaceholder":334},[2079],{"type":126,"value":337},{"type":121,"tag":224,"props":2081,"children":2082},{"class":226,"line":450},[2083,2088,2093,2098],{"type":121,"tag":224,"props":2084,"children":2085},{"style":354},[2086],{"type":126,"value":2087},"function",{"type":121,"tag":224,"props":2089,"children":2090},{"style":375},[2091],{"type":126,"value":2092}," createDb",{"type":121,"tag":224,"props":2094,"children":2095},{"style":266},[2096],{"type":126,"value":2097},"()",{"type":121,"tag":224,"props":2099,"children":2100},{"style":266},[2101],{"type":126,"value":414},{"type":121,"tag":224,"props":2103,"children":2104},{"class":226,"line":39},[2105,2110,2114,2118,2122,2126,2131,2135,2139,2143,2147,2151],{"type":121,"tag":224,"props":2106,"children":2107},{"style":354},[2108],{"type":126,"value":2109},"  const",{"type":121,"tag":224,"props":2111,"children":2112},{"style":272},[2113],{"type":126,"value":1723},{"type":121,"tag":224,"props":2115,"children":2116},{"style":266},[2117],{"type":126,"value":869},{"type":121,"tag":224,"props":2119,"children":2120},{"style":375},[2121],{"type":126,"value":1619},{"type":121,"tag":224,"props":2123,"children":2124},{"style":421},[2125],{"type":126,"value":382},{"type":121,"tag":224,"props":2127,"children":2128},{"style":272},[2129],{"type":126,"value":2130},"process",{"type":121,"tag":224,"props":2132,"children":2133},{"style":266},[2134],{"type":126,"value":629},{"type":121,"tag":224,"props":2136,"children":2137},{"style":272},[2138],{"type":126,"value":1680},{"type":121,"tag":224,"props":2140,"children":2141},{"style":266},[2142],{"type":126,"value":629},{"type":121,"tag":224,"props":2144,"children":2145},{"style":272},[2146],{"type":126,"value":1689},{"type":121,"tag":224,"props":2148,"children":2149},{"style":266},[2150],{"type":126,"value":1694},{"type":121,"tag":224,"props":2152,"children":2153},{"style":421},[2154],{"type":126,"value":461},{"type":121,"tag":224,"props":2156,"children":2157},{"class":226,"line":472},[2158,2163,2167,2171,2176,2180,2184,2189,2193],{"type":121,"tag":224,"props":2159,"children":2160},{"style":260},[2161],{"type":126,"value":2162},"  return",{"type":121,"tag":224,"props":2164,"children":2165},{"style":375},[2166],{"type":126,"value":1779},{"type":121,"tag":224,"props":2168,"children":2169},{"style":421},[2170],{"type":126,"value":382},{"type":121,"tag":224,"props":2172,"children":2173},{"style":272},[2174],{"type":126,"value":2175},"sql",{"type":121,"tag":224,"props":2177,"children":2178},{"style":266},[2179],{"type":126,"value":280},{"type":121,"tag":224,"props":2181,"children":2182},{"style":266},[2183],{"type":126,"value":269},{"type":121,"tag":224,"props":2185,"children":2186},{"style":272},[2187],{"type":126,"value":2188}," schema",{"type":121,"tag":224,"props":2190,"children":2191},{"style":266},[2192],{"type":126,"value":308},{"type":121,"tag":224,"props":2194,"children":2195},{"style":421},[2196],{"type":126,"value":461},{"type":121,"tag":224,"props":2198,"children":2199},{"class":226,"line":480},[2200],{"type":121,"tag":224,"props":2201,"children":2202},{"style":266},[2203],{"type":126,"value":1044},{"type":121,"tag":224,"props":2205,"children":2206},{"class":226,"line":489},[2207],{"type":121,"tag":224,"props":2208,"children":2209},{"emptyLinePlaceholder":334},[2210],{"type":126,"value":337},{"type":121,"tag":224,"props":2212,"children":2213},{"class":226,"line":547},[2214,2219,2224,2228,2233,2238,2242,2247,2252,2257,2261],{"type":121,"tag":224,"props":2215,"children":2216},{"style":354},[2217],{"type":126,"value":2218},"let",{"type":121,"tag":224,"props":2220,"children":2221},{"style":272},[2222],{"type":126,"value":2223}," _db",{"type":121,"tag":224,"props":2225,"children":2226},{"style":266},[2227],{"type":126,"value":429},{"type":121,"tag":224,"props":2229,"children":2230},{"style":231},[2231],{"type":126,"value":2232}," ReturnType",{"type":121,"tag":224,"props":2234,"children":2235},{"style":266},[2236],{"type":126,"value":2237},"\u003Ctypeof",{"type":121,"tag":224,"props":2239,"children":2240},{"style":272},[2241],{"type":126,"value":2092},{"type":121,"tag":224,"props":2243,"children":2244},{"style":266},[2245],{"type":126,"value":2246},">",{"type":121,"tag":224,"props":2248,"children":2249},{"style":266},[2250],{"type":126,"value":2251}," |",{"type":121,"tag":224,"props":2253,"children":2254},{"style":231},[2255],{"type":126,"value":2256}," null",{"type":121,"tag":224,"props":2258,"children":2259},{"style":266},[2260],{"type":126,"value":869},{"type":121,"tag":224,"props":2262,"children":2263},{"style":266},[2264],{"type":126,"value":2265}," null\n",{"type":121,"tag":224,"props":2267,"children":2268},{"class":226,"line":576},[2269],{"type":121,"tag":224,"props":2270,"children":2271},{"emptyLinePlaceholder":334},[2272],{"type":126,"value":337},{"type":121,"tag":224,"props":2274,"children":2275},{"class":226,"line":588},[2276,2281,2286,2291,2295],{"type":121,"tag":224,"props":2277,"children":2278},{"style":260},[2279],{"type":126,"value":2280},"export",{"type":121,"tag":224,"props":2282,"children":2283},{"style":354},[2284],{"type":126,"value":2285}," function",{"type":121,"tag":224,"props":2287,"children":2288},{"style":375},[2289],{"type":126,"value":2290}," getDb",{"type":121,"tag":224,"props":2292,"children":2293},{"style":266},[2294],{"type":126,"value":2097},{"type":121,"tag":224,"props":2296,"children":2297},{"style":266},[2298],{"type":126,"value":414},{"type":121,"tag":224,"props":2300,"children":2301},{"class":226,"line":597},[2302,2307,2312,2316,2321,2325,2329,2333,2337],{"type":121,"tag":224,"props":2303,"children":2304},{"style":260},[2305],{"type":126,"value":2306},"  if",{"type":121,"tag":224,"props":2308,"children":2309},{"style":421},[2310],{"type":126,"value":2311}," (",{"type":121,"tag":224,"props":2313,"children":2314},{"style":266},[2315],{"type":126,"value":1694},{"type":121,"tag":224,"props":2317,"children":2318},{"style":272},[2319],{"type":126,"value":2320},"_db",{"type":121,"tag":224,"props":2322,"children":2323},{"style":421},[2324],{"type":126,"value":1021},{"type":121,"tag":224,"props":2326,"children":2327},{"style":272},[2328],{"type":126,"value":2320},{"type":121,"tag":224,"props":2330,"children":2331},{"style":266},[2332],{"type":126,"value":869},{"type":121,"tag":224,"props":2334,"children":2335},{"style":375},[2336],{"type":126,"value":2092},{"type":121,"tag":224,"props":2338,"children":2339},{"style":421},[2340],{"type":126,"value":882},{"type":121,"tag":224,"props":2342,"children":2343},{"class":226,"line":642},[2344,2348],{"type":121,"tag":224,"props":2345,"children":2346},{"style":260},[2347],{"type":126,"value":2162},{"type":121,"tag":224,"props":2349,"children":2350},{"style":272},[2351],{"type":126,"value":2352}," _db\n",{"type":121,"tag":224,"props":2354,"children":2355},{"class":226,"line":650},[2356],{"type":121,"tag":224,"props":2357,"children":2358},{"style":266},[2359],{"type":126,"value":1044},{"type":121,"tag":129,"props":2361,"children":2362},{},[2363,2376,2378,2384,2386,2391,2393,2399,2401,2406],{"type":121,"tag":155,"props":2364,"children":2365},{},[2366,2368,2374],{"type":126,"value":2367},"WARNING: Do NOT use JavaScript ",{"type":121,"tag":163,"props":2369,"children":2371},{"className":2370},[],[2372],{"type":126,"value":2373},"Proxy",{"type":126,"value":2375}," wrappers around the DB client.",{"type":126,"value":2377}," A common pattern is wrapping ",{"type":121,"tag":163,"props":2379,"children":2381},{"className":2380},[],[2382],{"type":126,"value":2383},"db",{"type":126,"value":2385}," in a ",{"type":121,"tag":163,"props":2387,"children":2389},{"className":2388},[],[2390],{"type":126,"value":2373},{"type":126,"value":2392}," for lazy initialization. This breaks libraries like NextAuth\u002FAuth.js that inspect the DB adapter object (e.g., checking method existence, iterating properties). The Proxy intercepts those checks and breaks the auth request chain, causing hangs with no error. Use a plain ",{"type":121,"tag":163,"props":2394,"children":2396},{"className":2395},[],[2397],{"type":126,"value":2398},"getDb()",{"type":126,"value":2400}," function or a simple module-level lazy ",{"type":121,"tag":163,"props":2402,"children":2404},{"className":2403},[],[2405],{"type":126,"value":2218},{"type":126,"value":2407}," instead.",{"type":121,"tag":129,"props":2409,"children":2410},{},[2411,2416,2417,2423,2425,2431,2433,2439,2441,2447],{"type":121,"tag":155,"props":2412,"children":2413},{},[2414],{"type":126,"value":2415},"Drizzle Kit migrations",{"type":126,"value":1491},{"type":121,"tag":163,"props":2418,"children":2420},{"className":2419},[],[2421],{"type":126,"value":2422},"drizzle-kit",{"type":126,"value":2424}," and ",{"type":121,"tag":163,"props":2426,"children":2428},{"className":2427},[],[2429],{"type":126,"value":2430},"tsx",{"type":126,"value":2432}," do NOT auto-load ",{"type":121,"tag":163,"props":2434,"children":2436},{"className":2435},[],[2437],{"type":126,"value":2438},".env.local",{"type":126,"value":2440},". Source env vars manually or use ",{"type":121,"tag":163,"props":2442,"children":2444},{"className":2443},[],[2445],{"type":126,"value":2446},"dotenv",{"type":126,"value":429},{"type":121,"tag":213,"props":2449,"children":2451},{"className":215,"code":2450,"language":217,"meta":218,"style":218},"# Option 1: Source env vars before running\nsource \u003C(grep -v '^#' .env.local | sed 's\u002F^\u002Fexport \u002F') && npx drizzle-kit push\n\n# Option 2: Use dotenv-cli (recommended for scripts)\nnpm install -D dotenv-cli\nnpx dotenv -e .env.local -- npx drizzle-kit push\nnpx dotenv -e .env.local -- npx tsx scripts\u002Fseed.ts\n",[2452],{"type":121,"tag":163,"props":2453,"children":2454},{"__ignoreMap":218},[2455,2463,2548,2555,2563,2584,2624],{"type":121,"tag":224,"props":2456,"children":2457},{"class":226,"line":227},[2458],{"type":121,"tag":224,"props":2459,"children":2460},{"style":344},[2461],{"type":126,"value":2462},"# Option 1: Source env vars before running\n",{"type":121,"tag":224,"props":2464,"children":2465},{"class":226,"line":330},[2466,2471,2476,2481,2486,2490,2495,2499,2504,2509,2514,2518,2523,2528,2533,2538,2543],{"type":121,"tag":224,"props":2467,"children":2468},{"style":375},[2469],{"type":126,"value":2470},"source",{"type":121,"tag":224,"props":2472,"children":2473},{"style":266},[2474],{"type":126,"value":2475}," \u003C(",{"type":121,"tag":224,"props":2477,"children":2478},{"style":231},[2479],{"type":126,"value":2480},"grep",{"type":121,"tag":224,"props":2482,"children":2483},{"style":237},[2484],{"type":126,"value":2485}," -v ",{"type":121,"tag":224,"props":2487,"children":2488},{"style":266},[2489],{"type":126,"value":387},{"type":121,"tag":224,"props":2491,"children":2492},{"style":237},[2493],{"type":126,"value":2494},"^#",{"type":121,"tag":224,"props":2496,"children":2497},{"style":266},[2498],{"type":126,"value":387},{"type":121,"tag":224,"props":2500,"children":2501},{"style":237},[2502],{"type":126,"value":2503}," .env.local ",{"type":121,"tag":224,"props":2505,"children":2506},{"style":266},[2507],{"type":126,"value":2508},"|",{"type":121,"tag":224,"props":2510,"children":2511},{"style":231},[2512],{"type":126,"value":2513}," sed",{"type":121,"tag":224,"props":2515,"children":2516},{"style":266},[2517],{"type":126,"value":318},{"type":121,"tag":224,"props":2519,"children":2520},{"style":237},[2521],{"type":126,"value":2522},"s\u002F^\u002Fexport \u002F",{"type":121,"tag":224,"props":2524,"children":2525},{"style":266},[2526],{"type":126,"value":2527},"')",{"type":121,"tag":224,"props":2529,"children":2530},{"style":266},[2531],{"type":126,"value":2532}," &&",{"type":121,"tag":224,"props":2534,"children":2535},{"style":231},[2536],{"type":126,"value":2537}," npx",{"type":121,"tag":224,"props":2539,"children":2540},{"style":237},[2541],{"type":126,"value":2542}," drizzle-kit",{"type":121,"tag":224,"props":2544,"children":2545},{"style":237},[2546],{"type":126,"value":2547}," push\n",{"type":121,"tag":224,"props":2549,"children":2550},{"class":226,"line":340},[2551],{"type":121,"tag":224,"props":2552,"children":2553},{"emptyLinePlaceholder":334},[2554],{"type":126,"value":337},{"type":121,"tag":224,"props":2556,"children":2557},{"class":226,"line":350},[2558],{"type":121,"tag":224,"props":2559,"children":2560},{"style":344},[2561],{"type":126,"value":2562},"# Option 2: Use dotenv-cli (recommended for scripts)\n",{"type":121,"tag":224,"props":2564,"children":2565},{"class":226,"line":417},[2566,2570,2574,2579],{"type":121,"tag":224,"props":2567,"children":2568},{"style":231},[2569],{"type":126,"value":234},{"type":121,"tag":224,"props":2571,"children":2572},{"style":237},[2573],{"type":126,"value":240},{"type":121,"tag":224,"props":2575,"children":2576},{"style":237},[2577],{"type":126,"value":2578}," -D",{"type":121,"tag":224,"props":2580,"children":2581},{"style":237},[2582],{"type":126,"value":2583}," dotenv-cli\n",{"type":121,"tag":224,"props":2585,"children":2586},{"class":226,"line":450},[2587,2592,2597,2602,2607,2612,2616,2620],{"type":121,"tag":224,"props":2588,"children":2589},{"style":231},[2590],{"type":126,"value":2591},"npx",{"type":121,"tag":224,"props":2593,"children":2594},{"style":237},[2595],{"type":126,"value":2596}," dotenv",{"type":121,"tag":224,"props":2598,"children":2599},{"style":237},[2600],{"type":126,"value":2601}," -e",{"type":121,"tag":224,"props":2603,"children":2604},{"style":237},[2605],{"type":126,"value":2606}," .env.local",{"type":121,"tag":224,"props":2608,"children":2609},{"style":237},[2610],{"type":126,"value":2611}," --",{"type":121,"tag":224,"props":2613,"children":2614},{"style":237},[2615],{"type":126,"value":2537},{"type":121,"tag":224,"props":2617,"children":2618},{"style":237},[2619],{"type":126,"value":2542},{"type":121,"tag":224,"props":2621,"children":2622},{"style":237},[2623],{"type":126,"value":2547},{"type":121,"tag":224,"props":2625,"children":2626},{"class":226,"line":39},[2627,2631,2635,2639,2643,2647,2651,2656],{"type":121,"tag":224,"props":2628,"children":2629},{"style":231},[2630],{"type":126,"value":2591},{"type":121,"tag":224,"props":2632,"children":2633},{"style":237},[2634],{"type":126,"value":2596},{"type":121,"tag":224,"props":2636,"children":2637},{"style":237},[2638],{"type":126,"value":2601},{"type":121,"tag":224,"props":2640,"children":2641},{"style":237},[2642],{"type":126,"value":2606},{"type":121,"tag":224,"props":2644,"children":2645},{"style":237},[2646],{"type":126,"value":2611},{"type":121,"tag":224,"props":2648,"children":2649},{"style":237},[2650],{"type":126,"value":2537},{"type":121,"tag":224,"props":2652,"children":2653},{"style":237},[2654],{"type":126,"value":2655}," tsx",{"type":121,"tag":224,"props":2657,"children":2658},{"style":237},[2659],{"type":126,"value":2660}," scripts\u002Fseed.ts\n",{"type":121,"tag":129,"props":2662,"children":2663},{},[2664,2666,2671],{"type":126,"value":2665},"This applies to any Node script that needs Vercel-provisioned env vars — only Next.js auto-loads ",{"type":121,"tag":163,"props":2667,"children":2669},{"className":2668},[],[2670],{"type":126,"value":2438},{"type":126,"value":629},{"type":121,"tag":129,"props":2673,"children":2674},{},[2675],{"type":126,"value":2676},"Install via Vercel Marketplace for automatic environment variable provisioning.",{"type":121,"tag":2678,"props":2679,"children":2681},"h4",{"id":2680},"neon-cli-fallback-notes",[2682],{"type":126,"value":2683},"Neon CLI Fallback Notes",{"type":121,"tag":129,"props":2685,"children":2686},{},[2687],{"type":126,"value":2688},"If you use Neon CLI as the fallback path, account\u002Fproject setup is managed on Neon directly instead of through Vercel Marketplace automation.",{"type":121,"tag":129,"props":2690,"children":2691},{},[2692,2694,2699,2701,2706],{"type":126,"value":2693},"For ",{"type":121,"tag":155,"props":2695,"children":2696},{},[2697],{"type":126,"value":2698},"Vercel-managed Neon projects",{"type":126,"value":2700},", CLI operations require a ",{"type":121,"tag":155,"props":2702,"children":2703},{},[2704],{"type":126,"value":2705},"Neon API key",{"type":126,"value":2707},"; do not rely on normal browser-auth login flow alone.",{"type":121,"tag":201,"props":2709,"children":2711},{"id":2710},"upstash-redis-replaces-vercelkv",[2712],{"type":126,"value":2713},"Upstash Redis (replaces @vercel\u002Fkv)",{"type":121,"tag":129,"props":2715,"children":2716},{},[2717],{"type":126,"value":2718},"Serverless Redis with same Vercel billing integration.",{"type":121,"tag":213,"props":2720,"children":2722},{"className":215,"code":2721,"language":217,"meta":218,"style":218},"npm install @upstash\u002Fredis\n",[2723],{"type":121,"tag":163,"props":2724,"children":2725},{"__ignoreMap":218},[2726],{"type":121,"tag":224,"props":2727,"children":2728},{"class":226,"line":227},[2729,2733,2737],{"type":121,"tag":224,"props":2730,"children":2731},{"style":231},[2732],{"type":126,"value":234},{"type":121,"tag":224,"props":2734,"children":2735},{"style":237},[2736],{"type":126,"value":240},{"type":121,"tag":224,"props":2738,"children":2739},{"style":237},[2740],{"type":126,"value":2741}," @upstash\u002Fredis\n",{"type":121,"tag":213,"props":2743,"children":2745},{"className":248,"code":2744,"language":250,"meta":218,"style":218},"import { Redis } from '@upstash\u002Fredis'\n\nconst redis = Redis.fromEnv() \u002F\u002F Uses UPSTASH_REDIS_REST_URL & TOKEN\n\n\u002F\u002F Basic operations\nawait redis.set('session:abc', { userId: '123' }, { ex: 3600 })\nconst session = await redis.get('session:abc')\n\n\u002F\u002F Rate limiting\nimport { Ratelimit } from '@upstash\u002Fratelimit'\nconst ratelimit = new Ratelimit({\n  redis,\n  limiter: Ratelimit.slidingWindow(10, '10s'),\n})\nconst { success } = await ratelimit.limit('user:123')\n",[2746],{"type":121,"tag":163,"props":2747,"children":2748},{"__ignoreMap":218},[2749,2785,2792,2831,2838,2846,2945,2998,3005,3013,3050,3083,3095,3155,3166],{"type":121,"tag":224,"props":2750,"children":2751},{"class":226,"line":227},[2752,2756,2760,2765,2769,2773,2777,2781],{"type":121,"tag":224,"props":2753,"children":2754},{"style":260},[2755],{"type":126,"value":263},{"type":121,"tag":224,"props":2757,"children":2758},{"style":266},[2759],{"type":126,"value":269},{"type":121,"tag":224,"props":2761,"children":2762},{"style":272},[2763],{"type":126,"value":2764}," Redis",{"type":121,"tag":224,"props":2766,"children":2767},{"style":266},[2768],{"type":126,"value":308},{"type":121,"tag":224,"props":2770,"children":2771},{"style":260},[2772],{"type":126,"value":313},{"type":121,"tag":224,"props":2774,"children":2775},{"style":266},[2776],{"type":126,"value":318},{"type":121,"tag":224,"props":2778,"children":2779},{"style":237},[2780],{"type":126,"value":112},{"type":121,"tag":224,"props":2782,"children":2783},{"style":266},[2784],{"type":126,"value":327},{"type":121,"tag":224,"props":2786,"children":2787},{"class":226,"line":330},[2788],{"type":121,"tag":224,"props":2789,"children":2790},{"emptyLinePlaceholder":334},[2791],{"type":126,"value":337},{"type":121,"tag":224,"props":2793,"children":2794},{"class":226,"line":340},[2795,2799,2804,2808,2812,2816,2821,2826],{"type":121,"tag":224,"props":2796,"children":2797},{"style":354},[2798],{"type":126,"value":357},{"type":121,"tag":224,"props":2800,"children":2801},{"style":272},[2802],{"type":126,"value":2803}," redis ",{"type":121,"tag":224,"props":2805,"children":2806},{"style":266},[2807],{"type":126,"value":367},{"type":121,"tag":224,"props":2809,"children":2810},{"style":272},[2811],{"type":126,"value":2764},{"type":121,"tag":224,"props":2813,"children":2814},{"style":266},[2815],{"type":126,"value":629},{"type":121,"tag":224,"props":2817,"children":2818},{"style":375},[2819],{"type":126,"value":2820},"fromEnv",{"type":121,"tag":224,"props":2822,"children":2823},{"style":272},[2824],{"type":126,"value":2825},"() ",{"type":121,"tag":224,"props":2827,"children":2828},{"style":344},[2829],{"type":126,"value":2830},"\u002F\u002F Uses UPSTASH_REDIS_REST_URL & TOKEN\n",{"type":121,"tag":224,"props":2832,"children":2833},{"class":226,"line":350},[2834],{"type":121,"tag":224,"props":2835,"children":2836},{"emptyLinePlaceholder":334},[2837],{"type":126,"value":337},{"type":121,"tag":224,"props":2839,"children":2840},{"class":226,"line":417},[2841],{"type":121,"tag":224,"props":2842,"children":2843},{"style":344},[2844],{"type":126,"value":2845},"\u002F\u002F Basic operations\n",{"type":121,"tag":224,"props":2847,"children":2848},{"class":226,"line":450},[2849,2853,2858,2862,2867,2871,2875,2880,2884,2888,2892,2897,2901,2905,2910,2914,2919,2923,2928,2932,2937,2941],{"type":121,"tag":224,"props":2850,"children":2851},{"style":260},[2852],{"type":126,"value":1070},{"type":121,"tag":224,"props":2854,"children":2855},{"style":272},[2856],{"type":126,"value":2857}," redis",{"type":121,"tag":224,"props":2859,"children":2860},{"style":266},[2861],{"type":126,"value":629},{"type":121,"tag":224,"props":2863,"children":2864},{"style":375},[2865],{"type":126,"value":2866},"set",{"type":121,"tag":224,"props":2868,"children":2869},{"style":272},[2870],{"type":126,"value":382},{"type":121,"tag":224,"props":2872,"children":2873},{"style":266},[2874],{"type":126,"value":387},{"type":121,"tag":224,"props":2876,"children":2877},{"style":237},[2878],{"type":126,"value":2879},"session:abc",{"type":121,"tag":224,"props":2881,"children":2882},{"style":266},[2883],{"type":126,"value":387},{"type":121,"tag":224,"props":2885,"children":2886},{"style":266},[2887],{"type":126,"value":280},{"type":121,"tag":224,"props":2889,"children":2890},{"style":266},[2891],{"type":126,"value":269},{"type":121,"tag":224,"props":2893,"children":2894},{"style":421},[2895],{"type":126,"value":2896}," userId",{"type":121,"tag":224,"props":2898,"children":2899},{"style":266},[2900],{"type":126,"value":429},{"type":121,"tag":224,"props":2902,"children":2903},{"style":266},[2904],{"type":126,"value":318},{"type":121,"tag":224,"props":2906,"children":2907},{"style":237},[2908],{"type":126,"value":2909},"123",{"type":121,"tag":224,"props":2911,"children":2912},{"style":266},[2913],{"type":126,"value":387},{"type":121,"tag":224,"props":2915,"children":2916},{"style":266},[2917],{"type":126,"value":2918}," },",{"type":121,"tag":224,"props":2920,"children":2921},{"style":266},[2922],{"type":126,"value":269},{"type":121,"tag":224,"props":2924,"children":2925},{"style":421},[2926],{"type":126,"value":2927}," ex",{"type":121,"tag":224,"props":2929,"children":2930},{"style":266},[2931],{"type":126,"value":429},{"type":121,"tag":224,"props":2933,"children":2934},{"style":1013},[2935],{"type":126,"value":2936}," 3600",{"type":121,"tag":224,"props":2938,"children":2939},{"style":266},[2940],{"type":126,"value":308},{"type":121,"tag":224,"props":2942,"children":2943},{"style":272},[2944],{"type":126,"value":461},{"type":121,"tag":224,"props":2946,"children":2947},{"class":226,"line":39},[2948,2952,2957,2961,2965,2969,2973,2978,2982,2986,2990,2994],{"type":121,"tag":224,"props":2949,"children":2950},{"style":354},[2951],{"type":126,"value":357},{"type":121,"tag":224,"props":2953,"children":2954},{"style":272},[2955],{"type":126,"value":2956}," session ",{"type":121,"tag":224,"props":2958,"children":2959},{"style":266},[2960],{"type":126,"value":367},{"type":121,"tag":224,"props":2962,"children":2963},{"style":260},[2964],{"type":126,"value":372},{"type":121,"tag":224,"props":2966,"children":2967},{"style":272},[2968],{"type":126,"value":2857},{"type":121,"tag":224,"props":2970,"children":2971},{"style":266},[2972],{"type":126,"value":629},{"type":121,"tag":224,"props":2974,"children":2975},{"style":375},[2976],{"type":126,"value":2977},"get",{"type":121,"tag":224,"props":2979,"children":2980},{"style":272},[2981],{"type":126,"value":382},{"type":121,"tag":224,"props":2983,"children":2984},{"style":266},[2985],{"type":126,"value":387},{"type":121,"tag":224,"props":2987,"children":2988},{"style":237},[2989],{"type":126,"value":2879},{"type":121,"tag":224,"props":2991,"children":2992},{"style":266},[2993],{"type":126,"value":387},{"type":121,"tag":224,"props":2995,"children":2996},{"style":272},[2997],{"type":126,"value":461},{"type":121,"tag":224,"props":2999,"children":3000},{"class":226,"line":472},[3001],{"type":121,"tag":224,"props":3002,"children":3003},{"emptyLinePlaceholder":334},[3004],{"type":126,"value":337},{"type":121,"tag":224,"props":3006,"children":3007},{"class":226,"line":480},[3008],{"type":121,"tag":224,"props":3009,"children":3010},{"style":344},[3011],{"type":126,"value":3012},"\u002F\u002F Rate limiting\n",{"type":121,"tag":224,"props":3014,"children":3015},{"class":226,"line":489},[3016,3020,3024,3029,3033,3037,3041,3046],{"type":121,"tag":224,"props":3017,"children":3018},{"style":260},[3019],{"type":126,"value":263},{"type":121,"tag":224,"props":3021,"children":3022},{"style":266},[3023],{"type":126,"value":269},{"type":121,"tag":224,"props":3025,"children":3026},{"style":272},[3027],{"type":126,"value":3028}," Ratelimit",{"type":121,"tag":224,"props":3030,"children":3031},{"style":266},[3032],{"type":126,"value":308},{"type":121,"tag":224,"props":3034,"children":3035},{"style":260},[3036],{"type":126,"value":313},{"type":121,"tag":224,"props":3038,"children":3039},{"style":266},[3040],{"type":126,"value":318},{"type":121,"tag":224,"props":3042,"children":3043},{"style":237},[3044],{"type":126,"value":3045},"@upstash\u002Fratelimit",{"type":121,"tag":224,"props":3047,"children":3048},{"style":266},[3049],{"type":126,"value":327},{"type":121,"tag":224,"props":3051,"children":3052},{"class":226,"line":547},[3053,3057,3062,3066,3071,3075,3079],{"type":121,"tag":224,"props":3054,"children":3055},{"style":354},[3056],{"type":126,"value":357},{"type":121,"tag":224,"props":3058,"children":3059},{"style":272},[3060],{"type":126,"value":3061}," ratelimit ",{"type":121,"tag":224,"props":3063,"children":3064},{"style":266},[3065],{"type":126,"value":367},{"type":121,"tag":224,"props":3067,"children":3068},{"style":266},[3069],{"type":126,"value":3070}," new",{"type":121,"tag":224,"props":3072,"children":3073},{"style":375},[3074],{"type":126,"value":3028},{"type":121,"tag":224,"props":3076,"children":3077},{"style":272},[3078],{"type":126,"value":382},{"type":121,"tag":224,"props":3080,"children":3081},{"style":266},[3082],{"type":126,"value":1026},{"type":121,"tag":224,"props":3084,"children":3085},{"class":226,"line":576},[3086,3091],{"type":121,"tag":224,"props":3087,"children":3088},{"style":272},[3089],{"type":126,"value":3090},"  redis",{"type":121,"tag":224,"props":3092,"children":3093},{"style":266},[3094],{"type":126,"value":447},{"type":121,"tag":224,"props":3096,"children":3097},{"class":226,"line":588},[3098,3103,3107,3111,3115,3120,3124,3129,3133,3137,3142,3146,3151],{"type":121,"tag":224,"props":3099,"children":3100},{"style":421},[3101],{"type":126,"value":3102},"  limiter",{"type":121,"tag":224,"props":3104,"children":3105},{"style":266},[3106],{"type":126,"value":429},{"type":121,"tag":224,"props":3108,"children":3109},{"style":272},[3110],{"type":126,"value":3028},{"type":121,"tag":224,"props":3112,"children":3113},{"style":266},[3114],{"type":126,"value":629},{"type":121,"tag":224,"props":3116,"children":3117},{"style":375},[3118],{"type":126,"value":3119},"slidingWindow",{"type":121,"tag":224,"props":3121,"children":3122},{"style":272},[3123],{"type":126,"value":382},{"type":121,"tag":224,"props":3125,"children":3126},{"style":1013},[3127],{"type":126,"value":3128},"10",{"type":121,"tag":224,"props":3130,"children":3131},{"style":266},[3132],{"type":126,"value":280},{"type":121,"tag":224,"props":3134,"children":3135},{"style":266},[3136],{"type":126,"value":318},{"type":121,"tag":224,"props":3138,"children":3139},{"style":237},[3140],{"type":126,"value":3141},"10s",{"type":121,"tag":224,"props":3143,"children":3144},{"style":266},[3145],{"type":126,"value":387},{"type":121,"tag":224,"props":3147,"children":3148},{"style":272},[3149],{"type":126,"value":3150},")",{"type":121,"tag":224,"props":3152,"children":3153},{"style":266},[3154],{"type":126,"value":447},{"type":121,"tag":224,"props":3156,"children":3157},{"class":226,"line":597},[3158,3162],{"type":121,"tag":224,"props":3159,"children":3160},{"style":266},[3161],{"type":126,"value":456},{"type":121,"tag":224,"props":3163,"children":3164},{"style":272},[3165],{"type":126,"value":461},{"type":121,"tag":224,"props":3167,"children":3168},{"class":226,"line":642},[3169,3173,3177,3182,3186,3190,3194,3199,3203,3208,3212,3216,3221,3225],{"type":121,"tag":224,"props":3170,"children":3171},{"style":354},[3172],{"type":126,"value":357},{"type":121,"tag":224,"props":3174,"children":3175},{"style":266},[3176],{"type":126,"value":269},{"type":121,"tag":224,"props":3178,"children":3179},{"style":272},[3180],{"type":126,"value":3181}," success ",{"type":121,"tag":224,"props":3183,"children":3184},{"style":266},[3185],{"type":126,"value":456},{"type":121,"tag":224,"props":3187,"children":3188},{"style":266},[3189],{"type":126,"value":869},{"type":121,"tag":224,"props":3191,"children":3192},{"style":260},[3193],{"type":126,"value":372},{"type":121,"tag":224,"props":3195,"children":3196},{"style":272},[3197],{"type":126,"value":3198}," ratelimit",{"type":121,"tag":224,"props":3200,"children":3201},{"style":266},[3202],{"type":126,"value":629},{"type":121,"tag":224,"props":3204,"children":3205},{"style":375},[3206],{"type":126,"value":3207},"limit",{"type":121,"tag":224,"props":3209,"children":3210},{"style":272},[3211],{"type":126,"value":382},{"type":121,"tag":224,"props":3213,"children":3214},{"style":266},[3215],{"type":126,"value":387},{"type":121,"tag":224,"props":3217,"children":3218},{"style":237},[3219],{"type":126,"value":3220},"user:123",{"type":121,"tag":224,"props":3222,"children":3223},{"style":266},[3224],{"type":126,"value":387},{"type":121,"tag":224,"props":3226,"children":3227},{"style":272},[3228],{"type":126,"value":461},{"type":121,"tag":129,"props":3230,"children":3231},{},[3232],{"type":126,"value":2676},{"type":121,"tag":201,"props":3234,"children":3236},{"id":3235},"supabase-marketplace-native",[3237],{"type":126,"value":3238},"Supabase (Marketplace Native)",{"type":121,"tag":129,"props":3240,"children":3241},{},[3242],{"type":126,"value":3243},"Full Postgres database with built-in auth, realtime subscriptions, and storage. Native Vercel Marketplace integration.",{"type":121,"tag":213,"props":3245,"children":3247},{"className":215,"code":3246,"language":217,"meta":218,"style":218},"npm install @supabase\u002Fsupabase-js @supabase\u002Fssr\n",[3248],{"type":121,"tag":163,"props":3249,"children":3250},{"__ignoreMap":218},[3251],{"type":121,"tag":224,"props":3252,"children":3253},{"class":226,"line":227},[3254,3258,3262,3267],{"type":121,"tag":224,"props":3255,"children":3256},{"style":231},[3257],{"type":126,"value":234},{"type":121,"tag":224,"props":3259,"children":3260},{"style":237},[3261],{"type":126,"value":240},{"type":121,"tag":224,"props":3263,"children":3264},{"style":237},[3265],{"type":126,"value":3266}," @supabase\u002Fsupabase-js",{"type":121,"tag":224,"props":3268,"children":3269},{"style":237},[3270],{"type":126,"value":3271}," @supabase\u002Fssr\n",{"type":121,"tag":213,"props":3273,"children":3275},{"className":248,"code":3274,"language":250,"meta":218,"style":218},"import { createClient } from '@supabase\u002Fsupabase-js'\n\nconst supabase = createClient(\n  process.env.NEXT_PUBLIC_SUPABASE_URL!,\n  process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!\n)\n\nconst { data, error } = await supabase.from('users').select('*')\n",[3276],{"type":121,"tag":163,"props":3277,"children":3278},{"__ignoreMap":218},[3279,3315,3322,3347,3377,3406,3413,3420],{"type":121,"tag":224,"props":3280,"children":3281},{"class":226,"line":227},[3282,3286,3290,3295,3299,3303,3307,3311],{"type":121,"tag":224,"props":3283,"children":3284},{"style":260},[3285],{"type":126,"value":263},{"type":121,"tag":224,"props":3287,"children":3288},{"style":266},[3289],{"type":126,"value":269},{"type":121,"tag":224,"props":3291,"children":3292},{"style":272},[3293],{"type":126,"value":3294}," createClient",{"type":121,"tag":224,"props":3296,"children":3297},{"style":266},[3298],{"type":126,"value":308},{"type":121,"tag":224,"props":3300,"children":3301},{"style":260},[3302],{"type":126,"value":313},{"type":121,"tag":224,"props":3304,"children":3305},{"style":266},[3306],{"type":126,"value":318},{"type":121,"tag":224,"props":3308,"children":3309},{"style":237},[3310],{"type":126,"value":115},{"type":121,"tag":224,"props":3312,"children":3313},{"style":266},[3314],{"type":126,"value":327},{"type":121,"tag":224,"props":3316,"children":3317},{"class":226,"line":330},[3318],{"type":121,"tag":224,"props":3319,"children":3320},{"emptyLinePlaceholder":334},[3321],{"type":126,"value":337},{"type":121,"tag":224,"props":3323,"children":3324},{"class":226,"line":340},[3325,3329,3334,3338,3342],{"type":121,"tag":224,"props":3326,"children":3327},{"style":354},[3328],{"type":126,"value":357},{"type":121,"tag":224,"props":3330,"children":3331},{"style":272},[3332],{"type":126,"value":3333}," supabase ",{"type":121,"tag":224,"props":3335,"children":3336},{"style":266},[3337],{"type":126,"value":367},{"type":121,"tag":224,"props":3339,"children":3340},{"style":375},[3341],{"type":126,"value":3294},{"type":121,"tag":224,"props":3343,"children":3344},{"style":272},[3345],{"type":126,"value":3346},"(\n",{"type":121,"tag":224,"props":3348,"children":3349},{"class":226,"line":350},[3350,3355,3359,3363,3367,3372],{"type":121,"tag":224,"props":3351,"children":3352},{"style":272},[3353],{"type":126,"value":3354},"  process",{"type":121,"tag":224,"props":3356,"children":3357},{"style":266},[3358],{"type":126,"value":629},{"type":121,"tag":224,"props":3360,"children":3361},{"style":272},[3362],{"type":126,"value":1680},{"type":121,"tag":224,"props":3364,"children":3365},{"style":266},[3366],{"type":126,"value":629},{"type":121,"tag":224,"props":3368,"children":3369},{"style":272},[3370],{"type":126,"value":3371},"NEXT_PUBLIC_SUPABASE_URL",{"type":121,"tag":224,"props":3373,"children":3374},{"style":266},[3375],{"type":126,"value":3376},"!,\n",{"type":121,"tag":224,"props":3378,"children":3379},{"class":226,"line":417},[3380,3384,3388,3392,3396,3401],{"type":121,"tag":224,"props":3381,"children":3382},{"style":272},[3383],{"type":126,"value":3354},{"type":121,"tag":224,"props":3385,"children":3386},{"style":266},[3387],{"type":126,"value":629},{"type":121,"tag":224,"props":3389,"children":3390},{"style":272},[3391],{"type":126,"value":1680},{"type":121,"tag":224,"props":3393,"children":3394},{"style":266},[3395],{"type":126,"value":629},{"type":121,"tag":224,"props":3397,"children":3398},{"style":272},[3399],{"type":126,"value":3400},"NEXT_PUBLIC_SUPABASE_ANON_KEY",{"type":121,"tag":224,"props":3402,"children":3403},{"style":266},[3404],{"type":126,"value":3405},"!\n",{"type":121,"tag":224,"props":3407,"children":3408},{"class":226,"line":450},[3409],{"type":121,"tag":224,"props":3410,"children":3411},{"style":272},[3412],{"type":126,"value":461},{"type":121,"tag":224,"props":3414,"children":3415},{"class":226,"line":39},[3416],{"type":121,"tag":224,"props":3417,"children":3418},{"emptyLinePlaceholder":334},[3419],{"type":126,"value":337},{"type":121,"tag":224,"props":3421,"children":3422},{"class":226,"line":472},[3423,3427,3431,3436,3440,3445,3449,3453,3457,3462,3466,3470,3474,3478,3483,3487,3491,3495,3500,3504,3508,3513,3517],{"type":121,"tag":224,"props":3424,"children":3425},{"style":354},[3426],{"type":126,"value":357},{"type":121,"tag":224,"props":3428,"children":3429},{"style":266},[3430],{"type":126,"value":269},{"type":121,"tag":224,"props":3432,"children":3433},{"style":272},[3434],{"type":126,"value":3435}," data",{"type":121,"tag":224,"props":3437,"children":3438},{"style":266},[3439],{"type":126,"value":280},{"type":121,"tag":224,"props":3441,"children":3442},{"style":272},[3443],{"type":126,"value":3444}," error ",{"type":121,"tag":224,"props":3446,"children":3447},{"style":266},[3448],{"type":126,"value":456},{"type":121,"tag":224,"props":3450,"children":3451},{"style":266},[3452],{"type":126,"value":869},{"type":121,"tag":224,"props":3454,"children":3455},{"style":260},[3456],{"type":126,"value":372},{"type":121,"tag":224,"props":3458,"children":3459},{"style":272},[3460],{"type":126,"value":3461}," supabase",{"type":121,"tag":224,"props":3463,"children":3464},{"style":266},[3465],{"type":126,"value":629},{"type":121,"tag":224,"props":3467,"children":3468},{"style":375},[3469],{"type":126,"value":2059},{"type":121,"tag":224,"props":3471,"children":3472},{"style":272},[3473],{"type":126,"value":382},{"type":121,"tag":224,"props":3475,"children":3476},{"style":266},[3477],{"type":126,"value":387},{"type":121,"tag":224,"props":3479,"children":3480},{"style":237},[3481],{"type":126,"value":3482},"users",{"type":121,"tag":224,"props":3484,"children":3485},{"style":266},[3486],{"type":126,"value":387},{"type":121,"tag":224,"props":3488,"children":3489},{"style":272},[3490],{"type":126,"value":3150},{"type":121,"tag":224,"props":3492,"children":3493},{"style":266},[3494],{"type":126,"value":629},{"type":121,"tag":224,"props":3496,"children":3497},{"style":375},[3498],{"type":126,"value":3499},"select",{"type":121,"tag":224,"props":3501,"children":3502},{"style":272},[3503],{"type":126,"value":382},{"type":121,"tag":224,"props":3505,"children":3506},{"style":266},[3507],{"type":126,"value":387},{"type":121,"tag":224,"props":3509,"children":3510},{"style":237},[3511],{"type":126,"value":3512},"*",{"type":121,"tag":224,"props":3514,"children":3515},{"style":266},[3516],{"type":126,"value":387},{"type":121,"tag":224,"props":3518,"children":3519},{"style":272},[3520],{"type":126,"value":461},{"type":121,"tag":129,"props":3522,"children":3523},{},[3524,3526],{"type":126,"value":3525},"Install via Vercel Marketplace: ",{"type":121,"tag":163,"props":3527,"children":3529},{"className":3528},[],[3530],{"type":126,"value":3531},"vercel integration add supabase",{"type":121,"tag":201,"props":3533,"children":3535},{"id":3534},"prisma-orm-marketplace-native",[3536],{"type":126,"value":3537},"Prisma ORM (Marketplace Native)",{"type":121,"tag":129,"props":3539,"children":3540},{},[3541],{"type":126,"value":3542},"Type-safe ORM with auto-generated client, migrations, and Prisma Accelerate for connection pooling.",{"type":121,"tag":213,"props":3544,"children":3546},{"className":215,"code":3545,"language":217,"meta":218,"style":218},"npm install prisma @prisma\u002Fclient\nnpx prisma init\n",[3547],{"type":121,"tag":163,"props":3548,"children":3549},{"__ignoreMap":218},[3550,3571],{"type":121,"tag":224,"props":3551,"children":3552},{"class":226,"line":227},[3553,3557,3561,3566],{"type":121,"tag":224,"props":3554,"children":3555},{"style":231},[3556],{"type":126,"value":234},{"type":121,"tag":224,"props":3558,"children":3559},{"style":237},[3560],{"type":126,"value":240},{"type":121,"tag":224,"props":3562,"children":3563},{"style":237},[3564],{"type":126,"value":3565}," prisma",{"type":121,"tag":224,"props":3567,"children":3568},{"style":237},[3569],{"type":126,"value":3570}," @prisma\u002Fclient\n",{"type":121,"tag":224,"props":3572,"children":3573},{"class":226,"line":330},[3574,3578,3582],{"type":121,"tag":224,"props":3575,"children":3576},{"style":231},[3577],{"type":126,"value":2591},{"type":121,"tag":224,"props":3579,"children":3580},{"style":237},[3581],{"type":126,"value":3565},{"type":121,"tag":224,"props":3583,"children":3584},{"style":237},[3585],{"type":126,"value":3586}," init\n",{"type":121,"tag":213,"props":3588,"children":3590},{"className":248,"code":3589,"language":250,"meta":218,"style":218},"import { PrismaClient } from '@prisma\u002Fclient'\n\nconst prisma = new PrismaClient()\nconst users = await prisma.user.findMany()\n",[3591],{"type":121,"tag":163,"props":3592,"children":3593},{"__ignoreMap":218},[3594,3630,3637,3665],{"type":121,"tag":224,"props":3595,"children":3596},{"class":226,"line":227},[3597,3601,3605,3610,3614,3618,3622,3626],{"type":121,"tag":224,"props":3598,"children":3599},{"style":260},[3600],{"type":126,"value":263},{"type":121,"tag":224,"props":3602,"children":3603},{"style":266},[3604],{"type":126,"value":269},{"type":121,"tag":224,"props":3606,"children":3607},{"style":272},[3608],{"type":126,"value":3609}," PrismaClient",{"type":121,"tag":224,"props":3611,"children":3612},{"style":266},[3613],{"type":126,"value":308},{"type":121,"tag":224,"props":3615,"children":3616},{"style":260},[3617],{"type":126,"value":313},{"type":121,"tag":224,"props":3619,"children":3620},{"style":266},[3621],{"type":126,"value":318},{"type":121,"tag":224,"props":3623,"children":3624},{"style":237},[3625],{"type":126,"value":116},{"type":121,"tag":224,"props":3627,"children":3628},{"style":266},[3629],{"type":126,"value":327},{"type":121,"tag":224,"props":3631,"children":3632},{"class":226,"line":330},[3633],{"type":121,"tag":224,"props":3634,"children":3635},{"emptyLinePlaceholder":334},[3636],{"type":126,"value":337},{"type":121,"tag":224,"props":3638,"children":3639},{"class":226,"line":340},[3640,3644,3649,3653,3657,3661],{"type":121,"tag":224,"props":3641,"children":3642},{"style":354},[3643],{"type":126,"value":357},{"type":121,"tag":224,"props":3645,"children":3646},{"style":272},[3647],{"type":126,"value":3648}," prisma ",{"type":121,"tag":224,"props":3650,"children":3651},{"style":266},[3652],{"type":126,"value":367},{"type":121,"tag":224,"props":3654,"children":3655},{"style":266},[3656],{"type":126,"value":3070},{"type":121,"tag":224,"props":3658,"children":3659},{"style":375},[3660],{"type":126,"value":3609},{"type":121,"tag":224,"props":3662,"children":3663},{"style":272},[3664],{"type":126,"value":882},{"type":121,"tag":224,"props":3666,"children":3667},{"class":226,"line":350},[3668,3672,3676,3680,3684,3688,3692,3697,3701,3706],{"type":121,"tag":224,"props":3669,"children":3670},{"style":354},[3671],{"type":126,"value":357},{"type":121,"tag":224,"props":3673,"children":3674},{"style":272},[3675],{"type":126,"value":1710},{"type":121,"tag":224,"props":3677,"children":3678},{"style":266},[3679],{"type":126,"value":367},{"type":121,"tag":224,"props":3681,"children":3682},{"style":260},[3683],{"type":126,"value":372},{"type":121,"tag":224,"props":3685,"children":3686},{"style":272},[3687],{"type":126,"value":3565},{"type":121,"tag":224,"props":3689,"children":3690},{"style":266},[3691],{"type":126,"value":629},{"type":121,"tag":224,"props":3693,"children":3694},{"style":272},[3695],{"type":126,"value":3696},"user",{"type":121,"tag":224,"props":3698,"children":3699},{"style":266},[3700],{"type":126,"value":629},{"type":121,"tag":224,"props":3702,"children":3703},{"style":375},[3704],{"type":126,"value":3705},"findMany",{"type":121,"tag":224,"props":3707,"children":3708},{"style":272},[3709],{"type":126,"value":882},{"type":121,"tag":129,"props":3711,"children":3712},{},[3713,3714],{"type":126,"value":3525},{"type":121,"tag":163,"props":3715,"children":3717},{"className":3716},[],[3718],{"type":126,"value":3719},"vercel integration add prisma",{"type":121,"tag":201,"props":3721,"children":3723},{"id":3722},"mongodb-atlas",[3724],{"type":126,"value":3725},"MongoDB Atlas",{"type":121,"tag":129,"props":3727,"children":3728},{},[3729],{"type":126,"value":3730},"Document database with flexible schemas. Available via Vercel Marketplace.",{"type":121,"tag":213,"props":3732,"children":3734},{"className":215,"code":3733,"language":217,"meta":218,"style":218},"npm install mongodb\n",[3735],{"type":121,"tag":163,"props":3736,"children":3737},{"__ignoreMap":218},[3738],{"type":121,"tag":224,"props":3739,"children":3740},{"class":226,"line":227},[3741,3745,3749],{"type":121,"tag":224,"props":3742,"children":3743},{"style":231},[3744],{"type":126,"value":234},{"type":121,"tag":224,"props":3746,"children":3747},{"style":237},[3748],{"type":126,"value":240},{"type":121,"tag":224,"props":3750,"children":3751},{"style":237},[3752],{"type":126,"value":3753}," mongodb\n",{"type":121,"tag":213,"props":3755,"children":3757},{"className":248,"code":3756,"language":250,"meta":218,"style":218},"import { MongoClient } from 'mongodb'\n\nconst client = new MongoClient(process.env.MONGODB_URI!)\nconst db = client.db('myapp')\nconst users = await db.collection('users').find({}).toArray()\n",[3758],{"type":121,"tag":163,"props":3759,"children":3760},{"__ignoreMap":218},[3761,3798,3805,3858,3907],{"type":121,"tag":224,"props":3762,"children":3763},{"class":226,"line":227},[3764,3768,3772,3777,3781,3785,3789,3794],{"type":121,"tag":224,"props":3765,"children":3766},{"style":260},[3767],{"type":126,"value":263},{"type":121,"tag":224,"props":3769,"children":3770},{"style":266},[3771],{"type":126,"value":269},{"type":121,"tag":224,"props":3773,"children":3774},{"style":272},[3775],{"type":126,"value":3776}," MongoClient",{"type":121,"tag":224,"props":3778,"children":3779},{"style":266},[3780],{"type":126,"value":308},{"type":121,"tag":224,"props":3782,"children":3783},{"style":260},[3784],{"type":126,"value":313},{"type":121,"tag":224,"props":3786,"children":3787},{"style":266},[3788],{"type":126,"value":318},{"type":121,"tag":224,"props":3790,"children":3791},{"style":237},[3792],{"type":126,"value":3793},"mongodb",{"type":121,"tag":224,"props":3795,"children":3796},{"style":266},[3797],{"type":126,"value":327},{"type":121,"tag":224,"props":3799,"children":3800},{"class":226,"line":330},[3801],{"type":121,"tag":224,"props":3802,"children":3803},{"emptyLinePlaceholder":334},[3804],{"type":126,"value":337},{"type":121,"tag":224,"props":3806,"children":3807},{"class":226,"line":340},[3808,3812,3817,3821,3825,3829,3833,3837,3841,3845,3850,3854],{"type":121,"tag":224,"props":3809,"children":3810},{"style":354},[3811],{"type":126,"value":357},{"type":121,"tag":224,"props":3813,"children":3814},{"style":272},[3815],{"type":126,"value":3816}," client ",{"type":121,"tag":224,"props":3818,"children":3819},{"style":266},[3820],{"type":126,"value":367},{"type":121,"tag":224,"props":3822,"children":3823},{"style":266},[3824],{"type":126,"value":3070},{"type":121,"tag":224,"props":3826,"children":3827},{"style":375},[3828],{"type":126,"value":3776},{"type":121,"tag":224,"props":3830,"children":3831},{"style":272},[3832],{"type":126,"value":1671},{"type":121,"tag":224,"props":3834,"children":3835},{"style":266},[3836],{"type":126,"value":629},{"type":121,"tag":224,"props":3838,"children":3839},{"style":272},[3840],{"type":126,"value":1680},{"type":121,"tag":224,"props":3842,"children":3843},{"style":266},[3844],{"type":126,"value":629},{"type":121,"tag":224,"props":3846,"children":3847},{"style":272},[3848],{"type":126,"value":3849},"MONGODB_URI",{"type":121,"tag":224,"props":3851,"children":3852},{"style":266},[3853],{"type":126,"value":1694},{"type":121,"tag":224,"props":3855,"children":3856},{"style":272},[3857],{"type":126,"value":461},{"type":121,"tag":224,"props":3859,"children":3860},{"class":226,"line":350},[3861,3865,3869,3873,3878,3882,3886,3890,3894,3899,3903],{"type":121,"tag":224,"props":3862,"children":3863},{"style":354},[3864],{"type":126,"value":357},{"type":121,"tag":224,"props":3866,"children":3867},{"style":272},[3868],{"type":126,"value":1901},{"type":121,"tag":224,"props":3870,"children":3871},{"style":266},[3872],{"type":126,"value":367},{"type":121,"tag":224,"props":3874,"children":3875},{"style":272},[3876],{"type":126,"value":3877}," client",{"type":121,"tag":224,"props":3879,"children":3880},{"style":266},[3881],{"type":126,"value":629},{"type":121,"tag":224,"props":3883,"children":3884},{"style":375},[3885],{"type":126,"value":2383},{"type":121,"tag":224,"props":3887,"children":3888},{"style":272},[3889],{"type":126,"value":382},{"type":121,"tag":224,"props":3891,"children":3892},{"style":266},[3893],{"type":126,"value":387},{"type":121,"tag":224,"props":3895,"children":3896},{"style":237},[3897],{"type":126,"value":3898},"myapp",{"type":121,"tag":224,"props":3900,"children":3901},{"style":266},[3902],{"type":126,"value":387},{"type":121,"tag":224,"props":3904,"children":3905},{"style":272},[3906],{"type":126,"value":461},{"type":121,"tag":224,"props":3908,"children":3909},{"class":226,"line":417},[3910,3914,3918,3922,3926,3931,3935,3940,3944,3948,3952,3956,3960,3964,3969,3973,3978,3982,3986,3991],{"type":121,"tag":224,"props":3911,"children":3912},{"style":354},[3913],{"type":126,"value":357},{"type":121,"tag":224,"props":3915,"children":3916},{"style":272},[3917],{"type":126,"value":1710},{"type":121,"tag":224,"props":3919,"children":3920},{"style":266},[3921],{"type":126,"value":367},{"type":121,"tag":224,"props":3923,"children":3924},{"style":260},[3925],{"type":126,"value":372},{"type":121,"tag":224,"props":3927,"children":3928},{"style":272},[3929],{"type":126,"value":3930}," db",{"type":121,"tag":224,"props":3932,"children":3933},{"style":266},[3934],{"type":126,"value":629},{"type":121,"tag":224,"props":3936,"children":3937},{"style":375},[3938],{"type":126,"value":3939},"collection",{"type":121,"tag":224,"props":3941,"children":3942},{"style":272},[3943],{"type":126,"value":382},{"type":121,"tag":224,"props":3945,"children":3946},{"style":266},[3947],{"type":126,"value":387},{"type":121,"tag":224,"props":3949,"children":3950},{"style":237},[3951],{"type":126,"value":3482},{"type":121,"tag":224,"props":3953,"children":3954},{"style":266},[3955],{"type":126,"value":387},{"type":121,"tag":224,"props":3957,"children":3958},{"style":272},[3959],{"type":126,"value":3150},{"type":121,"tag":224,"props":3961,"children":3962},{"style":266},[3963],{"type":126,"value":629},{"type":121,"tag":224,"props":3965,"children":3966},{"style":375},[3967],{"type":126,"value":3968},"find",{"type":121,"tag":224,"props":3970,"children":3971},{"style":272},[3972],{"type":126,"value":382},{"type":121,"tag":224,"props":3974,"children":3975},{"style":266},[3976],{"type":126,"value":3977},"{}",{"type":121,"tag":224,"props":3979,"children":3980},{"style":272},[3981],{"type":126,"value":3150},{"type":121,"tag":224,"props":3983,"children":3984},{"style":266},[3985],{"type":126,"value":629},{"type":121,"tag":224,"props":3987,"children":3988},{"style":375},[3989],{"type":126,"value":3990},"toArray",{"type":121,"tag":224,"props":3992,"children":3993},{"style":272},[3994],{"type":126,"value":882},{"type":121,"tag":129,"props":3996,"children":3997},{},[3998,3999],{"type":126,"value":3525},{"type":121,"tag":163,"props":4000,"children":4002},{"className":4001},[],[4003],{"type":126,"value":4004},"vercel integration add mongodb-atlas",{"type":121,"tag":201,"props":4006,"children":4008},{"id":4007},"convex",[4009],{"type":126,"value":4010},"Convex",{"type":121,"tag":129,"props":4012,"children":4013},{},[4014],{"type":126,"value":4015},"Reactive backend-as-a-service with real-time sync, serverless functions, and file storage.",{"type":121,"tag":213,"props":4017,"children":4019},{"className":215,"code":4018,"language":217,"meta":218,"style":218},"npm install convex\nnpx convex dev\n",[4020],{"type":121,"tag":163,"props":4021,"children":4022},{"__ignoreMap":218},[4023,4039],{"type":121,"tag":224,"props":4024,"children":4025},{"class":226,"line":227},[4026,4030,4034],{"type":121,"tag":224,"props":4027,"children":4028},{"style":231},[4029],{"type":126,"value":234},{"type":121,"tag":224,"props":4031,"children":4032},{"style":237},[4033],{"type":126,"value":240},{"type":121,"tag":224,"props":4035,"children":4036},{"style":237},[4037],{"type":126,"value":4038}," convex\n",{"type":121,"tag":224,"props":4040,"children":4041},{"class":226,"line":330},[4042,4046,4051],{"type":121,"tag":224,"props":4043,"children":4044},{"style":231},[4045],{"type":126,"value":2591},{"type":121,"tag":224,"props":4047,"children":4048},{"style":237},[4049],{"type":126,"value":4050}," convex",{"type":121,"tag":224,"props":4052,"children":4053},{"style":237},[4054],{"type":126,"value":4055}," dev\n",{"type":121,"tag":213,"props":4057,"children":4059},{"className":248,"code":4058,"language":250,"meta":218,"style":218},"import { query } from '.\u002F_generated\u002Fserver'\nimport { v } from 'convex\u002Fvalues'\n\nexport const getUsers = query({\n  args: {},\n  handler: async (ctx) => {\n    return await ctx.db.query('users').collect()\n  },\n})\n",[4060],{"type":121,"tag":163,"props":4061,"children":4062},{"__ignoreMap":218},[4063,4100,4137,4144,4177,4194,4234,4301,4309],{"type":121,"tag":224,"props":4064,"children":4065},{"class":226,"line":227},[4066,4070,4074,4079,4083,4087,4091,4096],{"type":121,"tag":224,"props":4067,"children":4068},{"style":260},[4069],{"type":126,"value":263},{"type":121,"tag":224,"props":4071,"children":4072},{"style":266},[4073],{"type":126,"value":269},{"type":121,"tag":224,"props":4075,"children":4076},{"style":272},[4077],{"type":126,"value":4078}," query",{"type":121,"tag":224,"props":4080,"children":4081},{"style":266},[4082],{"type":126,"value":308},{"type":121,"tag":224,"props":4084,"children":4085},{"style":260},[4086],{"type":126,"value":313},{"type":121,"tag":224,"props":4088,"children":4089},{"style":266},[4090],{"type":126,"value":318},{"type":121,"tag":224,"props":4092,"children":4093},{"style":237},[4094],{"type":126,"value":4095},".\u002F_generated\u002Fserver",{"type":121,"tag":224,"props":4097,"children":4098},{"style":266},[4099],{"type":126,"value":327},{"type":121,"tag":224,"props":4101,"children":4102},{"class":226,"line":330},[4103,4107,4111,4116,4120,4124,4128,4133],{"type":121,"tag":224,"props":4104,"children":4105},{"style":260},[4106],{"type":126,"value":263},{"type":121,"tag":224,"props":4108,"children":4109},{"style":266},[4110],{"type":126,"value":269},{"type":121,"tag":224,"props":4112,"children":4113},{"style":272},[4114],{"type":126,"value":4115}," v",{"type":121,"tag":224,"props":4117,"children":4118},{"style":266},[4119],{"type":126,"value":308},{"type":121,"tag":224,"props":4121,"children":4122},{"style":260},[4123],{"type":126,"value":313},{"type":121,"tag":224,"props":4125,"children":4126},{"style":266},[4127],{"type":126,"value":318},{"type":121,"tag":224,"props":4129,"children":4130},{"style":237},[4131],{"type":126,"value":4132},"convex\u002Fvalues",{"type":121,"tag":224,"props":4134,"children":4135},{"style":266},[4136],{"type":126,"value":327},{"type":121,"tag":224,"props":4138,"children":4139},{"class":226,"line":340},[4140],{"type":121,"tag":224,"props":4141,"children":4142},{"emptyLinePlaceholder":334},[4143],{"type":126,"value":337},{"type":121,"tag":224,"props":4145,"children":4146},{"class":226,"line":350},[4147,4151,4156,4161,4165,4169,4173],{"type":121,"tag":224,"props":4148,"children":4149},{"style":260},[4150],{"type":126,"value":2280},{"type":121,"tag":224,"props":4152,"children":4153},{"style":354},[4154],{"type":126,"value":4155}," const",{"type":121,"tag":224,"props":4157,"children":4158},{"style":272},[4159],{"type":126,"value":4160}," getUsers ",{"type":121,"tag":224,"props":4162,"children":4163},{"style":266},[4164],{"type":126,"value":367},{"type":121,"tag":224,"props":4166,"children":4167},{"style":375},[4168],{"type":126,"value":4078},{"type":121,"tag":224,"props":4170,"children":4171},{"style":272},[4172],{"type":126,"value":382},{"type":121,"tag":224,"props":4174,"children":4175},{"style":266},[4176],{"type":126,"value":1026},{"type":121,"tag":224,"props":4178,"children":4179},{"class":226,"line":417},[4180,4185,4189],{"type":121,"tag":224,"props":4181,"children":4182},{"style":421},[4183],{"type":126,"value":4184},"  args",{"type":121,"tag":224,"props":4186,"children":4187},{"style":266},[4188],{"type":126,"value":429},{"type":121,"tag":224,"props":4190,"children":4191},{"style":266},[4192],{"type":126,"value":4193}," {},\n",{"type":121,"tag":224,"props":4195,"children":4196},{"class":226,"line":450},[4197,4202,4206,4211,4215,4221,4225,4230],{"type":121,"tag":224,"props":4198,"children":4199},{"style":375},[4200],{"type":126,"value":4201},"  handler",{"type":121,"tag":224,"props":4203,"children":4204},{"style":266},[4205],{"type":126,"value":429},{"type":121,"tag":224,"props":4207,"children":4208},{"style":354},[4209],{"type":126,"value":4210}," async",{"type":121,"tag":224,"props":4212,"children":4213},{"style":266},[4214],{"type":126,"value":2311},{"type":121,"tag":224,"props":4216,"children":4218},{"style":4217},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[4219],{"type":126,"value":4220},"ctx",{"type":121,"tag":224,"props":4222,"children":4223},{"style":266},[4224],{"type":126,"value":3150},{"type":121,"tag":224,"props":4226,"children":4227},{"style":354},[4228],{"type":126,"value":4229}," =>",{"type":121,"tag":224,"props":4231,"children":4232},{"style":266},[4233],{"type":126,"value":414},{"type":121,"tag":224,"props":4235,"children":4236},{"class":226,"line":39},[4237,4242,4246,4251,4255,4259,4263,4268,4272,4276,4280,4284,4288,4292,4297],{"type":121,"tag":224,"props":4238,"children":4239},{"style":260},[4240],{"type":126,"value":4241},"    return",{"type":121,"tag":224,"props":4243,"children":4244},{"style":260},[4245],{"type":126,"value":372},{"type":121,"tag":224,"props":4247,"children":4248},{"style":272},[4249],{"type":126,"value":4250}," ctx",{"type":121,"tag":224,"props":4252,"children":4253},{"style":266},[4254],{"type":126,"value":629},{"type":121,"tag":224,"props":4256,"children":4257},{"style":272},[4258],{"type":126,"value":2383},{"type":121,"tag":224,"props":4260,"children":4261},{"style":266},[4262],{"type":126,"value":629},{"type":121,"tag":224,"props":4264,"children":4265},{"style":375},[4266],{"type":126,"value":4267},"query",{"type":121,"tag":224,"props":4269,"children":4270},{"style":421},[4271],{"type":126,"value":382},{"type":121,"tag":224,"props":4273,"children":4274},{"style":266},[4275],{"type":126,"value":387},{"type":121,"tag":224,"props":4277,"children":4278},{"style":237},[4279],{"type":126,"value":3482},{"type":121,"tag":224,"props":4281,"children":4282},{"style":266},[4283],{"type":126,"value":387},{"type":121,"tag":224,"props":4285,"children":4286},{"style":421},[4287],{"type":126,"value":3150},{"type":121,"tag":224,"props":4289,"children":4290},{"style":266},[4291],{"type":126,"value":629},{"type":121,"tag":224,"props":4293,"children":4294},{"style":375},[4295],{"type":126,"value":4296},"collect",{"type":121,"tag":224,"props":4298,"children":4299},{"style":421},[4300],{"type":126,"value":882},{"type":121,"tag":224,"props":4302,"children":4303},{"class":226,"line":472},[4304],{"type":121,"tag":224,"props":4305,"children":4306},{"style":266},[4307],{"type":126,"value":4308},"  },\n",{"type":121,"tag":224,"props":4310,"children":4311},{"class":226,"line":480},[4312,4316],{"type":121,"tag":224,"props":4313,"children":4314},{"style":266},[4315],{"type":126,"value":456},{"type":121,"tag":224,"props":4317,"children":4318},{"style":272},[4319],{"type":126,"value":461},{"type":121,"tag":201,"props":4321,"children":4323},{"id":4322},"turso-libsql",[4324],{"type":126,"value":4325},"Turso (libSQL)",{"type":121,"tag":129,"props":4327,"children":4328},{},[4329],{"type":126,"value":4330},"Edge-native SQLite database with embedded replicas for ultra-low latency reads.",{"type":121,"tag":213,"props":4332,"children":4334},{"className":215,"code":4333,"language":217,"meta":218,"style":218},"npm install @libsql\u002Fclient\n",[4335],{"type":121,"tag":163,"props":4336,"children":4337},{"__ignoreMap":218},[4338],{"type":121,"tag":224,"props":4339,"children":4340},{"class":226,"line":227},[4341,4345,4349],{"type":121,"tag":224,"props":4342,"children":4343},{"style":231},[4344],{"type":126,"value":234},{"type":121,"tag":224,"props":4346,"children":4347},{"style":237},[4348],{"type":126,"value":240},{"type":121,"tag":224,"props":4350,"children":4351},{"style":237},[4352],{"type":126,"value":4353}," @libsql\u002Fclient\n",{"type":121,"tag":213,"props":4355,"children":4357},{"className":248,"code":4356,"language":250,"meta":218,"style":218},"import { createClient } from '@libsql\u002Fclient'\n\nconst turso = createClient({\n  url: process.env.TURSO_DATABASE_URL!,\n  authToken: process.env.TURSO_AUTH_TOKEN!,\n})\n\nconst result = await turso.execute('SELECT * FROM users')\n",[4358],{"type":121,"tag":163,"props":4359,"children":4360},{"__ignoreMap":218},[4361,4397,4404,4432,4470,4507,4518,4525],{"type":121,"tag":224,"props":4362,"children":4363},{"class":226,"line":227},[4364,4368,4372,4376,4380,4384,4388,4393],{"type":121,"tag":224,"props":4365,"children":4366},{"style":260},[4367],{"type":126,"value":263},{"type":121,"tag":224,"props":4369,"children":4370},{"style":266},[4371],{"type":126,"value":269},{"type":121,"tag":224,"props":4373,"children":4374},{"style":272},[4375],{"type":126,"value":3294},{"type":121,"tag":224,"props":4377,"children":4378},{"style":266},[4379],{"type":126,"value":308},{"type":121,"tag":224,"props":4381,"children":4382},{"style":260},[4383],{"type":126,"value":313},{"type":121,"tag":224,"props":4385,"children":4386},{"style":266},[4387],{"type":126,"value":318},{"type":121,"tag":224,"props":4389,"children":4390},{"style":237},[4391],{"type":126,"value":4392},"@libsql\u002Fclient",{"type":121,"tag":224,"props":4394,"children":4395},{"style":266},[4396],{"type":126,"value":327},{"type":121,"tag":224,"props":4398,"children":4399},{"class":226,"line":330},[4400],{"type":121,"tag":224,"props":4401,"children":4402},{"emptyLinePlaceholder":334},[4403],{"type":126,"value":337},{"type":121,"tag":224,"props":4405,"children":4406},{"class":226,"line":340},[4407,4411,4416,4420,4424,4428],{"type":121,"tag":224,"props":4408,"children":4409},{"style":354},[4410],{"type":126,"value":357},{"type":121,"tag":224,"props":4412,"children":4413},{"style":272},[4414],{"type":126,"value":4415}," turso ",{"type":121,"tag":224,"props":4417,"children":4418},{"style":266},[4419],{"type":126,"value":367},{"type":121,"tag":224,"props":4421,"children":4422},{"style":375},[4423],{"type":126,"value":3294},{"type":121,"tag":224,"props":4425,"children":4426},{"style":272},[4427],{"type":126,"value":382},{"type":121,"tag":224,"props":4429,"children":4430},{"style":266},[4431],{"type":126,"value":1026},{"type":121,"tag":224,"props":4433,"children":4434},{"class":226,"line":350},[4435,4440,4444,4449,4453,4457,4461,4466],{"type":121,"tag":224,"props":4436,"children":4437},{"style":421},[4438],{"type":126,"value":4439},"  url",{"type":121,"tag":224,"props":4441,"children":4442},{"style":266},[4443],{"type":126,"value":429},{"type":121,"tag":224,"props":4445,"children":4446},{"style":272},[4447],{"type":126,"value":4448}," process",{"type":121,"tag":224,"props":4450,"children":4451},{"style":266},[4452],{"type":126,"value":629},{"type":121,"tag":224,"props":4454,"children":4455},{"style":272},[4456],{"type":126,"value":1680},{"type":121,"tag":224,"props":4458,"children":4459},{"style":266},[4460],{"type":126,"value":629},{"type":121,"tag":224,"props":4462,"children":4463},{"style":272},[4464],{"type":126,"value":4465},"TURSO_DATABASE_URL",{"type":121,"tag":224,"props":4467,"children":4468},{"style":266},[4469],{"type":126,"value":3376},{"type":121,"tag":224,"props":4471,"children":4472},{"class":226,"line":417},[4473,4478,4482,4486,4490,4494,4498,4503],{"type":121,"tag":224,"props":4474,"children":4475},{"style":421},[4476],{"type":126,"value":4477},"  authToken",{"type":121,"tag":224,"props":4479,"children":4480},{"style":266},[4481],{"type":126,"value":429},{"type":121,"tag":224,"props":4483,"children":4484},{"style":272},[4485],{"type":126,"value":4448},{"type":121,"tag":224,"props":4487,"children":4488},{"style":266},[4489],{"type":126,"value":629},{"type":121,"tag":224,"props":4491,"children":4492},{"style":272},[4493],{"type":126,"value":1680},{"type":121,"tag":224,"props":4495,"children":4496},{"style":266},[4497],{"type":126,"value":629},{"type":121,"tag":224,"props":4499,"children":4500},{"style":272},[4501],{"type":126,"value":4502},"TURSO_AUTH_TOKEN",{"type":121,"tag":224,"props":4504,"children":4505},{"style":266},[4506],{"type":126,"value":3376},{"type":121,"tag":224,"props":4508,"children":4509},{"class":226,"line":450},[4510,4514],{"type":121,"tag":224,"props":4511,"children":4512},{"style":266},[4513],{"type":126,"value":456},{"type":121,"tag":224,"props":4515,"children":4516},{"style":272},[4517],{"type":126,"value":461},{"type":121,"tag":224,"props":4519,"children":4520},{"class":226,"line":39},[4521],{"type":121,"tag":224,"props":4522,"children":4523},{"emptyLinePlaceholder":334},[4524],{"type":126,"value":337},{"type":121,"tag":224,"props":4526,"children":4527},{"class":226,"line":472},[4528,4532,4537,4541,4545,4550,4554,4559,4563,4567,4572,4576],{"type":121,"tag":224,"props":4529,"children":4530},{"style":354},[4531],{"type":126,"value":357},{"type":121,"tag":224,"props":4533,"children":4534},{"style":272},[4535],{"type":126,"value":4536}," result ",{"type":121,"tag":224,"props":4538,"children":4539},{"style":266},[4540],{"type":126,"value":367},{"type":121,"tag":224,"props":4542,"children":4543},{"style":260},[4544],{"type":126,"value":372},{"type":121,"tag":224,"props":4546,"children":4547},{"style":272},[4548],{"type":126,"value":4549}," turso",{"type":121,"tag":224,"props":4551,"children":4552},{"style":266},[4553],{"type":126,"value":629},{"type":121,"tag":224,"props":4555,"children":4556},{"style":375},[4557],{"type":126,"value":4558},"execute",{"type":121,"tag":224,"props":4560,"children":4561},{"style":272},[4562],{"type":126,"value":382},{"type":121,"tag":224,"props":4564,"children":4565},{"style":266},[4566],{"type":126,"value":387},{"type":121,"tag":224,"props":4568,"children":4569},{"style":237},[4570],{"type":126,"value":4571},"SELECT * FROM users",{"type":121,"tag":224,"props":4573,"children":4574},{"style":266},[4575],{"type":126,"value":387},{"type":121,"tag":224,"props":4577,"children":4578},{"style":272},[4579],{"type":126,"value":461},{"type":121,"tag":129,"props":4581,"children":4582},{},[4583,4584],{"type":126,"value":3525},{"type":121,"tag":163,"props":4585,"children":4587},{"className":4586},[],[4588],{"type":126,"value":4589},"vercel integration add turso",{"type":121,"tag":135,"props":4591,"children":4593},{"id":4592},"storage-decision-matrix",[4594],{"type":126,"value":4595},"Storage Decision Matrix",{"type":121,"tag":4597,"props":4598,"children":4599},"table",{},[4600,4624],{"type":121,"tag":4601,"props":4602,"children":4603},"thead",{},[4604],{"type":121,"tag":4605,"props":4606,"children":4607},"tr",{},[4608,4614,4619],{"type":121,"tag":4609,"props":4610,"children":4611},"th",{},[4612],{"type":126,"value":4613},"Need",{"type":121,"tag":4609,"props":4615,"children":4616},{},[4617],{"type":126,"value":4618},"Use",{"type":121,"tag":4609,"props":4620,"children":4621},{},[4622],{"type":126,"value":4623},"Package",{"type":121,"tag":4625,"props":4626,"children":4627},"tbody",{},[4628,4650,4671,4692,4713,4734,4755,4775,4795,4816,4834],{"type":121,"tag":4605,"props":4629,"children":4630},{},[4631,4637,4642],{"type":121,"tag":4632,"props":4633,"children":4634},"td",{},[4635],{"type":126,"value":4636},"File uploads, media, documents",{"type":121,"tag":4632,"props":4638,"children":4639},{},[4640],{"type":126,"value":4641},"Vercel Blob",{"type":121,"tag":4632,"props":4643,"children":4644},{},[4645],{"type":121,"tag":163,"props":4646,"children":4648},{"className":4647},[],[4649],{"type":126,"value":109},{"type":121,"tag":4605,"props":4651,"children":4652},{},[4653,4658,4663],{"type":121,"tag":4632,"props":4654,"children":4655},{},[4656],{"type":126,"value":4657},"Feature flags, A\u002FB config",{"type":121,"tag":4632,"props":4659,"children":4660},{},[4661],{"type":126,"value":4662},"Edge Config",{"type":121,"tag":4632,"props":4664,"children":4665},{},[4666],{"type":121,"tag":163,"props":4667,"children":4669},{"className":4668},[],[4670],{"type":126,"value":110},{"type":121,"tag":4605,"props":4672,"children":4673},{},[4674,4679,4684],{"type":121,"tag":4632,"props":4675,"children":4676},{},[4677],{"type":126,"value":4678},"Relational data, SQL queries",{"type":121,"tag":4632,"props":4680,"children":4681},{},[4682],{"type":126,"value":4683},"Neon Postgres",{"type":121,"tag":4632,"props":4685,"children":4686},{},[4687],{"type":121,"tag":163,"props":4688,"children":4690},{"className":4689},[],[4691],{"type":126,"value":111},{"type":121,"tag":4605,"props":4693,"children":4694},{},[4695,4700,4705],{"type":121,"tag":4632,"props":4696,"children":4697},{},[4698],{"type":126,"value":4699},"Key-value cache, sessions, rate limiting",{"type":121,"tag":4632,"props":4701,"children":4702},{},[4703],{"type":126,"value":4704},"Upstash Redis",{"type":121,"tag":4632,"props":4706,"children":4707},{},[4708],{"type":121,"tag":163,"props":4709,"children":4711},{"className":4710},[],[4712],{"type":126,"value":112},{"type":121,"tag":4605,"props":4714,"children":4715},{},[4716,4721,4726],{"type":121,"tag":4632,"props":4717,"children":4718},{},[4719],{"type":126,"value":4720},"Postgres + auth + realtime + storage",{"type":121,"tag":4632,"props":4722,"children":4723},{},[4724],{"type":126,"value":4725},"Supabase",{"type":121,"tag":4632,"props":4727,"children":4728},{},[4729],{"type":121,"tag":163,"props":4730,"children":4732},{"className":4731},[],[4733],{"type":126,"value":115},{"type":121,"tag":4605,"props":4735,"children":4736},{},[4737,4742,4747],{"type":121,"tag":4632,"props":4738,"children":4739},{},[4740],{"type":126,"value":4741},"Type-safe ORM with migrations",{"type":121,"tag":4632,"props":4743,"children":4744},{},[4745],{"type":126,"value":4746},"Prisma",{"type":121,"tag":4632,"props":4748,"children":4749},{},[4750],{"type":121,"tag":163,"props":4751,"children":4753},{"className":4752},[],[4754],{"type":126,"value":116},{"type":121,"tag":4605,"props":4756,"children":4757},{},[4758,4763,4767],{"type":121,"tag":4632,"props":4759,"children":4760},{},[4761],{"type":126,"value":4762},"Document database, flexible schemas",{"type":121,"tag":4632,"props":4764,"children":4765},{},[4766],{"type":126,"value":3725},{"type":121,"tag":4632,"props":4768,"children":4769},{},[4770],{"type":121,"tag":163,"props":4771,"children":4773},{"className":4772},[],[4774],{"type":126,"value":3793},{"type":121,"tag":4605,"props":4776,"children":4777},{},[4778,4783,4787],{"type":121,"tag":4632,"props":4779,"children":4780},{},[4781],{"type":126,"value":4782},"Reactive backend with real-time sync",{"type":121,"tag":4632,"props":4784,"children":4785},{},[4786],{"type":126,"value":4010},{"type":121,"tag":4632,"props":4788,"children":4789},{},[4790],{"type":121,"tag":163,"props":4791,"children":4793},{"className":4792},[],[4794],{"type":126,"value":4007},{"type":121,"tag":4605,"props":4796,"children":4797},{},[4798,4803,4808],{"type":121,"tag":4632,"props":4799,"children":4800},{},[4801],{"type":126,"value":4802},"Edge-native SQLite with replicas",{"type":121,"tag":4632,"props":4804,"children":4805},{},[4806],{"type":126,"value":4807},"Turso",{"type":121,"tag":4632,"props":4809,"children":4810},{},[4811],{"type":121,"tag":163,"props":4812,"children":4814},{"className":4813},[],[4815],{"type":126,"value":4392},{"type":121,"tag":4605,"props":4817,"children":4818},{},[4819,4824,4829],{"type":121,"tag":4632,"props":4820,"children":4821},{},[4822],{"type":126,"value":4823},"Full-text search",{"type":121,"tag":4632,"props":4825,"children":4826},{},[4827],{"type":126,"value":4828},"Neon Postgres (pg_trgm) or Elasticsearch (Marketplace)",{"type":121,"tag":4632,"props":4830,"children":4831},{},[4832],{"type":126,"value":4833},"varies",{"type":121,"tag":4605,"props":4835,"children":4836},{},[4837,4842,4847],{"type":121,"tag":4632,"props":4838,"children":4839},{},[4840],{"type":126,"value":4841},"Vector embeddings",{"type":121,"tag":4632,"props":4843,"children":4844},{},[4845],{"type":126,"value":4846},"Neon Postgres (pgvector) or Pinecone (Marketplace)",{"type":121,"tag":4632,"props":4848,"children":4849},{},[4850],{"type":126,"value":4833},{"type":121,"tag":135,"props":4852,"children":4854},{"id":4853},"migration-guide",[4855],{"type":126,"value":4856},"Migration Guide",{"type":121,"tag":201,"props":4858,"children":4860},{"id":4859},"from-vercelpostgres-neon",[4861],{"type":126,"value":4862},"From @vercel\u002Fpostgres → Neon",{"type":121,"tag":213,"props":4864,"children":4868},{"className":4865,"code":4866,"language":4867,"meta":218,"style":218},"language-diff shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","- import { sql } from '@vercel\u002Fpostgres'\n+ import { neon } from '@neondatabase\u002Fserverless'\n+ const sql = neon(process.env.DATABASE_URL!)\n\n","diff",[4869],{"type":121,"tag":163,"props":4870,"children":4871},{"__ignoreMap":218},[4872,4880,4888],{"type":121,"tag":224,"props":4873,"children":4874},{"class":226,"line":227},[4875],{"type":121,"tag":224,"props":4876,"children":4877},{},[4878],{"type":126,"value":4879},"- import { sql } from '@vercel\u002Fpostgres'\n",{"type":121,"tag":224,"props":4881,"children":4882},{"class":226,"line":330},[4883],{"type":121,"tag":224,"props":4884,"children":4885},{},[4886],{"type":126,"value":4887},"+ import { neon } from '@neondatabase\u002Fserverless'\n",{"type":121,"tag":224,"props":4889,"children":4890},{"class":226,"line":340},[4891],{"type":121,"tag":224,"props":4892,"children":4893},{},[4894],{"type":126,"value":4895},"+ const sql = neon(process.env.DATABASE_URL!)\n",{"type":121,"tag":129,"props":4897,"children":4898},{},[4899,4904,4906,4912,4914,4919],{"type":121,"tag":155,"props":4900,"children":4901},{},[4902],{"type":126,"value":4903},"Drop-in replacement",{"type":126,"value":4905},": For minimal migration effort, use ",{"type":121,"tag":163,"props":4907,"children":4909},{"className":4908},[],[4910],{"type":126,"value":4911},"@neondatabase\u002Fvercel-postgres-compat",{"type":126,"value":4913}," which provides API-compatible wrappers for ",{"type":121,"tag":163,"props":4915,"children":4917},{"className":4916},[],[4918],{"type":126,"value":114},{"type":126,"value":4920}," imports.",{"type":121,"tag":201,"props":4922,"children":4924},{"id":4923},"from-vercelkv-upstash-redis",[4925],{"type":126,"value":4926},"From @vercel\u002Fkv → Upstash Redis",{"type":121,"tag":213,"props":4928,"children":4930},{"className":4865,"code":4929,"language":4867,"meta":218,"style":218},"- import { kv } from '@vercel\u002Fkv'\n- await kv.set('key', 'value')\n- const value = await kv.get('key')\n+ import { Redis } from '@upstash\u002Fredis'\n+ const redis = Redis.fromEnv()\n+ await redis.set('key', 'value')\n+ const value = await redis.get('key')\n",[4931],{"type":121,"tag":163,"props":4932,"children":4933},{"__ignoreMap":218},[4934,4942,4950,4958,4966,4974,4982],{"type":121,"tag":224,"props":4935,"children":4936},{"class":226,"line":227},[4937],{"type":121,"tag":224,"props":4938,"children":4939},{},[4940],{"type":126,"value":4941},"- import { kv } from '@vercel\u002Fkv'\n",{"type":121,"tag":224,"props":4943,"children":4944},{"class":226,"line":330},[4945],{"type":121,"tag":224,"props":4946,"children":4947},{},[4948],{"type":126,"value":4949},"- await kv.set('key', 'value')\n",{"type":121,"tag":224,"props":4951,"children":4952},{"class":226,"line":340},[4953],{"type":121,"tag":224,"props":4954,"children":4955},{},[4956],{"type":126,"value":4957},"- const value = await kv.get('key')\n",{"type":121,"tag":224,"props":4959,"children":4960},{"class":226,"line":350},[4961],{"type":121,"tag":224,"props":4962,"children":4963},{},[4964],{"type":126,"value":4965},"+ import { Redis } from '@upstash\u002Fredis'\n",{"type":121,"tag":224,"props":4967,"children":4968},{"class":226,"line":417},[4969],{"type":121,"tag":224,"props":4970,"children":4971},{},[4972],{"type":126,"value":4973},"+ const redis = Redis.fromEnv()\n",{"type":121,"tag":224,"props":4975,"children":4976},{"class":226,"line":450},[4977],{"type":121,"tag":224,"props":4978,"children":4979},{},[4980],{"type":126,"value":4981},"+ await redis.set('key', 'value')\n",{"type":121,"tag":224,"props":4983,"children":4984},{"class":226,"line":39},[4985],{"type":121,"tag":224,"props":4986,"children":4987},{},[4988],{"type":126,"value":4989},"+ const value = await redis.get('key')\n",{"type":121,"tag":135,"props":4991,"children":4993},{"id":4992},"installing-marketplace-storage",[4994],{"type":126,"value":4995},"Installing Marketplace Storage",{"type":121,"tag":129,"props":4997,"children":4998},{},[4999,5001,5007],{"type":126,"value":5000},"Use the Vercel CLI or the Marketplace dashboard at ",{"type":121,"tag":163,"props":5002,"children":5004},{"className":5003},[],[5005],{"type":126,"value":5006},"https:\u002F\u002Fvercel.com\u002Fdashboard\u002F{team}\u002Fstores",{"type":126,"value":429},{"type":121,"tag":213,"props":5009,"children":5011},{"className":215,"code":5010,"language":217,"meta":218,"style":218},"# Install a storage integration (auto-provisions env vars)\nvercel integration add neon\nvercel integration add upstash\n\n# List installed integrations\nvercel integration list\n",[5012],{"type":121,"tag":163,"props":5013,"children":5014},{"__ignoreMap":218},[5015,5023,5045,5065,5072,5080],{"type":121,"tag":224,"props":5016,"children":5017},{"class":226,"line":227},[5018],{"type":121,"tag":224,"props":5019,"children":5020},{"style":344},[5021],{"type":126,"value":5022},"# Install a storage integration (auto-provisions env vars)\n",{"type":121,"tag":224,"props":5024,"children":5025},{"class":226,"line":330},[5026,5030,5035,5040],{"type":121,"tag":224,"props":5027,"children":5028},{"style":231},[5029],{"type":126,"value":14},{"type":121,"tag":224,"props":5031,"children":5032},{"style":237},[5033],{"type":126,"value":5034}," integration",{"type":121,"tag":224,"props":5036,"children":5037},{"style":237},[5038],{"type":126,"value":5039}," add",{"type":121,"tag":224,"props":5041,"children":5042},{"style":237},[5043],{"type":126,"value":5044}," neon\n",{"type":121,"tag":224,"props":5046,"children":5047},{"class":226,"line":340},[5048,5052,5056,5060],{"type":121,"tag":224,"props":5049,"children":5050},{"style":231},[5051],{"type":126,"value":14},{"type":121,"tag":224,"props":5053,"children":5054},{"style":237},[5055],{"type":126,"value":5034},{"type":121,"tag":224,"props":5057,"children":5058},{"style":237},[5059],{"type":126,"value":5039},{"type":121,"tag":224,"props":5061,"children":5062},{"style":237},[5063],{"type":126,"value":5064}," upstash\n",{"type":121,"tag":224,"props":5066,"children":5067},{"class":226,"line":350},[5068],{"type":121,"tag":224,"props":5069,"children":5070},{"emptyLinePlaceholder":334},[5071],{"type":126,"value":337},{"type":121,"tag":224,"props":5073,"children":5074},{"class":226,"line":417},[5075],{"type":121,"tag":224,"props":5076,"children":5077},{"style":344},[5078],{"type":126,"value":5079},"# List installed integrations\n",{"type":121,"tag":224,"props":5081,"children":5082},{"class":226,"line":450},[5083,5087,5091],{"type":121,"tag":224,"props":5084,"children":5085},{"style":231},[5086],{"type":126,"value":14},{"type":121,"tag":224,"props":5088,"children":5089},{"style":237},[5090],{"type":126,"value":5034},{"type":121,"tag":224,"props":5092,"children":5093},{"style":237},[5094],{"type":126,"value":5095}," list\n",{"type":121,"tag":129,"props":5097,"children":5098},{},[5099,5101,5110,5112,5118],{"type":126,"value":5100},"Browse additional storage options at the ",{"type":121,"tag":5102,"props":5103,"children":5107},"a",{"href":5104,"rel":5105},"https:\u002F\u002Fvercel.com\u002Fmarketplace",[5106],"nofollow",[5108],{"type":126,"value":5109},"Vercel Marketplace",{"type":126,"value":5111},". Installing via the CLI or dashboard (",{"type":121,"tag":163,"props":5113,"children":5115},{"className":5114},[],[5116],{"type":126,"value":5117},"https:\u002F\u002Fvercel.com\u002Fdashboard\u002F{team}\u002Fintegrations",{"type":126,"value":5119},") automatically provisions accounts, creates databases, and sets environment variables.",{"type":121,"tag":135,"props":5121,"children":5123},{"id":5122},"official-documentation",[5124],{"type":126,"value":5125},"Official Documentation",{"type":121,"tag":5127,"props":5128,"children":5129},"ul",{},[5130,5138,5147,5156,5166,5176],{"type":121,"tag":151,"props":5131,"children":5132},{},[5133],{"type":121,"tag":5102,"props":5134,"children":5136},{"href":41,"rel":5135},[5106],[5137],{"type":126,"value":127},{"type":121,"tag":151,"props":5139,"children":5140},{},[5141],{"type":121,"tag":5102,"props":5142,"children":5145},{"href":5143,"rel":5144},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fvercel-blob",[5106],[5146],{"type":126,"value":4641},{"type":121,"tag":151,"props":5148,"children":5149},{},[5150],{"type":121,"tag":5102,"props":5151,"children":5154},{"href":5152,"rel":5153},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fedge-config",[5106],[5155],{"type":126,"value":4662},{"type":121,"tag":151,"props":5157,"children":5158},{},[5159,5164],{"type":121,"tag":5102,"props":5160,"children":5162},{"href":5104,"rel":5161},[5106],[5163],{"type":126,"value":5109},{"type":126,"value":5165}," — Neon, Upstash, and other storage integrations",{"type":121,"tag":151,"props":5167,"children":5168},{},[5169],{"type":121,"tag":5102,"props":5170,"children":5173},{"href":5171,"rel":5172},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fintegrations",[5106],[5174],{"type":126,"value":5175},"Integrations",{"type":121,"tag":151,"props":5177,"children":5178},{},[5179],{"type":121,"tag":5102,"props":5180,"children":5183},{"href":5181,"rel":5182},"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fstorage",[5106],[5184],{"type":126,"value":5185},"GitHub: Vercel Storage",{"type":121,"tag":5187,"props":5188,"children":5189},"style",{},[5190],{"type":126,"value":5191},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":5193,"total":5398},[5194,5215,5238,5255,5271,5290,5309,5325,5341,5355,5367,5382],{"slug":5195,"name":5195,"fn":5196,"description":5197,"org":5198,"tags":5199,"stars":5212,"repoUrl":5213,"updatedAt":5214},"prior-auth-packet-builder","build healthcare prior authorization packets","Build a concise prior authorization packet from local case files and payer policy docs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5200,5203,5206,5209],{"name":5201,"slug":5202,"type":15},"Documents","documents",{"name":5204,"slug":5205,"type":15},"Healthcare","healthcare",{"name":5207,"slug":5208,"type":15},"Insurance","insurance",{"name":5210,"slug":5211,"type":15},"Regulatory Compliance","regulatory-compliance",28169,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python","2026-04-16T05:11:39.180399",{"slug":5216,"name":5216,"fn":5217,"description":5218,"org":5219,"tags":5220,"stars":5235,"repoUrl":5236,"updatedAt":5237},"aspnet-core","build ASP.NET Core web applications","Build, review, refactor, or architect ASP.NET Core web applications using current official guidance for .NET web development. Use when working on Blazor Web Apps, Razor Pages, MVC, Minimal APIs, controller-based Web APIs, SignalR, gRPC, middleware, dependency injection, configuration, authentication, authorization, testing, performance, deployment, or ASP.NET Core upgrades.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5221,5224,5226,5229,5232],{"name":5222,"slug":5223,"type":15},".NET","dotnet",{"name":5225,"slug":5216,"type":15},"ASP.NET Core",{"name":5227,"slug":5228,"type":15},"Blazor","blazor",{"name":5230,"slug":5231,"type":15},"C#","csharp",{"name":5233,"slug":5234,"type":15},"Web Development","web-development",23787,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fskills","2026-04-12T05:07:02.819491",{"slug":5239,"name":5239,"fn":5240,"description":5241,"org":5242,"tags":5243,"stars":5235,"repoUrl":5236,"updatedAt":5254},"chatgpt-apps","build ChatGPT Apps SDK applications","Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI. Use when Codex needs to design tools, register UI resources, wire the MCP Apps bridge or ChatGPT compatibility APIs, apply Apps SDK metadata or CSP or domain settings, or produce a docs-aligned project scaffold. Prefer a docs-first workflow by invoking the openai-docs skill or OpenAI developer docs MCP tools before generating code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5244,5247,5250,5253],{"name":5245,"slug":5246,"type":15},"Apps SDK","apps-sdk",{"name":5248,"slug":5249,"type":15},"ChatGPT","chatgpt",{"name":5251,"slug":5252,"type":15},"MCP","mcp",{"name":9,"slug":8,"type":15},"2026-04-12T05:07:05.468097",{"slug":5256,"name":5256,"fn":5257,"description":5258,"org":5259,"tags":5260,"stars":5235,"repoUrl":5236,"updatedAt":5270},"cli-creator","build CLIs from API docs","Build a composable CLI for Codex from API docs, an OpenAPI spec, existing curl examples, an SDK, a web app, an admin tool, or a local script. Use when the user wants Codex to create a command-line tool that can run from any repo, expose composable read\u002Fwrite commands, return stable JSON, manage auth, and pair with a companion skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5261,5264,5267],{"name":5262,"slug":5263,"type":15},"API Development","api-development",{"name":5265,"slug":5266,"type":15},"CLI","cli",{"name":5268,"slug":5269,"type":15},"Codex","codex","2026-04-12T05:07:04.132762",{"slug":5272,"name":5272,"fn":5273,"description":5274,"org":5275,"tags":5276,"stars":5235,"repoUrl":5236,"updatedAt":5289},"cloudflare-deploy","deploy projects to Cloudflare","Deploy applications and infrastructure to Cloudflare using Workers, Pages, and related platform services. Use when the user asks to deploy, host, publish, or set up a project on Cloudflare.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5277,5280,5283,5286],{"name":5278,"slug":5279,"type":15},"Cloudflare","cloudflare",{"name":5281,"slug":5282,"type":15},"Cloudflare Pages","cloudflare-pages",{"name":5284,"slug":5285,"type":15},"Cloudflare Workers","cloudflare-workers",{"name":5287,"slug":5288,"type":15},"Deployment","deployment","2026-04-12T05:07:14.275118",{"slug":5291,"name":5291,"fn":5292,"description":5293,"org":5294,"tags":5295,"stars":5235,"repoUrl":5236,"updatedAt":5308},"define-goal","define and set measurable project goals","Help the user define a concrete, measurable goal before starting work, especially when they ask to use the goal tool, create a goal, set an objective, clarify success criteria, or turn a fuzzy intention into a quantitative outcome. Use this skill for goal creation and goal refinement only; it does not manage durable snapshots, decision logs, or long-running execution artifacts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5296,5299,5302,5305],{"name":5297,"slug":5298,"type":15},"Productivity","productivity",{"name":5300,"slug":5301,"type":15},"Project Management","project-management",{"name":5303,"slug":5304,"type":15},"Strategy","strategy",{"name":5306,"slug":5307,"type":15},"Task Management","task-management","2026-05-23T06:17:16.870838",{"slug":5310,"name":5310,"fn":5311,"description":5312,"org":5313,"tags":5314,"stars":5235,"repoUrl":5236,"updatedAt":5324},"figma","translate Figma designs into code","Use the Figma MCP server to fetch design context, screenshots, variables, and assets from Figma, and to translate Figma nodes into production code. Trigger when a task involves Figma URLs, node IDs, design-to-code implementation, or Figma MCP setup and troubleshooting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5315,5318,5320,5323],{"name":5316,"slug":5317,"type":15},"Design","design",{"name":5319,"slug":5310,"type":15},"Figma",{"name":5321,"slug":5322,"type":15},"Frontend","frontend",{"name":5251,"slug":5252,"type":15},"2026-04-12T05:06:47.939943",{"slug":5326,"name":5326,"fn":5327,"description":5328,"org":5329,"tags":5330,"stars":5235,"repoUrl":5236,"updatedAt":5340},"figma-code-connect-components","connect Figma designs to code components","Connects Figma design components to code components using Code Connect mapping tools. Use when user says \"code connect\", \"connect this component to code\", \"map this component\", \"link component to code\", \"create code connect mapping\", or wants to establish mappings between Figma designs and code implementations. For canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5331,5332,5335,5336,5337],{"name":5316,"slug":5317,"type":15},{"name":5333,"slug":5334,"type":15},"Design System","design-system",{"name":5319,"slug":5310,"type":15},{"name":5321,"slug":5322,"type":15},{"name":5338,"slug":5339,"type":15},"UI Components","ui-components","2026-05-10T05:59:52.971881",{"slug":5342,"name":5342,"fn":5343,"description":5344,"org":5345,"tags":5346,"stars":5235,"repoUrl":5236,"updatedAt":5354},"figma-create-design-system-rules","generate design system rules from Figma","Generates custom design system rules for the user's codebase. Use when user says \"create design system rules\", \"generate rules for my project\", \"set up design rules\", \"customize design system guidelines\", or wants to establish project-specific conventions for Figma-to-code workflows. Requires Figma MCP server connection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5347,5348,5349,5352,5353],{"name":5316,"slug":5317,"type":15},{"name":5333,"slug":5334,"type":15},{"name":5350,"slug":5351,"type":15},"Documentation","documentation",{"name":5319,"slug":5310,"type":15},{"name":5321,"slug":5322,"type":15},"2026-05-16T06:07:47.821474",{"slug":5356,"name":5356,"fn":5357,"description":5358,"org":5359,"tags":5360,"stars":5235,"repoUrl":5236,"updatedAt":5366},"figma-implement-design","translate Figma designs into application code","Translates Figma designs into production-ready application code with 1:1 visual fidelity. Use when implementing UI code from Figma files, when user mentions \"implement design\", \"generate code\", \"implement component\", provides Figma URLs, or asks to build components matching Figma specs. For Figma canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5361,5362,5363,5364,5365],{"name":5316,"slug":5317,"type":15},{"name":5319,"slug":5310,"type":15},{"name":5321,"slug":5322,"type":15},{"name":5338,"slug":5339,"type":15},{"name":5233,"slug":5234,"type":15},"2026-05-16T06:07:40.583615",{"slug":5368,"name":5368,"fn":5369,"description":5370,"org":5371,"tags":5372,"stars":5235,"repoUrl":5236,"updatedAt":5381},"hatch-pet","create animated pets for Codex","Create, repair, validate, visually QA, and package Codex-compatible animated pets and pet spritesheets from character art, generated images, company or prospect brand cues, or visual references. Use when a user wants a lightweight-worker Codex pet workflow, a non-pixel custom pet style, a prospect or company mascot pet, or a full 8x9 animated pet atlas with transparent unused cells, QA contact sheets, and pet.json packaging. This skill composes the installed $imagegen system skill for visual generation and uses bundled scripts for deterministic spritesheet assembly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5373,5376,5377,5380],{"name":5374,"slug":5375,"type":15},"Animation","animation",{"name":5268,"slug":5269,"type":15},{"name":5378,"slug":5379,"type":15},"Creative","creative",{"name":5316,"slug":5317,"type":15},"2026-05-02T05:31:48.48485",{"slug":5383,"name":5383,"fn":5384,"description":5385,"org":5386,"tags":5387,"stars":5235,"repoUrl":5236,"updatedAt":5397},"imagegen","generate and edit raster images","Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output should be a bitmap asset rather than repo-native code or vector. Do not use when the task is better handled by editing existing SVG\u002Fvector\u002Fcode-native assets, extending an established icon or logo system, or building the visual directly in HTML\u002FCSS\u002Fcanvas.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5388,5389,5390,5393,5396],{"name":5378,"slug":5379,"type":15},{"name":5316,"slug":5317,"type":15},{"name":5391,"slug":5392,"type":15},"Image Generation","image-generation",{"name":5394,"slug":5395,"type":15},"Images","images",{"name":9,"slug":8,"type":15},"2026-05-15T06:23:24.312127",675,{"items":5400,"total":5512},[5401,5418,5434,5446,5464,5480,5500],{"slug":5402,"name":5402,"fn":5403,"description":5404,"org":5405,"tags":5406,"stars":25,"repoUrl":26,"updatedAt":5417},"accessibility-and-inclusive-visualization","make data visualizations accessible","Make data visualizations accessible and inclusive. Use when the user needs chart or diagram accessibility guidance, text alternatives for complex visuals, color and contrast review, keyboard support, reduced-motion behavior for animation or parallax, or an accessibility QA workflow for exported figures, UML-like diagrams, and dashboards.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5407,5410,5413,5416],{"name":5408,"slug":5409,"type":15},"Accessibility","accessibility",{"name":5411,"slug":5412,"type":15},"Charts","charts",{"name":5414,"slug":5415,"type":15},"Data Visualization","data-visualization",{"name":5316,"slug":5317,"type":15},"2026-06-30T19:00:57.102",{"slug":5419,"name":5419,"fn":5420,"description":5421,"org":5422,"tags":5423,"stars":25,"repoUrl":26,"updatedAt":5433},"agent-browser","automate browser interactions for agents","Browser automation CLI for AI agents. Use when the user needs to interact with websites, verify dev server output, test web apps, navigate pages, fill forms, click buttons, take screenshots, extract data, or automate any browser task. Also triggers when a dev server starts so you can verify it visually.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5424,5427,5430],{"name":5425,"slug":5426,"type":15},"Agents","agents",{"name":5428,"slug":5429,"type":15},"Browser Automation","browser-automation",{"name":5431,"slug":5432,"type":15},"Testing","testing","2026-04-06T18:41:03.44016",{"slug":5435,"name":5435,"fn":5436,"description":5437,"org":5438,"tags":5439,"stars":25,"repoUrl":26,"updatedAt":5445},"agent-browser-verify","verify dev server output with automated browser","Automated browser verification for dev servers. Triggers when a dev server starts to run a visual gut-check with agent-browser — verifies the page loads, checks for console errors, validates key UI elements, and reports pass\u002Ffail before continuing.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5440,5441,5444],{"name":5428,"slug":5429,"type":15},{"name":5442,"slug":5443,"type":15},"Local Development","local-development",{"name":5431,"slug":5432,"type":15},"2026-04-06T18:41:17.526867",{"slug":5447,"name":5447,"fn":5448,"description":5449,"org":5450,"tags":5451,"stars":25,"repoUrl":26,"updatedAt":5463},"agents-sdk","build AI agents on Cloudflare Workers","Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, or chat applications. Covers Agent class, state management, callable RPC, Workflows integration, and React hooks. Biases towards retrieval from Cloudflare docs over pre-trained knowledge.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5452,5453,5454,5457,5460],{"name":5425,"slug":5426,"type":15},{"name":5284,"slug":5285,"type":15},{"name":5455,"slug":5456,"type":15},"SDK","sdk",{"name":5458,"slug":5459,"type":15},"Serverless","serverless",{"name":5461,"slug":5462,"type":15},"WebSockets","websockets","2026-04-06T18:39:51.717063",{"slug":5465,"name":5465,"fn":5466,"description":5467,"org":5468,"tags":5469,"stars":25,"repoUrl":26,"updatedAt":5479},"ai-elements","build chat UIs with AI Elements","AI Elements component library guidance — pre-built React components for AI interfaces built on shadcn\u002Fui. Use when building chat UIs, message displays, tool call rendering, streaming responses, reasoning panels, or any AI-native interface with the AI SDK.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5470,5471,5474,5477,5478],{"name":5321,"slug":5322,"type":15},{"name":5472,"slug":5473,"type":15},"React","react",{"name":5475,"slug":5476,"type":15},"shadcn\u002Fui","shadcn-ui",{"name":5338,"slug":5339,"type":15},{"name":13,"slug":14,"type":15},"2026-04-06T18:40:59.619419",{"slug":5481,"name":5481,"fn":5482,"description":5483,"org":5484,"tags":5485,"stars":25,"repoUrl":26,"updatedAt":5499},"ai-gateway","configure Vercel AI Gateway","Vercel AI Gateway expert guidance. Use when configuring model routing, provider failover, cost tracking, or managing multiple AI providers through a unified API.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5486,5489,5492,5495,5498],{"name":5487,"slug":5488,"type":15},"AI Infrastructure","ai-infrastructure",{"name":5490,"slug":5491,"type":15},"Cost Optimization","cost-optimization",{"name":5493,"slug":5494,"type":15},"LLM","llm",{"name":5496,"slug":5497,"type":15},"Performance","performance",{"name":13,"slug":14,"type":15},"2026-04-06T18:40:44.377464",{"slug":5501,"name":5501,"fn":5502,"description":5503,"org":5504,"tags":5505,"stars":25,"repoUrl":26,"updatedAt":5511},"ai-generation-persistence","implement persistence patterns for AI generations","AI generation persistence patterns — unique IDs, addressable URLs, database storage, and cost tracking for every LLM generation",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5506,5507,5510],{"name":5490,"slug":5491,"type":15},{"name":5508,"slug":5509,"type":15},"Database","database",{"name":5493,"slug":5494,"type":15},"2026-04-06T18:41:08.513425",600]