{"id":"373595de-7329-4e80-9369-35425f7b55df","shortId":"pPVpw2","kind":"skill","title":"Inngest","tagline":"Antigravity Awesome Skills skill by Sickn33","description":"# Inngest Integration\n\nInngest expert for serverless-first background jobs, event-driven workflows,\nand durable execution without managing queues or workers.\n\n## Principles\n\n- Events are the primitive - everything triggers from events, not queues\n- Steps are your checkpoints - each step result is durably stored\n- Sleep is not a hack - Inngest sleeps are real, not blocking threads\n- Retries are automatic - but you control the policy\n- Functions are just HTTP handlers - deploy anywhere that serves HTTP\n- Concurrency is a first-class concern - protect downstream services\n- Idempotency keys prevent duplicates - use them for critical operations\n- Fan-out is built-in - one event can trigger many functions\n\n## Capabilities\n\n- inngest-functions\n- event-driven-workflows\n- step-functions\n- serverless-background-jobs\n- durable-sleep\n- fan-out-patterns\n- concurrency-control\n- scheduled-functions\n\n## Scope\n\n- redis-queues -> bullmq-specialist\n- workflow-orchestration -> temporal-craftsman\n- message-streaming -> event-architect\n- infrastructure -> infra-architect\n\n## Tooling\n\n### Core\n\n- inngest\n- inngest-cli\n\n### Frameworks\n\n- nextjs\n- express\n- hono\n- remix\n- sveltekit\n\n### Deployment\n\n- vercel\n- cloudflare-workers\n- netlify\n- railway\n- fly-io\n\n### Patterns\n\n- step-functions\n- event-fan-out\n- scheduled-cron\n- webhook-handling\n\n## Patterns\n\n### Basic Function Setup\n\nInngest function with typed events in Next.js\n\n**When to use**: Starting with Inngest in any Next.js project\n\n// lib/inngest/client.ts\nimport { Inngest } from 'inngest';\n\nexport const inngest = new Inngest({\n  id: 'my-app',\n  schemas: new EventSchemas().fromRecord<Events>(),\n});\n\n// Define your events with types\ntype Events = {\n  'user/signed.up': { data: { userId: string; email: string } };\n  'order/placed': { data: { orderId: string; total: number } };\n};\n\n// lib/inngest/functions.ts\nimport { inngest } from './client';\n\nexport const sendWelcomeEmail = inngest.createFunction(\n  { id: 'send-welcome-email' },\n  { event: 'user/signed.up' },\n  async ({ event, step }) => {\n    // Step 1: Get user details\n    const user = await step.run('get-user', async () => {\n      return await db.users.findUnique({ where: { id: event.data.userId } });\n    });\n\n    // Step 2: Send welcome email\n    await step.run('send-email', async () => {\n      await resend.emails.send({\n        to: user.email,\n        subject: 'Welcome!',\n        template: 'welcome',\n      });\n    });\n\n    // Step 3: Wait 24 hours, then send tips\n    await step.sleep('wait-for-tips', '24h');\n\n    await step.run('send-tips', async () => {\n      await resend.emails.send({\n        to: user.email,\n        subject: 'Getting Started Tips',\n        template: 'tips',\n      });\n    });\n  }\n);\n\n// app/api/inngest/route.ts (Next.js App Router)\nimport { serve } from 'inngest/next';\nimport { inngest } from '@/lib/inngest/client';\nimport { sendWelcomeEmail } from '@/lib/inngest/functions';\n\nexport const { GET, POST, PUT } = serve({\n  client: inngest,\n  functions: [sendWelcomeEmail],\n});\n\n### Multi-Step Workflow\n\nComplex workflow with parallel steps and error handling\n\n**When to use**: Processing that involves multiple services or long waits\n\nexport const processOrder = inngest.createFunction(\n  {\n    id: 'process-order',\n    retries: 3,\n    concurrency: { limit: 10 },  // Max 10 orders processing at once\n  },\n  { event: 'order/placed' },\n  async ({ event, step }) => {\n    const { orderId } = event.data;\n\n    // Parallel steps - both run simultaneously\n    const [inventory, payment] = await Promise.all([\n      step.run('check-inventory', () => checkInventory(orderId)),\n      step.run('validate-payment', () => validatePayment(orderId)),\n    ]);\n\n    if (!inventory.available) {\n      // Send event instead of direct call (fan-out pattern)\n      await step.sendEvent('notify-backorder', {\n        name: 'order/backordered',\n        data: { orderId, items: inventory.missing },\n      });\n      return { status: 'backordered' };\n    }\n\n    // Process payment\n    const charge = await step.run('charge-payment', async () => {\n      return await stripe.charges.create({\n        amount: event.data.total,\n        customer: payment.customerId,\n      });\n    });\n\n    // Ship order\n    await step.run('ship-order', () => fulfillment.ship(orderId));\n\n    return { status: 'completed', chargeId: charge.id };\n  }\n);\n\n### Scheduled/Cron Functions\n\nFunctions that run on a schedule\n\n**When to use**: Recurring tasks like daily reports or cleanup jobs\n\nexport const dailyDigest = inngest.createFunction(\n  { id: 'daily-digest' },\n  { cron: '0 9 * * *' },  // Every day at 9am UTC\n  async ({ step }) => {\n    // Get all users who want digests\n    const users = await step.run('get-users', async () => {\n      return await db.users.findMany({\n        where: { digestEnabled: true },\n      });\n    });\n\n    // Send to each user (creates child events)\n    await step.sendEvent(\n      'send-digests',\n      users.map(user => ({\n        name: 'digest/send',\n        data: { userId: user.id },\n      }))\n    );\n\n    return { sent: users.length };\n  }\n);\n\n// Separate function handles individual digest sending\nexport const sendDigest = inngest.createFunction(\n  { id: 'send-digest', concurrency: { limit: 50 } },\n  { event: 'digest/send' },\n  async ({ event, step }) => {\n    // ... send individual digest\n  }\n);\n\n### Webhook Handler with Idempotency\n\nSafely process webhooks with deduplication\n\n**When to use**: Handling Stripe, GitHub, or other webhooks\n\nexport const handleStripeWebhook = inngest.createFunction(\n  {\n    id: 'stripe-webhook',\n    // Deduplicate by Stripe event ID\n    idempotency: 'event.data.stripeEventId',\n  },\n  { event: 'stripe/webhook.received' },\n  async ({ event, step }) => {\n    const { type, data } = event.data;\n\n    switch (type) {\n      case 'checkout.session.completed':\n        await step.run('fulfill-order', async () => {\n          await fulfillOrder(data.session.id);\n        });\n        break;\n\n      case 'customer.subscription.deleted':\n        await step.run('cancel-subscription', async () => {\n          await cancelSubscription(data.subscription.id);\n        });\n        break;\n    }\n  }\n);\n\n### AI Pipeline with Long Processing\n\nMulti-step AI processing with chunked work\n\n**When to use**: AI workflows that may take minutes to complete\n\nexport const processDocument = inngest.createFunction(\n  {\n    id: 'process-document',\n    retries: 2,\n    concurrency: { limit: 5 },  // Limit API usage\n  },\n  { event: 'document/uploaded' },\n  async ({ event, step }) => {\n    // Step 1: Extract text (may take a while)\n    const text = await step.run('extract-text', async () => {\n      return await extractTextFromPDF(event.data.fileUrl);\n    });\n\n    // Step 2: Chunk for embedding\n    const chunks = await step.run('chunk-text', async () => {\n      return chunkText(text, { maxTokens: 500 });\n    });\n\n    // Step 3: Generate embeddings (API rate limited)\n    const embeddings = await step.run('generate-embeddings', async () => {\n      return await openai.embeddings.create({\n        model: 'text-embedding-3-small',\n        input: chunks,\n      });\n    });\n\n    // Step 4: Store in vector DB\n    await step.run('store-vectors', async () => {\n      await vectorDb.upsert({\n        vectors: embeddings.data.map((e, i) => ({\n          id: `${event.data.documentId}-${i}`,\n          values: e.embedding,\n          metadata: { chunk: chunks[i] },\n        })),\n      });\n    });\n\n    return { chunks: chunks.length, status: 'indexed' };\n  }\n);\n\n## Validation Checks\n\n### Inngest serve handler present\n\nSeverity: CRITICAL\n\nMessage: Inngest requires a serve handler to receive events\n\nFix action: Create app/api/inngest/route.ts with serve() export\n\n### Functions registered with serve\n\nSeverity: ERROR\n\nMessage: Ensure all Inngest functions are registered in the serve() call\n\nFix action: Add function to the functions array in serve()\n\n### Step.run has descriptive name\n\nSeverity: WARNING\n\nMessage: Step names should be kebab-case and descriptive\n\nFix action: Use descriptive step names like 'fetch-user' or 'send-email'\n\n### waitForEvent has timeout\n\nSeverity: ERROR\n\nMessage: waitForEvent should have a timeout to prevent infinite waits\n\nFix action: Add timeout option: { timeout: '24h' }\n\n### Function has concurrency limit\n\nSeverity: WARNING\n\nMessage: Consider adding concurrency limits to protect downstream services\n\nFix action: Add concurrency: { limit: 10 } to function config\n\n### Event types defined\n\nSeverity: WARNING\n\nMessage: Inngest client should define event schemas for type safety\n\nFix action: Add schemas: new EventSchemas().fromRecord<Events>()\n\n### Function has unique ID\n\nSeverity: CRITICAL\n\nMessage: Every Inngest function must have a unique ID\n\nFix action: Add id: 'my-function-name' to function config\n\n### Sleep uses duration string\n\nSeverity: WARNING\n\nMessage: step.sleep should use duration strings like '1h' or '30m', not milliseconds\n\nFix action: Use duration string: step.sleep('wait', '1h')\n\n### Retry policy configured\n\nSeverity: WARNING\n\nMessage: Consider configuring retry policy for failure handling\n\nFix action: Add retries: 3 or retries: { attempts: 3, backoff: { ... } }\n\n### Idempotency key for payment functions\n\nSeverity: ERROR\n\nMessage: Payment-related functions should use idempotency keys\n\nFix action: Add idempotency: 'event.data.orderId' to function config\n\n## Collaboration\n\n### Delegation Triggers\n\n- redis|queue infrastructure|bullmq -> bullmq-specialist (Need Redis-based queue with existing infrastructure)\n- saga|compensation|rollback|long-running workflow -> temporal-craftsman (Need complex workflow orchestration with compensation)\n- event sourcing|event store|cqrs -> event-architect (Need event sourcing patterns)\n- vercel|deploy|production -> vercel-deployment (Need deployment configuration)\n- database|schema|data model -> supabase-backend (Need database for event data)\n- api|endpoint|route -> backend (Need API to trigger events)\n\n### Vercel Background Jobs\n\nSkills: inngest, nextjs-app-router, vercel-deployment\n\nWorkflow:\n\n```\n1. Define Inngest functions (inngest)\n2. Set up serve handler in Next.js (nextjs-app-router)\n3. Configure function timeouts (vercel-deployment)\n4. Deploy and test (vercel-deployment)\n```\n\n### AI Pipeline\n\nSkills: inngest, ai-agents-architect, supabase-backend\n\nWorkflow:\n\n```\n1. Design AI workflow steps (ai-agents-architect)\n2. Implement with Inngest durability (inngest)\n3. Store results in database (supabase-backend)\n4. Handle retries for API failures (inngest)\n```\n\n### Webhook Processing\n\nSkills: inngest, stripe-integration, backend\n\nWorkflow:\n\n```\n1. Receive webhook (backend)\n2. Send to Inngest with idempotency (inngest)\n3. Process payment logic (stripe-integration)\n4. Update application state (backend)\n```\n\n### Email Automation\n\nSkills: inngest, email-systems, supabase-backend\n\nWorkflow:\n\n```\n1. Trigger event from user action (inngest)\n2. Schedule drip emails with step.sleep (inngest)\n3. Send emails with retry (email-systems)\n4. Track email status (supabase-backend)\n```\n\n### Scheduled Tasks\n\nSkills: inngest, backend, analytics-architecture\n\nWorkflow:\n\n```\n1. Define cron triggers (inngest)\n2. Implement processing logic (backend)\n3. Aggregate and report data (analytics-architecture)\n4. Handle failures with alerting (inngest)\n```\n\n## Related Skills\n\nWorks well with: `nextjs-app-router`, `vercel-deployment`, `supabase-backend`, `email-systems`, `ai-agents-architect`, `stripe-integration`\n\n## When to Use\n- User mentions or implies: inngest\n- User mentions or implies: serverless background job\n- User mentions or implies: event-driven workflow\n- User mentions or implies: step function\n- User mentions or implies: durable execution\n- User mentions or implies: vercel background job\n- User mentions or implies: scheduled function\n- User mentions or implies: fan out\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["inngest","antigravity","awesome","skills","sickn33"],"capabilities":["skill","source-sickn33","category-antigravity-awesome-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/inngest","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"install_from":"skills.sh"}},"qualityScore":"0.300","qualityRationale":"deterministic score 0.30 from registry signals: · indexed on skills.sh · published under sickn33/antigravity-awesome-skills","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill:v1","enrichmentVersion":1,"enrichedAt":"2026-04-25T09:40:43.701Z","embedding":null,"createdAt":"2026-04-18T20:35:35.768Z","updatedAt":"2026-04-25T09:40:43.701Z","lastSeenAt":"2026-04-25T09:40:43.701Z","tsv":"'/client':262 '/lib/inngest/client':357 '/lib/inngest/functions':361 '0':529 '1':278,719,1151,1193,1232,1266,1304 '10':407,409,937 '1h':1002,1014 '2':297,706,739,1156,1202,1236,1273,1309 '24':318 '24h':329,916 '3':316,404,757,778,1032,1036,1167,1208,1243,1280,1314 '30m':1004 '4':783,1174,1216,1250,1288,1322 '5':709 '50':596 '500':755 '9':530 '9am':534 'action':832,856,882,911,933,957,979,1008,1029,1055,1271 'ad':925 'add':857,912,934,958,980,1030,1056 'agent':1187,1200,1348 'aggreg':1315 'ai':673,681,689,1181,1186,1195,1199,1347 'ai-agents-architect':1185,1198,1346 'alert':1326 'amount':483 'analyt':1301,1320 'analytics-architectur':1300,1319 'antigrav':2 'anywher':77 'api':711,760,1129,1134,1220 'app':234,348,1145,1165,1335 'app/api/inngest/route.ts':346,834 'applic':1252 'architect':159,163,1103,1188,1201,1349 'architectur':1302,1321 'array':862 'ask':1440 'async':274,289,306,335,416,479,536,551,599,640,656,668,715,733,750,770,793 'attempt':1035 'autom':1256 'automat':65 'await':284,291,301,307,323,330,336,430,456,474,481,489,546,553,565,651,657,663,669,728,735,745,765,772,788,794 'awesom':3 'backend':1123,1132,1191,1215,1230,1235,1254,1264,1294,1299,1313,1342 'background':16,126,1139,1366,1393 'backoff':1037 'backord':460,469 'base':1075 'basic':201 'block':61 'boundari':1448 'break':660,672 'built':105 'built-in':104 'bullmq':146,1068,1070 'bullmq-specialist':145,1069 'call':451,854 'cancel':666 'cancel-subscript':665 'cancelsubscript':670 'capabl':113 'case':649,661,878 'category-antigravity-awesome-skills' 'charg':473,477 'charge-pay':476 'charge.id':500 'chargeid':499 'check':434,815 'check-inventori':433 'checkinventori':436 'checkout.session.completed':650 'checkpoint':44 'child':563 'chunk':684,740,744,748,781,806,807,810 'chunk-text':747 'chunks.length':811 'chunktext':752 'clarif':1442 'class':86 'cleanup':518 'clear':1415 'cli':169 'client':368,948 'cloudflar':179 'cloudflare-work':178 'collabor':1062 'compens':1081,1095 'complet':498,696 'complex':376,1091 'concern':87 'concurr':81,136,405,594,707,919,926,935 'concurrency-control':135 'config':940,988,1061 'configur':1017,1022,1116,1168 'consid':924,1021 'const':227,264,282,363,396,419,427,472,521,544,587,624,643,698,726,743,763 'control':68,137 'core':165 'cqrs':1100 'craftsman':153,1089 'creat':562,833 'criteria':1451 'critic':98,821,968 'cron':196,528,1306 'custom':485 'customer.subscription.deleted':662 'daili':515,526 'daily-digest':525 'dailydigest':522 'data':247,253,463,574,645,1119,1128,1318 'data.session.id':659 'data.subscription.id':671 'databas':1117,1125,1212 'day':532 'db':787 'db.users.findmany':554 'db.users.findunique':292 'dedupl':613,631 'defin':239,943,950,1152,1305 'deleg':1063 'deploy':76,176,1109,1113,1115,1149,1173,1175,1180,1339 'describ':1419 'descript':867,880,884 'design':1194 'detail':281 'digest':527,543,569,584,593,604 'digest/send':573,598 'digesten':556 'direct':450 'document':704 'document/uploaded':714 'downstream':89,930 'drip':1275 'driven':20,119,1374 'duplic':94 'durabl':23,49,129,1206,1386 'durable-sleep':128 'durat':991,999,1010 'e':798 'e.embedding':804 'email':250,271,300,305,894,1255,1260,1276,1282,1286,1290,1344 'email-system':1259,1285,1343 'embed':742,759,764,769,777 'embeddings.data.map':797 'endpoint':1130 'ensur':845 'environ':1431 'environment-specif':1430 'error':382,843,899,1044 'event':19,31,38,108,118,158,191,208,241,245,272,275,414,417,447,564,597,600,634,638,641,713,716,830,941,951,1096,1098,1102,1105,1127,1137,1268,1373 'event-architect':157,1101 'event-driven':18,1372 'event-driven-workflow':117 'event-fan-out':190 'event.data':421,646 'event.data.documentid':801 'event.data.fileurl':737 'event.data.orderid':1058 'event.data.stripeeventid':637 'event.data.total':484 'event.data.userid':295 'eventschema':237,961 'everi':531,970 'everyth':35 'execut':24,1387 'exist':1078 'expert':11,1436 'export':226,263,362,395,520,586,623,697,837 'express':172 'extract':720,731 'extract-text':730 'extracttextfrompdf':736 'failur':1026,1221,1324 'fan':101,132,192,453,1405 'fan-out':100,452 'fan-out-pattern':131 'fetch':889 'fetch-us':888 'first':15,85 'first-class':84 'fix':831,855,881,910,932,956,978,1007,1028,1054 'fli':184 'fly-io':183 'framework':170 'fromrecord':238,962 'fulfil':654 'fulfill-ord':653 'fulfillment.ship':494 'fulfillord':658 'function':71,112,116,123,140,189,202,205,370,502,503,581,838,848,858,861,917,939,963,972,984,987,1042,1049,1060,1154,1169,1381,1400 'generat':758,768 'generate-embed':767 'get':279,287,341,364,538,549 'get-us':286,548 'github':619 'hack':55 'handl':199,383,582,617,1027,1217,1323 'handler':75,606,818,827,1160 'handlestripewebhook':625 'hono':173 'hour':319 'http':74,80 'id':231,267,294,399,524,590,627,635,701,800,966,977,981 'idempot':91,608,636,1038,1052,1057,1241 'implement':1203,1310 'impli':1359,1364,1371,1379,1385,1391,1398,1404 'import':222,259,350,354,358 'index':813 'individu':583,603 'infinit':908 'infra':162 'infra-architect':161 'infrastructur':160,1067,1079 'inngest':1,8,10,56,115,166,168,204,216,223,225,228,230,260,355,369,816,823,847,947,971,1142,1153,1155,1184,1205,1207,1222,1226,1239,1242,1258,1272,1279,1298,1308,1327,1360 'inngest-c':167 'inngest-funct':114 'inngest.createfunction':266,398,523,589,626,700 'inngest/next':353 'input':780,1445 'instead':448 'integr':9,1229,1249,1352 'inventori':428,435 'inventory.available':445 'inventory.missing':466 'involv':389 'io':185 'item':465 'job':17,127,519,1140,1367,1394 'kebab':877 'kebab-cas':876 'key':92,1039,1053 'lib/inngest/client.ts':221 'lib/inngest/functions.ts':258 'like':514,887,1001 'limit':406,595,708,710,762,920,927,936,1407 'logic':1246,1312 'long':393,676,1084 'long-run':1083 'manag':26 'mani':111 'match':1416 'max':408 'maxtoken':754 'may':692,722 'mention':1357,1362,1369,1377,1383,1389,1396,1402 'messag':155,822,844,871,900,923,946,969,995,1020,1045 'message-stream':154 'metadata':805 'millisecond':1006 'minut':694 'miss':1453 'model':774,1120 'multi':373,679 'multi-step':372,678 'multipl':390 'must':973 'my-app':232 'my-function-nam':982 'name':461,572,868,873,886,985 'need':1072,1090,1104,1114,1124,1133 'netlifi':181 'new':229,236,960 'next.js':210,219,347,1162 'nextj':171,1144,1164,1334 'nextjs-app-rout':1143,1163,1333 'notifi':459 'notify-backord':458 'number':257 'one':107 'openai.embeddings.create':773 'oper':99 'option':914 'orchestr':150,1093 'order':402,410,488,493,655 'order/backordered':462 'order/placed':252,415 'orderid':254,420,437,443,464,495 'output':1425 'parallel':379,422 'pattern':134,186,200,455,1107 'payment':429,441,471,478,1041,1047,1245 'payment-rel':1046 'payment.customerid':486 'permiss':1446 'pipelin':674,1182 'polici':70,1016,1024 'post':365 'present':819 'prevent':93,907 'primit':34 'principl':30 'process':387,401,411,470,610,677,682,703,1224,1244,1311 'process-docu':702 'process-ord':400 'processdocu':699 'processord':397 'product':1110 'project':220 'promise.all':431 'protect':88,929 'put':366 'queue':27,40,144,1066,1076 'railway':182 'rate':761 'real':59 'receiv':829,1233 'recur':512 'redi':143,1065,1074 'redis-bas':1073 'redis-queu':142 'regist':839,850 'relat':1048,1328 'remix':174 'report':516,1317 'requir':824,1444 'resend.emails.send':308,337 'result':47,1210 'retri':63,403,705,1015,1023,1031,1034,1218,1284 'return':290,467,480,496,552,577,734,751,771,809 'review':1437 'rollback':1082 'rout':1131 'router':349,1146,1166,1336 'run':425,505,1085 'safe':609 'safeti':955,1447 'saga':1080 'schedul':139,195,508,1274,1295,1399 'scheduled-cron':194 'scheduled-funct':138 'scheduled/cron':501 'schema':235,952,959,1118 'scope':141,1418 'send':269,298,304,321,333,446,558,568,585,592,602,893,1237,1281 'send-digest':567,591 'send-email':303,892 'send-tip':332 'send-welcome-email':268 'senddigest':588 'sendwelcomeemail':265,359,371 'sent':578 'separ':580 'serv':79,351,367,817,826,836,841,853,864,1159 'serverless':14,125,1365 'serverless-background-job':124 'serverless-first':13 'servic':90,391,931 'set':1157 'setup':203 'sever':820,842,869,898,921,944,967,993,1018,1043 'ship':487,492 'ship-ord':491 'sickn33':7 'simultan':426 'skill':4,5,1141,1183,1225,1257,1297,1329,1410 'sleep':51,57,130,989 'small':779 'sourc':1097,1106 'source-sickn33' 'specialist':147,1071 'specif':1432 'start':214,342 'state':1253 'status':468,497,812,1291 'step':41,46,122,188,276,277,296,315,374,380,418,423,537,601,642,680,717,718,738,756,782,872,885,1197,1380 'step-funct':121,187 'step.run':285,302,331,432,438,475,490,547,652,664,729,746,766,789,865 'step.sendevent':457,566 'step.sleep':324,996,1012,1278 'stop':1438 'store':50,784,791,1099,1209 'store-vector':790 'stream':156 'string':249,251,255,992,1000,1011 'stripe':618,629,633,1228,1248,1351 'stripe-integr':1227,1247,1350 'stripe-webhook':628 'stripe.charges.create':482 'stripe/webhook.received':639 'subject':311,340 'subscript':667 'substitut':1428 'success':1450 'supabas':1122,1190,1214,1263,1293,1341 'supabase-backend':1121,1189,1213,1262,1292,1340 'sveltekit':175 'switch':647 'system':1261,1287,1345 'take':693,723 'task':513,1296,1414 'templat':313,344 'tempor':152,1088 'temporal-craftsman':151,1087 'test':1177,1434 'text':721,727,732,749,753,776 'text-embed':775 'thread':62 'timeout':897,905,913,915,1170 'tip':322,328,334,343,345 'tool':164 'total':256 'track':1289 'treat':1423 'trigger':36,110,1064,1136,1267,1307 'true':557 'type':207,243,244,644,648,942,954 'uniqu':965,976 'updat':1251 'usag':712 'use':95,213,386,511,616,688,883,990,998,1009,1051,1355,1408 'user':280,283,288,540,545,550,561,571,890,1270,1356,1361,1368,1376,1382,1388,1395,1401 'user.email':310,339 'user.id':576 'user/signed.up':246,273 'userid':248,575 'users.length':579 'users.map':570 'utc':535 'valid':440,814,1433 'validate-pay':439 'validatepay':442 'valu':803 'vector':786,792,796 'vectordb.upsert':795 'vercel':177,1108,1112,1138,1148,1172,1179,1338,1392 'vercel-deploy':1111,1147,1171,1178,1337 'wait':317,326,394,909,1013 'wait-for-tip':325 'waitforev':895,901 'want':542 'warn':870,922,945,994,1019 'webhook':198,605,611,622,630,1223,1234 'webhook-handl':197 'welcom':270,299,312,314 'well':1331 'without':25 'work':685,1330 'worker':29,180 'workflow':21,120,149,375,377,690,1086,1092,1150,1192,1196,1231,1265,1303,1375 'workflow-orchestr':148","prices":[{"id":"21f1efd6-011d-4171-94ef-8d41eea0a7b6","listingId":"373595de-7329-4e80-9369-35425f7b55df","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:35:35.768Z"}],"sources":[{"listingId":"373595de-7329-4e80-9369-35425f7b55df","source":"github","sourceId":"sickn33/antigravity-awesome-skills/inngest","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/inngest","isPrimary":false,"firstSeenAt":"2026-04-18T21:39:09.188Z","lastSeenAt":"2026-04-25T06:51:21.041Z"},{"listingId":"373595de-7329-4e80-9369-35425f7b55df","source":"skills_sh","sourceId":"sickn33/antigravity-awesome-skills/inngest","sourceUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/inngest","isPrimary":true,"firstSeenAt":"2026-04-18T20:35:35.768Z","lastSeenAt":"2026-04-25T09:40:43.701Z"}],"details":{"listingId":"373595de-7329-4e80-9369-35425f7b55df","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"inngest","source":"skills_sh","category":"antigravity-awesome-skills","skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/inngest"},"updatedAt":"2026-04-25T09:40:43.701Z"}}