# manpreet-singh-kamboj/pulsewatch architecture

> Architecture diagram of the GitHub repository manpreet-singh-kamboj/pulsewatch, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/manpreet-singh-kamboj/pulsewatch
- Repository: https://github.com/manpreet-singh-kamboj/pulsewatch

## Overview

PulseWatch lets users configure website, API, and SSL monitors, then automatically checks them, records status and latency, tracks downtime incidents, and delivers alerts. Users inspect live dashboards, logs, incidents, performance insights, and reports; optional features include AI analysis, PageSpeed Insights, and broken-link scans. The frontend routes user workflows to an Express API, while a scheduler coordinates checks and incident transitions over MongoDB-backed state. The graph follows documented capabilities where route details were not sampled; those links are cited to the README rather than inferred from unseen code.

Main entry points: [`frontend/src/App.tsx`](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/App.tsx) (Application routes), [`backend/src/app.ts`](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/app.ts) (Express API), [`backend/src/models`](https://github.com/manpreet-singh-kamboj/pulsewatch/tree/main/backend/src/models) (Domain records), [`backend/src/services/scheduler.service.ts`](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/scheduler.service.ts) (Check scheduler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["User interface"]
  node_app["Application routes<br/>[App.tsx]"]
  node_monitor_ui["Monitor setup<br/>[MonitorForm.tsx]"]
  node_dashboard_ui["Live dashboard<br/>[Dashboard.tsx]"]
  node_incident_ui["Incident views<br/>[Incidents.tsx]"]
  node_logs_ui["Check logs<br/>[CheckLogs.tsx]"]
  node_report_ui["Reports UI<br/>[Report.tsx]"]
  node_settings_ui["Alert settings<br/>[Settings.tsx]"]
  node_sse_ui["SSE bridge<br/>[SseBridge.tsx]"]
end

subgraph group_api["API and accounts"]
  node_api_app["Express API<br/>[app.ts]"]
  node_auth_routes["Authentication<br/>[auth.routes.ts]"]
  node_admin_routes["Administration<br/>[admin.routes.ts]"]
  node_broadcast_routes["Broadcast endpoints"]
end

subgraph group_monitoring["Monitoring lifecycle"]
  node_monitor_routes["Monitor endpoints<br/>[monitor.routes.ts]"]
  node_incident_routes["Incident endpoints<br/>[incident.routes.ts]"]
  node_scheduler["Check scheduler"]
  node_check_service["Monitor checks<br/>[check.service.ts]"]
end

subgraph group_insights["Insights and reporting"]
  node_dashboard_routes["Dashboard endpoints"]
  node_report_routes["Report endpoints<br/>[report.routes.ts]"]
  node_psi_service["PageSpeed insights<br/>[psi.service.ts]"]
  node_links_service["Broken link scan"]
  node_ai_service["AI analysis<br/>[ai.service.ts]"]
  node_pdf_service["PDF generation<br/>[pdf.service.ts]"]
end

subgraph group_platform["Persistence and delivery"]
  node_alert_service["Alert delivery<br/>[alert.service.ts]"]
  node_models["Domain records"]
  node_mongo[("MongoDB")]
  node_redis[("Redis cache<br/>[redis.ts]")]
end

node_user(("User"))
node_browser(("Browser"))
node_openai{{"OpenAI"}}
node_google_psi{{"Google PSI"}}
node_alert_channels{{"Email / SMS / webhooks"}}

node_user -->|"uses"| node_browser
node_browser -->|"opens"| node_app
node_app -->|"routes to"| node_monitor_ui
node_app -->|"routes to"| node_dashboard_ui
node_app -->|"routes to"| node_incident_ui
node_app -->|"routes to"| node_logs_ui
node_app -->|"routes to"| node_report_ui
node_app -->|"routes to"| node_settings_ui
node_app -->|"mounts"| node_sse_ui
node_browser -->|"requests API"| node_api_app
node_api_app -->|"dispatches"| node_auth_routes
node_api_app -->|"dispatches"| node_monitor_routes
node_api_app -->|"dispatches"| node_dashboard_routes
node_api_app -->|"dispatches"| node_incident_routes
node_api_app -->|"dispatches"| node_report_routes
node_api_app -->|"dispatches"| node_admin_routes
node_api_app -->|"dispatches"| node_broadcast_routes
node_monitor_routes -->|"schedules checks"| node_scheduler
node_scheduler -->|"runs checks"| node_check_service
node_scheduler -->|"collects PSI"| node_psi_service
node_scheduler -->|"sends alerts"| node_alert_service
node_scheduler -->|"summarizes incidents"| node_ai_service
node_scheduler -->|"updates records"| node_models
node_monitor_routes -->|"requests PSI"| node_psi_service
node_monitor_routes -->|"scans links"| node_links_service
node_dashboard_routes -->|"requests analysis"| node_ai_service
node_dashboard_routes -->|"requests insights"| node_psi_service
node_dashboard_routes -->|"requests scans"| node_links_service
node_dashboard_routes -->|"reads metrics"| node_models
node_report_routes -->|"generates report"| node_ai_service
node_report_routes -->|"creates PDF"| node_pdf_service
node_report_routes -->|"reads history"| node_models
node_auth_routes -->|"manages accounts"| node_models
node_monitor_routes -->|"stores monitor data"| node_models
node_incident_routes -->|"reads incidents"| node_models
node_models -->|"persists"| node_mongo
node_psi_service -->|"uses cache"| node_redis
node_ai_service -.->|"requests analysis"| node_openai
node_psi_service -.->|"fetches insights"| node_google_psi
node_alert_service -.->|"delivers alerts"| node_alert_channels

click node_app "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/App.tsx"
click node_monitor_ui "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/pages/MonitorForm.tsx"
click node_dashboard_ui "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/pages/Dashboard.tsx"
click node_incident_ui "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/pages/Incidents.tsx"
click node_logs_ui "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/pages/CheckLogs.tsx"
click node_report_ui "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/pages/Report.tsx"
click node_settings_ui "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/pages/Settings.tsx"
click node_sse_ui "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/components/SseBridge.tsx"
click node_api_app "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/app.ts"
click node_auth_routes "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/auth.routes.ts"
click node_monitor_routes "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/monitor.routes.ts"
click node_dashboard_routes "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/dashboard.routes.ts"
click node_incident_routes "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/incident.routes.ts"
click node_report_routes "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/report.routes.ts"
click node_admin_routes "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/admin.routes.ts"
click node_broadcast_routes "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/broadcast.routes.ts"
click node_scheduler "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/scheduler.service.ts"
click node_check_service "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/check.service.ts"
click node_psi_service "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/psi.service.ts"
click node_links_service "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/brokenLinks.service.ts"
click node_ai_service "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/ai.service.ts"
click node_alert_service "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/alert.service.ts"
click node_pdf_service "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/pdf.service.ts"
click node_models "https://github.com/manpreet-singh-kamboj/pulsewatch/tree/main/backend/src/models"
click node_redis "https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/config/redis.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_monitor_ui,node_dashboard_ui,node_incident_ui,node_logs_ui,node_report_ui,node_settings_ui,node_sse_ui,node_user,node_browser toneBlue
class node_api_app,node_auth_routes,node_admin_routes,node_broadcast_routes toneAmber
class node_monitor_routes,node_incident_routes,node_scheduler,node_check_service,node_alert_channels toneMint
class node_dashboard_routes,node_report_routes,node_psi_service,node_links_service,node_ai_service,node_pdf_service toneRose
class node_alert_service,node_models,node_mongo,node_redis,node_openai,node_google_psi toneIndigo
```

## Components

### User interface

- [Application routes](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Monitor setup](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/pages/MonitorForm.tsx): `frontend/src/pages/MonitorForm.tsx`
- [Live dashboard](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/pages/Dashboard.tsx): `frontend/src/pages/Dashboard.tsx`
- [Incident views](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/pages/Incidents.tsx): `frontend/src/pages/Incidents.tsx`
- [Check logs](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/pages/CheckLogs.tsx): `frontend/src/pages/CheckLogs.tsx`
- [Reports UI](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/pages/Report.tsx): `frontend/src/pages/Report.tsx`
- [Alert settings](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/pages/Settings.tsx): `frontend/src/pages/Settings.tsx`
- [SSE bridge](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/frontend/src/components/SseBridge.tsx): `frontend/src/components/SseBridge.tsx`

### API and accounts

- [Express API](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/app.ts): `backend/src/app.ts`
- [Authentication](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/auth.routes.ts): `backend/src/routes/auth.routes.ts`
- [Administration](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/admin.routes.ts): `backend/src/routes/admin.routes.ts`
- [Broadcast endpoints](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/broadcast.routes.ts): `backend/src/routes/broadcast.routes.ts`

### Monitoring lifecycle

- [Monitor endpoints](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/monitor.routes.ts): `backend/src/routes/monitor.routes.ts`
- [Incident endpoints](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/incident.routes.ts): `backend/src/routes/incident.routes.ts`
- [Check scheduler](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/scheduler.service.ts): `backend/src/services/scheduler.service.ts`
- [Monitor checks](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/check.service.ts): `backend/src/services/check.service.ts`

### Insights and reporting

- [Dashboard endpoints](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/dashboard.routes.ts): `backend/src/routes/dashboard.routes.ts`
- [Report endpoints](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/routes/report.routes.ts): `backend/src/routes/report.routes.ts`
- [PageSpeed insights](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/psi.service.ts): `backend/src/services/psi.service.ts`
- [Broken link scan](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/brokenLinks.service.ts): `backend/src/services/brokenLinks.service.ts`
- [AI analysis](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/ai.service.ts): `backend/src/services/ai.service.ts`
- [PDF generation](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/pdf.service.ts): `backend/src/services/pdf.service.ts`

### Persistence and delivery

- [Alert delivery](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/services/alert.service.ts): `backend/src/services/alert.service.ts`
- [Domain records](https://github.com/manpreet-singh-kamboj/pulsewatch/tree/main/backend/src/models): `backend/src/models`
- **MongoDB**
- [Redis cache](https://github.com/manpreet-singh-kamboj/pulsewatch/blob/main/backend/src/config/redis.ts): `backend/src/config/redis.ts`

### Other components

- **User**
- **Browser**
- **OpenAI**
- **Google PSI**
- **Email / SMS / webhooks**

## Connections

- User → Browser: uses
- Browser → Application routes: opens
- Application routes → Monitor setup: routes to (evidence: `frontend/src/App.tsx`)
- Application routes → Live dashboard: routes to (evidence: `frontend/src/App.tsx`)
- Application routes → Incident views: routes to (evidence: `frontend/src/App.tsx`)
- Application routes → Check logs: routes to (evidence: `frontend/src/App.tsx`)
- Application routes → Reports UI: routes to (evidence: `frontend/src/App.tsx`)
- Application routes → Alert settings: routes to
- Application routes → SSE bridge: mounts (evidence: `frontend/src/App.tsx`)
- Browser → Express API: requests API
- Express API → Authentication: dispatches (evidence: `backend/src/app.ts`)
- Express API → Monitor endpoints: dispatches (evidence: `backend/src/app.ts`)
- Express API → Dashboard endpoints: dispatches (evidence: `backend/src/app.ts`)
- Express API → Incident endpoints: dispatches (evidence: `backend/src/app.ts`)
- Express API → Report endpoints: dispatches (evidence: `backend/src/app.ts`)
- Express API → Administration: dispatches (evidence: `backend/src/app.ts`)
- Express API → Broadcast endpoints: dispatches (evidence: `backend/src/app.ts`)
- Monitor endpoints → Check scheduler: schedules checks (evidence: `backend/src/routes/monitor.routes.ts`)
- Check scheduler → Monitor checks: runs checks (evidence: `backend/src/services/scheduler.service.ts`)
- Check scheduler → PageSpeed insights: collects PSI (evidence: `backend/src/services/scheduler.service.ts`)
- Check scheduler → Alert delivery: sends alerts (evidence: `backend/src/services/scheduler.service.ts`)
- Check scheduler → AI analysis: summarizes incidents (evidence: `backend/src/services/scheduler.service.ts`)
- Check scheduler → Domain records: updates records (evidence: `backend/src/services/scheduler.service.ts`)
- Monitor endpoints → PageSpeed insights: requests PSI (evidence: `backend/src/routes/monitor.routes.ts`)
- Monitor endpoints → Broken link scan: scans links (evidence: `backend/src/routes/monitor.routes.ts`)
- Dashboard endpoints → AI analysis: requests analysis (evidence: `backend/src/routes/dashboard.routes.ts`)
- Dashboard endpoints → PageSpeed insights: requests insights (evidence: `backend/src/routes/dashboard.routes.ts`)
- Dashboard endpoints → Broken link scan: requests scans (evidence: `backend/src/routes/dashboard.routes.ts`)
- Dashboard endpoints → Domain records: reads metrics (evidence: `backend/src/routes/dashboard.routes.ts`)
- Report endpoints → AI analysis: generates report (evidence: `backend/src/routes/report.routes.ts`)
- Report endpoints → PDF generation: creates PDF (evidence: `backend/src/routes/report.routes.ts`)
- Report endpoints → Domain records: reads history (evidence: `backend/src/routes/report.routes.ts`)
- Authentication → Domain records: manages accounts (evidence: `backend/src/routes/auth.routes.ts`)
- Monitor endpoints → Domain records: stores monitor data (evidence: `backend/src/routes/monitor.routes.ts`)
- Incident endpoints → Domain records: reads incidents (evidence: `backend/src/routes/incident.routes.ts`)
- Domain records → MongoDB: persists
- PageSpeed insights → Redis cache: uses cache (evidence: `backend/src/services/psi.service.ts`)
- AI analysis → OpenAI: requests analysis (evidence: `backend/src/services/ai.service.ts`)
- PageSpeed insights → Google PSI: fetches insights
- Alert delivery → Email / SMS / webhooks: delivers alerts
