[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-convex-convex-billing":3,"mdc-15i0ww-key":32,"related-org-convex-convex-billing":2237,"related-repo-convex-convex-billing":2405},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":21,"repoUrl":22,"updatedAt":23,"license":24,"forks":25,"topics":26,"repo":27,"sourceUrl":30,"mdContent":31},"convex-billing","integrate Stripe billing in Convex apps","Add Stripe billing\u002Fpayments to the Convex app via @convex-dev\u002Fstripe (checkout + webhook + gating).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"convex","Convex","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fconvex.png","get-convex",[13,15,18],{"name":9,"slug":8,"type":14},"tag",{"name":16,"slug":17,"type":14},"Payments","payments",{"name":19,"slug":20,"type":14},"Stripe","stripe",34,"https:\u002F\u002Fgithub.com\u002Fget-convex\u002Fagent-skills","2026-08-04T05:58:46.810981",null,7,[],{"repoUrl":22,"stars":21,"forks":25,"topics":28,"description":29},[],"Convex Skills for Agents","https:\u002F\u002Fgithub.com\u002Fget-convex\u002Fagent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fconvex-billing","---\nname: convex-billing\ndescription: \"Add Stripe billing\u002Fpayments to the Convex app via @convex-dev\u002Fstripe (checkout + webhook + gating).\"\n---\n\n\u003C!-- GENERATED from convex-agents content\u002Fcapabilities\u002Fbilling.json — do not edit by hand. -->\n\n# Add billing \u002F payments\n\nWire Stripe to Convex using @convex-dev\u002Fstripe: a checkout action, an httpAction webhook registered by the component (signature-verified automatically), subscription state stored in the component's tables, and server-side gating via a query.\n\n## Workflow\n\n1. Install the component: `npm install @convex-dev\u002Fstripe`.\n2. Create `convex\u002Fconvex.config.ts`:\n   ```ts\n   import { defineApp } from 'convex\u002Fserver';\n   import stripe from '@convex-dev\u002Fstripe\u002Fconvex.config.js';\n   const app = defineApp();\n   app.use(stripe);\n   export default app;\n   ```\n3. Store Stripe keys in Convex env (use the `env` micro power): `STRIPE_SECRET_KEY` (sk_test_… \u002F sk_live_…) and `STRIPE_WEBHOOK_SECRET` (whsec_…).\n4. Create `convex\u002Fhttp.ts` to register the webhook route (the component handles signature verification automatically):\n   ```ts\n   import { httpRouter } from 'convex\u002Fserver';\n   import { components } from '.\u002F_generated\u002Fapi';\n   import { registerRoutes } from '@convex-dev\u002Fstripe';\n   const http = httpRouter();\n   registerRoutes(http, components.stripe, { webhookPath: '\u002Fstripe\u002Fwebhook' });\n   export default http;\n   ```\n5. Create `convex\u002Fbilling.ts` with a checkout action and a subscription-gate query:\n   ```ts\n   import { action, query } from '.\u002F_generated\u002Fserver';\n   import { components } from '.\u002F_generated\u002Fapi';\n   import { StripeSubscriptions } from '@convex-dev\u002Fstripe';\n   import { v } from 'convex\u002Fvalues';\n   const stripeClient = new StripeSubscriptions(components.stripe, {});\n   export const createSubscriptionCheckout = action({\n     args: { priceId: v.string() },\n     returns: v.object({ sessionId: v.string(), url: v.union(v.string(), v.null()) }),\n     handler: async (ctx, args) => {\n       const identity = await ctx.auth.getUserIdentity();\n       if (!identity) throw new Error('Not authenticated');\n       const customer = await stripeClient.getOrCreateCustomer(ctx, { userId: identity.subject, email: identity.email, name: identity.name });\n       return await stripeClient.createCheckoutSession(ctx, { priceId: args.priceId, customerId: customer.customerId, mode: 'subscription', successUrl: `${process.env.SITE_URL ?? 'http:\u002F\u002Flocalhost:3000'}\u002F?success=true`, cancelUrl: `${process.env.SITE_URL ?? 'http:\u002F\u002Flocalhost:3000'}\u002F?canceled=true`, subscriptionMetadata: { userId: identity.subject } });\n     },\n   });\n   export const isSubscribed = query({\n     args: {},\n     returns: v.boolean(),\n     handler: async (ctx) => {\n       const identity = await ctx.auth.getUserIdentity();\n       if (!identity) return false;\n       const subscriptions = await ctx.runQuery(components.stripe.public.listSubscriptionsByUserId, { userId: identity.subject });\n       return subscriptions.some((sub) => sub.status === 'active' || sub.status === 'trialing');\n     },\n   });\n   ```\n6. Run `npx convex dev --once` — it will install the component and push the functions. Verify output shows `✔ Installed component stripe.`\n7. In Stripe Dashboard → Webhooks: add endpoint `https:\u002F\u002F\u003Cdeployment>.convex.site\u002Fstripe\u002Fwebhook`, subscribe to `checkout.session.completed`, `customer.subscription.*`, `invoice.*`, `payment_intent.*`. Copy the signing secret as `STRIPE_WEBHOOK_SECRET`.\n\n## Rules\n\n- Use @convex-dev\u002Fstripe (npm: @convex-dev\u002Fstripe@^0.1.4) — it handles webhook signature verification internally via registerRoutes; do NOT write a manual constructEvent webhook.\n- Stripe keys live in Convex env (use the `env` micro power): STRIPE_SECRET_KEY and STRIPE_WEBHOOK_SECRET.\n- Gate on server-stored subscription state via isSubscribed query (reads component tables), not client claims.\n- convex\u002Fconvex.config.ts must import from '@convex-dev\u002Fstripe\u002Fconvex.config.js' (not .ts) — the .js extension is required by the Convex bundler.\n",{"data":33,"body":34},{"name":4,"description":6},{"type":35,"children":36},"root",[37,46,52,59,2194,2200,2231],{"type":38,"tag":39,"props":40,"children":42},"element","h1",{"id":41},"add-billing-payments",[43],{"type":44,"value":45},"text","Add billing \u002F payments",{"type":38,"tag":47,"props":48,"children":49},"p",{},[50],{"type":44,"value":51},"Wire Stripe to Convex using @convex-dev\u002Fstripe: a checkout action, an httpAction webhook registered by the component (signature-verified automatically), subscription state stored in the component's tables, and server-side gating via a query.",{"type":38,"tag":53,"props":54,"children":56},"h2",{"id":55},"workflow",[57],{"type":44,"value":58},"Workflow",{"type":38,"tag":60,"props":61,"children":62},"ol",{},[63,78,276,305,570,2126,2145],{"type":38,"tag":64,"props":65,"children":66},"li",{},[67,69,76],{"type":44,"value":68},"Install the component: ",{"type":38,"tag":70,"props":71,"children":73},"code",{"className":72},[],[74],{"type":44,"value":75},"npm install @convex-dev\u002Fstripe",{"type":44,"value":77},".",{"type":38,"tag":64,"props":79,"children":80},{},[81,83,89,91],{"type":44,"value":82},"Create ",{"type":38,"tag":70,"props":84,"children":86},{"className":85},[],[87],{"type":44,"value":88},"convex\u002Fconvex.config.ts",{"type":44,"value":90},":\n",{"type":38,"tag":92,"props":93,"children":98},"pre",{"className":94,"code":95,"language":96,"meta":97,"style":97},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineApp } from 'convex\u002Fserver';\nimport stripe from '@convex-dev\u002Fstripe\u002Fconvex.config.js';\nconst app = defineApp();\napp.use(stripe);\nexport default app;\n","ts","",[99],{"type":38,"tag":70,"props":100,"children":101},{"__ignoreMap":97},[102,157,192,226,253],{"type":38,"tag":103,"props":104,"children":107},"span",{"class":105,"line":106},"line",1,[108,114,120,126,131,136,141,147,152],{"type":38,"tag":103,"props":109,"children":111},{"style":110},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[112],{"type":44,"value":113},"import",{"type":38,"tag":103,"props":115,"children":117},{"style":116},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[118],{"type":44,"value":119}," {",{"type":38,"tag":103,"props":121,"children":123},{"style":122},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[124],{"type":44,"value":125}," defineApp",{"type":38,"tag":103,"props":127,"children":128},{"style":116},[129],{"type":44,"value":130}," }",{"type":38,"tag":103,"props":132,"children":133},{"style":110},[134],{"type":44,"value":135}," from",{"type":38,"tag":103,"props":137,"children":138},{"style":116},[139],{"type":44,"value":140}," '",{"type":38,"tag":103,"props":142,"children":144},{"style":143},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[145],{"type":44,"value":146},"convex\u002Fserver",{"type":38,"tag":103,"props":148,"children":149},{"style":116},[150],{"type":44,"value":151},"'",{"type":38,"tag":103,"props":153,"children":154},{"style":116},[155],{"type":44,"value":156},";\n",{"type":38,"tag":103,"props":158,"children":160},{"class":105,"line":159},2,[161,165,170,175,179,184,188],{"type":38,"tag":103,"props":162,"children":163},{"style":110},[164],{"type":44,"value":113},{"type":38,"tag":103,"props":166,"children":167},{"style":122},[168],{"type":44,"value":169}," stripe ",{"type":38,"tag":103,"props":171,"children":172},{"style":110},[173],{"type":44,"value":174},"from",{"type":38,"tag":103,"props":176,"children":177},{"style":116},[178],{"type":44,"value":140},{"type":38,"tag":103,"props":180,"children":181},{"style":143},[182],{"type":44,"value":183},"@convex-dev\u002Fstripe\u002Fconvex.config.js",{"type":38,"tag":103,"props":185,"children":186},{"style":116},[187],{"type":44,"value":151},{"type":38,"tag":103,"props":189,"children":190},{"style":116},[191],{"type":44,"value":156},{"type":38,"tag":103,"props":193,"children":195},{"class":105,"line":194},3,[196,202,207,212,217,222],{"type":38,"tag":103,"props":197,"children":199},{"style":198},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[200],{"type":44,"value":201},"const",{"type":38,"tag":103,"props":203,"children":204},{"style":122},[205],{"type":44,"value":206}," app ",{"type":38,"tag":103,"props":208,"children":209},{"style":116},[210],{"type":44,"value":211},"=",{"type":38,"tag":103,"props":213,"children":215},{"style":214},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[216],{"type":44,"value":125},{"type":38,"tag":103,"props":218,"children":219},{"style":122},[220],{"type":44,"value":221},"()",{"type":38,"tag":103,"props":223,"children":224},{"style":116},[225],{"type":44,"value":156},{"type":38,"tag":103,"props":227,"children":229},{"class":105,"line":228},4,[230,235,239,244,249],{"type":38,"tag":103,"props":231,"children":232},{"style":122},[233],{"type":44,"value":234},"app",{"type":38,"tag":103,"props":236,"children":237},{"style":116},[238],{"type":44,"value":77},{"type":38,"tag":103,"props":240,"children":241},{"style":214},[242],{"type":44,"value":243},"use",{"type":38,"tag":103,"props":245,"children":246},{"style":122},[247],{"type":44,"value":248},"(stripe)",{"type":38,"tag":103,"props":250,"children":251},{"style":116},[252],{"type":44,"value":156},{"type":38,"tag":103,"props":254,"children":256},{"class":105,"line":255},5,[257,262,267,272],{"type":38,"tag":103,"props":258,"children":259},{"style":110},[260],{"type":44,"value":261},"export",{"type":38,"tag":103,"props":263,"children":264},{"style":110},[265],{"type":44,"value":266}," default",{"type":38,"tag":103,"props":268,"children":269},{"style":122},[270],{"type":44,"value":271}," app",{"type":38,"tag":103,"props":273,"children":274},{"style":116},[275],{"type":44,"value":156},{"type":38,"tag":64,"props":277,"children":278},{},[279,281,287,289,295,297,303],{"type":44,"value":280},"Store Stripe keys in Convex env (use the ",{"type":38,"tag":70,"props":282,"children":284},{"className":283},[],[285],{"type":44,"value":286},"env",{"type":44,"value":288}," micro power): ",{"type":38,"tag":70,"props":290,"children":292},{"className":291},[],[293],{"type":44,"value":294},"STRIPE_SECRET_KEY",{"type":44,"value":296}," (sk_test_… \u002F sk_live_…) and ",{"type":38,"tag":70,"props":298,"children":300},{"className":299},[],[301],{"type":44,"value":302},"STRIPE_WEBHOOK_SECRET",{"type":44,"value":304}," (whsec_…).",{"type":38,"tag":64,"props":306,"children":307},{},[308,309,315,317],{"type":44,"value":82},{"type":38,"tag":70,"props":310,"children":312},{"className":311},[],[313],{"type":44,"value":314},"convex\u002Fhttp.ts",{"type":44,"value":316}," to register the webhook route (the component handles signature verification automatically):\n",{"type":38,"tag":92,"props":318,"children":320},{"className":94,"code":319,"language":96,"meta":97,"style":97},"import { httpRouter } from 'convex\u002Fserver';\nimport { components } from '.\u002F_generated\u002Fapi';\nimport { registerRoutes } from '@convex-dev\u002Fstripe';\nconst http = httpRouter();\nregisterRoutes(http, components.stripe, { webhookPath: '\u002Fstripe\u002Fwebhook' });\nexport default http;\n",[321],{"type":38,"tag":70,"props":322,"children":323},{"__ignoreMap":97},[324,364,405,446,474,549],{"type":38,"tag":103,"props":325,"children":326},{"class":105,"line":106},[327,331,335,340,344,348,352,356,360],{"type":38,"tag":103,"props":328,"children":329},{"style":110},[330],{"type":44,"value":113},{"type":38,"tag":103,"props":332,"children":333},{"style":116},[334],{"type":44,"value":119},{"type":38,"tag":103,"props":336,"children":337},{"style":122},[338],{"type":44,"value":339}," httpRouter",{"type":38,"tag":103,"props":341,"children":342},{"style":116},[343],{"type":44,"value":130},{"type":38,"tag":103,"props":345,"children":346},{"style":110},[347],{"type":44,"value":135},{"type":38,"tag":103,"props":349,"children":350},{"style":116},[351],{"type":44,"value":140},{"type":38,"tag":103,"props":353,"children":354},{"style":143},[355],{"type":44,"value":146},{"type":38,"tag":103,"props":357,"children":358},{"style":116},[359],{"type":44,"value":151},{"type":38,"tag":103,"props":361,"children":362},{"style":116},[363],{"type":44,"value":156},{"type":38,"tag":103,"props":365,"children":366},{"class":105,"line":159},[367,371,375,380,384,388,392,397,401],{"type":38,"tag":103,"props":368,"children":369},{"style":110},[370],{"type":44,"value":113},{"type":38,"tag":103,"props":372,"children":373},{"style":116},[374],{"type":44,"value":119},{"type":38,"tag":103,"props":376,"children":377},{"style":122},[378],{"type":44,"value":379}," components",{"type":38,"tag":103,"props":381,"children":382},{"style":116},[383],{"type":44,"value":130},{"type":38,"tag":103,"props":385,"children":386},{"style":110},[387],{"type":44,"value":135},{"type":38,"tag":103,"props":389,"children":390},{"style":116},[391],{"type":44,"value":140},{"type":38,"tag":103,"props":393,"children":394},{"style":143},[395],{"type":44,"value":396},".\u002F_generated\u002Fapi",{"type":38,"tag":103,"props":398,"children":399},{"style":116},[400],{"type":44,"value":151},{"type":38,"tag":103,"props":402,"children":403},{"style":116},[404],{"type":44,"value":156},{"type":38,"tag":103,"props":406,"children":407},{"class":105,"line":194},[408,412,416,421,425,429,433,438,442],{"type":38,"tag":103,"props":409,"children":410},{"style":110},[411],{"type":44,"value":113},{"type":38,"tag":103,"props":413,"children":414},{"style":116},[415],{"type":44,"value":119},{"type":38,"tag":103,"props":417,"children":418},{"style":122},[419],{"type":44,"value":420}," registerRoutes",{"type":38,"tag":103,"props":422,"children":423},{"style":116},[424],{"type":44,"value":130},{"type":38,"tag":103,"props":426,"children":427},{"style":110},[428],{"type":44,"value":135},{"type":38,"tag":103,"props":430,"children":431},{"style":116},[432],{"type":44,"value":140},{"type":38,"tag":103,"props":434,"children":435},{"style":143},[436],{"type":44,"value":437},"@convex-dev\u002Fstripe",{"type":38,"tag":103,"props":439,"children":440},{"style":116},[441],{"type":44,"value":151},{"type":38,"tag":103,"props":443,"children":444},{"style":116},[445],{"type":44,"value":156},{"type":38,"tag":103,"props":447,"children":448},{"class":105,"line":228},[449,453,458,462,466,470],{"type":38,"tag":103,"props":450,"children":451},{"style":198},[452],{"type":44,"value":201},{"type":38,"tag":103,"props":454,"children":455},{"style":122},[456],{"type":44,"value":457}," http ",{"type":38,"tag":103,"props":459,"children":460},{"style":116},[461],{"type":44,"value":211},{"type":38,"tag":103,"props":463,"children":464},{"style":214},[465],{"type":44,"value":339},{"type":38,"tag":103,"props":467,"children":468},{"style":122},[469],{"type":44,"value":221},{"type":38,"tag":103,"props":471,"children":472},{"style":116},[473],{"type":44,"value":156},{"type":38,"tag":103,"props":475,"children":476},{"class":105,"line":255},[477,482,487,492,496,500,504,508,512,518,523,527,532,536,540,545],{"type":38,"tag":103,"props":478,"children":479},{"style":214},[480],{"type":44,"value":481},"registerRoutes",{"type":38,"tag":103,"props":483,"children":484},{"style":122},[485],{"type":44,"value":486},"(http",{"type":38,"tag":103,"props":488,"children":489},{"style":116},[490],{"type":44,"value":491},",",{"type":38,"tag":103,"props":493,"children":494},{"style":122},[495],{"type":44,"value":379},{"type":38,"tag":103,"props":497,"children":498},{"style":116},[499],{"type":44,"value":77},{"type":38,"tag":103,"props":501,"children":502},{"style":122},[503],{"type":44,"value":20},{"type":38,"tag":103,"props":505,"children":506},{"style":116},[507],{"type":44,"value":491},{"type":38,"tag":103,"props":509,"children":510},{"style":116},[511],{"type":44,"value":119},{"type":38,"tag":103,"props":513,"children":515},{"style":514},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[516],{"type":44,"value":517}," webhookPath",{"type":38,"tag":103,"props":519,"children":520},{"style":116},[521],{"type":44,"value":522},":",{"type":38,"tag":103,"props":524,"children":525},{"style":116},[526],{"type":44,"value":140},{"type":38,"tag":103,"props":528,"children":529},{"style":143},[530],{"type":44,"value":531},"\u002Fstripe\u002Fwebhook",{"type":38,"tag":103,"props":533,"children":534},{"style":116},[535],{"type":44,"value":151},{"type":38,"tag":103,"props":537,"children":538},{"style":116},[539],{"type":44,"value":130},{"type":38,"tag":103,"props":541,"children":542},{"style":122},[543],{"type":44,"value":544},")",{"type":38,"tag":103,"props":546,"children":547},{"style":116},[548],{"type":44,"value":156},{"type":38,"tag":103,"props":550,"children":552},{"class":105,"line":551},6,[553,557,561,566],{"type":38,"tag":103,"props":554,"children":555},{"style":110},[556],{"type":44,"value":261},{"type":38,"tag":103,"props":558,"children":559},{"style":110},[560],{"type":44,"value":266},{"type":38,"tag":103,"props":562,"children":563},{"style":122},[564],{"type":44,"value":565}," http",{"type":38,"tag":103,"props":567,"children":568},{"style":116},[569],{"type":44,"value":156},{"type":38,"tag":64,"props":571,"children":572},{},[573,574,580,582],{"type":44,"value":82},{"type":38,"tag":70,"props":575,"children":577},{"className":576},[],[578],{"type":44,"value":579},"convex\u002Fbilling.ts",{"type":44,"value":581}," with a checkout action and a subscription-gate query:\n",{"type":38,"tag":92,"props":583,"children":585},{"className":94,"code":584,"language":96,"meta":97,"style":97},"import { action, query } from '.\u002F_generated\u002Fserver';\nimport { components } from '.\u002F_generated\u002Fapi';\nimport { StripeSubscriptions } from '@convex-dev\u002Fstripe';\nimport { v } from 'convex\u002Fvalues';\nconst stripeClient = new StripeSubscriptions(components.stripe, {});\nexport const createSubscriptionCheckout = action({\n  args: { priceId: v.string() },\n  returns: v.object({ sessionId: v.string(), url: v.union(v.string(), v.null()) }),\n  handler: async (ctx, args) => {\n    const identity = await ctx.auth.getUserIdentity();\n    if (!identity) throw new Error('Not authenticated');\n    const customer = await stripeClient.getOrCreateCustomer(ctx, { userId: identity.subject, email: identity.email, name: identity.name });\n    return await stripeClient.createCheckoutSession(ctx, { priceId: args.priceId, customerId: customer.customerId, mode: 'subscription', successUrl: `${process.env.SITE_URL ?? 'http:\u002F\u002Flocalhost:3000'}\u002F?success=true`, cancelUrl: `${process.env.SITE_URL ?? 'http:\u002F\u002Flocalhost:3000'}\u002F?canceled=true`, subscriptionMetadata: { userId: identity.subject } });\n  },\n});\nexport const isSubscribed = query({\n  args: {},\n  returns: v.boolean(),\n  handler: async (ctx) => {\n    const identity = await ctx.auth.getUserIdentity();\n    if (!identity) return false;\n    const subscriptions = await ctx.runQuery(components.stripe.public.listSubscriptionsByUserId, { userId: identity.subject });\n    return subscriptions.some((sub) => sub.status === 'active' || sub.status === 'trialing');\n  },\n});\n",[586],{"type":38,"tag":70,"props":587,"children":588},{"__ignoreMap":97},[589,639,678,718,759,814,849,897,1036,1088,1143,1210,1347,1646,1655,1671,1704,1721,1754,1790,1838,1877,1986,2102,2110],{"type":38,"tag":103,"props":590,"children":591},{"class":105,"line":106},[592,596,600,605,609,614,618,622,626,631,635],{"type":38,"tag":103,"props":593,"children":594},{"style":110},[595],{"type":44,"value":113},{"type":38,"tag":103,"props":597,"children":598},{"style":116},[599],{"type":44,"value":119},{"type":38,"tag":103,"props":601,"children":602},{"style":122},[603],{"type":44,"value":604}," action",{"type":38,"tag":103,"props":606,"children":607},{"style":116},[608],{"type":44,"value":491},{"type":38,"tag":103,"props":610,"children":611},{"style":122},[612],{"type":44,"value":613}," query",{"type":38,"tag":103,"props":615,"children":616},{"style":116},[617],{"type":44,"value":130},{"type":38,"tag":103,"props":619,"children":620},{"style":110},[621],{"type":44,"value":135},{"type":38,"tag":103,"props":623,"children":624},{"style":116},[625],{"type":44,"value":140},{"type":38,"tag":103,"props":627,"children":628},{"style":143},[629],{"type":44,"value":630},".\u002F_generated\u002Fserver",{"type":38,"tag":103,"props":632,"children":633},{"style":116},[634],{"type":44,"value":151},{"type":38,"tag":103,"props":636,"children":637},{"style":116},[638],{"type":44,"value":156},{"type":38,"tag":103,"props":640,"children":641},{"class":105,"line":159},[642,646,650,654,658,662,666,670,674],{"type":38,"tag":103,"props":643,"children":644},{"style":110},[645],{"type":44,"value":113},{"type":38,"tag":103,"props":647,"children":648},{"style":116},[649],{"type":44,"value":119},{"type":38,"tag":103,"props":651,"children":652},{"style":122},[653],{"type":44,"value":379},{"type":38,"tag":103,"props":655,"children":656},{"style":116},[657],{"type":44,"value":130},{"type":38,"tag":103,"props":659,"children":660},{"style":110},[661],{"type":44,"value":135},{"type":38,"tag":103,"props":663,"children":664},{"style":116},[665],{"type":44,"value":140},{"type":38,"tag":103,"props":667,"children":668},{"style":143},[669],{"type":44,"value":396},{"type":38,"tag":103,"props":671,"children":672},{"style":116},[673],{"type":44,"value":151},{"type":38,"tag":103,"props":675,"children":676},{"style":116},[677],{"type":44,"value":156},{"type":38,"tag":103,"props":679,"children":680},{"class":105,"line":194},[681,685,689,694,698,702,706,710,714],{"type":38,"tag":103,"props":682,"children":683},{"style":110},[684],{"type":44,"value":113},{"type":38,"tag":103,"props":686,"children":687},{"style":116},[688],{"type":44,"value":119},{"type":38,"tag":103,"props":690,"children":691},{"style":122},[692],{"type":44,"value":693}," StripeSubscriptions",{"type":38,"tag":103,"props":695,"children":696},{"style":116},[697],{"type":44,"value":130},{"type":38,"tag":103,"props":699,"children":700},{"style":110},[701],{"type":44,"value":135},{"type":38,"tag":103,"props":703,"children":704},{"style":116},[705],{"type":44,"value":140},{"type":38,"tag":103,"props":707,"children":708},{"style":143},[709],{"type":44,"value":437},{"type":38,"tag":103,"props":711,"children":712},{"style":116},[713],{"type":44,"value":151},{"type":38,"tag":103,"props":715,"children":716},{"style":116},[717],{"type":44,"value":156},{"type":38,"tag":103,"props":719,"children":720},{"class":105,"line":228},[721,725,729,734,738,742,746,751,755],{"type":38,"tag":103,"props":722,"children":723},{"style":110},[724],{"type":44,"value":113},{"type":38,"tag":103,"props":726,"children":727},{"style":116},[728],{"type":44,"value":119},{"type":38,"tag":103,"props":730,"children":731},{"style":122},[732],{"type":44,"value":733}," v",{"type":38,"tag":103,"props":735,"children":736},{"style":116},[737],{"type":44,"value":130},{"type":38,"tag":103,"props":739,"children":740},{"style":110},[741],{"type":44,"value":135},{"type":38,"tag":103,"props":743,"children":744},{"style":116},[745],{"type":44,"value":140},{"type":38,"tag":103,"props":747,"children":748},{"style":143},[749],{"type":44,"value":750},"convex\u002Fvalues",{"type":38,"tag":103,"props":752,"children":753},{"style":116},[754],{"type":44,"value":151},{"type":38,"tag":103,"props":756,"children":757},{"style":116},[758],{"type":44,"value":156},{"type":38,"tag":103,"props":760,"children":761},{"class":105,"line":255},[762,766,771,775,780,784,789,793,797,801,806,810],{"type":38,"tag":103,"props":763,"children":764},{"style":198},[765],{"type":44,"value":201},{"type":38,"tag":103,"props":767,"children":768},{"style":122},[769],{"type":44,"value":770}," stripeClient ",{"type":38,"tag":103,"props":772,"children":773},{"style":116},[774],{"type":44,"value":211},{"type":38,"tag":103,"props":776,"children":777},{"style":116},[778],{"type":44,"value":779}," new",{"type":38,"tag":103,"props":781,"children":782},{"style":214},[783],{"type":44,"value":693},{"type":38,"tag":103,"props":785,"children":786},{"style":122},[787],{"type":44,"value":788},"(components",{"type":38,"tag":103,"props":790,"children":791},{"style":116},[792],{"type":44,"value":77},{"type":38,"tag":103,"props":794,"children":795},{"style":122},[796],{"type":44,"value":20},{"type":38,"tag":103,"props":798,"children":799},{"style":116},[800],{"type":44,"value":491},{"type":38,"tag":103,"props":802,"children":803},{"style":116},[804],{"type":44,"value":805}," {}",{"type":38,"tag":103,"props":807,"children":808},{"style":122},[809],{"type":44,"value":544},{"type":38,"tag":103,"props":811,"children":812},{"style":116},[813],{"type":44,"value":156},{"type":38,"tag":103,"props":815,"children":816},{"class":105,"line":551},[817,821,826,831,835,839,844],{"type":38,"tag":103,"props":818,"children":819},{"style":110},[820],{"type":44,"value":261},{"type":38,"tag":103,"props":822,"children":823},{"style":198},[824],{"type":44,"value":825}," const",{"type":38,"tag":103,"props":827,"children":828},{"style":122},[829],{"type":44,"value":830}," createSubscriptionCheckout ",{"type":38,"tag":103,"props":832,"children":833},{"style":116},[834],{"type":44,"value":211},{"type":38,"tag":103,"props":836,"children":837},{"style":214},[838],{"type":44,"value":604},{"type":38,"tag":103,"props":840,"children":841},{"style":122},[842],{"type":44,"value":843},"(",{"type":38,"tag":103,"props":845,"children":846},{"style":116},[847],{"type":44,"value":848},"{\n",{"type":38,"tag":103,"props":850,"children":851},{"class":105,"line":25},[852,857,861,865,870,874,878,882,887,892],{"type":38,"tag":103,"props":853,"children":854},{"style":514},[855],{"type":44,"value":856},"  args",{"type":38,"tag":103,"props":858,"children":859},{"style":116},[860],{"type":44,"value":522},{"type":38,"tag":103,"props":862,"children":863},{"style":116},[864],{"type":44,"value":119},{"type":38,"tag":103,"props":866,"children":867},{"style":514},[868],{"type":44,"value":869}," priceId",{"type":38,"tag":103,"props":871,"children":872},{"style":116},[873],{"type":44,"value":522},{"type":38,"tag":103,"props":875,"children":876},{"style":122},[877],{"type":44,"value":733},{"type":38,"tag":103,"props":879,"children":880},{"style":116},[881],{"type":44,"value":77},{"type":38,"tag":103,"props":883,"children":884},{"style":214},[885],{"type":44,"value":886},"string",{"type":38,"tag":103,"props":888,"children":889},{"style":122},[890],{"type":44,"value":891},"() ",{"type":38,"tag":103,"props":893,"children":894},{"style":116},[895],{"type":44,"value":896},"},\n",{"type":38,"tag":103,"props":898,"children":900},{"class":105,"line":899},8,[901,906,910,914,918,923,927,932,937,941,945,949,953,957,961,966,970,974,978,983,988,992,996,1000,1004,1008,1012,1017,1022,1027,1031],{"type":38,"tag":103,"props":902,"children":903},{"style":514},[904],{"type":44,"value":905},"  returns",{"type":38,"tag":103,"props":907,"children":908},{"style":116},[909],{"type":44,"value":522},{"type":38,"tag":103,"props":911,"children":912},{"style":122},[913],{"type":44,"value":733},{"type":38,"tag":103,"props":915,"children":916},{"style":116},[917],{"type":44,"value":77},{"type":38,"tag":103,"props":919,"children":920},{"style":214},[921],{"type":44,"value":922},"object",{"type":38,"tag":103,"props":924,"children":925},{"style":122},[926],{"type":44,"value":843},{"type":38,"tag":103,"props":928,"children":929},{"style":116},[930],{"type":44,"value":931},"{",{"type":38,"tag":103,"props":933,"children":934},{"style":514},[935],{"type":44,"value":936}," sessionId",{"type":38,"tag":103,"props":938,"children":939},{"style":116},[940],{"type":44,"value":522},{"type":38,"tag":103,"props":942,"children":943},{"style":122},[944],{"type":44,"value":733},{"type":38,"tag":103,"props":946,"children":947},{"style":116},[948],{"type":44,"value":77},{"type":38,"tag":103,"props":950,"children":951},{"style":214},[952],{"type":44,"value":886},{"type":38,"tag":103,"props":954,"children":955},{"style":122},[956],{"type":44,"value":221},{"type":38,"tag":103,"props":958,"children":959},{"style":116},[960],{"type":44,"value":491},{"type":38,"tag":103,"props":962,"children":963},{"style":514},[964],{"type":44,"value":965}," url",{"type":38,"tag":103,"props":967,"children":968},{"style":116},[969],{"type":44,"value":522},{"type":38,"tag":103,"props":971,"children":972},{"style":122},[973],{"type":44,"value":733},{"type":38,"tag":103,"props":975,"children":976},{"style":116},[977],{"type":44,"value":77},{"type":38,"tag":103,"props":979,"children":980},{"style":214},[981],{"type":44,"value":982},"union",{"type":38,"tag":103,"props":984,"children":985},{"style":122},[986],{"type":44,"value":987},"(v",{"type":38,"tag":103,"props":989,"children":990},{"style":116},[991],{"type":44,"value":77},{"type":38,"tag":103,"props":993,"children":994},{"style":214},[995],{"type":44,"value":886},{"type":38,"tag":103,"props":997,"children":998},{"style":122},[999],{"type":44,"value":221},{"type":38,"tag":103,"props":1001,"children":1002},{"style":116},[1003],{"type":44,"value":491},{"type":38,"tag":103,"props":1005,"children":1006},{"style":122},[1007],{"type":44,"value":733},{"type":38,"tag":103,"props":1009,"children":1010},{"style":116},[1011],{"type":44,"value":77},{"type":38,"tag":103,"props":1013,"children":1014},{"style":214},[1015],{"type":44,"value":1016},"null",{"type":38,"tag":103,"props":1018,"children":1019},{"style":122},[1020],{"type":44,"value":1021},"()) ",{"type":38,"tag":103,"props":1023,"children":1024},{"style":116},[1025],{"type":44,"value":1026},"}",{"type":38,"tag":103,"props":1028,"children":1029},{"style":122},[1030],{"type":44,"value":544},{"type":38,"tag":103,"props":1032,"children":1033},{"style":116},[1034],{"type":44,"value":1035},",\n",{"type":38,"tag":103,"props":1037,"children":1039},{"class":105,"line":1038},9,[1040,1045,1049,1054,1059,1065,1069,1074,1078,1083],{"type":38,"tag":103,"props":1041,"children":1042},{"style":214},[1043],{"type":44,"value":1044},"  handler",{"type":38,"tag":103,"props":1046,"children":1047},{"style":116},[1048],{"type":44,"value":522},{"type":38,"tag":103,"props":1050,"children":1051},{"style":198},[1052],{"type":44,"value":1053}," async",{"type":38,"tag":103,"props":1055,"children":1056},{"style":116},[1057],{"type":44,"value":1058}," (",{"type":38,"tag":103,"props":1060,"children":1062},{"style":1061},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[1063],{"type":44,"value":1064},"ctx",{"type":38,"tag":103,"props":1066,"children":1067},{"style":116},[1068],{"type":44,"value":491},{"type":38,"tag":103,"props":1070,"children":1071},{"style":1061},[1072],{"type":44,"value":1073}," args",{"type":38,"tag":103,"props":1075,"children":1076},{"style":116},[1077],{"type":44,"value":544},{"type":38,"tag":103,"props":1079,"children":1080},{"style":198},[1081],{"type":44,"value":1082}," =>",{"type":38,"tag":103,"props":1084,"children":1085},{"style":116},[1086],{"type":44,"value":1087}," {\n",{"type":38,"tag":103,"props":1089,"children":1091},{"class":105,"line":1090},10,[1092,1097,1102,1107,1112,1117,1121,1126,1130,1135,1139],{"type":38,"tag":103,"props":1093,"children":1094},{"style":198},[1095],{"type":44,"value":1096},"    const",{"type":38,"tag":103,"props":1098,"children":1099},{"style":122},[1100],{"type":44,"value":1101}," identity",{"type":38,"tag":103,"props":1103,"children":1104},{"style":116},[1105],{"type":44,"value":1106}," =",{"type":38,"tag":103,"props":1108,"children":1109},{"style":110},[1110],{"type":44,"value":1111}," await",{"type":38,"tag":103,"props":1113,"children":1114},{"style":122},[1115],{"type":44,"value":1116}," ctx",{"type":38,"tag":103,"props":1118,"children":1119},{"style":116},[1120],{"type":44,"value":77},{"type":38,"tag":103,"props":1122,"children":1123},{"style":122},[1124],{"type":44,"value":1125},"auth",{"type":38,"tag":103,"props":1127,"children":1128},{"style":116},[1129],{"type":44,"value":77},{"type":38,"tag":103,"props":1131,"children":1132},{"style":214},[1133],{"type":44,"value":1134},"getUserIdentity",{"type":38,"tag":103,"props":1136,"children":1137},{"style":514},[1138],{"type":44,"value":221},{"type":38,"tag":103,"props":1140,"children":1141},{"style":116},[1142],{"type":44,"value":156},{"type":38,"tag":103,"props":1144,"children":1146},{"class":105,"line":1145},11,[1147,1152,1156,1161,1166,1171,1176,1180,1185,1189,1193,1198,1202,1206],{"type":38,"tag":103,"props":1148,"children":1149},{"style":110},[1150],{"type":44,"value":1151},"    if",{"type":38,"tag":103,"props":1153,"children":1154},{"style":514},[1155],{"type":44,"value":1058},{"type":38,"tag":103,"props":1157,"children":1158},{"style":116},[1159],{"type":44,"value":1160},"!",{"type":38,"tag":103,"props":1162,"children":1163},{"style":122},[1164],{"type":44,"value":1165},"identity",{"type":38,"tag":103,"props":1167,"children":1168},{"style":514},[1169],{"type":44,"value":1170},") ",{"type":38,"tag":103,"props":1172,"children":1173},{"style":110},[1174],{"type":44,"value":1175},"throw",{"type":38,"tag":103,"props":1177,"children":1178},{"style":116},[1179],{"type":44,"value":779},{"type":38,"tag":103,"props":1181,"children":1182},{"style":214},[1183],{"type":44,"value":1184}," Error",{"type":38,"tag":103,"props":1186,"children":1187},{"style":514},[1188],{"type":44,"value":843},{"type":38,"tag":103,"props":1190,"children":1191},{"style":116},[1192],{"type":44,"value":151},{"type":38,"tag":103,"props":1194,"children":1195},{"style":143},[1196],{"type":44,"value":1197},"Not authenticated",{"type":38,"tag":103,"props":1199,"children":1200},{"style":116},[1201],{"type":44,"value":151},{"type":38,"tag":103,"props":1203,"children":1204},{"style":514},[1205],{"type":44,"value":544},{"type":38,"tag":103,"props":1207,"children":1208},{"style":116},[1209],{"type":44,"value":156},{"type":38,"tag":103,"props":1211,"children":1213},{"class":105,"line":1212},12,[1214,1218,1223,1227,1231,1236,1240,1245,1249,1253,1257,1261,1266,1270,1274,1278,1283,1287,1292,1296,1300,1304,1309,1313,1318,1322,1326,1330,1335,1339,1343],{"type":38,"tag":103,"props":1215,"children":1216},{"style":198},[1217],{"type":44,"value":1096},{"type":38,"tag":103,"props":1219,"children":1220},{"style":122},[1221],{"type":44,"value":1222}," customer",{"type":38,"tag":103,"props":1224,"children":1225},{"style":116},[1226],{"type":44,"value":1106},{"type":38,"tag":103,"props":1228,"children":1229},{"style":110},[1230],{"type":44,"value":1111},{"type":38,"tag":103,"props":1232,"children":1233},{"style":122},[1234],{"type":44,"value":1235}," stripeClient",{"type":38,"tag":103,"props":1237,"children":1238},{"style":116},[1239],{"type":44,"value":77},{"type":38,"tag":103,"props":1241,"children":1242},{"style":214},[1243],{"type":44,"value":1244},"getOrCreateCustomer",{"type":38,"tag":103,"props":1246,"children":1247},{"style":514},[1248],{"type":44,"value":843},{"type":38,"tag":103,"props":1250,"children":1251},{"style":122},[1252],{"type":44,"value":1064},{"type":38,"tag":103,"props":1254,"children":1255},{"style":116},[1256],{"type":44,"value":491},{"type":38,"tag":103,"props":1258,"children":1259},{"style":116},[1260],{"type":44,"value":119},{"type":38,"tag":103,"props":1262,"children":1263},{"style":514},[1264],{"type":44,"value":1265}," userId",{"type":38,"tag":103,"props":1267,"children":1268},{"style":116},[1269],{"type":44,"value":522},{"type":38,"tag":103,"props":1271,"children":1272},{"style":122},[1273],{"type":44,"value":1101},{"type":38,"tag":103,"props":1275,"children":1276},{"style":116},[1277],{"type":44,"value":77},{"type":38,"tag":103,"props":1279,"children":1280},{"style":122},[1281],{"type":44,"value":1282},"subject",{"type":38,"tag":103,"props":1284,"children":1285},{"style":116},[1286],{"type":44,"value":491},{"type":38,"tag":103,"props":1288,"children":1289},{"style":514},[1290],{"type":44,"value":1291}," email",{"type":38,"tag":103,"props":1293,"children":1294},{"style":116},[1295],{"type":44,"value":522},{"type":38,"tag":103,"props":1297,"children":1298},{"style":122},[1299],{"type":44,"value":1101},{"type":38,"tag":103,"props":1301,"children":1302},{"style":116},[1303],{"type":44,"value":77},{"type":38,"tag":103,"props":1305,"children":1306},{"style":122},[1307],{"type":44,"value":1308},"email",{"type":38,"tag":103,"props":1310,"children":1311},{"style":116},[1312],{"type":44,"value":491},{"type":38,"tag":103,"props":1314,"children":1315},{"style":514},[1316],{"type":44,"value":1317}," name",{"type":38,"tag":103,"props":1319,"children":1320},{"style":116},[1321],{"type":44,"value":522},{"type":38,"tag":103,"props":1323,"children":1324},{"style":122},[1325],{"type":44,"value":1101},{"type":38,"tag":103,"props":1327,"children":1328},{"style":116},[1329],{"type":44,"value":77},{"type":38,"tag":103,"props":1331,"children":1332},{"style":122},[1333],{"type":44,"value":1334},"name",{"type":38,"tag":103,"props":1336,"children":1337},{"style":116},[1338],{"type":44,"value":130},{"type":38,"tag":103,"props":1340,"children":1341},{"style":514},[1342],{"type":44,"value":544},{"type":38,"tag":103,"props":1344,"children":1345},{"style":116},[1346],{"type":44,"value":156},{"type":38,"tag":103,"props":1348,"children":1350},{"class":105,"line":1349},13,[1351,1356,1360,1364,1368,1373,1377,1381,1385,1389,1393,1397,1401,1405,1410,1414,1419,1423,1427,1431,1436,1440,1445,1449,1453,1458,1462,1466,1471,1475,1480,1485,1489,1493,1497,1502,1507,1511,1516,1521,1526,1531,1535,1540,1544,1548,1552,1556,1560,1564,1568,1572,1576,1580,1584,1589,1593,1597,1602,1606,1610,1614,1618,1622,1626,1630,1634,1638,1642],{"type":38,"tag":103,"props":1352,"children":1353},{"style":110},[1354],{"type":44,"value":1355},"    return",{"type":38,"tag":103,"props":1357,"children":1358},{"style":110},[1359],{"type":44,"value":1111},{"type":38,"tag":103,"props":1361,"children":1362},{"style":122},[1363],{"type":44,"value":1235},{"type":38,"tag":103,"props":1365,"children":1366},{"style":116},[1367],{"type":44,"value":77},{"type":38,"tag":103,"props":1369,"children":1370},{"style":214},[1371],{"type":44,"value":1372},"createCheckoutSession",{"type":38,"tag":103,"props":1374,"children":1375},{"style":514},[1376],{"type":44,"value":843},{"type":38,"tag":103,"props":1378,"children":1379},{"style":122},[1380],{"type":44,"value":1064},{"type":38,"tag":103,"props":1382,"children":1383},{"style":116},[1384],{"type":44,"value":491},{"type":38,"tag":103,"props":1386,"children":1387},{"style":116},[1388],{"type":44,"value":119},{"type":38,"tag":103,"props":1390,"children":1391},{"style":514},[1392],{"type":44,"value":869},{"type":38,"tag":103,"props":1394,"children":1395},{"style":116},[1396],{"type":44,"value":522},{"type":38,"tag":103,"props":1398,"children":1399},{"style":122},[1400],{"type":44,"value":1073},{"type":38,"tag":103,"props":1402,"children":1403},{"style":116},[1404],{"type":44,"value":77},{"type":38,"tag":103,"props":1406,"children":1407},{"style":122},[1408],{"type":44,"value":1409},"priceId",{"type":38,"tag":103,"props":1411,"children":1412},{"style":116},[1413],{"type":44,"value":491},{"type":38,"tag":103,"props":1415,"children":1416},{"style":514},[1417],{"type":44,"value":1418}," customerId",{"type":38,"tag":103,"props":1420,"children":1421},{"style":116},[1422],{"type":44,"value":522},{"type":38,"tag":103,"props":1424,"children":1425},{"style":122},[1426],{"type":44,"value":1222},{"type":38,"tag":103,"props":1428,"children":1429},{"style":116},[1430],{"type":44,"value":77},{"type":38,"tag":103,"props":1432,"children":1433},{"style":122},[1434],{"type":44,"value":1435},"customerId",{"type":38,"tag":103,"props":1437,"children":1438},{"style":116},[1439],{"type":44,"value":491},{"type":38,"tag":103,"props":1441,"children":1442},{"style":514},[1443],{"type":44,"value":1444}," mode",{"type":38,"tag":103,"props":1446,"children":1447},{"style":116},[1448],{"type":44,"value":522},{"type":38,"tag":103,"props":1450,"children":1451},{"style":116},[1452],{"type":44,"value":140},{"type":38,"tag":103,"props":1454,"children":1455},{"style":143},[1456],{"type":44,"value":1457},"subscription",{"type":38,"tag":103,"props":1459,"children":1460},{"style":116},[1461],{"type":44,"value":151},{"type":38,"tag":103,"props":1463,"children":1464},{"style":116},[1465],{"type":44,"value":491},{"type":38,"tag":103,"props":1467,"children":1468},{"style":514},[1469],{"type":44,"value":1470}," successUrl",{"type":38,"tag":103,"props":1472,"children":1473},{"style":116},[1474],{"type":44,"value":522},{"type":38,"tag":103,"props":1476,"children":1477},{"style":116},[1478],{"type":44,"value":1479}," `${",{"type":38,"tag":103,"props":1481,"children":1482},{"style":122},[1483],{"type":44,"value":1484},"process",{"type":38,"tag":103,"props":1486,"children":1487},{"style":116},[1488],{"type":44,"value":77},{"type":38,"tag":103,"props":1490,"children":1491},{"style":122},[1492],{"type":44,"value":286},{"type":38,"tag":103,"props":1494,"children":1495},{"style":116},[1496],{"type":44,"value":77},{"type":38,"tag":103,"props":1498,"children":1499},{"style":122},[1500],{"type":44,"value":1501},"SITE_URL ",{"type":38,"tag":103,"props":1503,"children":1504},{"style":116},[1505],{"type":44,"value":1506},"??",{"type":38,"tag":103,"props":1508,"children":1509},{"style":116},[1510],{"type":44,"value":140},{"type":38,"tag":103,"props":1512,"children":1513},{"style":143},[1514],{"type":44,"value":1515},"http:\u002F\u002Flocalhost:3000",{"type":38,"tag":103,"props":1517,"children":1518},{"style":116},[1519],{"type":44,"value":1520},"'}",{"type":38,"tag":103,"props":1522,"children":1523},{"style":143},[1524],{"type":44,"value":1525},"\u002F?success=true",{"type":38,"tag":103,"props":1527,"children":1528},{"style":116},[1529],{"type":44,"value":1530},"`",{"type":38,"tag":103,"props":1532,"children":1533},{"style":116},[1534],{"type":44,"value":491},{"type":38,"tag":103,"props":1536,"children":1537},{"style":514},[1538],{"type":44,"value":1539}," cancelUrl",{"type":38,"tag":103,"props":1541,"children":1542},{"style":116},[1543],{"type":44,"value":522},{"type":38,"tag":103,"props":1545,"children":1546},{"style":116},[1547],{"type":44,"value":1479},{"type":38,"tag":103,"props":1549,"children":1550},{"style":122},[1551],{"type":44,"value":1484},{"type":38,"tag":103,"props":1553,"children":1554},{"style":116},[1555],{"type":44,"value":77},{"type":38,"tag":103,"props":1557,"children":1558},{"style":122},[1559],{"type":44,"value":286},{"type":38,"tag":103,"props":1561,"children":1562},{"style":116},[1563],{"type":44,"value":77},{"type":38,"tag":103,"props":1565,"children":1566},{"style":122},[1567],{"type":44,"value":1501},{"type":38,"tag":103,"props":1569,"children":1570},{"style":116},[1571],{"type":44,"value":1506},{"type":38,"tag":103,"props":1573,"children":1574},{"style":116},[1575],{"type":44,"value":140},{"type":38,"tag":103,"props":1577,"children":1578},{"style":143},[1579],{"type":44,"value":1515},{"type":38,"tag":103,"props":1581,"children":1582},{"style":116},[1583],{"type":44,"value":1520},{"type":38,"tag":103,"props":1585,"children":1586},{"style":143},[1587],{"type":44,"value":1588},"\u002F?canceled=true",{"type":38,"tag":103,"props":1590,"children":1591},{"style":116},[1592],{"type":44,"value":1530},{"type":38,"tag":103,"props":1594,"children":1595},{"style":116},[1596],{"type":44,"value":491},{"type":38,"tag":103,"props":1598,"children":1599},{"style":514},[1600],{"type":44,"value":1601}," subscriptionMetadata",{"type":38,"tag":103,"props":1603,"children":1604},{"style":116},[1605],{"type":44,"value":522},{"type":38,"tag":103,"props":1607,"children":1608},{"style":116},[1609],{"type":44,"value":119},{"type":38,"tag":103,"props":1611,"children":1612},{"style":514},[1613],{"type":44,"value":1265},{"type":38,"tag":103,"props":1615,"children":1616},{"style":116},[1617],{"type":44,"value":522},{"type":38,"tag":103,"props":1619,"children":1620},{"style":122},[1621],{"type":44,"value":1101},{"type":38,"tag":103,"props":1623,"children":1624},{"style":116},[1625],{"type":44,"value":77},{"type":38,"tag":103,"props":1627,"children":1628},{"style":122},[1629],{"type":44,"value":1282},{"type":38,"tag":103,"props":1631,"children":1632},{"style":116},[1633],{"type":44,"value":130},{"type":38,"tag":103,"props":1635,"children":1636},{"style":116},[1637],{"type":44,"value":130},{"type":38,"tag":103,"props":1639,"children":1640},{"style":514},[1641],{"type":44,"value":544},{"type":38,"tag":103,"props":1643,"children":1644},{"style":116},[1645],{"type":44,"value":156},{"type":38,"tag":103,"props":1647,"children":1649},{"class":105,"line":1648},14,[1650],{"type":38,"tag":103,"props":1651,"children":1652},{"style":116},[1653],{"type":44,"value":1654},"  },\n",{"type":38,"tag":103,"props":1656,"children":1658},{"class":105,"line":1657},15,[1659,1663,1667],{"type":38,"tag":103,"props":1660,"children":1661},{"style":116},[1662],{"type":44,"value":1026},{"type":38,"tag":103,"props":1664,"children":1665},{"style":122},[1666],{"type":44,"value":544},{"type":38,"tag":103,"props":1668,"children":1669},{"style":116},[1670],{"type":44,"value":156},{"type":38,"tag":103,"props":1672,"children":1674},{"class":105,"line":1673},16,[1675,1679,1683,1688,1692,1696,1700],{"type":38,"tag":103,"props":1676,"children":1677},{"style":110},[1678],{"type":44,"value":261},{"type":38,"tag":103,"props":1680,"children":1681},{"style":198},[1682],{"type":44,"value":825},{"type":38,"tag":103,"props":1684,"children":1685},{"style":122},[1686],{"type":44,"value":1687}," isSubscribed ",{"type":38,"tag":103,"props":1689,"children":1690},{"style":116},[1691],{"type":44,"value":211},{"type":38,"tag":103,"props":1693,"children":1694},{"style":214},[1695],{"type":44,"value":613},{"type":38,"tag":103,"props":1697,"children":1698},{"style":122},[1699],{"type":44,"value":843},{"type":38,"tag":103,"props":1701,"children":1702},{"style":116},[1703],{"type":44,"value":848},{"type":38,"tag":103,"props":1705,"children":1707},{"class":105,"line":1706},17,[1708,1712,1716],{"type":38,"tag":103,"props":1709,"children":1710},{"style":514},[1711],{"type":44,"value":856},{"type":38,"tag":103,"props":1713,"children":1714},{"style":116},[1715],{"type":44,"value":522},{"type":38,"tag":103,"props":1717,"children":1718},{"style":116},[1719],{"type":44,"value":1720}," {},\n",{"type":38,"tag":103,"props":1722,"children":1724},{"class":105,"line":1723},18,[1725,1729,1733,1737,1741,1746,1750],{"type":38,"tag":103,"props":1726,"children":1727},{"style":514},[1728],{"type":44,"value":905},{"type":38,"tag":103,"props":1730,"children":1731},{"style":116},[1732],{"type":44,"value":522},{"type":38,"tag":103,"props":1734,"children":1735},{"style":122},[1736],{"type":44,"value":733},{"type":38,"tag":103,"props":1738,"children":1739},{"style":116},[1740],{"type":44,"value":77},{"type":38,"tag":103,"props":1742,"children":1743},{"style":214},[1744],{"type":44,"value":1745},"boolean",{"type":38,"tag":103,"props":1747,"children":1748},{"style":122},[1749],{"type":44,"value":221},{"type":38,"tag":103,"props":1751,"children":1752},{"style":116},[1753],{"type":44,"value":1035},{"type":38,"tag":103,"props":1755,"children":1757},{"class":105,"line":1756},19,[1758,1762,1766,1770,1774,1778,1782,1786],{"type":38,"tag":103,"props":1759,"children":1760},{"style":214},[1761],{"type":44,"value":1044},{"type":38,"tag":103,"props":1763,"children":1764},{"style":116},[1765],{"type":44,"value":522},{"type":38,"tag":103,"props":1767,"children":1768},{"style":198},[1769],{"type":44,"value":1053},{"type":38,"tag":103,"props":1771,"children":1772},{"style":116},[1773],{"type":44,"value":1058},{"type":38,"tag":103,"props":1775,"children":1776},{"style":1061},[1777],{"type":44,"value":1064},{"type":38,"tag":103,"props":1779,"children":1780},{"style":116},[1781],{"type":44,"value":544},{"type":38,"tag":103,"props":1783,"children":1784},{"style":198},[1785],{"type":44,"value":1082},{"type":38,"tag":103,"props":1787,"children":1788},{"style":116},[1789],{"type":44,"value":1087},{"type":38,"tag":103,"props":1791,"children":1793},{"class":105,"line":1792},20,[1794,1798,1802,1806,1810,1814,1818,1822,1826,1830,1834],{"type":38,"tag":103,"props":1795,"children":1796},{"style":198},[1797],{"type":44,"value":1096},{"type":38,"tag":103,"props":1799,"children":1800},{"style":122},[1801],{"type":44,"value":1101},{"type":38,"tag":103,"props":1803,"children":1804},{"style":116},[1805],{"type":44,"value":1106},{"type":38,"tag":103,"props":1807,"children":1808},{"style":110},[1809],{"type":44,"value":1111},{"type":38,"tag":103,"props":1811,"children":1812},{"style":122},[1813],{"type":44,"value":1116},{"type":38,"tag":103,"props":1815,"children":1816},{"style":116},[1817],{"type":44,"value":77},{"type":38,"tag":103,"props":1819,"children":1820},{"style":122},[1821],{"type":44,"value":1125},{"type":38,"tag":103,"props":1823,"children":1824},{"style":116},[1825],{"type":44,"value":77},{"type":38,"tag":103,"props":1827,"children":1828},{"style":214},[1829],{"type":44,"value":1134},{"type":38,"tag":103,"props":1831,"children":1832},{"style":514},[1833],{"type":44,"value":221},{"type":38,"tag":103,"props":1835,"children":1836},{"style":116},[1837],{"type":44,"value":156},{"type":38,"tag":103,"props":1839,"children":1841},{"class":105,"line":1840},21,[1842,1846,1850,1854,1858,1862,1867,1873],{"type":38,"tag":103,"props":1843,"children":1844},{"style":110},[1845],{"type":44,"value":1151},{"type":38,"tag":103,"props":1847,"children":1848},{"style":514},[1849],{"type":44,"value":1058},{"type":38,"tag":103,"props":1851,"children":1852},{"style":116},[1853],{"type":44,"value":1160},{"type":38,"tag":103,"props":1855,"children":1856},{"style":122},[1857],{"type":44,"value":1165},{"type":38,"tag":103,"props":1859,"children":1860},{"style":514},[1861],{"type":44,"value":1170},{"type":38,"tag":103,"props":1863,"children":1864},{"style":110},[1865],{"type":44,"value":1866},"return",{"type":38,"tag":103,"props":1868,"children":1870},{"style":1869},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[1871],{"type":44,"value":1872}," false",{"type":38,"tag":103,"props":1874,"children":1875},{"style":116},[1876],{"type":44,"value":156},{"type":38,"tag":103,"props":1878,"children":1880},{"class":105,"line":1879},22,[1881,1885,1890,1894,1898,1902,1906,1911,1915,1920,1924,1928,1932,1937,1941,1946,1950,1954,1958,1962,1966,1970,1974,1978,1982],{"type":38,"tag":103,"props":1882,"children":1883},{"style":198},[1884],{"type":44,"value":1096},{"type":38,"tag":103,"props":1886,"children":1887},{"style":122},[1888],{"type":44,"value":1889}," subscriptions",{"type":38,"tag":103,"props":1891,"children":1892},{"style":116},[1893],{"type":44,"value":1106},{"type":38,"tag":103,"props":1895,"children":1896},{"style":110},[1897],{"type":44,"value":1111},{"type":38,"tag":103,"props":1899,"children":1900},{"style":122},[1901],{"type":44,"value":1116},{"type":38,"tag":103,"props":1903,"children":1904},{"style":116},[1905],{"type":44,"value":77},{"type":38,"tag":103,"props":1907,"children":1908},{"style":214},[1909],{"type":44,"value":1910},"runQuery",{"type":38,"tag":103,"props":1912,"children":1913},{"style":514},[1914],{"type":44,"value":843},{"type":38,"tag":103,"props":1916,"children":1917},{"style":122},[1918],{"type":44,"value":1919},"components",{"type":38,"tag":103,"props":1921,"children":1922},{"style":116},[1923],{"type":44,"value":77},{"type":38,"tag":103,"props":1925,"children":1926},{"style":122},[1927],{"type":44,"value":20},{"type":38,"tag":103,"props":1929,"children":1930},{"style":116},[1931],{"type":44,"value":77},{"type":38,"tag":103,"props":1933,"children":1934},{"style":122},[1935],{"type":44,"value":1936},"public",{"type":38,"tag":103,"props":1938,"children":1939},{"style":116},[1940],{"type":44,"value":77},{"type":38,"tag":103,"props":1942,"children":1943},{"style":122},[1944],{"type":44,"value":1945},"listSubscriptionsByUserId",{"type":38,"tag":103,"props":1947,"children":1948},{"style":116},[1949],{"type":44,"value":491},{"type":38,"tag":103,"props":1951,"children":1952},{"style":116},[1953],{"type":44,"value":119},{"type":38,"tag":103,"props":1955,"children":1956},{"style":514},[1957],{"type":44,"value":1265},{"type":38,"tag":103,"props":1959,"children":1960},{"style":116},[1961],{"type":44,"value":522},{"type":38,"tag":103,"props":1963,"children":1964},{"style":122},[1965],{"type":44,"value":1101},{"type":38,"tag":103,"props":1967,"children":1968},{"style":116},[1969],{"type":44,"value":77},{"type":38,"tag":103,"props":1971,"children":1972},{"style":122},[1973],{"type":44,"value":1282},{"type":38,"tag":103,"props":1975,"children":1976},{"style":116},[1977],{"type":44,"value":130},{"type":38,"tag":103,"props":1979,"children":1980},{"style":514},[1981],{"type":44,"value":544},{"type":38,"tag":103,"props":1983,"children":1984},{"style":116},[1985],{"type":44,"value":156},{"type":38,"tag":103,"props":1987,"children":1989},{"class":105,"line":1988},23,[1990,1994,1998,2002,2007,2011,2015,2020,2024,2028,2033,2037,2042,2047,2051,2056,2060,2065,2069,2073,2077,2081,2085,2090,2094,2098],{"type":38,"tag":103,"props":1991,"children":1992},{"style":110},[1993],{"type":44,"value":1355},{"type":38,"tag":103,"props":1995,"children":1996},{"style":122},[1997],{"type":44,"value":1889},{"type":38,"tag":103,"props":1999,"children":2000},{"style":116},[2001],{"type":44,"value":77},{"type":38,"tag":103,"props":2003,"children":2004},{"style":214},[2005],{"type":44,"value":2006},"some",{"type":38,"tag":103,"props":2008,"children":2009},{"style":514},[2010],{"type":44,"value":843},{"type":38,"tag":103,"props":2012,"children":2013},{"style":116},[2014],{"type":44,"value":843},{"type":38,"tag":103,"props":2016,"children":2017},{"style":1061},[2018],{"type":44,"value":2019},"sub",{"type":38,"tag":103,"props":2021,"children":2022},{"style":116},[2023],{"type":44,"value":544},{"type":38,"tag":103,"props":2025,"children":2026},{"style":198},[2027],{"type":44,"value":1082},{"type":38,"tag":103,"props":2029,"children":2030},{"style":122},[2031],{"type":44,"value":2032}," sub",{"type":38,"tag":103,"props":2034,"children":2035},{"style":116},[2036],{"type":44,"value":77},{"type":38,"tag":103,"props":2038,"children":2039},{"style":122},[2040],{"type":44,"value":2041},"status",{"type":38,"tag":103,"props":2043,"children":2044},{"style":116},[2045],{"type":44,"value":2046}," ===",{"type":38,"tag":103,"props":2048,"children":2049},{"style":116},[2050],{"type":44,"value":140},{"type":38,"tag":103,"props":2052,"children":2053},{"style":143},[2054],{"type":44,"value":2055},"active",{"type":38,"tag":103,"props":2057,"children":2058},{"style":116},[2059],{"type":44,"value":151},{"type":38,"tag":103,"props":2061,"children":2062},{"style":116},[2063],{"type":44,"value":2064}," ||",{"type":38,"tag":103,"props":2066,"children":2067},{"style":122},[2068],{"type":44,"value":2032},{"type":38,"tag":103,"props":2070,"children":2071},{"style":116},[2072],{"type":44,"value":77},{"type":38,"tag":103,"props":2074,"children":2075},{"style":122},[2076],{"type":44,"value":2041},{"type":38,"tag":103,"props":2078,"children":2079},{"style":116},[2080],{"type":44,"value":2046},{"type":38,"tag":103,"props":2082,"children":2083},{"style":116},[2084],{"type":44,"value":140},{"type":38,"tag":103,"props":2086,"children":2087},{"style":143},[2088],{"type":44,"value":2089},"trialing",{"type":38,"tag":103,"props":2091,"children":2092},{"style":116},[2093],{"type":44,"value":151},{"type":38,"tag":103,"props":2095,"children":2096},{"style":514},[2097],{"type":44,"value":544},{"type":38,"tag":103,"props":2099,"children":2100},{"style":116},[2101],{"type":44,"value":156},{"type":38,"tag":103,"props":2103,"children":2105},{"class":105,"line":2104},24,[2106],{"type":38,"tag":103,"props":2107,"children":2108},{"style":116},[2109],{"type":44,"value":1654},{"type":38,"tag":103,"props":2111,"children":2113},{"class":105,"line":2112},25,[2114,2118,2122],{"type":38,"tag":103,"props":2115,"children":2116},{"style":116},[2117],{"type":44,"value":1026},{"type":38,"tag":103,"props":2119,"children":2120},{"style":122},[2121],{"type":44,"value":544},{"type":38,"tag":103,"props":2123,"children":2124},{"style":116},[2125],{"type":44,"value":156},{"type":38,"tag":64,"props":2127,"children":2128},{},[2129,2131,2137,2139],{"type":44,"value":2130},"Run ",{"type":38,"tag":70,"props":2132,"children":2134},{"className":2133},[],[2135],{"type":44,"value":2136},"npx convex dev --once",{"type":44,"value":2138}," — it will install the component and push the functions. Verify output shows ",{"type":38,"tag":70,"props":2140,"children":2142},{"className":2141},[],[2143],{"type":44,"value":2144},"✔ Installed component stripe.",{"type":38,"tag":64,"props":2146,"children":2147},{},[2148,2150,2156,2158,2164,2166,2172,2173,2179,2180,2186,2188,2193],{"type":44,"value":2149},"In Stripe Dashboard → Webhooks: add endpoint ",{"type":38,"tag":70,"props":2151,"children":2153},{"className":2152},[],[2154],{"type":44,"value":2155},"https:\u002F\u002F\u003Cdeployment>.convex.site\u002Fstripe\u002Fwebhook",{"type":44,"value":2157},", subscribe to ",{"type":38,"tag":70,"props":2159,"children":2161},{"className":2160},[],[2162],{"type":44,"value":2163},"checkout.session.completed",{"type":44,"value":2165},", ",{"type":38,"tag":70,"props":2167,"children":2169},{"className":2168},[],[2170],{"type":44,"value":2171},"customer.subscription.*",{"type":44,"value":2165},{"type":38,"tag":70,"props":2174,"children":2176},{"className":2175},[],[2177],{"type":44,"value":2178},"invoice.*",{"type":44,"value":2165},{"type":38,"tag":70,"props":2181,"children":2183},{"className":2182},[],[2184],{"type":44,"value":2185},"payment_intent.*",{"type":44,"value":2187},". Copy the signing secret as ",{"type":38,"tag":70,"props":2189,"children":2191},{"className":2190},[],[2192],{"type":44,"value":302},{"type":44,"value":77},{"type":38,"tag":53,"props":2195,"children":2197},{"id":2196},"rules",[2198],{"type":44,"value":2199},"Rules",{"type":38,"tag":2201,"props":2202,"children":2203},"ul",{},[2204,2209,2221,2226],{"type":38,"tag":64,"props":2205,"children":2206},{},[2207],{"type":44,"value":2208},"Use @convex-dev\u002Fstripe (npm: @convex-dev\u002Fstripe@^0.1.4) — it handles webhook signature verification internally via registerRoutes; do NOT write a manual constructEvent webhook.",{"type":38,"tag":64,"props":2210,"children":2211},{},[2212,2214,2219],{"type":44,"value":2213},"Stripe keys live in Convex env (use the ",{"type":38,"tag":70,"props":2215,"children":2217},{"className":2216},[],[2218],{"type":44,"value":286},{"type":44,"value":2220}," micro power): STRIPE_SECRET_KEY and STRIPE_WEBHOOK_SECRET.",{"type":38,"tag":64,"props":2222,"children":2223},{},[2224],{"type":44,"value":2225},"Gate on server-stored subscription state via isSubscribed query (reads component tables), not client claims.",{"type":38,"tag":64,"props":2227,"children":2228},{},[2229],{"type":44,"value":2230},"convex\u002Fconvex.config.ts must import from '@convex-dev\u002Fstripe\u002Fconvex.config.js' (not .ts) — the .js extension is required by the Convex bundler.",{"type":38,"tag":2232,"props":2233,"children":2234},"style",{},[2235],{"type":44,"value":2236},"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":2238,"total":2404},[2239,2252,2264,2281,2298,2311,2326,2332,2344,2359,2373,2390],{"slug":8,"name":8,"fn":2240,"description":2241,"org":2242,"tags":2243,"stars":21,"repoUrl":22,"updatedAt":2251},"guide Convex project setup and usage","Convex is the backend agents get right on the first try: an all-TypeScript reactive platform where the database, server functions, scheduling, file storage, auth, and realtime sync are one type-safe system, every function is a transaction, and `tsc` catches most mistakes before deploy. Ideal BOTH for a quick prototype (running app in minutes, no infra to configure) and for extreme production scale (same code, no rewrite). Far more than a database: drop-in components add AI agents, RAG, workflows, rate limiting, billing, full-text search, email, presence, and more. Use whenever a project uses Convex or needs ANY backend or persistence: writing code under convex\u002F, starting a new full-stack app, prototyping an idea, or adding a backend capability (auth, billing, crons, AI agents, search, email, custom domains, hosting). Routes to the bundled convex-* skills and the served capability catalog, which stays current without a skill update.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2244,2247,2248],{"name":2245,"slug":2246,"type":14},"Backend","backend",{"name":9,"slug":8,"type":14},{"name":2249,"slug":2250,"type":14},"Database","database","2026-08-04T05:33:40.321614",{"slug":2253,"name":2253,"fn":2254,"description":2255,"org":2256,"tags":2257,"stars":21,"repoUrl":22,"updatedAt":2263},"convex-add","add capabilities to Convex applications","Add a capability to the CURRENT Convex app — consults the served Convex capability catalog for always-current procedures (billing, crons, auth, agent, search, …); falls back to built-in hosting or @convex-dev component search. TRIGGER when the user runs \u002Fadd, or asks to add hosting\u002Fpublishing or any backend capability to an existing Convex app.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2258,2259,2260],{"name":2245,"slug":2246,"type":14},{"name":9,"slug":8,"type":14},{"name":2261,"slug":2262,"type":14},"Engineering","engineering","2026-08-04T05:58:58.661741",{"slug":2265,"name":2265,"fn":2266,"description":2267,"org":2268,"tags":2269,"stars":21,"repoUrl":22,"updatedAt":2280},"convex-advisor","analyze Convex deployment performance and costs","Read the Convex deployment's 72h insights (read limits, OCC contention), root-cause each event in code, report evidence-backed perf\u002Fcost findings with fixes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2270,2271,2274,2277],{"name":9,"slug":8,"type":14},{"name":2272,"slug":2273,"type":14},"Cost Optimization","cost-optimization",{"name":2275,"slug":2276,"type":14},"Observability","observability",{"name":2278,"slug":2279,"type":14},"Performance","performance","2026-08-04T05:58:45.241135",{"slug":2282,"name":2282,"fn":2283,"description":2284,"org":2285,"tags":2286,"stars":21,"repoUrl":22,"updatedAt":2297},"convex-agent","add AI agent backends to Convex","Add an AI agent \u002F RAG backend (@convex-dev\u002Fagent) to the Convex app.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2287,2290,2291,2294],{"name":2288,"slug":2289,"type":14},"Agents","agents",{"name":9,"slug":8,"type":14},{"name":2292,"slug":2293,"type":14},"LLM","llm",{"name":2295,"slug":2296,"type":14},"RAG","rag","2026-08-04T05:59:00.756304",{"slug":2299,"name":2299,"fn":2300,"description":2301,"org":2302,"tags":2303,"stars":21,"repoUrl":22,"updatedAt":2310},"convex-auth","add authentication to Convex applications","Add authentication (passkeys\u002FOAuth) to the current Convex app, including the auth.config.ts wiring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2304,2306,2309],{"name":2305,"slug":1125,"type":14},"Auth",{"name":2307,"slug":2308,"type":14},"Authentication","authentication",{"name":9,"slug":8,"type":14},"2026-08-04T05:58:59.175962",{"slug":2312,"name":2312,"fn":2313,"description":2314,"org":2315,"tags":2316,"stars":21,"repoUrl":22,"updatedAt":2325},"convex-backup","configure and test Convex database backups","Set up Convex backups and run a restore DRILL that proves recovery — snapshot, restore into a throwaway preview, assert the data came back — plus a schedule matched to your RPO and a gated recovery runbook.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2317,2320,2321,2322],{"name":2318,"slug":2319,"type":14},"Backup","backup",{"name":9,"slug":8,"type":14},{"name":2249,"slug":2250,"type":14},{"name":2323,"slug":2324,"type":14},"Reliability","reliability","2026-08-04T05:58:42.702643",{"slug":4,"name":4,"fn":5,"description":6,"org":2327,"tags":2328,"stars":21,"repoUrl":22,"updatedAt":23},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2329,2330,2331],{"name":9,"slug":8,"type":14},{"name":16,"slug":17,"type":14},{"name":19,"slug":20,"type":14},{"slug":2333,"name":2333,"fn":2334,"description":2335,"org":2336,"tags":2337,"stars":21,"repoUrl":22,"updatedAt":2343},"convex-cost","analyze and forecast Convex application costs","Preview Convex spend — rank functions by bytes\u002Fdocuments-read × call-volume from insights, project each cost driver's growth curve, name the cheapest fix; confirm-cost for paid actions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2338,2341,2342],{"name":2339,"slug":2340,"type":14},"Analytics","analytics",{"name":2272,"slug":2273,"type":14},{"name":2278,"slug":2279,"type":14},"2026-08-04T05:58:51.890215",{"slug":2345,"name":2345,"fn":2346,"description":2347,"org":2348,"tags":2349,"stars":21,"repoUrl":22,"updatedAt":2358},"convex-create-component","build reusable Convex components","Builds reusable Convex components with isolated tables and app-facing APIs. Use for new components, reusable backend modules, integrations, or component boundary work.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2350,2353,2356,2357],{"name":2351,"slug":2352,"type":14},"API Development","api-development",{"name":2354,"slug":2355,"type":14},"Architecture","architecture",{"name":2245,"slug":2246,"type":14},{"name":9,"slug":8,"type":14},"2026-07-12T08:00:39.428577",{"slug":2360,"name":2360,"fn":2361,"description":2362,"org":2363,"tags":2364,"stars":21,"repoUrl":22,"updatedAt":2372},"convex-crons","add scheduled cron jobs to Convex","Add recurring scheduled jobs (crons) to the Convex app.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2365,2368,2369],{"name":2366,"slug":2367,"type":14},"Automation","automation",{"name":9,"slug":8,"type":14},{"name":2370,"slug":2371,"type":14},"Scheduling","scheduling","2026-08-04T05:59:03.147387",{"slug":2374,"name":2374,"fn":2375,"description":2376,"org":2377,"tags":2378,"stars":21,"repoUrl":22,"updatedAt":2389},"convex-deploy-guard","manage Convex deployment safety and consent","Classify + announce the target Convex deployment before any deployment-affecting command; fresh explicit consent for prod actions; session read-only mode.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2379,2380,2383,2386],{"name":9,"slug":8,"type":14},{"name":2381,"slug":2382,"type":14},"Deployment","deployment",{"name":2384,"slug":2385,"type":14},"Operations","operations",{"name":2387,"slug":2388,"type":14},"Security","security","2026-08-04T05:58:55.830592",{"slug":2391,"name":2391,"fn":2392,"description":2393,"org":2394,"tags":2395,"stars":21,"repoUrl":22,"updatedAt":2403},"convex-design","build reactive backends with Convex","Design and build reactive, type-safe, production-grade backends on Convex. Covers schema, queries\u002Fmutations\u002Factions, indexes, auth, file storage, scheduling, real-time multiplayer, mobile backends, and LLM\u002Fagent workflows on Convex's one-platform stack.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2396,2397,2398,2399,2400],{"name":2305,"slug":1125,"type":14},{"name":2245,"slug":2246,"type":14},{"name":9,"slug":8,"type":14},{"name":2249,"slug":2250,"type":14},{"name":2401,"slug":2402,"type":14},"Realtime","realtime","2026-08-04T05:58:54.310662",50,{"items":2406,"total":2452},[2407,2413,2419,2426,2433,2439,2446],{"slug":8,"name":8,"fn":2240,"description":2241,"org":2408,"tags":2409,"stars":21,"repoUrl":22,"updatedAt":2251},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2410,2411,2412],{"name":2245,"slug":2246,"type":14},{"name":9,"slug":8,"type":14},{"name":2249,"slug":2250,"type":14},{"slug":2253,"name":2253,"fn":2254,"description":2255,"org":2414,"tags":2415,"stars":21,"repoUrl":22,"updatedAt":2263},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2416,2417,2418],{"name":2245,"slug":2246,"type":14},{"name":9,"slug":8,"type":14},{"name":2261,"slug":2262,"type":14},{"slug":2265,"name":2265,"fn":2266,"description":2267,"org":2420,"tags":2421,"stars":21,"repoUrl":22,"updatedAt":2280},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2422,2423,2424,2425],{"name":9,"slug":8,"type":14},{"name":2272,"slug":2273,"type":14},{"name":2275,"slug":2276,"type":14},{"name":2278,"slug":2279,"type":14},{"slug":2282,"name":2282,"fn":2283,"description":2284,"org":2427,"tags":2428,"stars":21,"repoUrl":22,"updatedAt":2297},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2429,2430,2431,2432],{"name":2288,"slug":2289,"type":14},{"name":9,"slug":8,"type":14},{"name":2292,"slug":2293,"type":14},{"name":2295,"slug":2296,"type":14},{"slug":2299,"name":2299,"fn":2300,"description":2301,"org":2434,"tags":2435,"stars":21,"repoUrl":22,"updatedAt":2310},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2436,2437,2438],{"name":2305,"slug":1125,"type":14},{"name":2307,"slug":2308,"type":14},{"name":9,"slug":8,"type":14},{"slug":2312,"name":2312,"fn":2313,"description":2314,"org":2440,"tags":2441,"stars":21,"repoUrl":22,"updatedAt":2325},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2442,2443,2444,2445],{"name":2318,"slug":2319,"type":14},{"name":9,"slug":8,"type":14},{"name":2249,"slug":2250,"type":14},{"name":2323,"slug":2324,"type":14},{"slug":4,"name":4,"fn":5,"description":6,"org":2447,"tags":2448,"stars":21,"repoUrl":22,"updatedAt":23},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2449,2450,2451],{"name":9,"slug":8,"type":14},{"name":16,"slug":17,"type":14},{"name":19,"slug":20,"type":14},30]