#software-engineering let say a user sign up, then we want to send him a email with promotion code 1 day later. How can we do it? These tasks are server side background jobs. We can do this by using inngest. ## [Inngest](https://www.inngest.com/) ![](https://res.cloudinary.com/yomaru/image/upload/v1695751641/obsidian/yev0oydqyyrbcn75s6xx.png) ```ts import { EventSchemas, Inngest } from "inngest"; type Events = { "user/new.signup": { data: { email: string; name: string; }; }; }; const inngest = new Inngest({ name: "Next.js Shop", schemas: new EventSchemas().fromRecord<Events>(), }); export default inngest.createFunction( { name: "Signup flow" }, { event: "user/new.signup" }, async ({ event, step }) => { // ⚡ If this step fails it will retry automatically. It will only run once // if it succeeds const promo = await step.run("Generate promo code", async () => { const promoCode = await generatePromoCode(); return promoCode.code; }); // ⚡ Again, if the email provider is down this will retry - but we will // only generate one promo code await step.run("Send a welcome promo", () => sendEmail({ email: event.data, promo }) ); // 😴 You can sleep on any platform! await step.sleep("1 day"); // ⏰ This runs exactly 1 day after the user signs up await step.run("Send drip campaign", () => sendDripCampaign()); } ); ``` ### How it Works? %% how to create a simple inngest app ? how to deploy? %% ## [Trigger.dev ](https://trigger.dev/) ## [ServerlessQ](https://www.serverlessq.com/#features) ![](https://www.serverlessq.com/feature3.png) ## [Defer - Zero infrastructure Node.js background jobs](https://www.defer.run/) ![](https://www.defer.run/dashboard_preview.png)