Webinar marketing planning
An application to help consumers find agencies providing a specific service tasked to build.
Webinar marketing planning - Learn moreYou can set many different options to change the side of text and image, as well as add or remove the button.
Learn moreYou can set many different options to change the side of text and image, as well as add or remove the button.
You can set many different options to change the side of text and image, as well as add or remove the button.
Learn moreYou can set many different options to change the side of text and image, as well as add or remove the button.
You can set many different options to change the side of text and image, as well as add or remove the button.
You can set many different options to change the side of text and image, as well as add or remove the button.
Built from scratch to integrate your existing tooling and content with the Novu Platform.
Built from scratch to integrate your existing tooling and content with the Novu Platform.
Let’s say you’ve been tasked to build an application to help consumers find agencies providing a specific service tasked to build. To build an application to help consumers
View all eventsAn application to help consumers find agencies providing a specific service tasked to build.
Webinar marketing planning - Learn moreTasked to build an application to help consumers find agencies providing a specific service tasked to build.
7 Strategies for success - Learn moreLet’s say you’ve been tasked to build an application to help consumers find agencies providing a specific.
Application to help consumers - Learn moreLet’s say you’ve been tasked to build an application to help consumers find agencies providing a specific service tasked to build. To build an application to help consumers
An application to help consumers find agencies providing a specific service tasked to build.
Webinar marketing planning - Learn moreTasked to build an application to help consumers find agencies providing a specific service tasked to build.
7 Strategies for success - Learn moreLet’s say you’ve been tasked to build an application to help consumers find agencies providing a specific.
Application to help consumers - Learn moreWe’re introducing Novu Pro, a new pricing tier designed for developers who need more flexibility, more scale, and more control.
This is a postmortem of a 55-minute global service interruption during our DNS migration from AWS Route 53 to Cloudflare users have experienced on Mar 23, 2025.
The Winter Season Launch Week 2025 brings five major updates to Novu's notification platform: Multi-Environment Support, Template Store, Variable Popover, Auto-Generated SDKs, and Step Conditions. These features enhance workflow management, provide pre-built templates, simplify dynamic content creation, expand SDK support, and enable advanced conditional logic for notifications.
Create complex workflows, access local data, and reuse existing content templates with Novu Echo.
Create complex workflows, access local data, and reuse existing content templates with Novu Echo.
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Like concerts, live webinars are time-based and singular events. Sure, you can have on-demand webinars, but there is something special about attending a live webinar - the excitement leading up to the presentation and the energy between presenter and the audience.
Since live webinars only happen once, planning for promotion of your webinar event is crucial to maximize the value for your business. On average, 85% of registrations occur in the last 2 weeks leading up to the webinar, with 29% registering on the same day.
This means that capturing the other 15% will require you to start marketing your webinar several weeks or more prior to the event.
In this article, we’ll go over the benefits of planning for your webinar and top actionable tips to get you moving forward with your webinar marketing strategy.
Like concerts, live webinars are time-based and singular events. Sure, you can have on-demand webinars, but there is something special about attending a live webinar - the excitement leading up to the presentation and the energy between presenter and the audience.
Since live webinars only happen once, planning for promotion of your webinar event is crucial to maximize the value for your business. On average, 85% of registrations occur in the last 2 weeks leading up to the webinar, with 29% registering on the same day.
1import { Echo } from '@novu/echo';
2
3const echo = new Echo();
4
5const commentWorkflow = echo.workflow('comment-on-post', async (event) => {
6 const inAppResponse = await event.step.inApp('notify-user', async () => ({
7 body: renderReactComponent(event.payload.postId)
8 }));
9
10 const { events } = await event.step.digest('1 week');
11
12 await event.step.email('weekly-comments', async (inputs) => {
13 return {
14 subject: `Weekly post comments (${events.length + 1})`,
15 body: renderReactEmail(inputs, events)
16 };
17 }, { skip: () => inAppResponse.seen });
18}, { payloadSchema: z.object({ postId: z.string() }) }
19);
20
21// Use the same familiar syntax to send a notification
22commentWorkflow.trigger({
23 to: { subscriberId: 'joe@acme.com' },
24 payload: { postId: '12345' }
25});
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Learn more1import { Echo } from '@novu/echo';
2
3const echo = new Echo();
4
5const commentWorkflow = echo.workflow('comment-on-post', async (event) => {
6 const inAppResponse = await event.step.inApp('notify-user', async () => ({
7 body: renderReactComponent(event.payload.postId)
8 }));
9
10 const { events } = await event.step.digest('1 week');
11
12 await event.step.email('weekly-comments', async (inputs) => {
13 return {
14 subject: `Weekly post comments (${events.length + 1})`,
15 body: renderReactEmail(inputs, events)
16 };
17 }, { skip: () => inAppResponse.seen });
18}, { payloadSchema: z.object({ postId: z.string() }) }
19);
20
21// Use the same familiar syntax to send a notification
22commentWorkflow.trigger({
23 to: { subscriberId: 'joe@acme.com' },
24 payload: { postId: '12345' }
25});
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Learn more1import { Echo } from '@novu/echo';
2
3const echo = new Echo();
4
5const commentWorkflow = echo.workflow('comment-on-post', async (event) => {
6 const inAppResponse = await event.step.inApp('notify-user', async () => ({
7 body: renderReactComponent(event.payload.postId)
8 }));
9
10 const { events } = await event.step.digest('1 week');
11
12 await event.step.email('weekly-comments', async (inputs) => {
13 return {
14 subject: `Weekly post comments (${events.length + 1})`,
15 body: renderReactEmail(inputs, events)
16 };
17 }, { skip: () => inAppResponse.seen });
18}, { payloadSchema: z.object({ postId: z.string() }) }
19);
20
21// Use the same familiar syntax to send a notification
22commentWorkflow.trigger({
23 to: { subscriberId: 'joe@acme.com' },
24 payload: { postId: '12345' }
25});
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
1import { Echo } from '@novu/echo';
2
3const echo = new Echo();
4
5const commentWorkflow = echo.workflow('comment-on-post', async (event) => {
6 const inAppResponse = await event.step.inApp('notify-user', async () => ({
7 body: renderReactComponent(event.payload.postId)
8 }));
9
10 const { events } = await event.step.digest('1 week');
11
12 await event.step.email('weekly-comments', async (inputs) => {
13 return {
14 subject: `Weekly post comments (${events.length + 1})`,
15 body: renderReactEmail(inputs, events)
16 };
17 }, { skip: () => inAppResponse.seen });
18}, { payloadSchema: z.object({ postId: z.string() }) }
19);
20
21// Use the same familiar syntax to send a notification
22commentWorkflow.trigger({
23 to: { subscriberId: 'joe@acme.com' },
24 payload: { postId: '12345' }
25});
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Learn more1import { Echo } from '@novu/echo';
2
3const echo = new Echo();
4
5const commentWorkflow = echo.workflow('comment-on-post', async (event) => {
6 const inAppResponse = await event.step.inApp('notify-user', async () => ({
7 body: renderReactComponent(event.payload.postId)
8 }));
9
10 const { events } = await event.step.digest('1 week');
11
12 await event.step.email('weekly-comments', async (inputs) => {
13 return {
14 subject: `Weekly post comments (${events.length + 1})`,
15 body: renderReactEmail(inputs, events)
16 };
17 }, { skip: () => inAppResponse.seen });
18}, { payloadSchema: z.object({ postId: z.string() }) }
19);
20
21// Use the same familiar syntax to send a notification
22commentWorkflow.trigger({
23 to: { subscriberId: 'joe@acme.com' },
24 payload: { postId: '12345' }
25});
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Learn more1import { Echo } from '@novu/echo';
2
3const echo = new Echo();
4
5const commentWorkflow = echo.workflow('comment-on-post', async (event) => {
6 const inAppResponse = await event.step.inApp('notify-user', async () => ({
7 body: renderReactComponent(event.payload.postId)
8 }));
9
10 const { events } = await event.step.digest('1 week');
11
12 await event.step.email('weekly-comments', async (inputs) => {
13 return {
14 subject: `Weekly post comments (${events.length + 1})`,
15 body: renderReactEmail(inputs, events)
16 };
17 }, { skip: () => inAppResponse.seen });
18}, { payloadSchema: z.object({ postId: z.string() }) }
19);
20
21// Use the same familiar syntax to send a notification
22commentWorkflow.trigger({
23 to: { subscriberId: 'joe@acme.com' },
24 payload: { postId: '12345' }
25});
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
1import { Echo } from '@novu/echo';
2
3const echo = new Echo();
4
5const commentWorkflow = echo.workflow('comment-on-post', async (event) => {
6 const inAppResponse = await event.step.inApp('notify-user', async () => ({
7 body: renderReactComponent(event.payload.postId)
8 }));
9
10 const { events } = await event.step.digest('1 week');
11
12 await event.step.email('weekly-comments', async (inputs) => {
13 return {
14 subject: `Weekly post comments (${events.length + 1})`,
15 body: renderReactEmail(inputs, events)
16 };
17 }, { skip: () => inAppResponse.seen });
18}, { payloadSchema: z.object({ postId: z.string() }) }
19);
20
21// Use the same familiar syntax to send a notification
22commentWorkflow.trigger({
23 to: { subscriberId: 'joe@acme.com' },
24 payload: { postId: '12345' }
25});
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Learn more1import { Echo } from '@novu/echo';
2
3const echo = new Echo();
4
5const commentWorkflow = echo.workflow('comment-on-post', async (event) => {
6 const inAppResponse = await event.step.inApp('notify-user', async () => ({
7 body: renderReactComponent(event.payload.postId)
8 }));
9
10 const { events } = await event.step.digest('1 week');
11
12 await event.step.email('weekly-comments', async (inputs) => {
13 return {
14 subject: `Weekly post comments (${events.length + 1})`,
15 body: renderReactEmail(inputs, events)
16 };
17 }, { skip: () => inAppResponse.seen });
18}, { payloadSchema: z.object({ postId: z.string() }) }
19);
20
21// Use the same familiar syntax to send a notification
22commentWorkflow.trigger({
23 to: { subscriberId: 'joe@acme.com' },
24 payload: { postId: '12345' }
25});
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Learn more1import { Echo } from '@novu/echo';
2
3const echo = new Echo();
4
5const commentWorkflow = echo.workflow('comment-on-post', async (event) => {
6 const inAppResponse = await event.step.inApp('notify-user', async () => ({
7 body: renderReactComponent(event.payload.postId)
8 }));
9
10 const { events } = await event.step.digest('1 week');
11
12 await event.step.email('weekly-comments', async (inputs) => {
13 return {
14 subject: `Weekly post comments (${events.length + 1})`,
15 body: renderReactEmail(inputs, events)
16 };
17 }, { skip: () => inAppResponse.seen });
18}, { payloadSchema: z.object({ postId: z.string() }) }
19);
20
21// Use the same familiar syntax to send a notification
22commentWorkflow.trigger({
23 to: { subscriberId: 'joe@acme.com' },
24 payload: { postId: '12345' }
25});
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
1import { Echo } from '@novu/echo';
2
3const echo = new Echo();
4
5const commentWorkflow = echo.workflow('comment-on-post', async (event) => {
6 const inAppResponse = await event.step.inApp('notify-user', async () => ({
7 body: renderReactComponent(event.payload.postId)
8 }));
9
10 const { events } = await event.step.digest('1 week');
11
12 await event.step.email('weekly-comments', async (inputs) => {
13 return {
14 subject: `Weekly post comments (${events.length + 1})`,
15 body: renderReactEmail(inputs, events)
16 };
17 }, { skip: () => inAppResponse.seen });
18}, { payloadSchema: z.object({ postId: z.string() }) }
19);
20
21// Use the same familiar syntax to send a notification
22commentWorkflow.trigger({
23 to: { subscriberId: 'joe@acme.com' },
24 payload: { postId: '12345' }
25});
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Learn more1import { Echo } from '@novu/echo';
2
3const echo = new Echo();
4
5const commentWorkflow = echo.workflow('comment-on-post', async (event) => {
6 const inAppResponse = await event.step.inApp('notify-user', async () => ({
7 body: renderReactComponent(event.payload.postId)
8 }));
9
10 const { events } = await event.step.digest('1 week');
11
12 await event.step.email('weekly-comments', async (inputs) => {
13 return {
14 subject: `Weekly post comments (${events.length + 1})`,
15 body: renderReactEmail(inputs, events)
16 };
17 }, { skip: () => inAppResponse.seen });
18}, { payloadSchema: z.object({ postId: z.string() }) }
19);
20
21// Use the same familiar syntax to send a notification
22commentWorkflow.trigger({
23 to: { subscriberId: 'joe@acme.com' },
24 payload: { postId: '12345' }
25});
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Learn more1import { Echo } from '@novu/echo';
2
3const echo = new Echo();
4
5const commentWorkflow = echo.workflow('comment-on-post', async (event) => {
6 const inAppResponse = await event.step.inApp('notify-user', async () => ({
7 body: renderReactComponent(event.payload.postId)
8 }));
9
10 const { events } = await event.step.digest('1 week');
11
12 await event.step.email('weekly-comments', async (inputs) => {
13 return {
14 subject: `Weekly post comments (${events.length + 1})`,
15 body: renderReactEmail(inputs, events)
16 };
17 }, { skip: () => inAppResponse.seen });
18}, { payloadSchema: z.object({ postId: z.string() }) }
19);
20
21// Use the same familiar syntax to send a notification
22commentWorkflow.trigger({
23 to: { subscriberId: 'joe@acme.com' },
24 payload: { postId: '12345' }
25});
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Redesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Learn moreRedesigned local experience to author configurable workflows tailored to optimize Developer Experience, with a matching interface for non-technical users.
Learn moreWe're here to support you in navigating the open-source notification infrastructure for developers.
Integrate Novu effortlessly into your workflow for streamlined notification management.
Tailor notifications to your unique needs with Novu's flexible and customizable features.
Empowering developers with an open-source infrastructure, Novu simplifies the way you handle notifications.
We're here to support you in navigating the open-source notification infrastructure for developers.
Integrate Novu effortlessly into your workflow for streamlined notification management.
Tailor notifications to your unique needs with Novu's flexible and customizable features.
Empowering developers with an open-source infrastructure, Novu simplifies the way you handle notifications.