Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v2 dashboard docs structure #733

Merged
merged 91 commits into from
Dec 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
a3a4a3a
v2: dashboard structure
scopsy Nov 17, 2024
7f3d5f9
feat: add hero card
scopsy Nov 17, 2024
25b3e5f
feat: api ref anchor
scopsy Nov 17, 2024
3510f81
feat: add client-side
scopsy Nov 17, 2024
2e2f330
feat: add initia lstructure
scopsy Nov 17, 2024
3230cf1
fix: side menu
scopsy Nov 17, 2024
c959ee3
fix: move getting started
scopsy Nov 17, 2024
c047813
feat: introduction screen
scopsy Nov 18, 2024
912113f
feat: add quickstart
scopsy Nov 18, 2024
90c208e
fix: update endpoint page
scopsy Nov 18, 2024
ae2a57c
feat: update branding
scopsy Nov 18, 2024
415ad36
fix: sdks menu
scopsy Nov 18, 2024
a91c32a
fix: update docs
scopsy Nov 18, 2024
98361cc
feat: fix endpoint page
scopsy Nov 18, 2024
25031c1
fix: quick start
scopsy Nov 18, 2024
2905200
feat: colors
scopsy Nov 19, 2024
28cf5aa
feat: colors
scopsy Nov 19, 2024
a45d4b1
fix: remove inbox title
scopsy Nov 19, 2024
595ccf2
fix: typo
justnems Nov 22, 2024
0b4c594
chore: update framework example
justnems Nov 22, 2024
fc02f53
modified the Build Workflow section
iampearceman Nov 24, 2024
34ae33c
fixes
iampearceman Nov 27, 2024
a5d646a
Added more changes
iampearceman Nov 28, 2024
8f61656
fix: document structure and navigation
scopsy Nov 28, 2024
56011e0
fix:
scopsy Nov 28, 2024
4add342
fix: rename
scopsy Nov 28, 2024
43023b6
feat: workflow page
scopsy Nov 28, 2024
25a61ee
feat: remove step conditions from framework
scopsy Nov 28, 2024
8311003
Merge pull request #740 from novuhq/emils-branch
scopsy Nov 28, 2024
4ab9937
feat: remove client side sdks empty menu
scopsy Dec 1, 2024
5d31219
inti
iampearceman Dec 1, 2024
0a4646d
Merge pull request #743 from novuhq/emil-dec1-2024
iampearceman Dec 1, 2024
71a809c
Added visual aid to 'What is Novu' page
iampearceman Dec 1, 2024
c813010
Added 'add inbox' optional step to the quickstart
iampearceman Dec 1, 2024
7256e84
Added 'tags' pages
iampearceman Dec 1, 2024
c6bddcf
Modified the - 'Introduction' page
iampearceman Dec 1, 2024
dfd2b3b
Modified the 'Template Editor' page to include more Liquid filter exa…
iampearceman Dec 1, 2024
af17289
Modified the 'Digest Action Step' page and chnaged the visual aid
iampearceman Dec 1, 2024
0239468
Changed the Digest image
iampearceman Dec 2, 2024
bab8bcb
Delete architecture/diagrams.mdx
iampearceman Dec 2, 2024
0d1d12d
Delete architecture/introduction.mdx
iampearceman Dec 2, 2024
dcccdbf
Delete concepts/controls.mdx
iampearceman Dec 2, 2024
32d77b8
Delete deployment/actions.mdx
iampearceman Dec 2, 2024
e1e4221
Delete deployment/cli.mdx
iampearceman Dec 2, 2024
840ac5b
Delete deployment/production.mdx
iampearceman Dec 2, 2024
939cfc9
Delete deployment/syncing.mdx
iampearceman Dec 2, 2024
3901ae0
Merge pull request #744 from novuhq/emil-dec1-2024
scopsy Dec 2, 2024
acc386d
modified the tags page
iampearceman Dec 3, 2024
29e9844
modified the image of how Novu works
iampearceman Dec 3, 2024
926c12e
Merge pull request #746 from novuhq/emil-Dec2-2024
iampearceman Dec 3, 2024
d7ffbdf
fix: spelling
justnems Dec 4, 2024
d6b8cc3
Added notifications concept page
iampearceman Dec 8, 2024
bda6bab
Modified the quickstart page
iampearceman Dec 8, 2024
888786c
Not final draft
iampearceman Dec 11, 2024
4fb5a2f
Not final draft
iampearceman Dec 12, 2024
f8f84d8
Not final draft
iampearceman Dec 12, 2024
54b0451
Not final draft
iampearceman Dec 12, 2024
bb3852e
Not final draft
iampearceman Dec 15, 2024
8a28cf9
Merge pull request #748 from novuhq/emil-dec8-2024
iampearceman Dec 15, 2024
ee7a553
second deaft
iampearceman Dec 15, 2024
e64081c
second deaft
iampearceman Dec 15, 2024
16afd64
second deaft
iampearceman Dec 15, 2024
fcc7b57
second draft
iampearceman Dec 15, 2024
d577219
second draft
iampearceman Dec 15, 2024
804e958
second draft
iampearceman Dec 15, 2024
ba961d3
second draft
iampearceman Dec 15, 2024
c88cb53
second draft
iampearceman Dec 15, 2024
c5d9010
second draft
iampearceman Dec 15, 2024
918828b
second draft
iampearceman Dec 15, 2024
c4f8cf6
added socials
iampearceman Dec 15, 2024
8aa2e63
fix:anchors
scopsy Dec 16, 2024
342a2e4
fix: items
scopsy Dec 16, 2024
dc6aa0a
fixed broken links
iampearceman Dec 16, 2024
f8370a7
small fix
iampearceman Dec 16, 2024
4ae01a1
chore: content and style review
justnems Dec 19, 2024
fd67172
chore: content, style, and spelling review
justnems Dec 19, 2024
86b7c18
chore: tweak language, spelling, apply style guide
justnems Dec 20, 2024
b10ef8b
chore: update framework/overview and related nav
justnems Dec 20, 2024
49022f3
chore: update nav for framework/overview move
justnems Dec 20, 2024
a56ab35
chore: introduction to overview and update links
justnems Dec 20, 2024
8755cb3
chore: update language, apply style guide
justnems Dec 20, 2024
271536d
chore: language, spalling, and style updates
justnems Dec 20, 2024
eb0bda4
chore: update language and apply style guide
justnems Dec 20, 2024
77bc751
chore: update language and structure, fix spelling, apply style guide
justnems Dec 20, 2024
71f58ff
chore: apply style guide
justnems Dec 20, 2024
2fe30b1
chore: framework introduction -> overview
justnems Dec 20, 2024
42e6a02
chore: inbox introduction -> overview
justnems Dec 20, 2024
5077beb
chore: community intro -> overview, apply style guide
justnems Dec 20, 2024
feef164
fix: community intro->overview mint.json correction
justnems Dec 20, 2024
0d0f42e
chore: framework/typescript/intro -> overview
justnems Dec 20, 2024
86fd3d8
Merge branch 'main' into v2-dashboard-docs
scopsy Dec 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions additional-resources/glossary.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ Novu lets you send notifications across different communication mediums, includi
<Frame caption="Channels in Novu">
<img src="/images/channels.gif" />{" "}
</Frame>
## Providers Providers are responsible for handling message delivery across various
channels. Novu currently supports multiple notification channels, each with its own
set of providers.
## Providers

Providers are responsible for handling message delivery across various channels. Novu currently supports multiple notification channels, each with its own set of providers.

- Chat: This channel offers these providers:
- Discord
Expand Down
6 changes: 3 additions & 3 deletions additional-resources/security.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Security and Compliance"
description: "Common questions related to security, compliance, privacy policy and terms and conditions"
description: "Common questions about security, compliance, privacy policy, and terms and conditions"
icon: "shield"
---

Expand Down Expand Up @@ -39,8 +39,8 @@ By default, data is stored using the following TTL values
- Notifications (for 1 month)
- Jobs (for 1 month)
- Message (for in-app messages - 12 months, for all other messages - 1 month)
- Execution Details (for 1 month)
- Subscribers, Workflows, Feeds, Layouts (Not deleted automatically, can be deleted by the user at any time)
- Execution details (for 1 month)
- Subscribers, workflows, feeds, layouts (not deleted automatically, can be deleted by the user at any time)

If you want to delete any specific data or information, reach out to us at [email protected]

Expand Down
2 changes: 1 addition & 1 deletion api-reference/events/trigger-event.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ url = "https://api.novu.co"
api_key = "<NOVU_SECRET_KEY>"

novu = EventApi(url, api_key).trigger(
name="<WORKFLOW_TRIGGER_IDENTIFIER>", # This is the Workflow ID. It can be found on the workflow page.
name="<WORKFLOW_TRIGGER_IDENTIFIER>", # This is the workflow ID. It can be found on the workflow page.
recipients="<UNIQUE_SUBSCRIBER_IDENTIFIER>", # The subscriber ID can be gotten from the dashboard.
payload={}, # Your custom Novu payload goes here
)
Expand Down
2 changes: 1 addition & 1 deletion api-reference/workflows/create-workflow.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import {
const novu = new Novu("<NOVU_SECRET_KEY>");

await novu.notificationTemplates.create({
name: "Onboarding Workflow",
name: "Onboarding workflow",
// taking first workflow group id
notificationGroupId: workflowGroupsData.data[0]._id,
steps: [
Expand Down
15 changes: 0 additions & 15 deletions architecture/diagrams.mdx

This file was deleted.

34 changes: 0 additions & 34 deletions architecture/introduction.mdx

This file was deleted.

File renamed without changes.
12 changes: 6 additions & 6 deletions community/project-differences.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@ Below you will find a table that outlines the best available Novu Cloud Tier, co
|--- | --- | --- |
|Channels supported: Email, In-app, SMS, Chat, Push | ✅ | ✅ |
|Notification Subscribers | Unlimited | Infratructure dependent |
|GUI-based workflows | Nov 2024 | ✅ |
|Code-based workflows | ✅ | ✅ |
|Subscriber management| Nov 2024 | ❌ |
|GUI-based workflows | | ✅ |
|Code-based Framework workflows | ✅ | ✅ |
|Subscriber management| Q1 2025 | ❌ |
|Multi-org/multi-tenancy | Q1 2025 | ❌ |
|**FRAMEWORK**|
|Max Workflows | Unlimited | Infratructure dependent |
|Max workflows | Unlimited | Infratructure dependent |
|Provider integrations | Unlimited | Unlimited |
|Activity Feed retention | Unlimited | Infratructure dependent |
|Activity feed retention | Unlimited | Infratructure dependent |
|Digests | ✅ | Infratructure dependent |
|Workflow Step Controls | ✅ | ✅ |
|Workflow step controls | ✅ | ✅ |
|Translations| ✅ | ✅ |
|Block-based email editor | Nov 2024 | Nov 2024 |
|**INBOX**|
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
---
title: 'Introduction'
description: ''
title: 'Overview'
description: 'Self-hosting Novu provides full control and flexibility over your notification infrastructure, with specific system requirements for optimal performance across VMs, Redis, MongoDB, and S3 storage.'
icon: 'code'
---

When self-hosting Novu, you take full control over your communication infrastructure by deploying it on your own servers. While this setup allows for customization and greater flexibility, it is important to note that some features exclusive to Novu’s cloud-managed solution will not be available in a self-hosted environment.

## System Requirements Overview
## System requirements overview

### Hosting Novu Services on Separate VMs
### Hosting Novu services on separate VMs
For optimal performance, we recommend hosting Novu's core services across multiple virtual machines (VMs).

- **Novu Services:**
- **Novu services:**
- 3 VMs per service
- Each VM: 2 vCPUs and 4GB of RAM
- **Redis:**
Expand All @@ -22,22 +22,22 @@ For optimal performance, we recommend hosting Novu's core services across multip
- **Storage:**
- 10GB of S3 storage

### Hosting All Novu Services on a Single VM
### Hosting all Novu services on a single VM
If resources are limited or simplicity is a priority, Novu services can be hosted on a single VM.

- **All Services:** 36 vCPUs and 64GB of RAM
- **All services:** 36 vCPUs and 64GB of RAM
- **Storage:** 10GB of S3 storage

### Redis Requirements
### Redis requirements
- **Redis Clusters:** 2 (one for queues with AOL enabled)
- **Memory:** 8GB RAM per cluster
- **AOL:** Active Append-Only Log (AOL) for data persistence and to prevent job loss during outages.

### MongoDB Requirements
- **MongoDB Cluster:** M20 or higher (recommended) on MongoDB Atlas.
### MongoDB requirements
- **MongoDB cluster:** M20 or higher (recommended) on MongoDB Atlas.

### Storage Requirements
- **S3 Storage:** Minimum 10GB for file storage.
### Storage requirements
- **S3 storage:** Minimum 10GB for file storage.

<Note>The above specifications are general recommendations. Adjust them based on your system load, usage patterns, and scale of operations.</Note>
<Warning>Self-hosting Novu does not support GitHub login. To access your account, please use the email and password associated with your Novu account.</Warning>
130 changes: 65 additions & 65 deletions concepts/endpoint.mdx
Original file line number Diff line number Diff line change
@@ -1,68 +1,68 @@
---
title: "Bridge Endpoint"
title: "Framework Endpoint"
description: "Learn how to customize and extend any aspect of the Novu platform using the Framework SDK powered bridge endpoint."
---

Novu Framework requires a **single** `HTTP` endpoint (`/api/novu` or similar) to be exposed by your application. This endpoint is used to receive events from our **Worker Engine**.

You can view the Bridge Endpoint as a webhook endpoint that Novu will call when it needs to retrieve contextual information for a given subscriber and notification.

Using the `npx novu init` command creates a Bridge application for you with a Bridge Endpoint ready to go.

## The `serve` function

We offer framework specific wrappers in form of an exported `serve` function that abstracts away:

- Parsing the incoming request for `GET`, `POST`, `PUT` and `OPTIONS` requests
- HMAC header authentication
- Framework specific response and error handling

Currently, we offer `serve` functions for the following frameworks:

- [Next.js](/quickstart/nextjs)
- [Express.js](/quickstart/express)
- [Nuxt](/quickstart/nuxt)
- [h3](/quickstart/h3)
- [Remix](/quickstart/remix)
- [Sveltekit](/quickstart/svelte)

## Writing a custom `serve` function

If we currently don't support your framework, you can write a custom `serve` function like the following example:

```ts
import { type Request, type Response } from "express";
import { NovuRequestHandler, ServeHandlerOptions } from "@novu/framework";

export const serve = (options: ServeHandlerOptions): any => {
const requestHandler = new NovuRequestHandler({
frameworkName: "express",
...options,
handler: (incomingRequest: Request, response: Response) => ({
method: () => incomingRequest.method,
headers: (key) => {
const header = incomingRequest.headers[key];
return Array.isArray(header) ? header[0] : header;
},
queryString: (key) => {
const qs = incomingRequest.query[key];
return Array.isArray(qs) ? qs[0] : qs;
},
body: () => incomingRequest.body,
url: () =>
new URL(
incomingRequest.url,
`https://${incomingRequest.headers.get("host") || ""}`
),
transformResponse: ({ body, headers, status }) => {
Object.entries(headers).forEach(([headerName, headerValue]) => {
response.setHeader(headerName, headerValue);
});

return response.status(status).send(body);
},
}),
});

return requestHandler.createHandler();
};
```
import { SvelteIcon } from "/snippets/icons/svelte.mdx";
import { NestjsIcon } from "/snippets/icons/nestjs.mdx";
import { ExpressjsIcon } from "/snippets/icons/expressjs.mdx";
import { LambdaIcon } from "/snippets/icons/lambda.mdx";
import { NuxtIcon } from "/snippets/icons/nuxt.mdx";
import { NextjsIcon } from "/snippets/icons/nextjs.mdx";
import { RemixIcon } from "/snippets/icons/remix.mdx";
import { H3Icon } from "/snippets/icons/h3.mdx";
import { FrameworkTerminal } from "/snippets/framework-terminal.mdx";

Novu was built for endless extensibility. Although not required for majority of your notification usecases, you can customize and extend any aspect of the Novu platform using the Framework SDK powered bridge endpoint.

## Overview

The framework endpoint is a Restful API path that runs on your server and environment and can be used for multiple usecases including:

- Automating workflow creation using GitOps
- Adding custom components to your emails and other channels
- Hydrating resources including subscribers, topics and tenants directly from your database
- Executing custom logic before, during and after a workflow is executed
- Connect to 3rd-party services such as OpenAI, Stripe, Salesforce and more.
- Implement custom delivery providers with internal systems

## How it works

<Frame>
<img src="/images/novu-works.png" />
</Frame>

### Build phase

When [building new workflows](/workflow/overview), you will be using the [Novu Framework SDK](/framework/typescript/overview) to define the workflows and their steps directly in your IDE. The local workflows can be previewed and tested using our [Local Studio](/framework/studio) companion app.

### Sync phase

A sync is needed once a notification workflow code is created or updated. We offer multiple sync methods including CI/CD integrations and a custom CLI tool.

During a sync, the workflows defined using the Novu Framework SDK will be pushed to our cloud service and will be persisted in our database.
Once synced, you will be able to view the workflows in the workflows Page on the Dashboard. All the controls created using JSON Schema or Zod will be transformed into UI elements that can be modified without changing the source code. Read more about controls [here](/framework/controls).

### Execution phase

Once a workflow is synced, the workflow engine will make API requests to the bridge endpoint to execute individual workflow steps.
After the fan-out is complete, the bridge endpoint will be triggered with the relevant execution context and will respond with the compiled content and metadata needed to deliver the notification.

## Get Started

To get started with the framework endpoint, visit the Getting Started page relevant to your tech-stack:

<CardGroup cols={3}>
<Card title="Next.js" color="#00D7FE" href="/framework/quickstart/nextjs" horizontal icon={<NextjsIcon />} />
<Card title="Express.js" color="#47BA87" href="/framework/quickstart/express" horizontal icon={<ExpressjsIcon />} />
<Card title="Remix" color="#BC002C" href="/framework/quickstart/remix" horizontal icon={<RemixIcon />} />
<Card title="NestJS" color="#BC002C" href="/framework/quickstart/nestjs" horizontal icon={<NestjsIcon />} />
<Card title="Svelte" color="#16a34a" href="/framework/quickstart/svelte" horizontal icon={<SvelteIcon />} />
<Card title="Nuxt" color="#16a34a" href="/framework/quickstart/nuxt" horizontal icon={<NuxtIcon />} />
<Card title="H3" color="#16a34a" href="/framework/quickstart/h3" horizontal icon={<H3Icon />} />
<Card title="Lambda" color="#16a34a" href="/framework/quickstart/lambda" horizontal icon={<LambdaIcon />} />
</CardGroup>

<Warning>
The Framework SDK is currently only supported in Typescript for JS based run-times.
</Warning>
4 changes: 2 additions & 2 deletions concepts/environments.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,6 @@ Each environment will be accessed using a separate credential set:

We suggest configuring these key sets based on your active environment, the same as you would use to manage different service credentials and serve them based on the current environment in which your code is deployed.

## Promoting changes to production
## Syncing changes to production

When moving changes from the `development` environment to the `production` environment, we suggest using your CI/CD pipeline to promote the changes.
When moving changes from the `development` environment to the `production` environment, you can "Sync" those changes from the Dashboard interface or using the Sync API for your framework based workflow using CI/CD.
2 changes: 1 addition & 1 deletion concepts/integrations.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ You can find the list of available integrations for each channel:
<Card title="Chat" href="/integrations/providers/chat/overview">
Integrate with chat platforms
</Card>
<Card title="In-App" href="/inbox/introduction">
<Card title="In-App" href="/inbox/overview">
Manage in-app notification center
</Card>
</CardGroup>
Expand Down
Loading