#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/)

```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)

## [Defer - Zero infrastructure Node.js background jobs](https://www.defer.run/)
