Agent docs examples (#1706)
* Uses image cards for the frameworks
* Removes old snippets
* New AI agents side menu section
* WIP adding new ai agent pages
* Better overview page
* More copy added to the agent example pages
* Copy improvements
* Removes “Creating a project” page and side menu section
* Fixes broken links
* Updates to the latest Mintlify version, fixes issues, changes theme
* Adds descriptions to the main dropdown menu items
* Reformatted Introduction docs ‘landing page’
* Retry heartbeat timeouts by putting back in the queue (#1689)
* If there’s a heartbeat error and no attempts we put it back in the queue to try again
* When nacking, return whether it was put back in the queue or not
* Try and nack, if it fails then fail the run
* Consolidated switch statement
* Fail executing/retrying runs
* OOM retrying on larger machines (#1691)
* OOM retrying on larger machines
* Create forty-windows-shop.md
* Update forty-windows-shop.md
* Only retry again if the machine is different from the original
* Kubernetes OOMs appear as non-zero sigkills, adding support for treating these as OOMs
* Complete the original attempt span if retrying due to an OOM
* Revert "Complete the original attempt span if retrying due to an OOM"
This reverts commit 5f652c6212.
* chore: Update version for release (#1666)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Release 3.3.14
* Set machine when triggering docs
* Batch queue runs that are waiting for deploy (#1693)
* Detect ffmpeg OOM errors, added manual OutOfMemoryError (#1694)
* Detect ffmpeg OOM errors, added manual OutOfMemoryError
* Create eighty-spies-knock.md
* Improved the machines docs, including the new OutOfMemoryError
* chore: Update version for release (#1695)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Release 3.3.15
* Create new partitioned TaskEvent table, and switch to it gradually as new runs are created (#1696)
* Create new partitioned TaskEvent table, and switch to it gradually as new runs are created
* Add env var for partition window in seconds
* Make startCreatedAt required in task event store
* Don't create an attempt if the run is final, batchTriggerAndWait bad continue fix (#1698)
* WIP fix for ResumeAttemptService selecting the wrong attempt (which has no error or output)
* Don’t create an attempt if the run is already in a final status
* Don’t get all the columns for the query. Improved the logging.
* Added a log to the batch example
* Filter out the undefined values
* Fix missing logs on child runs by using the root task run createdAt if it exists (#1697)
* Provider changes to support image cache (#1700)
* add env var for additional pull secrets
* make static images configurable
* optional image prefixes
* optional labels with sample rates
* add missing core paths
* remove excessive logs
* Fix run container exits after OOM retries (#1701)
* remove unused imports
* tell run to exit before force requeue
* handle exit for case where we already retried after oom
* improve retry span and add machine props
* don't try to exit run in dev
* Upgrade local dev to use electric beta.15 (#1699)
* Text fixes
* Removed pnpm files
---------
Co-authored-by: Matt Aitken <matt@mattaitken.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Eric Allam <eric@trigger.dev>
Co-authored-by: nicktrn <55853254+nicktrn@users.noreply.github.com>
@@ -0,0 +1,484 @@
|
||||
{
|
||||
"$schema": "https://mintlify.com/docs.json",
|
||||
"theme": "maple",
|
||||
"name": "Trigger.dev",
|
||||
"description": "Trigger.dev is an open source background jobs framework that lets you write reliable workflows in plain async code. Run long-running AI tasks, handle complex background jobs, and build AI agents with built-in queuing, automatic retries, and real-time monitoring. No timeouts, elastic scaling, and zero infrastructure management required.",
|
||||
"colors": {
|
||||
"primary": "#A8FF53",
|
||||
"light": "#A8FF53",
|
||||
"dark": "#A8FF53"
|
||||
},
|
||||
"favicon": "/images/favicon.png",
|
||||
"navigation": {
|
||||
"dropdowns": [
|
||||
{
|
||||
"dropdown": "Documentation",
|
||||
"description": "Resources for Trigger.dev",
|
||||
"icon": "book-open",
|
||||
"groups": [
|
||||
{
|
||||
"group": "Getting started",
|
||||
"pages": ["introduction", "quick-start", "video-walkthrough", "how-it-works", "limits"]
|
||||
},
|
||||
{
|
||||
"group": "Fundamentals",
|
||||
"pages": [
|
||||
{
|
||||
"group": "Tasks",
|
||||
"pages": ["tasks/overview", "tasks/schemaTask", "tasks/scheduled"]
|
||||
},
|
||||
"triggering",
|
||||
"runs",
|
||||
"apikeys",
|
||||
{
|
||||
"group": "Configuration",
|
||||
"pages": ["config/config-file", "config/extensions/overview"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Development",
|
||||
"pages": ["cli-dev", "run-tests"]
|
||||
},
|
||||
{
|
||||
"group": "Deployment",
|
||||
"pages": [
|
||||
"cli-deploy",
|
||||
"deploy-environment-variables",
|
||||
"github-actions",
|
||||
{
|
||||
"group": "Deployment integrations",
|
||||
"pages": ["vercel-integration"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Writing tasks",
|
||||
"pages": [
|
||||
"writing-tasks-introduction",
|
||||
"logging",
|
||||
"errors-retrying",
|
||||
{
|
||||
"group": "Wait",
|
||||
"pages": ["wait", "wait-for", "wait-until", "wait-for-event", "wait-for-request"]
|
||||
},
|
||||
"queue-concurrency",
|
||||
"versioning",
|
||||
"machines",
|
||||
"idempotency",
|
||||
"replaying",
|
||||
"runs/max-duration",
|
||||
"tags",
|
||||
"runs/metadata",
|
||||
"run-usage",
|
||||
"context",
|
||||
"bulk-actions",
|
||||
"examples"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Frontend usage",
|
||||
"pages": [
|
||||
"frontend/overview",
|
||||
{
|
||||
"group": "React hooks",
|
||||
"pages": [
|
||||
"frontend/react-hooks/overview",
|
||||
"frontend/react-hooks/realtime",
|
||||
"frontend/react-hooks/triggering"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Realtime API",
|
||||
"pages": [
|
||||
"realtime/overview",
|
||||
"realtime/streams",
|
||||
"realtime/react-hooks",
|
||||
"realtime/subscribe-to-run",
|
||||
"realtime/subscribe-to-runs-with-tag",
|
||||
"realtime/subscribe-to-batch"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "API reference",
|
||||
"pages": [
|
||||
"management/overview",
|
||||
{
|
||||
"group": "Tasks API",
|
||||
"pages": ["management/tasks/trigger", "management/tasks/batch-trigger"]
|
||||
},
|
||||
{
|
||||
"group": "Runs API",
|
||||
"pages": [
|
||||
"management/runs/list",
|
||||
"management/runs/retrieve",
|
||||
"management/runs/replay",
|
||||
"management/runs/cancel",
|
||||
"management/runs/reschedule",
|
||||
"management/runs/update-metadata"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Schedules API",
|
||||
"pages": [
|
||||
"management/schedules/list",
|
||||
"management/schedules/create",
|
||||
"management/schedules/retrieve",
|
||||
"management/schedules/update",
|
||||
"management/schedules/delete",
|
||||
"management/schedules/deactivate",
|
||||
"management/schedules/activate",
|
||||
"management/schedules/timezones"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Env Vars API",
|
||||
"pages": [
|
||||
"management/envvars/list",
|
||||
"management/envvars/import",
|
||||
"management/envvars/create",
|
||||
"management/envvars/retrieve",
|
||||
"management/envvars/update",
|
||||
"management/envvars/delete"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Projects API",
|
||||
"pages": ["management/projects/runs"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "CLI",
|
||||
"pages": [
|
||||
"cli-introduction",
|
||||
{
|
||||
"group": "Commands",
|
||||
"pages": [
|
||||
"cli-login-commands",
|
||||
"cli-init-commands",
|
||||
"cli-dev-commands",
|
||||
"cli-deploy-commands",
|
||||
"cli-whoami-commands",
|
||||
"cli-logout-commands",
|
||||
"cli-list-profiles-commands",
|
||||
"cli-update-commands"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Open source",
|
||||
"pages": [
|
||||
"open-source-self-hosting",
|
||||
"open-source-contributing",
|
||||
"github-repo",
|
||||
"changelog",
|
||||
"roadmap"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Troubleshooting",
|
||||
"pages": [
|
||||
"troubleshooting",
|
||||
"upgrading-packages",
|
||||
"upgrading-beta",
|
||||
"troubleshooting-alerts",
|
||||
"troubleshooting-uptime-status",
|
||||
"troubleshooting-github-issues",
|
||||
"request-feature"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Help",
|
||||
"pages": ["community", "help-slack", "help-email"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dropdown": "Guides & examples",
|
||||
"description": "A great way to get started",
|
||||
"icon": "book",
|
||||
"groups": [
|
||||
{
|
||||
"group": "Introduction",
|
||||
"pages": ["guides/introduction"]
|
||||
},
|
||||
{
|
||||
"group": "Frameworks",
|
||||
"pages": [
|
||||
"guides/frameworks/bun",
|
||||
"guides/frameworks/nextjs",
|
||||
"guides/frameworks/nodejs",
|
||||
"guides/frameworks/remix"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Guides",
|
||||
"pages": [
|
||||
{
|
||||
"group": "AI Agents",
|
||||
"icon": {
|
||||
"name": "microchip-ai",
|
||||
"style": "regular"
|
||||
},
|
||||
"pages": [
|
||||
"guides/ai-agents/overview",
|
||||
"guides/ai-agents/generate-translate-copy",
|
||||
"guides/ai-agents/route-question",
|
||||
"guides/ai-agents/respond-and-check-content",
|
||||
"guides/ai-agents/verify-news-article",
|
||||
"guides/ai-agents/translate-and-refine"
|
||||
]
|
||||
},
|
||||
"guides/frameworks/drizzle",
|
||||
"guides/frameworks/prisma",
|
||||
"guides/frameworks/sequin",
|
||||
{
|
||||
"group": "Supabase",
|
||||
"icon": {
|
||||
"name": "bolt",
|
||||
"style": "solid"
|
||||
},
|
||||
"pages": [
|
||||
"guides/frameworks/supabase-guides-overview",
|
||||
"guides/frameworks/supabase-edge-functions-basic",
|
||||
"guides/frameworks/supabase-edge-functions-database-webhooks"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Webhooks",
|
||||
"icon": {
|
||||
"name": "webhook",
|
||||
"style": "solid"
|
||||
},
|
||||
"pages": [
|
||||
"guides/frameworks/webhooks-guides-overview",
|
||||
"guides/frameworks/nextjs-webhooks",
|
||||
"guides/frameworks/remix-webhooks",
|
||||
"guides/examples/stripe-webhook"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Example projects",
|
||||
"pages": [
|
||||
"guides/example-projects/realtime-fal-ai",
|
||||
"guides/example-projects/batch-llm-evaluator",
|
||||
"guides/example-projects/realtime-csv-importer",
|
||||
"guides/example-projects/vercel-ai-sdk-image-generator"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Example tasks",
|
||||
"pages": [
|
||||
"guides/examples/dall-e3-generate-image",
|
||||
"guides/examples/deepgram-transcribe-audio",
|
||||
"guides/examples/fal-ai-image-to-cartoon",
|
||||
"guides/examples/fal-ai-realtime",
|
||||
"guides/examples/ffmpeg-video-processing",
|
||||
"guides/examples/firecrawl-url-crawl",
|
||||
"guides/examples/libreoffice-pdf-conversion",
|
||||
"guides/examples/open-ai-with-retrying",
|
||||
"guides/examples/pdf-to-image",
|
||||
"guides/examples/puppeteer",
|
||||
"guides/examples/scrape-hacker-news",
|
||||
"guides/examples/sentry-error-tracking",
|
||||
"guides/examples/sharp-image-processing",
|
||||
"guides/examples/supabase-database-operations",
|
||||
"guides/examples/supabase-storage-upload",
|
||||
"guides/examples/react-pdf",
|
||||
"guides/examples/resend-email-sequence",
|
||||
"guides/examples/vercel-ai-sdk",
|
||||
"guides/examples/vercel-sync-env-vars"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Migrations",
|
||||
"pages": ["guides/use-cases/upgrading-from-v2"]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"logo": {
|
||||
"light": "/logo/light.png",
|
||||
"dark": "/logo/dark.png",
|
||||
"href": "https://trigger.dev"
|
||||
},
|
||||
"api": {
|
||||
"openapi": ["openapi.yml", "v3-openapi.yaml"],
|
||||
"playground": {
|
||||
"display": "simple"
|
||||
}
|
||||
},
|
||||
"appearance": {
|
||||
"default": "dark",
|
||||
"strict": true
|
||||
},
|
||||
"background": {
|
||||
"color": {
|
||||
"light": "#fff",
|
||||
"dark": "#121317"
|
||||
}
|
||||
},
|
||||
"navbar": {
|
||||
"primary": {
|
||||
"type": "github",
|
||||
"href": "https://github.com/triggerdotdev/trigger.dev"
|
||||
}
|
||||
},
|
||||
"footer": {
|
||||
"socials": {
|
||||
"x": "https://twitter.com/triggerdotdev",
|
||||
"github": "https://github.com/triggerdotdev",
|
||||
"linkedin": "https://www.linkedin.com/company/triggerdotdev"
|
||||
},
|
||||
"links": [
|
||||
{
|
||||
"header": "Developers",
|
||||
"items": [
|
||||
{
|
||||
"label": "Changelog",
|
||||
"href": "https://trigger.dev/changelog"
|
||||
},
|
||||
{
|
||||
"label": "Contributing",
|
||||
"href": "https://github.com/triggerdotdev/trigger.dev/blob/main/CONTRIBUTING.md"
|
||||
},
|
||||
{
|
||||
"label": "Open source",
|
||||
"href": "https://github.com/triggerdotdev/trigger.dev?tab=Apache-2.0-1-ov-file#readme"
|
||||
},
|
||||
{
|
||||
"label": "GitHub",
|
||||
"href": "https://github.com/triggerdotdev/trigger.dev"
|
||||
},
|
||||
{
|
||||
"label": "OSS Friends",
|
||||
"href": "https://trigger.dev/oss-friends"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"header": "Product",
|
||||
"items": [
|
||||
{
|
||||
"label": "Pricing",
|
||||
"href": "https://trigger.dev/pricing"
|
||||
},
|
||||
{
|
||||
"label": "How it works",
|
||||
"href": "https://trigger.dev/#how-it-works"
|
||||
},
|
||||
{
|
||||
"label": "Features",
|
||||
"href": "https://trigger.dev/product"
|
||||
},
|
||||
{
|
||||
"label": "Roadmap",
|
||||
"href": "https://feedback.trigger.dev/roadmap"
|
||||
},
|
||||
{
|
||||
"label": "FAQs",
|
||||
"href": "https://trigger.dev/pricing#faqs"
|
||||
},
|
||||
{
|
||||
"label": "Uptime status",
|
||||
"href": "https://status.trigger.dev/"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"header": "Company",
|
||||
"items": [
|
||||
{
|
||||
"label": "Blog",
|
||||
"href": "https://trigger.dev/blog"
|
||||
},
|
||||
{
|
||||
"label": "Contact",
|
||||
"href": "https://trigger.dev/contact"
|
||||
},
|
||||
{
|
||||
"label": "Careers",
|
||||
"href": "https://trigger.dev/jobs"
|
||||
},
|
||||
{
|
||||
"label": "Privacy",
|
||||
"href": "https://trigger.dev/legal/privacy"
|
||||
},
|
||||
{
|
||||
"label": "Terms of service",
|
||||
"href": "https://trigger.dev/legal"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"redirects": [
|
||||
{
|
||||
"source": "/v3/feature-matrix",
|
||||
"destination": "https://feedback.trigger.dev/roadmap"
|
||||
},
|
||||
{
|
||||
"source": "/v3/upgrading-from-v2",
|
||||
"destination": "/guides/use-cases/upgrading-from-v2"
|
||||
},
|
||||
{
|
||||
"source": "/v3/open-source-self-hosting",
|
||||
"destination": "/open-source-self-hosting"
|
||||
},
|
||||
{
|
||||
"source": "/v3/:slug*",
|
||||
"destination": "/:slug*"
|
||||
},
|
||||
{
|
||||
"source": "/reattempting-replaying",
|
||||
"destination": "/replaying"
|
||||
},
|
||||
{
|
||||
"source": "/tasks-overview",
|
||||
"destination": "/tasks/overview"
|
||||
},
|
||||
{
|
||||
"source": "/tasks-scheduled",
|
||||
"destination": "/tasks/scheduled"
|
||||
},
|
||||
{
|
||||
"source": "/trigger-folder",
|
||||
"destination": "/config/config-file"
|
||||
},
|
||||
{
|
||||
"source": "/trigger-config",
|
||||
"destination": "/config/config-file"
|
||||
},
|
||||
{
|
||||
"source": "/guides/frameworks/introduction",
|
||||
"destination": "/guides/introduction"
|
||||
},
|
||||
{
|
||||
"source": "/guides/examples/intro",
|
||||
"destination": "/guides/introduction"
|
||||
},
|
||||
{
|
||||
"source": "/examples/:slug*",
|
||||
"destination": "/guides/examples/:slug*"
|
||||
},
|
||||
{
|
||||
"source": "/realtime",
|
||||
"destination": "/realtime/overview"
|
||||
},
|
||||
{
|
||||
"source": "/runs-and-attempts",
|
||||
"destination": "/runs"
|
||||
},
|
||||
{
|
||||
"source": "/frontend/react-hooks",
|
||||
"destination": "/frontend/react-hooks/overview"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,120 @@
|
||||
---
|
||||
title: "Generate and translate copy"
|
||||
sidebarTitle: "Generate & translate copy"
|
||||
description: "Create an AI agent workflow that generates and translates copy"
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
**Prompt chaining** is an AI workflow pattern that decomposes a complex task into a sequence of steps, where each LLM call processes the output of the previous one. This approach trades off latency for higher accuracy by making each LLM call an easier, more focused task, with the ability to add programmatic checks between steps to ensure the process remains on track.
|
||||
|
||||

|
||||
|
||||
## Example task
|
||||
|
||||
In this example, we'll create a workflow that generates and translates copy. This approach is particularly effective when tasks require different models or approaches for different inputs.
|
||||
|
||||
**This task:**
|
||||
|
||||
- Uses `generateText` from [Vercel's AI SDK](https://sdk.vercel.ai/docs/introduction) to interact with OpenAI models
|
||||
- Uses `experimental_telemetry` to provide LLM logs
|
||||
- Generates marketing copy based on subject and target word count
|
||||
- Validates the generated copy meets word count requirements (±10 words)
|
||||
- Translates the validated copy to the target language while preserving tone
|
||||
|
||||
```typescript
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { task } from "@trigger.dev/sdk/v3";
|
||||
import { generateText } from "ai";
|
||||
|
||||
export interface TranslatePayload {
|
||||
marketingSubject: string;
|
||||
targetLanguage: string;
|
||||
targetWordCount: number;
|
||||
}
|
||||
|
||||
export const generateAndTranslateTask = task({
|
||||
id: "generate-and-translate-copy",
|
||||
maxDuration: 300, // Stop executing after 5 mins of compute
|
||||
run: async (payload: TranslatePayload) => {
|
||||
// Step 1: Generate marketing copy
|
||||
const generatedCopy = await generateText({
|
||||
model: openai("o1-mini"),
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
content: "You are an expert copywriter.",
|
||||
},
|
||||
{
|
||||
role: "user",
|
||||
content: `Generate as close as possible to ${payload.targetWordCount} words of compelling marketing copy for ${payload.marketingSubject}`,
|
||||
},
|
||||
],
|
||||
experimental_telemetry: {
|
||||
isEnabled: true,
|
||||
functionId: "generate-and-translate-copy",
|
||||
},
|
||||
});
|
||||
|
||||
// Gate: Validate the generated copy meets the word count target
|
||||
const wordCount = generatedCopy.text.split(/\s+/).length;
|
||||
|
||||
if (
|
||||
wordCount < payload.targetWordCount - 10 ||
|
||||
wordCount > payload.targetWordCount + 10
|
||||
) {
|
||||
throw new Error(
|
||||
`Generated copy length (${wordCount} words) is outside acceptable range of ${
|
||||
payload.targetWordCount - 10
|
||||
}-${payload.targetWordCount + 10} words`
|
||||
);
|
||||
}
|
||||
|
||||
// Step 2: Translate to target language
|
||||
const translatedCopy = await generateText({
|
||||
model: openai("o1-mini"),
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
content: `You are an expert translator specializing in marketing content translation into ${payload.targetLanguage}.`,
|
||||
},
|
||||
{
|
||||
role: "user",
|
||||
content: `Translate the following marketing copy to ${payload.targetLanguage}, maintaining the same tone and marketing impact:\n\n${generatedCopy}`,
|
||||
},
|
||||
],
|
||||
experimental_telemetry: {
|
||||
isEnabled: true,
|
||||
functionId: "generate-and-translate-copy",
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
englishCopy: generatedCopy,
|
||||
translatedCopy,
|
||||
};
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
## Run a test
|
||||
|
||||
On the Test page in the dashboard, select the `generate-and-translate-copy` task and include a payload like the following:
|
||||
|
||||
```json
|
||||
{
|
||||
marketingSubject: "The controversial new Jaguar electric concept car",
|
||||
targetLanguage: "Spanish",
|
||||
targetWordCount: 100,
|
||||
}
|
||||
```
|
||||
|
||||
This example payload generates copy and then translates it using sequential LLM calls. The translation only begins after the generated copy has been validated against the word count requirements.
|
||||
|
||||
<video
|
||||
src="https://content.trigger.dev/agent-prompt-chaining-3.mp4"
|
||||
controls
|
||||
muted
|
||||
autoPlay
|
||||
loop
|
||||
/>
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "AI agents overview"
|
||||
sidebarTitle: "Overview"
|
||||
description: "Real world AI agent example tasks using Trigger.dev"
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
This guide will show you how to set up different types of AI agent workflows with Trigger.dev. The examples take inspiration from Athropic's blog post on [building effective agents](https://www.anthropic.com/research/building-effective-agents).
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Prompt chaining" img="/guides/ai-agents/prompt-chaining.png" href="/guides/ai-agents/generate-translate-copy">Chain prompts together to generate and translate marketing copy automatically</Card>
|
||||
<Card title="Routing" img="/guides/ai-agents/routing.png" href="/guides/ai-agents/route-question">Send questions to different AI models based on complexity analysis</Card>
|
||||
<Card title="Parallelization" img="/guides/ai-agents/parallelization.png" href="/guides/ai-agents/respond-and-check-content">Simultaneously check for inappropriate content while responding to customer inquiries</Card>
|
||||
<Card title="Orchestrator" img="/guides/ai-agents/orchestrator-workers.png" href="/guides/ai-agents/verify-news-article">Coordinate multiple AI workers to verify news article accuracy</Card>
|
||||
<Card title="Evaluator-optimizer" img="/guides/ai-agents/evaluator-optimizer.png" href="/guides/ai-agents/translate-and-refine">Translate text and automatically improve quality through feedback loops</Card>
|
||||
</CardGroup>
|
||||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,134 @@
|
||||
---
|
||||
title: "Respond to customer inquiry and check for inappropriate content"
|
||||
sidebarTitle: "Respond & check content"
|
||||
description: "Create an AI agent workflow that responds to customer inquiries while checking if their text is inappropriate"
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
**Parallelization** is a workflow pattern where multiple tasks or processes run simultaneously instead of sequentially, allowing for more efficient use of resources and faster overall execution. It's particularly valuable when different parts of a task can be handled independently, such as running content analysis and response generation at the same time.
|
||||

|
||||
|
||||
## Example task
|
||||
|
||||
In this example, we'll create a workflow that simultaneously checks content for issues while responding to customer inquiries. This approach is particularly effective when tasks require multiple perspectives or parallel processing streams, with the orchestrator synthesizing the results into a cohesive output.
|
||||
|
||||
**This task:**
|
||||
|
||||
- Uses `generateText` from [Vercel's AI SDK](https://sdk.vercel.ai/docs/introduction) to interact with OpenAI models
|
||||
- Uses `experimental_telemetry` to provide LLM logs
|
||||
- Uses [`batch.triggerByTaskAndWait`](/triggering#batch-triggerbytaskandwait) to run customer response and content moderation tasks in parallel
|
||||
- Generates customer service responses using an AI model
|
||||
- Simultaneously checks for inappropriate content while generating responses
|
||||
|
||||
```typescript
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { batch, task } from "@trigger.dev/sdk/v3";
|
||||
import { generateText } from "ai";
|
||||
|
||||
// Task to generate customer response
|
||||
export const generateCustomerResponse = task({
|
||||
id: "generate-customer-response",
|
||||
run: async (payload: { question: string }) => {
|
||||
const response = await generateText({
|
||||
model: openai("o1-mini"),
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
content: "You are a helpful customer service representative.",
|
||||
},
|
||||
{ role: "user", content: payload.question },
|
||||
],
|
||||
experimental_telemetry: {
|
||||
isEnabled: true,
|
||||
functionId: "generate-customer-response",
|
||||
},
|
||||
});
|
||||
|
||||
return response.text;
|
||||
},
|
||||
});
|
||||
|
||||
// Task to check for inappropriate content
|
||||
export const checkInappropriateContent = task({
|
||||
id: "check-inappropriate-content",
|
||||
run: async (payload: { text: string }) => {
|
||||
const response = await generateText({
|
||||
model: openai("o1-mini"),
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
content:
|
||||
"You are a content moderator. Respond with 'true' if the content is inappropriate or contains harmful, threatening, offensive, or explicit content, 'false' otherwise.",
|
||||
},
|
||||
{ role: "user", content: payload.text },
|
||||
],
|
||||
experimental_telemetry: {
|
||||
isEnabled: true,
|
||||
functionId: "check-inappropriate-content",
|
||||
},
|
||||
});
|
||||
|
||||
return response.text.toLowerCase().includes("true");
|
||||
},
|
||||
});
|
||||
|
||||
// Main task that coordinates the parallel execution
|
||||
export const handleCustomerQuestion = task({
|
||||
id: "handle-customer-question",
|
||||
run: async (payload: { question: string }) => {
|
||||
const {
|
||||
runs: [responseRun, moderationRun],
|
||||
} = await batch.triggerByTaskAndWait([
|
||||
{
|
||||
task: generateCustomerResponse,
|
||||
payload: { question: payload.question },
|
||||
},
|
||||
{
|
||||
task: checkInappropriateContent,
|
||||
payload: { text: payload.question },
|
||||
},
|
||||
]);
|
||||
|
||||
// Check moderation result first
|
||||
if (moderationRun.ok && moderationRun.output === true) {
|
||||
return {
|
||||
response:
|
||||
"I apologize, but I cannot process this request as it contains inappropriate content.",
|
||||
wasInappropriate: true,
|
||||
};
|
||||
}
|
||||
|
||||
// Return the generated response if everything is ok
|
||||
if (responseRun.ok) {
|
||||
return {
|
||||
response: responseRun.output,
|
||||
wasInappropriate: false,
|
||||
};
|
||||
}
|
||||
|
||||
// Handle any errors
|
||||
throw new Error("Failed to process customer question");
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
## Run a test
|
||||
|
||||
On the Test page in the dashboard, select the `handle-customer-question` task and include a payload like the following:
|
||||
|
||||
``` json
|
||||
{
|
||||
"question": "Can you explain 2FA?"
|
||||
}
|
||||
```
|
||||
|
||||
When triggered with a question, the task simultaneously generates a response while checking for inappropriate content using two parallel LLM calls. The main task waits for both operations to complete before delivering the final response.
|
||||
|
||||
<video
|
||||
src="https://content.trigger.dev/agent-parallelization.mp4"
|
||||
controls
|
||||
muted
|
||||
autoPlay
|
||||
loop
|
||||
/>
|
||||
@@ -0,0 +1,114 @@
|
||||
---
|
||||
title: "Route a question to a different AI model"
|
||||
sidebarTitle: "Route a question"
|
||||
description: "Create an AI agent workflow that routes a question to a different AI model depending on its complexity"
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
**Routing** is a workflow pattern that classifies an input and directs it to a specialized followup task. This pattern allows for separation of concerns and building more specialized prompts, which is particularly effective when there are distinct categories that are better handled separately. Without routing, optimizing for one kind of input can hurt performance on other inputs.
|
||||
|
||||

|
||||
|
||||
## Example task
|
||||
|
||||
In this example, we'll create a workflow that routes a question to a different AI model depending on its complexity. This approach is particularly effective when tasks require different models or approaches for different inputs.
|
||||
|
||||
**This task:**
|
||||
|
||||
- Uses `generateText` from [Vercel's AI SDK](https://sdk.vercel.ai/docs/introduction) to interact with OpenAI models
|
||||
- Uses `experimental_telemetry` in the source verification and historical analysis tasks to provide LLM logs
|
||||
- Routes questions using a lightweight model (`o1-mini`) to classify complexity
|
||||
- Directs simple questions to `gpt-4o` and complex ones to `gpt-o3-mini`
|
||||
- Returns both the answer and metadata about the routing decision
|
||||
|
||||
```typescript
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { task } from "@trigger.dev/sdk/v3";
|
||||
import { generateText } from "ai";
|
||||
import { z } from "zod";
|
||||
|
||||
// Schema for router response
|
||||
const routingSchema = z.object({
|
||||
model: z.enum(["gpt-4o", "gpt-o3-mini"]),
|
||||
reason: z.string(),
|
||||
});
|
||||
|
||||
// Router prompt template
|
||||
const ROUTER_PROMPT = `You are a routing assistant that determines the complexity of questions.
|
||||
Analyze the following question and route it to the appropriate model:
|
||||
|
||||
- Use "gpt-4o" for simple, common, or straightforward questions
|
||||
- Use "gpt-o3-mini" for complex, unusual, or questions requiring deep reasoning
|
||||
|
||||
Respond with a JSON object in this exact format:
|
||||
{"model": "gpt-4o" or "gpt-o3-mini", "reason": "your reasoning here"}
|
||||
|
||||
Question: `;
|
||||
|
||||
export const routeAndAnswerQuestion = task({
|
||||
id: "route-and-answer-question",
|
||||
run: async (payload: { question: string }) => {
|
||||
// Step 1: Route the question
|
||||
const routingResponse = await generateText({
|
||||
model: openai("o1-mini"),
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
content:
|
||||
"You must respond with a valid JSON object containing only 'model' and 'reason' fields. No markdown, no backticks, no explanation.",
|
||||
},
|
||||
{
|
||||
role: "user",
|
||||
content: ROUTER_PROMPT + payload.question,
|
||||
},
|
||||
],
|
||||
temperature: 0.1,
|
||||
experimental_telemetry: {
|
||||
isEnabled: true,
|
||||
functionId: "route-and-answer-question",
|
||||
},
|
||||
});
|
||||
|
||||
// Add error handling and cleanup
|
||||
let jsonText = routingResponse.text.trim();
|
||||
if (jsonText.startsWith("```")) {
|
||||
jsonText = jsonText.replace(/```json\n|\n```/g, "");
|
||||
}
|
||||
|
||||
const routingResult = routingSchema.parse(JSON.parse(jsonText));
|
||||
|
||||
// Step 2: Get the answer using the selected model
|
||||
const answerResult = await generateText({
|
||||
model: openai(routingResult.model),
|
||||
messages: [{ role: "user", content: payload.question }],
|
||||
});
|
||||
|
||||
return {
|
||||
answer: answerResult.text,
|
||||
selectedModel: routingResult.model,
|
||||
routingReason: routingResult.reason,
|
||||
};
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Run a test
|
||||
|
||||
Triggering our task with a simple question shows it routing to the gpt-4o model and returning the answer with reasoning:
|
||||
|
||||
```json
|
||||
{
|
||||
"question": "How many planets are there in the solar system?"
|
||||
}
|
||||
```
|
||||
|
||||
<video
|
||||
src="https://content.trigger.dev/agent-routing.mp4"
|
||||
controls
|
||||
muted
|
||||
autoPlay
|
||||
loop
|
||||
/>
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,170 @@
|
||||
---
|
||||
title: "Translate text and refine it based on feedback"
|
||||
sidebarTitle: "Translate and refine"
|
||||
description: "This guide will show you how to create a task that translates text and refines it based on feedback."
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
This example is based on the **evaluator-optimizer** pattern, where one LLM generates a response while another provides evaluation and feedback in a loop. This is particularly effective for tasks with clear evaluation criteria where iterative refinement provides better results.
|
||||
|
||||

|
||||
|
||||
## Example task
|
||||
|
||||
This example task translates text into a target language and refines the translation over a number of iterations based on feedback provided by the LLM.
|
||||
|
||||
**This task:**
|
||||
|
||||
- Uses `generateText` from [Vercel's AI SDK](https://sdk.vercel.ai/docs/introduction) to generate the translation
|
||||
- Uses `experimental_telemetry` to provide LLM logs on the Run page in the dashboard
|
||||
- Runs for a maximum of 10 iterations
|
||||
- Uses `generateText` again to evaluate the translation
|
||||
- Recursively calls itself to refine the translation based on the feedback
|
||||
|
||||
```typescript
|
||||
import { task } from "@trigger.dev/sdk/v3";
|
||||
import { generateText } from "ai";
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
|
||||
interface TranslationPayload {
|
||||
text: string;
|
||||
targetLanguage: string;
|
||||
previousTranslation?: string;
|
||||
feedback?: string;
|
||||
rejectionCount?: number;
|
||||
}
|
||||
|
||||
export const translateAndRefine = task({
|
||||
id: "translate-and-refine",
|
||||
run: async (payload: TranslationPayload) => {
|
||||
const rejectionCount = payload.rejectionCount || 0;
|
||||
|
||||
// Bail out if we've hit the maximum attempts
|
||||
if (rejectionCount >= 10) {
|
||||
return {
|
||||
finalTranslation: payload.previousTranslation,
|
||||
iterations: rejectionCount,
|
||||
status: "MAX_ITERATIONS_REACHED",
|
||||
};
|
||||
}
|
||||
|
||||
// Generate translation (or refinement if we have previous feedback)
|
||||
const translationPrompt = payload.feedback
|
||||
? `Previous translation: "${payload.previousTranslation}"\n\nFeedback received: "${payload.feedback}"\n\nPlease provide an improved translation addressing this feedback.`
|
||||
: `Translate this text into ${payload.targetLanguage}, preserving style and meaning: "${payload.text}"`;
|
||||
|
||||
const translation = await generateText({
|
||||
model: openai("o1-mini"),
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
content: `You are an expert literary translator into ${payload.targetLanguage}.
|
||||
Focus on accuracy first, then style and natural flow.`,
|
||||
},
|
||||
{
|
||||
role: "user",
|
||||
content: translationPrompt,
|
||||
},
|
||||
],
|
||||
experimental_telemetry: {
|
||||
isEnabled: true,
|
||||
functionId: "translate-and-refine",
|
||||
},
|
||||
});
|
||||
|
||||
// Evaluate the translation
|
||||
const evaluation = await generateText({
|
||||
model: openai("o1-mini"),
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
content: `You are an expert literary critic and translator focused on practical, high-quality translations.
|
||||
Your goal is to ensure translations are accurate and natural, but not necessarily perfect.
|
||||
This is iteration ${
|
||||
rejectionCount + 1
|
||||
} of a maximum 5 iterations.
|
||||
|
||||
RESPONSE FORMAT:
|
||||
- If the translation meets 90%+ quality: Respond with exactly "APPROVED" (nothing else)
|
||||
- If improvements are needed: Provide only the specific issues that must be fixed
|
||||
|
||||
Evaluation criteria:
|
||||
- Accuracy of meaning (primary importance)
|
||||
- Natural flow in the target language
|
||||
- Preservation of key style elements
|
||||
|
||||
DO NOT provide detailed analysis, suggestions, or compliments.
|
||||
DO NOT include the translation in your response.
|
||||
|
||||
IMPORTANT RULES:
|
||||
- First iteration MUST receive feedback for improvement
|
||||
- Be very strict on accuracy in early iterations
|
||||
- After 3 iterations, lower quality threshold to 85%`,
|
||||
},
|
||||
{
|
||||
role: "user",
|
||||
content: `Original: "${payload.text}"
|
||||
Translation: "${translation.text}"
|
||||
Target Language: ${payload.targetLanguage}
|
||||
Iteration: ${rejectionCount + 1}
|
||||
Previous Feedback: ${
|
||||
payload.feedback ? `"${payload.feedback}"` : "None"
|
||||
}
|
||||
|
||||
${
|
||||
rejectionCount === 0
|
||||
? "This is the first attempt. Find aspects to improve."
|
||||
: 'Either respond with exactly "APPROVED" or provide only critical issues that must be fixed.'
|
||||
}`,
|
||||
},
|
||||
],
|
||||
experimental_telemetry: {
|
||||
isEnabled: true,
|
||||
functionId: "translate-and-refine",
|
||||
},
|
||||
});
|
||||
|
||||
// If approved, return the final result
|
||||
if (evaluation.text.trim() === "APPROVED") {
|
||||
return {
|
||||
finalTranslation: translation.text,
|
||||
iterations: rejectionCount,
|
||||
status: "APPROVED",
|
||||
};
|
||||
}
|
||||
|
||||
// If not approved, recursively call the task with feedback
|
||||
await translateAndRefine
|
||||
.triggerAndWait({
|
||||
text: payload.text,
|
||||
targetLanguage: payload.targetLanguage,
|
||||
previousTranslation: translation.text,
|
||||
feedback: evaluation.text,
|
||||
rejectionCount: rejectionCount + 1,
|
||||
})
|
||||
.unwrap();
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
## Run a test
|
||||
|
||||
On the Test page in the dashboard, select the `translate-and-refine` task and include a payload like the following:
|
||||
|
||||
```json
|
||||
{
|
||||
"text": "In the twilight of his years, the old clockmaker's hands, once steady as the timepieces he crafted, now trembled like autumn leaves in the wind.",
|
||||
"targetLanguage": "French"
|
||||
}
|
||||
```
|
||||
|
||||
This example payload translates the text into French and should be suitably difficult to require a few iterations, depending on the model used and the prompt criteria you set.
|
||||
|
||||
<video
|
||||
src="https://content.trigger.dev/agent-evaluator-optimizer.mp4"
|
||||
controls
|
||||
muted
|
||||
autoPlay
|
||||
loop
|
||||
/>
|
||||
@@ -0,0 +1,220 @@
|
||||
---
|
||||
title: "Verify a news article"
|
||||
sidebarTitle: "Verify news article"
|
||||
description: "Create an AI agent workflow that verifies the facts in a news article"
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
This example demonstrates the **orchestrator-workers** pattern, where a central AI agent dynamically breaks down complex tasks and delegates them to specialized worker agents. This pattern is particularly effective when tasks require multiple perspectives or parallel processing streams, with the orchestrator synthesizing the results into a cohesive output.
|
||||
|
||||

|
||||
|
||||
## Example task
|
||||
|
||||
Our example task uses multiple LLM calls to extract claims from a news article and analyze them in parallel, combining source verification and historical context to assess their credibility.
|
||||
|
||||
**This task:**
|
||||
|
||||
- Uses `generateText` from [Vercel's AI SDK](https://sdk.vercel.ai/docs/introduction) to interact with OpenAI models
|
||||
- Uses `experimental_telemetry` to provide LLM logs
|
||||
- Uses [`batch.triggerByTaskAndWait`](/triggering#batch-triggerbytaskandwait) to orchestrate parallel processing of claims
|
||||
- Extracts factual claims from news articles using the `o1-mini` model
|
||||
- Evaluates claims against recent sources and analyzes historical context in parallel
|
||||
- Combines results into a structured analysis report
|
||||
|
||||
|
||||
```typescript
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { batch, logger, task } from "@trigger.dev/sdk/v3";
|
||||
import { CoreMessage, generateText } from "ai";
|
||||
|
||||
// Define types for our workers' outputs
|
||||
interface Claim {
|
||||
id: number;
|
||||
text: string;
|
||||
}
|
||||
|
||||
interface SourceVerification {
|
||||
claimId: number;
|
||||
isVerified: boolean;
|
||||
confidence: number;
|
||||
explanation: string;
|
||||
}
|
||||
|
||||
interface HistoricalAnalysis {
|
||||
claimId: number;
|
||||
feasibility: number;
|
||||
historicalContext: string;
|
||||
}
|
||||
|
||||
// Worker 1: Claim Extractor
|
||||
export const extractClaims = task({
|
||||
id: "extract-claims",
|
||||
run: async ({ article }: { article: string }) => {
|
||||
try {
|
||||
const messages: CoreMessage[] = [
|
||||
{
|
||||
role: "system",
|
||||
content:
|
||||
"Extract distinct factual claims from the news article. Format as numbered claims.",
|
||||
},
|
||||
{
|
||||
role: "user",
|
||||
content: article,
|
||||
},
|
||||
];
|
||||
|
||||
const response = await generateText({
|
||||
model: openai("o1-mini"),
|
||||
messages,
|
||||
});
|
||||
|
||||
const claims = response.text
|
||||
.split("\n")
|
||||
.filter((line: string) => line.trim())
|
||||
.map((claim: string, index: number) => ({
|
||||
id: index + 1,
|
||||
text: claim.replace(/^\d+\.\s*/, ""),
|
||||
}));
|
||||
|
||||
logger.info("Extracted claims", { claimCount: claims.length });
|
||||
return claims;
|
||||
} catch (error) {
|
||||
logger.error("Error in claim extraction", {
|
||||
error: error instanceof Error ? error.message : "Unknown error",
|
||||
});
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
// Worker 2: Source Verifier
|
||||
export const verifySource = task({
|
||||
id: "verify-source",
|
||||
run: async (claim: Claim) => {
|
||||
const response = await generateText({
|
||||
model: openai("o1-mini"),
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
content:
|
||||
"Verify this claim by considering recent news sources and official statements. Assess reliability.",
|
||||
},
|
||||
{
|
||||
role: "user",
|
||||
content: claim.text,
|
||||
},
|
||||
],
|
||||
experimental_telemetry: {
|
||||
isEnabled: true,
|
||||
functionId: "verify-source",
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
claimId: claim.id,
|
||||
isVerified: false,
|
||||
confidence: 0.7,
|
||||
explanation: response.text,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
// Worker 3: Historical Context Analyzer
|
||||
export const analyzeHistory = task({
|
||||
id: "analyze-history",
|
||||
run: async (claim: Claim) => {
|
||||
const response = await generateText({
|
||||
model: openai("o1-mini"),
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
content:
|
||||
"Analyze this claim in historical context, considering past announcements and technological feasibility.",
|
||||
},
|
||||
{
|
||||
role: "user",
|
||||
content: claim.text,
|
||||
},
|
||||
],
|
||||
experimental_telemetry: {
|
||||
isEnabled: true,
|
||||
functionId: "analyze-history",
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
claimId: claim.id,
|
||||
feasibility: 0.8,
|
||||
historicalContext: response.text,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
// Orchestrator
|
||||
export const newsFactChecker = task({
|
||||
id: "news-fact-checker",
|
||||
run: async ({ article }: { article: string }) => {
|
||||
// Step 1: Extract claims
|
||||
const claimsResult = await batch.triggerByTaskAndWait([
|
||||
{ task: extractClaims, payload: { article } },
|
||||
]);
|
||||
|
||||
if (!claimsResult.runs[0].ok) {
|
||||
logger.error("Failed to extract claims", {
|
||||
error: claimsResult.runs[0].error,
|
||||
runId: claimsResult.runs[0].id,
|
||||
});
|
||||
throw new Error(
|
||||
`Failed to extract claims: ${claimsResult.runs[0].error}`
|
||||
);
|
||||
}
|
||||
|
||||
const claims = claimsResult.runs[0].output;
|
||||
|
||||
// Step 2: Process claims in parallel
|
||||
const parallelResults = await batch.triggerByTaskAndWait([
|
||||
...claims.map((claim) => ({ task: verifySource, payload: claim })),
|
||||
...claims.map((claim) => ({ task: analyzeHistory, payload: claim })),
|
||||
]);
|
||||
|
||||
// Split and process results
|
||||
const verifications = parallelResults.runs
|
||||
.filter(
|
||||
(run): run is typeof run & { ok: true } =>
|
||||
run.ok && run.taskIdentifier === "verify-source"
|
||||
)
|
||||
.map((run) => run.output as SourceVerification);
|
||||
|
||||
const historicalAnalyses = parallelResults.runs
|
||||
.filter(
|
||||
(run): run is typeof run & { ok: true } =>
|
||||
run.ok && run.taskIdentifier === "analyze-history"
|
||||
)
|
||||
.map((run) => run.output as HistoricalAnalysis);
|
||||
|
||||
return { claims, verifications, historicalAnalyses };
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
## Run a test
|
||||
|
||||
On the Test page in the dashboard, select the `news-fact-checker` task and include a payload like the following:
|
||||
|
||||
```json
|
||||
{
|
||||
"article": "Tesla announced a new breakthrough in battery technology today. The company claims their new batteries will have 50% more capacity and cost 30% less to produce. Elon Musk stated this development will enable electric vehicles to achieve price parity with gasoline cars by 2024. The new batteries are scheduled to enter production next quarter at the Texas Gigafactory."
|
||||
}
|
||||
```
|
||||
|
||||
This example payload verifies the claims in the news article and provides a report on the results.
|
||||
|
||||
<video
|
||||
src="https://content.trigger.dev/agent-orchestrator-workers.mp4"
|
||||
controls
|
||||
muted
|
||||
autoPlay
|
||||
loop
|
||||
/>
|
||||
@@ -1,36 +0,0 @@
|
||||
---
|
||||
title: "Creating a project"
|
||||
description: "This guide will show you how to create a new Trigger.dev project."
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- [Create a Trigger.dev account](https://cloud.trigger.dev)
|
||||
- Login to the Trigger.dev [dashboard](https://cloud.trigger.dev)
|
||||
|
||||
## Create a new Trigger.dev project
|
||||
|
||||
<Steps>
|
||||
<Step title="Navigate to the Projects page">
|
||||
Click on "Projects" in the left hand side menu <Icon icon="circle-1" iconType="solid" size={20} color="F43F47" /> then click on "Create a new Project" button in the top right corner <Icon icon="circle-2" iconType="solid" size={20} color="F43F47" />.
|
||||

|
||||
</Step>
|
||||
<Step title="Name your project">
|
||||

|
||||
</Step>
|
||||
<Step title="Useful project settings">
|
||||
Once you have created your project you can find your Project ref <Icon icon="circle-2" iconType="solid" size={20} color="F43F47" /> to add to your `trigger.config` file and rename your project <Icon icon="circle-3" iconType="solid" size={20} color="F43F47" /> by clicking "Project settings" <Icon icon="circle-1" iconType="solid" size={20} color="F43F47" /> in the left hand side menubar.
|
||||

|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Useful next steps
|
||||
|
||||
<CardGroup>
|
||||
<Card title="Quick start" icon="person-running-fast" href="/quick-start">
|
||||
Setup Trigger.dev in 3 minutes
|
||||
</Card>
|
||||
<Card title="Writing tasks" icon="wand-magic-sparkles" href="/tasks/overview">
|
||||
Learn what tasks are and how to write them
|
||||
</Card>
|
||||
</CardGroup>
|
||||
@@ -30,16 +30,14 @@ This full stack Next.js project showcases the following:
|
||||
|
||||
This video walks through the process of creating this task in a Next.js project.
|
||||
|
||||
<div className="w-full h-full aspect-video mb-3">
|
||||
<iframe
|
||||
width="100%"
|
||||
height="100%"
|
||||
src="https://www.youtube.com/embed/BWZqYfUaigg?si=XpqVUEIf1j4bsYZ4"
|
||||
title="Trigger.dev walkthrough"
|
||||
allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
referrerPolicy="strict-origin-when-cross-origin"
|
||||
allowFullScreen
|
||||
/>
|
||||
</div>
|
||||
<iframe
|
||||
width="100"
|
||||
height="315"
|
||||
src="https://www.youtube.com/embed/BWZqYfUaigg?si=XpqVUEIf1j4bsYZ4"
|
||||
title="Trigger.dev walkthrough"
|
||||
allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
referrerPolicy="strict-origin-when-cross-origin"
|
||||
allowFullScreen
|
||||
/>
|
||||
|
||||
<RealtimeLearnMore />
|
||||
|
||||
@@ -8,9 +8,15 @@ description: "This example task generates an image from a URL using Fal.ai and u
|
||||
|
||||
This video walks through the process of creating this task in a Next.js project.
|
||||
|
||||
<div className="w-full h-full aspect-video mb-3">
|
||||
<iframe width="100%" height="100%" src="https://www.youtube.com/embed/AyRT4X8dHK0?si=ugA172V_3TMjik9h" title="Trigger.dev walkthrough" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerPolicy="strict-origin-when-cross-origin" allowFullScreen/>
|
||||
</div>
|
||||
<iframe
|
||||
width="100%"
|
||||
height="315"
|
||||
src="https://www.youtube.com/embed/AyRT4X8dHK0?si=ugA172V_3TMjik9h"
|
||||
title="Trigger.dev walkthrough"
|
||||
allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
referrerPolicy="strict-origin-when-cross-origin"
|
||||
allowFullScreen
|
||||
/>
|
||||
|
||||
## Prerequisites
|
||||
|
||||
|
||||
@@ -19,17 +19,15 @@ description: "This example task generates an image from a prompt using Fal.ai an
|
||||
|
||||
This video walks through the process of creating this task in a Next.js project.
|
||||
|
||||
<div className="w-full h-full aspect-video mb-3">
|
||||
<iframe
|
||||
width="100%"
|
||||
height="100%"
|
||||
src="https://www.youtube.com/embed/BWZqYfUaigg?si=XpqVUEIf1j4bsYZ4"
|
||||
title="Trigger.dev walkthrough"
|
||||
<iframe
|
||||
width="100%"
|
||||
height="315"
|
||||
src="https://www.youtube.com/embed/BWZqYfUaigg?si=XpqVUEIf1j4bsYZ4"
|
||||
title="Trigger.dev walkthrough"
|
||||
allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
referrerPolicy="strict-origin-when-cross-origin"
|
||||
allowFullScreen
|
||||
/>
|
||||
</div>
|
||||
/>
|
||||
|
||||
## Prerequisites
|
||||
|
||||
|
||||
@@ -7,17 +7,15 @@ description: "This example demonstrates how to scrape the top 3 articles from Ha
|
||||
import LocalDevelopment from "/snippets/local-development-extensions.mdx";
|
||||
import ScrapingWarning from "/snippets/web-scraping-warning.mdx";
|
||||
|
||||
<div className="w-full h-full aspect-video">
|
||||
<iframe
|
||||
width="100%"
|
||||
height="100%"
|
||||
src="https://www.youtube.com/embed/6azvzrZITKY?si=muKtsBiS9TJGGKWg"
|
||||
title="YouTube video player"
|
||||
<iframe
|
||||
width="100%"
|
||||
height="315"
|
||||
src="https://www.youtube.com/embed/6azvzrZITKY?si=muKtsBiS9TJGGKWg"
|
||||
title="YouTube video player"
|
||||
allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
referrerPolicy="strict-origin-when-cross-origin"
|
||||
allowFullScreen
|
||||
/>
|
||||
</div>
|
||||
/>
|
||||
|
||||
## Overview
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ This guide shows you how to set up and deploy a simple Supabase edge function ex
|
||||
- Since Supabase CLI version 1.123.4, you must have [Docker Desktop installed](https://supabase.com/docs/guides/functions/deploy#deploy-your-edge-functions) to deploy Edge Functions
|
||||
- Ensure TypeScript is installed
|
||||
- [Create a Trigger.dev account](https://cloud.trigger.dev)
|
||||
- [Create a new Trigger.dev project](/guides/dashboard/creating-a-project)
|
||||
- Create a new Trigger.dev project
|
||||
|
||||
## GitHub repo
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ Supabase and Trigger.dev can be used together to create powerful workflows trigg
|
||||
- Since Supabase CLI version 1.123.4, you must have [Docker Desktop installed](https://supabase.com/docs/guides/functions/deploy#deploy-your-edge-functions) to deploy Edge Functions
|
||||
- Ensure TypeScript is installed
|
||||
- [Create a Trigger.dev account](https://cloud.trigger.dev)
|
||||
- [Create a new Trigger.dev project](/guides/dashboard/creating-a-project)
|
||||
- Create a new Trigger.dev project
|
||||
- [Create a new Deepgram account](https://deepgram.com/) and get your API key from the dashboard
|
||||
|
||||
## GitHub repo
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
---
|
||||
title: "Frameworks, guides and examples overview"
|
||||
sidebarTitle: "Introduction"
|
||||
sidebarTitle: "Overview"
|
||||
description: "An ever growing list of guides and examples to help you get setup with Trigger.dev."
|
||||
---
|
||||
|
||||
import CardBun from "/snippets/card-bun.mdx";
|
||||
import CardNodejs from "/snippets/card-nodejs.mdx";
|
||||
import CardNextjs from "/snippets/card-nextjs.mdx";
|
||||
import CardRemix from "/snippets/card-remix.mdx";
|
||||
import CardSupabase from "/snippets/card-supabase.mdx";
|
||||
|
||||
## Frameworks
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<CardBun />
|
||||
<CardNodejs />
|
||||
<CardNextjs />
|
||||
<CardRemix />
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Bun" img="/images/logo-bun.png" href="/guides/frameworks/bun"/>
|
||||
<Card title="Next.js" img="/images/logo-nextjs.png" href="/guides/frameworks/nextjs"/>
|
||||
<Card title="Node.js" img="/images/logo-nodejs.png" href="/guides/frameworks/nodejs"/>
|
||||
<Card title="Remix" img="/images/logo-remix.png" href="/guides/frameworks/remix"/>
|
||||
</CardGroup>
|
||||
|
||||
|
||||
## Guides
|
||||
|
||||
Get set up fast using our detailed walk-through guides.
|
||||
|
||||
| Guide | Description |
|
||||
| :----------------------------------------------------------------------------------------- | :------------------------------------------------ |
|
||||
| [AI Agent: Generate and translate copy](/guides/ai-agents/generate-translate-copy) | Chain prompts to generate and translate content |
|
||||
| [AI Agent: Route questions](/guides/ai-agents/route-question) | Route questions to different models based on complexity |
|
||||
| [AI Agent: Content moderation](/guides/ai-agents/respond-and-check-content) | Parallel check content while responding to customers |
|
||||
| [AI Agent: News verification](/guides/ai-agents/verify-news-article) | Orchestrate fact checking of news articles |
|
||||
| [AI Agent: Translation refinement](/guides/ai-agents/translate-and-refine) | Evaluate and refine translations with feedback |
|
||||
| [Prisma](/guides/frameworks/prisma) | How to setup Prisma with Trigger.dev |
|
||||
| [Sequin database triggers](/guides/frameworks/sequin) | Trigger tasks from database changes using Sequin |
|
||||
| [Supabase edge function hello world](/guides/frameworks/supabase-edge-functions-basic) | Trigger tasks from Supabase edge function |
|
||||
|
||||
|
Before Width: | Height: | Size: 198 KiB |
|
Before Width: | Height: | Size: 153 KiB |
|
Before Width: | Height: | Size: 201 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 7.7 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -1,59 +1,94 @@
|
||||
---
|
||||
title: "Introduction"
|
||||
description: "Welcome to the Trigger.dev v3 documentation."
|
||||
title: "Welcome to the Trigger.dev docs"
|
||||
sidebarTitle: "Introduction"
|
||||
description: "Find all the resources and guides you need to get started"
|
||||
mode: "center"
|
||||
---
|
||||
|
||||
## What is Trigger.dev (v3)?
|
||||
|
||||
Trigger.dev v3 makes it easy to write reliable long-running tasks without timeouts.
|
||||
|
||||
- We run your tasks with no timeouts. You don't have to manage any infrastructure (unless you [self-host](/open-source-self-hosting)). Workers are automatically scaled and managed for you.
|
||||
- We provide a multi-tenant queue that is used when triggering tasks.
|
||||
- We provide an SDK and CLI for writing tasks in your existing codebase, inside [/trigger folders](/config/config-file).
|
||||
- We provide different types of tasks: [regular](/tasks-regular) and [scheduled](/tasks/scheduled).
|
||||
- We provide a dashboard for monitoring, debugging, and managing your tasks.
|
||||
- We provide a [Realtime API](/realtime) for monitoring tasks in real-time, along with [React hooks](/frontend/react-hooks#realtime-hooks) for building custom dashboards.
|
||||
|
||||
We're [open source](https://github.com/triggerdotdev/trigger.dev) and you can choose to use the [Trigger.dev Cloud](https://cloud.trigger.dev) or [Self-host Trigger.dev](/open-source-self-hosting) on your own infrastructure.
|
||||
|
||||
## Getting started
|
||||
|
||||
### Video walkthrough
|
||||
|
||||
<div className="w-full h-full aspect-video mb-3">
|
||||
<iframe
|
||||
width="100%"
|
||||
height="100%"
|
||||
src="https://www.youtube.com/embed/YH_4c0K7fGM?si=5JzZmZseuqI5aciM"
|
||||
title="Trigger.dev walkthrough"
|
||||
allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
referrerPolicy="strict-origin-when-cross-origin"
|
||||
allowFullScreen
|
||||
/>
|
||||
</div>
|
||||
|
||||
### Quick start, writing tasks and guides
|
||||
|
||||
<CardGroup>
|
||||
<Card title="Quick start guide" icon="person-running-fast" href="/quick-start">
|
||||
Go from zero to running your first task in 3 minutes.
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Quick start" img="/images/intro-quickstart.jpg" href="/quick-start">
|
||||
Get started with Trigger.dev in 3 minutes
|
||||
</Card>
|
||||
<Card title="Writing tasks" icon="wand-magic-sparkles" href="/tasks/overview">
|
||||
Tasks are the core of Trigger.dev. Learn what they are and how to write them.
|
||||
<Card title="Examples" img="/images/intro-examples.jpg" href="/guides/introduction#example-tasks">
|
||||
Explore dozens of examples tasks to use in your own projects
|
||||
</Card>
|
||||
<Card title="Walkthrough guides" icon="book" href="/guides/introduction">
|
||||
Detailed guides for setting up Trigger.dev with popular frameworks and services, including
|
||||
Next.js, Remix, Supabase and more.
|
||||
<Card title="Frameworks" img="/images/intro-frameworks.jpg" href="/guides/introduction#frameworks">
|
||||
Learn how to use Trigger.dev with your favorite frameworks
|
||||
</Card>
|
||||
<Card title="Example tasks" icon="code" href="/guides/introduction#example-tasks">
|
||||
Code you can use in your own projects, including OpenAI, Deepgram, FFmpeg, Puppeteer, Stripe,
|
||||
Supabase and many more.
|
||||
<Card title="Video walkthrough" img="/images/intro-video.jpg" href="/video-walkthrough">
|
||||
Watch an end-to-end demo of Trigger.dev in 10 minutes
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## What is Trigger.dev?
|
||||
|
||||
Trigger.dev is an open source background jobs framework that lets you write reliable workflows in plain async code. Run long-running AI tasks, handle complex background jobs, and build AI agents with built-in queuing, automatic retries, and real-time monitoring. No timeouts, elastic scaling, and zero infrastructure management required.
|
||||
|
||||
We provide everything you need to build and manage background tasks: a [CLI and SDK](/config/config-file) for writing tasks in your existing codebase, support for both [regular](/tasks-regular) and [scheduled](/tasks/scheduled) tasks, full observability through our dashboard, and a [Realtime API](/realtime) with [React hooks](/frontend/react-hooks#realtime-hooks) for showing task status in your frontend. You can use [Trigger.dev Cloud](https://cloud.trigger.dev) or [self-host](/open-source-self-hosting) on your own infrastructure.
|
||||
|
||||
## Learn the concepts
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Writing tasks" icon="wand-magic-sparkles" href="/tasks/overview" color="#3B82F6">
|
||||
Tasks are the core of Trigger.dev. Learn what they are and how to write them.
|
||||
</Card>
|
||||
<Card title="Triggering tasks" icon="bullseye-pointer" href="/triggering" color="#fbbf24">
|
||||
Learn how to trigger tasks from your codebase.
|
||||
</Card>
|
||||
<Card title="Runs" icon="person-running" href="/runs" color="#EA189E">
|
||||
Runs are the instances of tasks that are executed. Learn how they work.
|
||||
</Card>
|
||||
<Card title="API keys" icon="key" href="/apikeys" color="#EAEA08">
|
||||
API keys are used to authenticate requests to the Trigger.dev API. Learn how to create and use them.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## Explore by feature
|
||||
|
||||
<CardGroup>
|
||||
<Card title="Scheduled tasks (cron)" icon="clock" href="/tasks/scheduled" color="#EAEA08">
|
||||
Scheduled tasks are a type of task that is scheduled to run at a specific time.
|
||||
</Card>
|
||||
<Card title="Realtime API" icon="loader" href="/realtime" color="#22C55E">
|
||||
The Realtime API allows you to trigger tasks and get the status of runs.
|
||||
</Card>
|
||||
<Card title="React hooks" icon="react" href="/frontend/react-hooks" color="#3B82F6">
|
||||
React hooks are a way to show task status in your frontend.
|
||||
</Card>
|
||||
<Card title="Waits" icon="calendar-clock" href="/wait" color="#F59E0B">
|
||||
Waits are a way to wait for a task to finish before continuing.
|
||||
</Card>
|
||||
<Card title="Errors and retries" icon="message-exclamation" href="/errors-retrying" color="#F43F5E">
|
||||
Learn how to handle errors and retries.
|
||||
</Card>
|
||||
<Card title="Concurrency & Queues" icon="line-height" href="/queue-concurrency" color="#D946EF">
|
||||
Configure what you want to happen when there is more than one run at a time.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## Explore by example
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="FFmpeg" img="/images/intro-ffmpeg.jpg" href="/guides/examples/ffmpeg-video-processing"/>
|
||||
<Card title="Fal.ai" img="/images/intro-fal.jpg" href="/guides/examples/fal-ai-image-to-cartoon"/>
|
||||
<Card title="Puppeteer" img="/images/intro-puppeteer.jpg" href="/guides/examples/puppeteer"/>
|
||||
<Card title="LibreOffice" img="/images/intro-libreoffice.jpg" href="/guides/examples/libreoffice-pdf-conversion"/>
|
||||
<Card title="OpenAI" img="/images/intro-openai.jpg" href="/guides/examples/open-ai-with-retrying"/>
|
||||
<Card title="Browserbase" img="/images/intro-browserbase.jpg" href="/guides/examples/scrape-hacker-news"/>
|
||||
<Card title="Sentry" img="/images/intro-sentry.jpg" href="/guides/examples/sentry-error-tracking"/>
|
||||
<Card title="Resend" img="/images/intro-resend.jpg" href="/guides/examples/resend-email-sequence"/>
|
||||
<Card title="Vercel AI SDK" img="/images/intro-vercel.jpg" href="/guides/examples/vercel-ai-sdk"/>
|
||||
<Card title="Sharp" img="/images/intro-sharp.jpg" href="/guides/examples/sharp-image-processing"/>
|
||||
<Card title="Deepgram" img="/images/intro-deepgram.jpg" href="/guides/examples/deepgram-transcribe-audio"/>
|
||||
<Card title="Supabase" img="/images/intro-supabase.jpg" href="/guides/examples/supabase-database-operations"/>
|
||||
<Card title="DALL•E" img="/images/intro-openai.jpg" href="/guides/examples/dall-e3-generate-image"/>
|
||||
<Card title="Firecrawl" img="/images/intro-firecrawl.jpg" href="/guides/examples/firecrawl-url-crawl"/>
|
||||
</CardGroup>
|
||||
|
||||
|
||||
## Getting help
|
||||
|
||||
We'd love to hear from you or give you a hand getting started. Here are some ways to get in touch with us. We'd also ❤️ your support.
|
||||
We'd love to hear from you or give you a hand getting started. Here are some ways to get in touch with us.
|
||||
|
||||
<CardGroup>
|
||||
<Card
|
||||
@@ -62,7 +97,7 @@ We'd love to hear from you or give you a hand getting started. Here are some way
|
||||
href="https://discord.gg/kA47vcd8P6"
|
||||
color="#5865F2"
|
||||
>
|
||||
The help forum is a great place to get help with any questions about Trigger.dev.
|
||||
Our Discord is the best place to get help with any questions about Trigger.dev.
|
||||
</Card>
|
||||
<Card
|
||||
title="Follow us on X (Twitter)"
|
||||
@@ -74,16 +109,16 @@ We'd love to hear from you or give you a hand getting started. Here are some way
|
||||
href="https://twitter.com/triggerdotdev"
|
||||
color="#1DA1F2"
|
||||
>
|
||||
Follow us on X (Twitter) to get the latest updates and news.
|
||||
Follow us to get the latest updates and news.
|
||||
</Card>
|
||||
<Card
|
||||
title="Schedule a call"
|
||||
icon="phone"
|
||||
iconType="solid"
|
||||
color="#22C55E"
|
||||
href="https://cal.com/team/triggerdotdev/founders-call"
|
||||
>
|
||||
Arrange a call with one of the founders. We can help answer questions and give 1-on-1 help
|
||||
building your first task.
|
||||
Arrange a call with one of the founders to get help with any questions.
|
||||
</Card>
|
||||
<Card
|
||||
title="Give us a star on GitHub"
|
||||
@@ -92,6 +127,6 @@ We'd love to hear from you or give you a hand getting started. Here are some way
|
||||
href="https://github.com/triggerdotdev/trigger.dev"
|
||||
color="#fbbf24"
|
||||
>
|
||||
Check us out at triggerdotdev/trigger.dev
|
||||
Check us out our GitHub repo and give us a star if you like what we're doing.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@@ -1,392 +0,0 @@
|
||||
{
|
||||
"$schema": "https://mintlify.com/schema.json",
|
||||
"name": "Trigger.dev",
|
||||
"openapi": ["/openapi.yml", "/v3-openapi.yaml"],
|
||||
"api": {
|
||||
"playground": {
|
||||
"mode": "simple"
|
||||
},
|
||||
"maintainOrder": true
|
||||
},
|
||||
"logo": {
|
||||
"dark": "/logo/dark.png",
|
||||
"light": "/logo/light.png",
|
||||
"href": "https://trigger.dev"
|
||||
},
|
||||
"favicon": "/images/favicon.png",
|
||||
"colors": {
|
||||
"primary": "#A8FF53",
|
||||
"light": "#A8FF53",
|
||||
"dark": "#A8FF53",
|
||||
"anchors": {
|
||||
"from": "#252630",
|
||||
"to": "#252630"
|
||||
},
|
||||
"background": {
|
||||
"light": "#fff",
|
||||
"dark": "#121317"
|
||||
}
|
||||
},
|
||||
"theme": "quill",
|
||||
"modeToggle": {
|
||||
"default": "dark",
|
||||
"isHidden": true
|
||||
},
|
||||
"feedback": {
|
||||
"suggestEdit": true,
|
||||
"raiseIssue": true,
|
||||
"thumbsRating": true
|
||||
},
|
||||
"topbarCtaButton": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/triggerdotdev/trigger.dev"
|
||||
},
|
||||
"topbarLinks": [
|
||||
{
|
||||
"name": "Switch to v2 docs",
|
||||
"url": "https://v2docs.trigger.dev/documentation/introduction"
|
||||
},
|
||||
{
|
||||
"name": "Discord",
|
||||
"url": "https://trigger.dev/discord"
|
||||
}
|
||||
],
|
||||
"redirects": [
|
||||
{
|
||||
"source": "/v3/feature-matrix",
|
||||
"destination": "https://feedback.trigger.dev/roadmap"
|
||||
},
|
||||
{
|
||||
"source": "/v3/upgrading-from-v2",
|
||||
"destination": "/guides/use-cases/upgrading-from-v2"
|
||||
},
|
||||
{
|
||||
"source": "/v3/open-source-self-hosting",
|
||||
"destination": "/open-source-self-hosting"
|
||||
},
|
||||
{
|
||||
"source": "/v3/:slug*",
|
||||
"destination": "/:slug*"
|
||||
},
|
||||
{
|
||||
"source": "/reattempting-replaying",
|
||||
"destination": "/replaying"
|
||||
},
|
||||
{
|
||||
"source": "/tasks-overview",
|
||||
"destination": "/tasks/overview"
|
||||
},
|
||||
{
|
||||
"source": "/tasks-scheduled",
|
||||
"destination": "/tasks/scheduled"
|
||||
},
|
||||
{
|
||||
"source": "/trigger-folder",
|
||||
"destination": "/config/config-file"
|
||||
},
|
||||
{
|
||||
"source": "/trigger-config",
|
||||
"destination": "/config/config-file"
|
||||
},
|
||||
{
|
||||
"source": "/guides/frameworks/introduction",
|
||||
"destination": "/guides/introduction"
|
||||
},
|
||||
{
|
||||
"source": "/guides/examples/intro",
|
||||
"destination": "/guides/introduction"
|
||||
},
|
||||
{
|
||||
"source": "/examples/:slug*",
|
||||
"destination": "/guides/examples/:slug*"
|
||||
},
|
||||
{
|
||||
"source": "/realtime",
|
||||
"destination": "/realtime/overview"
|
||||
},
|
||||
{
|
||||
"source": "/runs-and-attempts",
|
||||
"destination": "/runs"
|
||||
},
|
||||
{
|
||||
"source": "/frontend/react-hooks",
|
||||
"destination": "/frontend/react-hooks/overview"
|
||||
}
|
||||
],
|
||||
"anchors": [
|
||||
{
|
||||
"name": "Guides & examples",
|
||||
"icon": "book",
|
||||
"url": "guides"
|
||||
}
|
||||
],
|
||||
"navigation": [
|
||||
{
|
||||
"group": "Getting Started",
|
||||
"pages": ["introduction", "quick-start", "video-walkthrough", "how-it-works", "limits"]
|
||||
},
|
||||
{
|
||||
"group": "Fundamentals",
|
||||
"pages": [
|
||||
{
|
||||
"group": "Tasks",
|
||||
"pages": ["tasks/overview", "tasks/schemaTask", "tasks/scheduled"]
|
||||
},
|
||||
"triggering",
|
||||
"runs",
|
||||
"apikeys",
|
||||
{
|
||||
"group": "Configuration",
|
||||
"pages": ["config/config-file", "config/extensions/overview"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Development",
|
||||
"pages": ["cli-dev", "run-tests"]
|
||||
},
|
||||
{
|
||||
"group": "Deployment",
|
||||
"pages": [
|
||||
"cli-deploy",
|
||||
"deploy-environment-variables",
|
||||
"github-actions",
|
||||
{
|
||||
"group": "Deployment integrations",
|
||||
"pages": ["vercel-integration"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Writing tasks",
|
||||
"pages": [
|
||||
"writing-tasks-introduction",
|
||||
"logging",
|
||||
"errors-retrying",
|
||||
{
|
||||
"group": "Wait",
|
||||
"pages": ["wait", "wait-for", "wait-until", "wait-for-event", "wait-for-request"]
|
||||
},
|
||||
"queue-concurrency",
|
||||
"versioning",
|
||||
"machines",
|
||||
"idempotency",
|
||||
"replaying",
|
||||
"runs/max-duration",
|
||||
"tags",
|
||||
"runs/metadata",
|
||||
"run-usage",
|
||||
"context",
|
||||
"bulk-actions",
|
||||
"examples"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Frontend usage",
|
||||
"pages": [
|
||||
"frontend/overview",
|
||||
{
|
||||
"group": "React hooks",
|
||||
"pages": [
|
||||
"frontend/react-hooks/overview",
|
||||
"frontend/react-hooks/realtime",
|
||||
"frontend/react-hooks/triggering"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Realtime API",
|
||||
"pages": [
|
||||
"realtime/overview",
|
||||
"realtime/streams",
|
||||
"realtime/react-hooks",
|
||||
"realtime/subscribe-to-run",
|
||||
"realtime/subscribe-to-runs-with-tag",
|
||||
"realtime/subscribe-to-batch"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "API reference",
|
||||
"pages": [
|
||||
"management/overview",
|
||||
{
|
||||
"group": "Tasks API",
|
||||
"pages": ["management/tasks/trigger", "management/tasks/batch-trigger"]
|
||||
},
|
||||
{
|
||||
"group": "Runs API",
|
||||
"pages": [
|
||||
"management/runs/list",
|
||||
"management/runs/retrieve",
|
||||
"management/runs/replay",
|
||||
"management/runs/cancel",
|
||||
"management/runs/reschedule",
|
||||
"management/runs/update-metadata"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Schedules API",
|
||||
"pages": [
|
||||
"management/schedules/list",
|
||||
"management/schedules/create",
|
||||
"management/schedules/retrieve",
|
||||
"management/schedules/update",
|
||||
"management/schedules/delete",
|
||||
"management/schedules/deactivate",
|
||||
"management/schedules/activate",
|
||||
"management/schedules/timezones"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Env Vars API",
|
||||
"pages": [
|
||||
"management/envvars/list",
|
||||
"management/envvars/import",
|
||||
"management/envvars/create",
|
||||
"management/envvars/retrieve",
|
||||
"management/envvars/update",
|
||||
"management/envvars/delete"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Projects API",
|
||||
"pages": ["management/projects/runs"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "CLI",
|
||||
"pages": [
|
||||
"cli-introduction",
|
||||
{
|
||||
"group": "Commands",
|
||||
"pages": [
|
||||
"cli-login-commands",
|
||||
"cli-init-commands",
|
||||
"cli-dev-commands",
|
||||
"cli-deploy-commands",
|
||||
"cli-whoami-commands",
|
||||
"cli-logout-commands",
|
||||
"cli-list-profiles-commands",
|
||||
"cli-update-commands"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Open source",
|
||||
"pages": [
|
||||
"open-source-self-hosting",
|
||||
"open-source-contributing",
|
||||
"github-repo",
|
||||
"changelog",
|
||||
"roadmap"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Troubleshooting",
|
||||
"pages": [
|
||||
"troubleshooting",
|
||||
"upgrading-packages",
|
||||
"upgrading-beta",
|
||||
"troubleshooting-alerts",
|
||||
"troubleshooting-uptime-status",
|
||||
"troubleshooting-github-issues",
|
||||
"request-feature"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Help",
|
||||
"pages": ["community", "help-slack", "help-email"]
|
||||
},
|
||||
{
|
||||
"group": "",
|
||||
"pages": ["guides/introduction"]
|
||||
},
|
||||
{
|
||||
"group": "Frameworks",
|
||||
"pages": [
|
||||
"guides/frameworks/bun",
|
||||
"guides/frameworks/nextjs",
|
||||
"guides/frameworks/nodejs",
|
||||
"guides/frameworks/remix"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Guides",
|
||||
"pages": [
|
||||
"guides/frameworks/prisma",
|
||||
"guides/frameworks/drizzle",
|
||||
"guides/frameworks/sequin",
|
||||
{
|
||||
"group": "Supabase",
|
||||
"icon": "bolt",
|
||||
"iconType": "solid",
|
||||
"pages": [
|
||||
"guides/frameworks/supabase-guides-overview",
|
||||
"guides/frameworks/supabase-edge-functions-basic",
|
||||
"guides/frameworks/supabase-edge-functions-database-webhooks"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Webhooks",
|
||||
"icon": "webhook",
|
||||
"iconType": "solid",
|
||||
"pages": [
|
||||
"guides/frameworks/webhooks-guides-overview",
|
||||
"guides/frameworks/nextjs-webhooks",
|
||||
"guides/frameworks/remix-webhooks",
|
||||
"guides/examples/stripe-webhook"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Example projects",
|
||||
"pages": [
|
||||
"guides/example-projects/realtime-fal-ai",
|
||||
"guides/example-projects/batch-llm-evaluator",
|
||||
"guides/example-projects/realtime-csv-importer",
|
||||
"guides/example-projects/vercel-ai-sdk-image-generator"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Example tasks",
|
||||
"pages": [
|
||||
"guides/examples/dall-e3-generate-image",
|
||||
"guides/examples/deepgram-transcribe-audio",
|
||||
"guides/examples/fal-ai-image-to-cartoon",
|
||||
"guides/examples/fal-ai-realtime",
|
||||
"guides/examples/ffmpeg-video-processing",
|
||||
"guides/examples/firecrawl-url-crawl",
|
||||
"guides/examples/libreoffice-pdf-conversion",
|
||||
"guides/examples/open-ai-with-retrying",
|
||||
"guides/examples/pdf-to-image",
|
||||
"guides/examples/puppeteer",
|
||||
"guides/examples/scrape-hacker-news",
|
||||
"guides/examples/sentry-error-tracking",
|
||||
"guides/examples/sharp-image-processing",
|
||||
"guides/examples/supabase-database-operations",
|
||||
"guides/examples/supabase-storage-upload",
|
||||
"guides/examples/react-pdf",
|
||||
"guides/examples/resend-email-sequence",
|
||||
"guides/examples/vercel-ai-sdk",
|
||||
"guides/examples/vercel-sync-env-vars"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Dashboard",
|
||||
"pages": ["guides/dashboard/creating-a-project"]
|
||||
},
|
||||
{
|
||||
"group": "Migrations",
|
||||
"pages": ["guides/use-cases/upgrading-from-v2"]
|
||||
}
|
||||
],
|
||||
"footerSocials": {
|
||||
"twitter": "https://twitter.com/triggerdotdev",
|
||||
"github": "https://github.com/triggerdotdev",
|
||||
"linkedin": "https://www.linkedin.com/company/triggerdotdev"
|
||||
}
|
||||
}
|
||||
@@ -12,17 +12,15 @@ The Realtime API is built on top of [Electric SQL](https://electric-sql.com/), a
|
||||
|
||||
## Walkthrough
|
||||
|
||||
<div className="w-full h-full aspect-video">
|
||||
<iframe
|
||||
width="100%"
|
||||
height="100%"
|
||||
src="https://www.youtube.com/embed/RhJAbSGkS88?si=4Z72SfygeklNI3As"
|
||||
title="YouTube video player"
|
||||
<iframe
|
||||
width="100%"
|
||||
height="315"
|
||||
src="https://www.youtube.com/embed/RhJAbSGkS88?si=4Z72SfygeklNI3As"
|
||||
title="YouTube video player"
|
||||
allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
referrerPolicy="strict-origin-when-cross-origin"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
</div>
|
||||
/>
|
||||
|
||||
## Usage
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<Card
|
||||
icon={
|
||||
<svg width="148" height="36" viewBox="0 0 148 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M41.2547 35.9212C29.0201 35.9212 22.2786 34.229 21.976 33.8531C21.6351 23.415 21.6351 12.9687 21.976 2.53062C22.2786 2.19246 28.9831 0.951172 41.2547 0.951172C52.655 0.951172 57.0108 5.12499 57.0108 10.1265C57.0108 13.3599 55.0412 16.2929 51.1021 17.9851V18.5491C55.8369 18.8877 58.1471 21.9707 58.1471 25.4678C58.1471 30.8451 52.6555 35.9212 41.2547 35.9212ZM33.4899 16.4433L40.8756 16.4811C43.2998 16.1052 44.9287 14.7889 44.9287 12.7586C44.9287 10.2015 42.9967 8.8102 39.5502 8.8102C36.5958 8.8102 34.3611 9.29881 33.5279 9.93831C33.4899 12.0818 33.4899 14.2994 33.4899 16.4433ZM39.5882 27.2354C43.0347 27.2354 45.1178 25.6936 45.1178 23.0615C45.1178 20.918 43.4133 19.6395 40.8756 19.5645L33.4899 19.5268C33.4899 21.7075 33.4899 23.8883 33.5279 26.0323C34.3231 26.7086 36.5958 27.2354 39.5882 27.2354ZM93.7449 7.49392C94.048 16.6311 94.048 25.3173 93.7449 34.2667C90.2604 34.8308 86.5488 34.8308 83.0643 34.2667L82.0035 27.9121H81.3218C79.9584 33.4395 77.004 35.1694 72.4207 35.1694C63.1415 35.1694 61.437 27.649 61.437 18.3987C61.437 16.0675 61.5125 12.8713 61.5125 7.49392C65.6061 6.89228 69.7666 6.89228 73.8601 7.49392V20.8803C73.8601 24.716 75.8297 26.1445 78.1779 26.1445C79.8444 26.1445 81.5869 25.3173 82.4581 23.926V7.49392C86.196 6.89229 90.0071 6.89229 93.7449 7.49392ZM98.4297 34.2667C98.1267 25.1296 98.1267 16.4433 98.4297 7.49392C101.914 6.92987 105.626 6.92987 109.111 7.49392L110.171 13.849H110.853C112.216 8.3216 115.171 6.59171 119.754 6.59171C129.034 6.59171 130.738 14.1121 130.738 23.362C130.738 25.6936 130.662 28.8898 130.662 34.2667C126.569 34.8683 122.408 34.8683 118.315 34.2667V20.8803C118.315 17.0451 116.345 15.6161 113.997 15.6161C112.33 15.6161 110.588 16.4433 109.717 17.8346V34.2667C105.979 34.8683 102.168 34.8683 98.4297 34.2667Z" fill="white"/>
|
||||
</svg>
|
||||
|
||||
}
|
||||
href="/guides/frameworks/bun"
|
||||
|
||||
/>
|
||||
@@ -1,22 +0,0 @@
|
||||
<Card
|
||||
icon={
|
||||
<svg width="160" height="38" viewBox="-26 -7 220 45" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clipPath="url(#clip0_5291_19580)">
|
||||
<path d="M122.318 0.0154419H154.367V5.93096H141.653V37.0517H135.296V5.93096H122.318V0.0154419Z" fill="white"/>
|
||||
<path d="M69.608 0.0154419V5.93096H43.9181V15.4472H64.5779V21.3627H43.9181V31.1362H69.608V37.0517H37.5612L37.5586 0.0154419H69.608Z" fill="white"/>
|
||||
<path d="M85.6114 0.0308914H77.2921L107.09 37.0672H115.433L100.533 18.5618L115.41 0.0591477L107.09 0.0720044L96.3674 13.3889L85.6114 0.0308914Z" fill="white"/>
|
||||
<path d="M94.1482 26.4861L89.9821 21.3061L77.2683 37.0954H85.6114L94.1482 26.4861Z" fill="white"/>
|
||||
<path fillRule="evenodd" clipRule="evenodd" d="M37.784 37.0517L7.94614 0H0V37.0363H6.35692V7.91648L29.7981 37.0517H37.784Z" fill="white"/>
|
||||
<path d="M155.796 36.8255C155.331 36.8255 154.935 36.6642 154.603 36.3417C154.271 36.0191 154.107 35.6286 154.112 35.166C154.107 34.7161 154.271 34.3298 154.603 34.0073C154.935 33.6847 155.331 33.5234 155.796 33.5234C156.244 33.5234 156.636 33.6847 156.967 34.0073C157.304 34.3298 157.471 34.7161 157.476 35.166C157.471 35.4716 157.394 35.7517 157.239 36.0021C157.079 36.2568 156.877 36.4563 156.623 36.6006C156.373 36.7491 156.097 36.8255 155.796 36.8255Z" fill="white"/>
|
||||
<path d="M166.646 21.2232H169.463V32.0761C169.459 33.0735 169.243 33.9266 168.821 34.6439C168.395 35.3612 167.805 35.9087 167.047 36.2949C166.293 36.6769 165.41 36.8722 164.406 36.8722C163.489 36.8722 162.666 36.7066 161.934 36.3841C161.202 36.0615 160.62 35.5777 160.194 34.941C159.763 34.3043 159.552 33.5107 159.552 32.5599H162.373C162.378 32.9759 162.472 33.3366 162.653 33.638C162.834 33.9393 163.084 34.1685 163.403 34.3298C163.725 34.4911 164.096 34.5717 164.514 34.5717C164.966 34.5717 165.354 34.4783 165.668 34.2873C165.982 34.1006 166.224 33.8205 166.392 33.447C166.555 33.0777 166.642 32.6193 166.646 32.0761V21.2232Z" fill="white"/>
|
||||
<path d="M181.054 25.4676C180.985 24.8097 180.683 24.2961 180.158 23.9311C179.628 23.5619 178.943 23.3793 178.103 23.3793C177.513 23.3793 177.005 23.4685 176.583 23.6425C176.161 23.8208 175.833 24.0584 175.609 24.3598C175.386 24.6611 175.274 25.0049 175.265 25.3912C175.265 25.7138 175.342 25.9939 175.493 26.2273C175.644 26.465 175.846 26.6645 176.109 26.8258C176.367 26.9913 176.656 27.1271 176.971 27.2375C177.289 27.3478 177.608 27.4412 177.927 27.5176L179.395 27.8784C179.986 28.0142 180.559 28.1967 181.105 28.4301C181.652 28.6594 182.148 28.9522 182.583 29.3045C183.018 29.6568 183.363 30.0812 183.617 30.5778C183.871 31.0744 184 31.6558 184 32.3265C184 33.2305 183.767 34.0242 183.298 34.7118C182.828 35.3951 182.152 35.9299 181.265 36.3162C180.382 36.6982 179.314 36.8934 178.056 36.8934C176.841 36.8934 175.782 36.7067 174.89 36.3332C173.994 35.9639 173.296 35.4206 172.792 34.7075C172.288 33.9945 172.017 33.1244 171.978 32.1015H174.77C174.808 32.6363 174.981 33.082 175.274 33.4427C175.571 33.7993 175.958 34.0624 176.432 34.2407C176.91 34.4147 177.444 34.5038 178.034 34.5038C178.65 34.5038 179.193 34.4104 179.662 34.2279C180.128 34.0454 180.494 33.7908 180.757 33.4597C181.024 33.1329 181.157 32.7467 181.162 32.3053C181.157 31.902 181.036 31.5667 180.804 31.3035C180.567 31.0404 180.24 30.8197 179.822 30.6415C179.4 30.4632 178.909 30.3019 178.349 30.1618L176.566 29.7119C175.278 29.3851 174.257 28.8886 173.512 28.2222C172.762 27.5558 172.392 26.673 172.392 25.5652C172.392 24.6569 172.641 23.859 173.146 23.1756C173.645 22.4923 174.33 21.9618 175.196 21.584C176.066 21.202 177.048 21.0152 178.142 21.0152C179.253 21.0152 180.227 21.202 181.067 21.584C181.906 21.9618 182.566 22.4881 183.044 23.1586C183.522 23.8293 183.772 24.5975 183.785 25.4676H181.054Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_5291_19580">
|
||||
<rect width="184" height="37.3604" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>}
|
||||
href="/guides/frameworks/nextjs"
|
||||
|
||||
/>
|
||||
@@ -1,11 +0,0 @@
|
||||
<Card
|
||||
icon={
|
||||
<svg width="161" height="46" viewBox="0 5 161 46" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M148.083 16.1307C147.691 16.1307 147.31 16.2116 146.973 16.4025L136.3 22.5659C135.609 22.9636 135.189 23.7154 135.189 24.5147V36.8194C135.189 37.6184 135.609 38.3689 136.3 38.768L139.087 40.3742C140.441 41.0418 140.941 41.0311 141.557 41.0311C143.562 41.0311 144.707 39.8145 144.707 37.7V25.5606C144.707 25.389 144.558 25.2662 144.389 25.2662H143.053C142.881 25.2662 142.735 25.3921 142.735 25.5606V37.7063C142.735 38.6436 141.759 39.5865 140.175 38.7941L137.278 37.0947C137.175 37.0389 137.096 36.9372 137.096 36.8229V24.5182C137.096 24.4016 137.174 24.2826 137.278 24.2237L147.928 18.0824C148.028 18.025 148.146 18.025 148.245 18.0824L158.895 24.2237C158.997 24.2845 159.077 24.3979 159.077 24.5182V36.8229C159.077 36.9404 159.018 37.0607 158.918 37.1174L148.245 43.2587C148.151 43.3132 148.025 43.3132 147.928 43.2587L145.186 41.6273C145.104 41.5794 144.993 41.5832 144.915 41.6273C144.158 42.0563 144.015 42.106 143.306 42.3523C143.131 42.4131 142.865 42.5079 143.396 42.8058L146.977 44.9159C147.317 45.1131 147.697 45.2104 148.087 45.2104C148.482 45.2104 148.857 45.1159 149.198 44.9159L159.87 38.7746C160.561 38.3727 160.981 37.625 160.981 36.826V24.5213C160.981 23.722 160.561 22.9718 159.87 22.5725L149.198 16.4091C148.863 16.2182 148.48 16.1373 148.087 16.1373L148.083 16.1307ZM150.938 24.9232C147.899 24.9232 146.089 26.2166 146.089 28.3674C146.089 30.6979 147.886 31.3417 150.803 31.6302C154.292 31.9719 154.564 32.4843 154.564 33.1712C154.564 34.3626 153.614 34.8706 151.369 34.8706C148.549 34.8706 147.928 34.1664 147.721 32.7605C147.696 32.6099 147.58 32.4887 147.426 32.4887H146.041C145.957 32.4905 145.878 32.5245 145.819 32.5836C145.759 32.6427 145.725 32.7223 145.724 32.8058C145.724 34.6019 146.701 36.7259 151.366 36.7259C154.743 36.7259 156.691 35.4031 156.691 33.0776C156.691 30.7786 155.118 30.1572 151.842 29.7235C148.535 29.2826 148.216 29.0716 148.216 28.2959C148.216 27.6559 148.484 26.7999 150.936 26.7999C153.125 26.7999 153.935 27.2723 154.267 28.7488C154.296 28.8873 154.418 29.0007 154.561 29.0007H155.947C156.032 29.0007 156.114 28.9484 156.174 28.8873C156.232 28.8221 156.273 28.7488 156.264 28.6606C156.05 26.1178 154.355 24.9216 150.939 24.9216L150.938 24.9232Z" fill="#83CD29"/>
|
||||
<path d="M85.3372 0.000411899C85.218 0.000627142 85.1008 0.0318872 84.9974 0.0911147C84.8944 0.151354 84.8089 0.237373 84.7493 0.340699C84.6898 0.444025 84.6581 0.561093 84.6575 0.680368V18.0153C84.6575 18.1854 84.5782 18.3378 84.4308 18.4232C84.3586 18.4653 84.2764 18.4875 84.1928 18.4875C84.1092 18.4875 84.0271 18.4653 83.9549 18.4232L81.1223 16.7918C80.9157 16.6722 80.6812 16.6093 80.4425 16.6093C80.2038 16.6093 79.9694 16.6722 79.7627 16.7918L68.4558 23.3176C68.0331 23.5614 67.7755 24.0307 67.7755 24.5185V37.5706C67.7751 37.8094 67.8378 38.0441 67.9572 38.251C68.0766 38.4579 68.2485 38.6296 68.4554 38.7488L79.7627 45.275C79.9692 45.3948 80.2038 45.458 80.4425 45.458C80.6813 45.458 80.9158 45.3948 81.1223 45.275L92.4296 38.7488C92.6366 38.6296 92.8085 38.4579 92.9279 38.251C93.0472 38.0441 93.1099 37.8094 93.1096 37.5706V5.03095C93.1096 4.53587 92.8394 4.07133 92.4073 3.83009L85.6773 0.0681241C85.5715 0.00923023 85.4543 -0.000847862 85.3372 0.000411899ZM12.5986 16.2929C12.3828 16.3017 12.1803 16.3392 11.9866 16.4516L0.679647 22.9775C0.472515 23.0965 0.300543 23.2682 0.181181 23.4751C0.0618184 23.682 -0.000687219 23.9168 5.69899e-06 24.1557L0.0229963 41.6724C0.0229963 41.9161 0.148972 42.1423 0.363132 42.2613C0.573197 42.3873 0.833653 42.3873 1.04277 42.2613L7.75006 38.409C8.17523 38.157 8.45237 37.7174 8.45237 37.2311V29.0505C8.45237 28.5624 8.70905 28.1151 9.13265 27.8726L11.9879 26.2186C12.1942 26.0986 12.4289 26.036 12.6675 26.0372C12.9063 26.0357 13.1411 26.0984 13.3475 26.2186L16.2015 27.8717C16.6244 28.1142 16.8811 28.562 16.8811 29.0496V37.2298C16.8811 37.7167 17.1646 38.1589 17.5834 38.4077L24.2907 42.26C24.5017 42.386 24.7616 42.386 24.9704 42.26C25.1782 42.1404 25.3105 41.9146 25.3105 41.6711L25.3332 24.1551C25.3345 23.9161 25.2723 23.681 25.1529 23.474C25.0334 23.2669 24.8611 23.0954 24.6535 22.9769L13.3465 16.4513C13.1554 16.3392 12.9519 16.3014 12.7346 16.2926H12.5992L12.5986 16.2929ZM114.206 16.4516C113.967 16.451 113.733 16.5136 113.526 16.633L102.219 23.1592C101.797 23.4033 101.538 23.8496 101.538 24.3371V37.3892C101.538 37.8799 101.815 38.3246 102.241 38.5671L113.457 44.9603C113.871 45.1966 114.377 45.2145 114.794 44.9824L121.592 41.1981C121.808 41.0784 121.954 40.8548 121.954 40.6091C121.955 40.3635 121.827 40.1424 121.614 40.0202L110.239 33.494C110.026 33.3724 109.876 33.1265 109.876 32.8821V28.8008C109.876 28.557 110.028 28.3334 110.239 28.2118L113.773 26.1723C113.984 26.0507 114.242 26.0507 114.454 26.1723L117.99 28.2118C118.094 28.2713 118.18 28.3571 118.239 28.4605C118.299 28.564 118.33 28.6813 118.33 28.8008V32.0185C118.33 32.1379 118.361 32.2553 118.421 32.3587C118.48 32.4622 118.566 32.548 118.67 32.6074C118.882 32.7296 119.138 32.7303 119.35 32.6074L126.125 28.6653C126.546 28.4209 126.805 27.9734 126.805 27.4875V24.3381C126.805 24.0993 126.743 23.8647 126.623 23.6579C126.504 23.4511 126.332 23.2793 126.125 23.1599L114.886 16.6337C114.68 16.5141 114.445 16.4515 114.206 16.4523L114.206 16.4516ZM80.397 26.1959C80.4603 26.1956 80.5226 26.2111 80.5784 26.2409L84.4531 28.4842C84.5583 28.545 84.6345 28.6575 84.6345 28.7787V33.2654C84.6345 33.3872 84.559 33.4994 84.4531 33.5598L80.5784 35.8031C80.4729 35.863 80.3441 35.863 80.2383 35.8031L76.3636 33.5598C76.2581 33.499 76.1822 33.3866 76.1822 33.2654V28.7781C76.1822 28.6565 76.2584 28.545 76.3636 28.4836L80.2383 26.2406C80.2912 26.2101 80.3378 26.1959 80.397 26.1959Z" fill="white"/>
|
||||
<path d="M46.5657 16.3833C46.3269 16.3829 46.0922 16.4455 45.8854 16.5647L34.5781 23.0682C34.1554 23.312 33.8984 23.7816 33.8984 24.2691V37.3212C33.8978 37.56 33.9603 37.7948 34.0797 38.0016C34.1991 38.2085 34.371 38.3801 34.5781 38.4991L45.8854 45.0253C46.0919 45.1451 46.3264 45.2082 46.5652 45.2082C46.804 45.2082 47.0385 45.1451 47.245 45.0253L58.5523 38.4991C58.7593 38.3799 58.9311 38.2082 59.0505 38.0013C59.1699 37.7944 59.2326 37.5597 59.2322 37.3209V24.2688C59.2322 23.7806 58.9753 23.3114 58.552 23.0679L47.2447 16.5644C47.038 16.4446 46.8032 16.382 46.5644 16.383L46.5657 16.3833ZM114.183 28.0308C114.138 28.0308 114.088 28.0308 114.047 28.0528L111.872 29.322C111.831 29.3445 111.798 29.3773 111.774 29.417C111.75 29.4568 111.737 29.5021 111.736 29.5485V32.0412C111.736 32.1351 111.79 32.2207 111.872 32.268L114.047 33.5142C114.085 33.5373 114.128 33.5496 114.172 33.5496C114.216 33.5496 114.259 33.5373 114.296 33.5142L116.471 32.268C116.552 32.2217 116.607 32.1351 116.607 32.0412V29.5485C116.607 29.4546 116.552 29.3689 116.471 29.3217L114.296 28.0525C114.256 28.0286 114.228 28.0304 114.183 28.0304L114.183 28.0308Z" fill="#83CD29"/>
|
||||
</svg>
|
||||
}
|
||||
href="/guides/frameworks/nodejs"
|
||||
|
||||
/>
|
||||
@@ -1,206 +0,0 @@
|
||||
<Card
|
||||
icon={
|
||||
<svg
|
||||
width="180"
|
||||
height="38"
|
||||
viewBox="22 0 184 58"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<g filter="url(#filter0_d_5334_22407)">
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M47.4777 45.058C47.8835 50.3106 47.8835 52.7727 47.8835 55.4603H35.8237C35.8237 54.8748 35.8341 54.3393 35.8445 53.7962C35.8771 52.1081 35.9111 50.3479 35.6397 46.7928C35.2811 41.5885 33.0571 40.4319 28.9676 40.4319H25.3444H10V30.9627H29.5415C34.7071 30.9627 37.2898 29.379 37.2898 25.1865C37.2898 21.5001 34.7071 19.2659 29.5415 19.2659H10V10H31.6937C43.3882 10 49.1997 15.5659 49.1997 24.457C49.1997 31.1071 45.1102 35.4441 39.5857 36.167C44.2492 37.1068 46.9754 39.7813 47.4777 45.058Z"
|
||||
fill="#E5F3FF"
|
||||
/>
|
||||
</g>
|
||||
<path
|
||||
d="M10 55.4604V48.4012H22.7516C24.8815 48.4012 25.3439 49.9932 25.3439 50.9423V55.4604H10Z"
|
||||
fill="#E5F3FF"
|
||||
/>
|
||||
<g filter="url(#filter1_d_5334_22407)">
|
||||
<path
|
||||
d="M192.998 23.7133H181.045L175.606 31.3573L170.309 23.7133H157.498L169.021 39.5059L156.496 55.8753H168.448L174.819 47.1497L181.188 55.8753H194L181.403 39.0011L192.998 23.7133Z"
|
||||
fill="#FFF1F1"
|
||||
/>
|
||||
</g>
|
||||
<g filter="url(#filter2_d_5334_22407)">
|
||||
<path
|
||||
d="M117.711 29.0434C116.351 25.2935 113.416 22.6975 107.762 22.6975C102.966 22.6975 99.5309 24.861 97.8132 28.3943V23.5629H86.2185V55.7246H97.8132V39.9322C97.8132 35.1008 99.1731 31.9279 102.966 31.9279C106.474 31.9279 107.333 34.2354 107.333 38.6343V55.7246H118.927V39.9322C118.927 35.1008 120.215 31.9279 124.08 31.9279C127.588 31.9279 128.375 34.2354 128.375 38.6343V55.7246H139.97V35.5335C139.97 28.827 137.393 22.6975 128.59 22.6975C123.222 22.6975 119.428 25.4377 117.711 29.0434Z"
|
||||
fill="#FFFAEA"
|
||||
/>
|
||||
</g>
|
||||
<g filter="url(#filter3_d_5334_22407)">
|
||||
<path
|
||||
d="M74.1446 43.2432C73.071 45.7671 71.067 46.8487 67.9178 46.8487C64.4107 46.8487 61.5477 44.9738 61.2614 41.0076H83.6637V37.7628C83.6637 29.0372 78.0096 21.6817 67.345 21.6817C57.3964 21.6817 49.9529 28.9651 49.9529 39.1328C49.9529 49.3725 57.2534 55.5742 67.4883 55.5742C75.934 55.5742 81.803 51.464 83.4491 44.1084L74.1446 43.2432ZM61.4047 35.3829C61.8339 32.3542 63.4803 30.0466 67.202 30.0466C70.6375 30.0466 72.4983 32.4984 72.6415 35.3829H61.4047Z"
|
||||
fill="#F1FFF0"
|
||||
/>
|
||||
</g>
|
||||
<g filter="url(#filter4_d_5334_22407)">
|
||||
<path
|
||||
d="M143.762 23.7765V55.9383H155.357V23.7765H143.762ZM143.691 20.7478H155.429V10.5078H143.691V20.7478Z"
|
||||
fill="white"
|
||||
/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter
|
||||
id="filter0_d_5334_22407"
|
||||
x="0"
|
||||
y="0"
|
||||
width="59.1997"
|
||||
height="65.4604"
|
||||
filterUnits="userSpaceOnUse"
|
||||
colorInterpolationFilters="sRGB"
|
||||
>
|
||||
<feFlood floodOpacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset />
|
||||
<feGaussianBlur stdDeviation="5" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0.203922 0 0 0 0 0.45098 0 0 0 0 0.74902 0 0 0 1 0"
|
||||
/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5334_22407" />
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_5334_22407"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<filter
|
||||
id="filter1_d_5334_22407"
|
||||
x="146.496"
|
||||
y="13.7133"
|
||||
width="57.5044"
|
||||
height="52.162"
|
||||
filterUnits="userSpaceOnUse"
|
||||
colorInterpolationFilters="sRGB"
|
||||
>
|
||||
<feFlood floodOpacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset />
|
||||
<feGaussianBlur stdDeviation="5" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0.882353 0 0 0 0 0.180392 0 0 0 0 0.227451 0 0 0 1 0"
|
||||
/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5334_22407" />
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_5334_22407"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<filter
|
||||
id="filter2_d_5334_22407"
|
||||
x="78.2185"
|
||||
y="14.6975"
|
||||
width="69.7512"
|
||||
height="49.0271"
|
||||
filterUnits="userSpaceOnUse"
|
||||
colorInterpolationFilters="sRGB"
|
||||
>
|
||||
<feFlood floodOpacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset />
|
||||
<feGaussianBlur stdDeviation="4" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0.937255 0 0 0 0 0.72549 0 0 0 0 0.117647 0 0 0 1 0"
|
||||
/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5334_22407" />
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_5334_22407"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<filter
|
||||
id="filter3_d_5334_22407"
|
||||
x="41.9529"
|
||||
y="13.6817"
|
||||
width="49.7108"
|
||||
height="49.8926"
|
||||
filterUnits="userSpaceOnUse"
|
||||
colorInterpolationFilters="sRGB"
|
||||
>
|
||||
<feFlood floodOpacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset />
|
||||
<feGaussianBlur stdDeviation="4" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0.384314 0 0 0 0 0.788235 0 0 0 0 0.372549 0 0 0 1 0"
|
||||
/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5334_22407" />
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_5334_22407"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4_d_5334_22407"
|
||||
x="133.691"
|
||||
y="0.507791"
|
||||
width="31.738"
|
||||
height="65.4305"
|
||||
filterUnits="userSpaceOnUse"
|
||||
colorInterpolationFilters="sRGB"
|
||||
>
|
||||
<feFlood floodOpacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset />
|
||||
<feGaussianBlur stdDeviation="5" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0.596078 0 0 0 0 0.192157 0 0 0 0 0.556863 0 0 0 1 0"
|
||||
/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5334_22407" />
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_5334_22407"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
}
|
||||
href="/guides/frameworks/remix"
|
||||
/>
|
||||
@@ -1,34 +0,0 @@
|
||||
<Card
|
||||
icon={
|
||||
<svg width="187" height="37" viewBox="0 0 187 35" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clipPath="url(#clip0_14306_73387)">
|
||||
<path d="M48.6289 21.4438C48.8213 23.243 50.4578 26.3272 55.2072 26.3272C59.3465 26.3272 61.3364 23.6928 61.3364 21.1226C61.3364 18.8094 59.7638 16.9138 56.6513 16.2712L54.4048 15.7894C53.5385 15.6287 52.961 15.1468 52.961 14.3758C52.961 13.4762 53.8594 12.8015 54.9826 12.8015C56.7795 12.8015 57.4533 13.9902 57.5818 14.922L61.1437 14.1188C60.9513 12.416 59.4429 9.55667 54.9505 9.55667C51.549 9.55667 49.0461 11.902 49.0461 14.7291C49.0461 16.9459 50.4257 18.7773 53.4743 19.4519L55.5602 19.9338C56.7795 20.1908 57.2609 20.7692 57.2609 21.476C57.2609 22.3113 56.5871 23.0502 55.175 23.0502C53.314 23.0502 52.3831 21.8936 52.2871 20.6406L48.6289 21.4438Z" fill="white"/>
|
||||
<path d="M74.9758 25.8453H79.0513C78.987 25.2991 78.8907 24.2068 78.8907 22.9859V10.0385H74.6225V19.227C74.6225 21.0583 73.5317 22.3434 71.6385 22.3434C69.649 22.3434 68.7503 20.9298 68.7503 19.1628V10.0385H64.4824V20.0302C64.4824 23.4679 66.6644 26.263 70.4832 26.263C72.1515 26.263 73.9814 25.6204 74.8477 24.1425C74.8477 24.7851 74.9116 25.524 74.9758 25.8453Z" fill="white"/>
|
||||
<path d="M87.7128 31.9496V24.3033C88.4827 25.3634 90.0875 26.2309 92.2697 26.2309C96.73 26.2309 99.714 22.6968 99.714 17.9098C99.714 13.2193 97.0509 9.68521 92.43 9.68521C90.0557 9.68521 88.2907 10.7454 87.5847 11.9663V10.0386H83.4453V31.9496H87.7128ZM95.5104 17.942C95.5104 20.7693 93.7778 22.4077 91.5955 22.4077C89.4139 22.4077 87.6489 20.7371 87.6489 17.942C87.6489 15.1469 89.4139 13.5084 91.5955 13.5084C93.7778 13.5084 95.5104 15.1469 95.5104 17.942Z" fill="white"/>
|
||||
<path d="M102.131 21.5402C102.131 24.0141 104.184 26.2951 107.554 26.2951C109.896 26.2951 111.404 25.2027 112.206 23.9498C112.206 24.5602 112.271 25.4276 112.367 25.8453H116.282C116.185 25.2991 116.09 24.1747 116.09 23.3394V15.5645C116.09 12.3838 114.228 9.55667 109.223 9.55667C104.987 9.55667 102.708 12.2875 102.452 14.7613L106.238 15.5645C106.367 14.183 107.393 12.9943 109.254 12.9943C111.052 12.9943 111.918 13.926 111.918 15.0504C111.918 15.5966 111.63 16.0464 110.731 16.1749L106.848 16.7532C104.217 17.1388 102.131 18.713 102.131 21.5402ZM108.452 23.1145C107.073 23.1145 106.398 22.2149 106.398 21.2832C106.398 20.0624 107.265 19.4519 108.356 19.2913L111.918 18.7451V19.4519C111.918 22.2471 110.249 23.1145 108.452 23.1145Z" fill="white"/>
|
||||
<path d="M124.53 25.8454V23.9177C125.364 25.2671 127.033 26.2309 129.215 26.2309C133.708 26.2309 136.66 22.6647 136.66 17.8777C136.66 13.1871 133.997 9.62095 129.376 9.62095C127.033 9.62095 125.3 10.649 124.594 11.7734V2.58499H120.391V25.8454H124.53ZM132.392 17.9098C132.392 20.8013 130.659 22.4077 128.477 22.4077C126.327 22.4077 124.53 20.7692 124.53 17.9098C124.53 15.0183 126.327 13.4441 128.477 13.4441C130.659 13.4441 132.392 15.0183 132.392 17.9098Z" fill="white"/>
|
||||
<path d="M139.078 21.5402C139.078 24.0141 141.132 26.2951 144.501 26.2951C146.843 26.2951 148.352 25.2027 149.154 23.9498C149.154 24.5602 149.218 25.4276 149.314 25.8453H153.229C153.133 25.2991 153.037 24.1747 153.037 23.3394V15.5645C153.037 12.3838 151.176 9.55667 146.17 9.55667C141.934 9.55667 139.656 12.2875 139.399 14.7613L143.185 15.5645C143.314 14.183 144.341 12.9943 146.201 12.9943C147.999 12.9943 148.865 13.926 148.865 15.0504C148.865 15.5966 148.576 16.0464 147.678 16.1749L143.795 16.7532C141.164 17.1388 139.078 18.713 139.078 21.5402ZM145.4 23.1145C144.02 23.1145 143.346 22.2149 143.346 21.2832C143.346 20.0624 144.212 19.4519 145.303 19.2913L148.865 18.7451V19.4519C148.865 22.2471 147.197 23.1145 145.4 23.1145Z" fill="white"/>
|
||||
<path d="M155.99 21.4438C156.182 23.243 157.819 26.3272 162.568 26.3272C166.708 26.3272 168.697 23.6928 168.697 21.1226C168.697 18.8094 167.125 16.9138 164.012 16.2712L161.766 15.7894C160.9 15.6287 160.322 15.1468 160.322 14.3758C160.322 13.4762 161.22 12.8015 162.344 12.8015C164.141 12.8015 164.815 13.9902 164.943 14.922L168.505 14.1188C168.312 12.416 166.804 9.55667 162.312 9.55667C158.91 9.55667 156.407 11.902 156.407 14.7291C156.407 16.9459 157.787 18.7773 160.836 19.4519L162.921 19.9338C164.141 20.1908 164.622 20.7692 164.622 21.476C164.622 22.3113 163.948 23.0502 162.536 23.0502C160.675 23.0502 159.745 21.8936 159.648 20.6406L155.99 21.4438Z" fill="white"/>
|
||||
<path d="M175.179 16.1428C175.275 14.6971 176.495 13.0264 178.709 13.0264C181.147 13.0264 182.175 14.5685 182.239 16.1428H175.179ZM182.656 20.2551C182.143 21.6687 181.051 22.6647 179.062 22.6647C176.944 22.6647 175.179 21.1547 175.083 19.0664H186.378C186.378 19.0021 186.442 18.3596 186.442 17.7491C186.442 12.673 183.522 9.55667 178.645 9.55667C174.602 9.55667 170.879 12.8336 170.879 17.8777C170.879 23.2108 174.697 26.3272 179.03 26.3272C182.913 26.3272 185.416 24.0461 186.218 21.3153L182.656 20.2551Z" fill="white"/>
|
||||
<path d="M20.4625 35.4236C19.544 36.5803 17.6817 35.9466 17.6596 34.4697L17.3359 12.8683H31.8607C34.4915 12.8683 35.9588 15.9069 34.3229 17.9673L20.4625 35.4236Z" fill="url(#paint0_linear_14306_73387)"/>
|
||||
<path d="M20.4625 35.4236C19.544 36.5803 17.6817 35.9466 17.6596 34.4697L17.3359 12.8683H31.8607C34.4915 12.8683 35.9588 15.9069 34.3229 17.9673L20.4625 35.4236Z" fill="url(#paint1_linear_14306_73387)" fillOpacity="0.2"/>
|
||||
<path d="M14.5559 0.665201C15.4744 -0.491583 17.3367 0.142251 17.3588 1.61917L17.5007 23.2205H3.15769C0.526788 23.2205 -0.940513 20.1819 0.695459 18.1215L14.5559 0.665201Z" fill="#3ECF8E"/>
|
||||
</g>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_14306_73387" x1="17.3359" y1="17.6579" x2="30.245" y2="23.0719" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#249361"/>
|
||||
<stop offset="1" stopColor="#3ECF8E"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_14306_73387" x1="11.6127" y1="9.82176" x2="17.4999" y2="20.9041" gradientUnits="userSpaceOnUse">
|
||||
<stop/>
|
||||
<stop offset="1" stopOpacity="0"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_14306_73387">
|
||||
<rect width="186.619" height="36.296" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
||||
}
|
||||
href="/guides/frameworks/supabase-guides-overview"
|
||||
/>
|
||||
@@ -3,4 +3,4 @@
|
||||
- Setup a project in {framework}
|
||||
- Ensure TypeScript is installed
|
||||
- [Create a Trigger.dev account](https://cloud.trigger.dev)
|
||||
- [Create a new Trigger.dev project](/guides/dashboard/creating-a-project)
|
||||
- Create a new Trigger.dev project
|
||||
|
||||
@@ -3,9 +3,7 @@ title: "Video walkthrough"
|
||||
description: "Go from zero to a working task in your Next.js app in 10 minutes."
|
||||
---
|
||||
|
||||
<div className="w-full h-full aspect-video">
|
||||
<iframe width="100%" height="100%" src="https://www.youtube.com/embed/YH_4c0K7fGM?si=5JzZmZseuqI5aciM" title="Trigger.dev walkthrough" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerPolicy="strict-origin-when-cross-origin" allowFullScreen/>
|
||||
</div>
|
||||
<iframe width="100%" height="315" src="https://www.youtube.com/embed/YH_4c0K7fGM?si=5JzZmZseuqI5aciM" title="Trigger.dev walkthrough" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerPolicy="strict-origin-when-cross-origin" allowFullScreen/>
|
||||
|
||||
### In this video we cover the following topics:
|
||||
|
||||
|
||||