diff --git a/docs/docs.json b/docs/docs.json index ba9fb7bde2..b1bb940224 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -312,6 +312,7 @@ "pages": [ "guides/example-projects/batch-llm-evaluator", "guides/example-projects/claude-thinking-chatbot", + "guides/example-projects/turborepo-monorepo-prisma", "guides/example-projects/realtime-fal-ai", "guides/example-projects/realtime-csv-importer", "guides/example-projects/vercel-ai-sdk-image-generator" diff --git a/docs/guides/example-projects/turborepo-monorepo-prisma.mdx b/docs/guides/example-projects/turborepo-monorepo-prisma.mdx new file mode 100644 index 0000000000..b4ff1108a0 --- /dev/null +++ b/docs/guides/example-projects/turborepo-monorepo-prisma.mdx @@ -0,0 +1,195 @@ +--- +title: "Turborepo monorepo with Prisma" +sidebarTitle: "Turborepo monorepo with Prisma" +description: "Two example projects demonstrating how to use Prisma and Trigger.dev in a Turborepo monorepo setup." +--- + +## Overview + +These examples demonstrate two different ways of using Prisma and Trigger.dev in a Turborepo monorepo. In both examples, a task is triggered from a Next.js app using a server action, which uses Prisma to add a user to a database table. The examples differ in how Trigger.dev is installed and configured. + +- Example 1: Turborepo monorepo demo with Trigger.dev and Prisma packages +- Example 2: Turborepo monorepo demo with a Prisma package and Trigger.dev installed in a Next.js app + + + +You can either fork the repos below, or simply check out the project structures and code to get an idea of how to set up Trigger.dev in your own monorepos. + + + +## Example 1: Turborepo monorepo demo with Trigger.dev and Prisma packages + +This simple example demonstrates how to use Trigger.dev and Prisma as packages inside a monorepo created with Turborepo. The Trigger.dev task is triggered by a button click in a Next.js app which triggers the task via a server action. + +### GitHub repo + +Fork the GitHub repo below to get started with this example project. + + + Click here to view the full code for this project in our examples repository on GitHub. You can + fork it and use it as a starting point for your own project. + + +### Features + +- This monorepo has been created using the [Turborepo CLI](https://turbo.build/repo), following the official [Prisma and Turborepo docs](https://www.prisma.io/docs/guides/turborepo), and then adapted for use with Trigger.dev. +- [pnpm](https://pnpm.io/) has been used as the package manager. +- A tasks package (`@repo/tasks`) using [Trigger.dev](https://trigger.dev) is used to create and execute tasks from an app inside the monorepo. +- A database package (`@repo/db`) using [Prisma ORM](https://www.prisma.io/docs/orm/) is used to interact with the database. You can use any popular Postgres database supported by Prisma, e.g. [Supabase](https://supabase.com/), [Neon](https://neon.tech/), etc. +- A [Next.js](https://nextjs.org/) example app (`apps/web`) to show how to trigger the task via a server action. + +### Project structure + +Simplified project structure for this example: + +``` +| +| — apps/ +| | — web/ # Next.js frontend application +| | | — app/ # Next.js app router +| | | | — api/ +| | | | | — actions.ts # Server actions for triggering tasks +| | | | — page.tsx # Main page with "Add new user" button +| | | | — layout.tsx # App layout +| | | — package.json # Dependencies including @repo/db and @repo/tasks +| | +| | — docs/ # Documentation app (not fully implemented) +| +| — packages/ +| | — database/ # Prisma database package (@repo/db) +| | | — prisma/ +| | | | — schema.prisma # Database schema definition +| | | — generated/ # Generated Prisma client (gitignored) +| | | — src/ +| | | | — index.ts # Exports from the database package +| | | — package.json # Database package dependencies +| | +| | — tasks/ # Trigger.dev tasks package (@repo/tasks) +| | | — src/ +| | | | — index.ts # Exports from the tasks package +| | | | — trigger/ +| | | | — index.ts # Exports the tasks +| | | | — addNewUser.ts # Task implementation for adding users +| | | — trigger.config.ts # Trigger.dev configuration +| | | — package.json # Tasks package dependencies +| | +| | — ui/ # UI components package (referenced but not detailed) +| +| — turbo.json # Turborepo configuration +| — package.json # Root package.json with workspace config +``` + +### Relevant files and code + +#### Database package + +- Prisma is added as a package in [`/packages/database`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/database/) and exported as `@repo/db` in the [`package.json`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/database/package.json) file. +- The schema is defined in the [`prisma/schema.prisma`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/database/prisma/schema.prisma) file. + +#### Tasks package + + + +to run `pnpm dlx trigger.dev@latest init` in a blank packages folder, you have to add a `package.json` file first, otherwise it will attempt to add Trigger.dev files in the root of your monorepo. + + + +- Trigger.dev is added as a package in [`/packages/tasks`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks) and exported as `@repo/tasks` in the [`package.json`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks/package.json) file. +- The [`addNewUser.ts`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks/src/trigger/addNewUser.ts) task adds a new user to the database. +- The [`packages/tasks/src/index.ts`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks/src/index.ts) file exports values and types from the Trigger.dev SDK, and is exported from the package via the [`package.json`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks/package.json) file. +- The [`packages/tasks/src/trigger/index.ts`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks/src/trigger/index.ts) file exports the task from the package. Every task must be exported from the package like this. +- The [`trigger.config.ts`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks/trigger.config.ts) file configures the Trigger.dev project settings. This is where the Trigger.dev [Prisma build extension](https://trigger.dev/docs/config/extensions/prismaExtension) is added, which is required to use Prisma in the Trigger.dev task. + + +You must include the version of Prisma you are using in the `trigger.config.ts` file, otherwise the Prisma build extension will not work. Learn more about our [Prisma build extension](/config/extensions/prismaExtension). + + + +#### The Next.js app `apps/web` + +- The app is a simple Next.js app using the App Router, that uses the `@repo/db` package to interact with the database and the `@repo/tasks` package to trigger the task. These are both added as dependencies in the [`package.json`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/apps/web/package.json) file. +- The task is triggered from a button click in the app in [`page.tsx`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/apps/web/app/page.tsx), which uses a server action in [`/app/api/actions.ts`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/apps/web/app/api/actions.ts) to trigger the task with an example payload. + +### Running the example + +To run this example, check out the full instructions [in the GitHub repo README file](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/README.md). + +## Example 2: Turborepo monorepo demo with a Prisma package and Trigger.dev installed in a Next.js app + +This example demonstrates how to use Trigger.dev and Prisma in a monorepo created with Turborepo. Prisma has been added as a package, and Trigger.dev has been installed in a Next.js app. The task is triggered by a button click in the app via a server action. + +### GitHub repo + +Fork the GitHub repo below to get started with this example project. + + + Click here to view the full code for this project in our examples repository on GitHub. You can + fork it and use it as a starting point for your own project. + + +### Features + +- This monorepo has been created using the [Turborepo CLI](https://turbo.build/repo), following the official [Prisma and Turborepo docs](https://www.prisma.io/docs/guides/turborepo), and then adapted for use with Trigger.dev. +- [pnpm](https://pnpm.io/) has been used as the package manager. +- A database package (`@repo/db`) using [Prisma ORM](https://www.prisma.io/docs/orm/) is used to interact with the database. You can use any popular Postgres database supported by Prisma, e.g. [Supabase](https://supabase.com/), [Neon](https://neon.tech/), etc. +- A [Next.js](https://nextjs.org/) example app (`apps/web`) to show how to trigger the task via a server action. +- Trigger.dev initialized and an `addNewUser` task created in the `web` app. + +### Project structure + +Simplified project structure for this example: + +``` +| +| — apps/ +| | — web/ # Next.js frontend application +| | | — app/ # Next.js app router +| | | | — api/ +| | | | | — actions.ts # Server actions for triggering tasks +| | | | — page.tsx # Main page with "Add new user" button +| | | — src/ +| | | | — trigger/ +| | | | — addNewUser.ts # Task implementation for adding users +| | | — trigger.config.ts # Trigger.dev configuration +| | | — package.json # Dependencies including @repo/db +| | +| | — docs/ # Documentation app +| | — app/ +| | — page.tsx # Docs landing page +| +| — packages/ +| | — database/ # Prisma database package (@repo/db) +| | | — prisma/ +| | | | — schema.prisma # Database schema definition +| | +| | — ui/ # UI components package +| +| — turbo.json # Turborepo configuration +| — package.json # Root package.json with workspace config +``` + +## Relevant files and code + +### Database package (`@repo/db`) + +- Located in [`/packages/database/`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-trigger/packages/database/) and exported as `@repo/db` +- Schema defined in [`schema.prisma`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-trigger/packages/database/prisma/schema.prisma) +- Provides database access to other packages and apps + +### Next.js app (`apps/web`) + +- Contains Trigger.dev configuration in [`trigger.config.ts`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-trigger/apps/web/trigger.config.ts) +- Trigger.dev tasks are defined in [`src/trigger/`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-trigger/apps/web/src/trigger/) (e.g., [`addNewUser.ts`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-trigger/apps/web/src/trigger/addNewUser.ts)) +- Demonstrates triggering tasks via server actions in [`app/api/actions.ts`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-trigger/apps/web/app/api/actions.ts) + +### Running the example + +To run this example, check out the full instructions [in the GitHub repo README file](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-trigger/README.md). diff --git a/docs/guides/introduction.mdx b/docs/guides/introduction.mdx index 0a72541a8f..8b7347e63d 100644 --- a/docs/guides/introduction.mdx +++ b/docs/guides/introduction.mdx @@ -19,33 +19,37 @@ mode: "center" 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 | -| [Supabase database webhooks](/guides/frameworks/supabase-edge-functions-database-webhooks) | Trigger tasks using Supabase database webhooks | -| [Using webhooks in Next.js](/guides/frameworks/nextjs-webhooks) | Trigger tasks from a webhook in Next.js | -| [Using webhooks in Remix](/guides/frameworks/remix-webhooks) | Trigger tasks from a webhook in Remix | -| [Stripe webhooks](/guides/examples/stripe-webhook) | Trigger tasks from incoming Stripe webhook events | +| 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 | +| [Python image processing](/guides/python/python-image-processing) | Use Python and Pillow to process images | +| [Python web crawler](/guides/python/python-crawl4ai) | Use Python, Crawl4AI and Playwright to create a headless web crawler | +| [Python PDF form extractor](/guides/python/python-pdf-form-extractor) | Use Python, PyMuPDF and Trigger.dev to extract data from a PDF form | +| [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 | +| [Supabase database webhooks](/guides/frameworks/supabase-edge-functions-database-webhooks) | Trigger tasks using Supabase database webhooks | +| [Using webhooks in Next.js](/guides/frameworks/nextjs-webhooks) | Trigger tasks from a webhook in Next.js | +| [Using webhooks in Remix](/guides/frameworks/remix-webhooks) | Trigger tasks from a webhook in Remix | +| [Stripe webhooks](/guides/examples/stripe-webhook) | Trigger tasks from incoming Stripe webhook events | ## Example projects Example projects are full projects with example repos you can fork and use. These are a great way of learning how to encorporate Trigger.dev into your project. -| Example project | Description | Framework | GitHub | -| :-------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- | :-------- | :---------------------------------------------------------------------------------------------------- | -| [Batch LLM Evaluator](/guides/example-projects/batch-llm-evaluator) | Evaluate multiple LLM models and stream the results to the frontend. | Next.js | [View the repo](https://github.com/triggerdotdev/examples/tree/main/batch-llm-evaluator) | -| [Claude thinking chatbot](/guides/example-projects/claude-thinking-chatbot) | Use Vercel's AI SDK and Anthropic's Claude 3.7 model to create a thinking chatbot. | Next.js | [View the repo](https://github.com/triggerdotdev/examples/tree/main/claude-thinking-chatbot) | -| [Realtime Fal.ai image generation](/guides/example-projects/realtime-fal-ai) | Generate an image from a prompt using Fal.ai and show the progress of the task on the frontend using Realtime. | Next.js | [View the repo](https://github.com/triggerdotdev/examples/tree/main/realtime-fal-ai-image-generation) | -| [Realtime CSV Importer](/guides/example-projects/realtime-csv-importer) | Upload a CSV file and see the progress of the task streamed to the frontend. | Next.js | [View the repo](https://github.com/triggerdotdev/examples/tree/main/realtime-csv-importer) | -| [Vercel AI SDK image generator](/guides/example-projects/vercel-ai-sdk-image-generator) | Use the Vercel AI SDK to generate images from a prompt. | Next.js | [View the repo](https://github.com/triggerdotdev/examples/tree/main/vercel-ai-sdk-image-generator) | -| [Python web crawler](/guides/python/python-crawl4ai) | Use Python, Crawl4AI and Playwright to create a headless web crawler with Trigger.dev. | — | [View the repo](https://github.com/triggerdotdev/examples/tree/main/python-crawl4ai) | +| Example project | Description | Framework | GitHub | +| :-------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- | :-------- | :------------------------------------------------------------------------------------------------------------ | +| [Batch LLM Evaluator](/guides/example-projects/batch-llm-evaluator) | Evaluate multiple LLM models and stream the results to the frontend. | Next.js | [View the repo](https://github.com/triggerdotdev/examples/tree/main/batch-llm-evaluator) | +| [Claude thinking chatbot](/guides/example-projects/claude-thinking-chatbot) | Use Vercel's AI SDK and Anthropic's Claude 3.7 model to create a thinking chatbot. | Next.js | [View the repo](https://github.com/triggerdotdev/examples/tree/main/claude-thinking-chatbot) | +| [Turborepo monorepo with Prisma](/guides/example-projects/turborepo-monorepo-prisma) | Use Prisma in a Turborepo monorepo with Trigger.dev. | Next.js | [View the repo](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package) | +| [Realtime Fal.ai image generation](/guides/example-projects/realtime-fal-ai) | Generate an image from a prompt using Fal.ai and show the progress of the task on the frontend using Realtime. | Next.js | [View the repo](https://github.com/triggerdotdev/examples/tree/main/realtime-fal-ai-image-generation) | +| [Realtime CSV Importer](/guides/example-projects/realtime-csv-importer) | Upload a CSV file and see the progress of the task streamed to the frontend. | Next.js | [View the repo](https://github.com/triggerdotdev/examples/tree/main/realtime-csv-importer) | +| [Vercel AI SDK image generator](/guides/example-projects/vercel-ai-sdk-image-generator) | Use the Vercel AI SDK to generate images from a prompt. | Next.js | [View the repo](https://github.com/triggerdotdev/examples/tree/main/vercel-ai-sdk-image-generator) | +| [Python web crawler](/guides/python/python-crawl4ai) | Use Python, Crawl4AI and Playwright to create a headless web crawler with Trigger.dev. | — | [View the repo](https://github.com/triggerdotdev/examples/tree/main/python-crawl4ai) | ## Example tasks