| Dimension | Shared | Only in A | Only in B | Overlap |
|---|---|---|---|---|
| Sections | 0 | 1 | 2 | 0% |
| Commands | 0 | 0 | 0 | — |
| Section tags | 0 | 2 | 1 | 0% |
What each file covers
Sections
0 shared · 1 only in A · 2 only in B- − Pull Request Rules
- + Dashboard
- + Dashboard Conventions
Commands
neither file has anySection tags
0 shared · 2 only in A · 1 only in B- − git-pr
- − do-not
- + code-style
Line diff
novuhq/novu · .cursor/rules/pullrequest.mdc
@@ −1 @@
1---
2description: When creating a new pull request on GitHub, use this to specify the contents
3alwaysApply: false
4---
5
6### Pull Request Rules
7
8**Title format**: `type(scope): Description fixes NOV-<ticket-id>`
9
10- When creating a pull requests from any run, verify that there is a linear ticket associated with the pr (From branch name or other), if not, create the linear ticket before creating the PR and attach the linear ticket id in title (fixes NV-XXX)
11- Examples: `feat(dashboard): add workflow trigger button fixes NOV-123`, `fix(api-service): handle null subscriber case fixes NOV-456`
12
13
14**Scopes**: `dashboard`, `api-service`, `worker`, `shared`, `js`, `react`, `react-native`, `nextjs`, `providers`, `root`, `docs`
15
16**Description**: Summarize what changed and why. List breaking changes. Add screenshots for UI changes. For non-trivial logic or architecture changes, include a concise Mermaid diagram (flow, sequence, or component) so reviewers can grasp the change at a glance.
17
18**Enterprise packages**: When changes touch `enterprise/`, also open a matching PR in `novuhq/packages-enterprise` on a branch from `next`, and cross-link the two PR bodies (monorepo ↔ enterprise). The Validate Submodule Sync test will fail; this is expected when pointing to the `.source` submodule in the novuhq/novu repository. Do not fix it.
19
novuhq/novu · .cursor/rules/dashboard.mdc
@@ +1 @@
1---
2description: Rules for working in the Dashboard (React frontend)
3globs: apps/dashboard/**/*
4alwaysApply: false
5---
6
7## Dashboard
8
9**Stack:** React 19 + Vite + TypeScript · Radix UI · Tailwind CSS · shadcn/ui · TanStack Query · React Router · motion/react · port 4201
10
11**Run:** Do not build or start the dashboard — the user already has it running on port 4201. Check types via Cursor diagnostics.
12
13**Tests/lint:** see testing.mdc
14
15**Key directories:**
16```
17apps/dashboard/src/components/ # Shared UI components
18apps/dashboard/src/pages/ # Route-level page components
19apps/dashboard/src/hooks/ # Custom React hooks
20apps/dashboard/src/api/ # API client and query definitions
21apps/dashboard/src/ee/ # Enterprise-only features
22```
23
24**Agent sign-in:** A default user and org are pre-seeded. In Cursor cloud agent environments (`apps/dashboard/.env.agent`), the dashboard auto signs in — open `http://localhost:4201` and wait for redirect; do not type credentials unless auto sign-in fails.
25
26| Field | Value |
27|-------|-------|
28| Email | `agent@novu.co` |
29| Password | `Agent123!@#` |
30| Organization | `Agent Organization` |
31
32---
33
34### Dashboard Conventions
35
36**Data fetching**
37- Use TanStack Query (`useQuery`, `useMutation`) for all server state — do not use `useEffect` + `fetch` directly.
38- Co-locate query keys and fetcher functions in `src/api/` or alongside the feature they belong to.
39- Invalidate related queries after mutations; do not manually update the cache unless necessary for optimistic UI.
40
41**UI components**
42- Build on Radix UI primitives and the existing shadcn/ui component set in `src/components/ui/`.
43- Avoid adding new third-party UI libraries without discussion.
44- Use Tailwind utility classes for all styling; avoid inline `style` props except for dynamic values that cannot be expressed as utilities.
45
46**Routing**
47- Use React Router v6 `<Link>` and `useNavigate` — do not use `window.location` for in-app navigation.
48
49**Canonical example:** @apps/dashboard/src/components/environments/edit-environment-sheet.tsx
50
@@ −1 +1 @@
11 ---
2−description: When creating a new pull request on GitHub, use this to specify the contents
2+description: Rules for working in the Dashboard (React frontend)
3+globs: apps/dashboard/**/*
34 alwaysApply: false
45 ---
56
6−### Pull Request Rules
7+## Dashboard
78
8−**Title format**: `type(scope): Description fixes NOV-<ticket-id>`
9+**Stack:** React 19 + Vite + TypeScript · Radix UI · Tailwind CSS · shadcn/ui · TanStack Query · React Router · motion/react · port 4201
910
10−- When creating a pull requests from any run, verify that there is a linear ticket associated with the pr (From branch name or other), if not, create the linear ticket before creating the PR and attach the linear ticket id in title (fixes NV-XXX)
11−- Examples: `feat(dashboard): add workflow trigger button fixes NOV-123`, `fix(api-service): handle null subscriber case fixes NOV-456`
11+**Run:** Do not build or start the dashboard — the user already has it running on port 4201. Check types via Cursor diagnostics.
1212
13+**Tests/lint:** see testing.mdc
1314
14−**Scopes**: `dashboard`, `api-service`, `worker`, `shared`, `js`, `react`, `react-native`, `nextjs`, `providers`, `root`, `docs`
15+**Key directories:**
16+```
17+apps/dashboard/src/components/ # Shared UI components
18+apps/dashboard/src/pages/ # Route-level page components
19+apps/dashboard/src/hooks/ # Custom React hooks
20+apps/dashboard/src/api/ # API client and query definitions
21+apps/dashboard/src/ee/ # Enterprise-only features
22+```
1523
16−**Description**: Summarize what changed and why. List breaking changes. Add screenshots for UI changes. For non-trivial logic or architecture changes, include a concise Mermaid diagram (flow, sequence, or component) so reviewers can grasp the change at a glance.
24+**Agent sign-in:** A default user and org are pre-seeded. In Cursor cloud agent environments (`apps/dashboard/.env.agent`), the dashboard auto signs in — open `http://localhost:4201` and wait for redirect; do not type credentials unless auto sign-in fails.
1725
18−**Enterprise packages**: When changes touch `enterprise/`, also open a matching PR in `novuhq/packages-enterprise` on a branch from `next`, and cross-link the two PR bodies (monorepo ↔ enterprise). The Validate Submodule Sync test will fail; this is expected when pointing to the `.source` submodule in the novuhq/novu repository. Do not fix it.
26+| Field | Value |
27+|-------|-------|
28+| Email | `agent@novu.co` |
29+| Password | `Agent123!@#` |
30+| Organization | `Agent Organization` |
31+
32+---
33+
34+### Dashboard Conventions
35+
36+**Data fetching**
37+- Use TanStack Query (`useQuery`, `useMutation`) for all server state — do not use `useEffect` + `fetch` directly.
38+- Co-locate query keys and fetcher functions in `src/api/` or alongside the feature they belong to.
39+- Invalidate related queries after mutations; do not manually update the cache unless necessary for optimistic UI.
40+
41+**UI components**
42+- Build on Radix UI primitives and the existing shadcn/ui component set in `src/components/ui/`.
43+- Avoid adding new third-party UI libraries without discussion.
44+- Use Tailwind utility classes for all styling; avoid inline `style` props except for dynamic values that cannot be expressed as utilities.
45+
46+**Routing**
47+- Use React Router v6 `<Link>` and `useNavigate` — do not use `window.location` for in-app navigation.
48+
49+**Canonical example:** @apps/dashboard/src/components/environments/edit-environment-sheet.tsx
1950
