# xetaedge/cim-outage-centre architecture

> Architecture diagram of the GitHub repository xetaedge/cim-outage-centre, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/xetaedge/cim-outage-centre
- Repository: https://github.com/xetaedge/cim-outage-centre

## Overview

CIM Outage Centre supports incident intake and lifecycle management, site-impact tracking, AI-assisted analysis, communications, and operational reporting. The sampled routes show incident handlers coordinating persistence and external services; the tree identifies additional product areas such as authentication, administration, bulk upload, and live notes. UI-to-API wiring and unsampled route behavior are not shown where the excerpts do not establish them.

Main entry points: [`src/lib/prisma.ts`](https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/prisma.ts) (Application database), [`src/app/api/incidents/route.ts`](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/incidents/route.ts) (Incident intake), [`src/app/api/incidents/[id]/updates/route.ts`](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/incidents/%5Bid%5D/updates/route.ts) (Incident updates), [`src/app/api/incidents/[id]/ai-analysis/route.ts`](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/incidents/%5Bid%5D/ai-analysis/route.ts) (AI incident analysis)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Operator experience"]
  node_home["Outage dashboard<br/>[page.tsx]"]
  node_incident_view["Incident workspace<br/>[page.tsx]"]
  node_analytics_view["Analytics view<br/>[page.tsx]"]
  node_reports_view["Reports view<br/>[page.tsx]"]
  node_sites_view["Sites view<br/>[page.tsx]"]
  node_admin_view["Administration<br/>[page.tsx]"]
end

subgraph group_incident["Incident operations"]
  node_incidents_api["Incident intake<br/>[route.ts]"]
  node_incident_api["Incident lifecycle<br/>[route.ts]"]
  node_updates_api["Incident updates<br/>[route.ts]"]
  node_sites_api["Site management<br/>[route.ts]"]
  node_bulk_api["Bulk upload<br/>[route.ts]"]
end

subgraph group_insight["Analysis and reporting"]
  node_analysis_api["AI incident analysis<br/>[route.ts]"]
  node_copilot_api["AI copilot<br/>[route.ts]"]
  node_similar_api["Historical matching<br/>[route.ts]"]
  node_analytics_api["Operational metrics<br/>[route.ts]"]
  node_reports_api["Filtered reports<br/>[route.ts]"]
  node_export_api["Report export<br/>[route.ts]"]
end

subgraph group_platform["Services and integrations"]
  node_auth_api["Authentication<br/>[route.ts]"]
  node_auth_lib["Token utilities<br/>[auth.ts]"]
  node_database[("Application database<br/>[prisma.ts]")]
  node_openai["OpenAI service<br/>[openai.ts]"]
  node_gemini["Gemini service<br/>[gemini.ts]"]
  node_servicenow["ServiceNow connector<br/>[servicenow.ts]"]
  node_email["Email service<br/>[email.ts]"]
  node_teams["Teams bridge<br/>[teams.ts]"]
end

node_operator(("Operator"))

node_operator -->|"opens"| node_home
node_operator -->|"manages"| node_incident_view
node_operator -->|"reviews"| node_analytics_view
node_operator -->|"reviews"| node_reports_view
node_operator -->|"manages"| node_sites_view
node_operator -->|"configures"| node_admin_view
node_incidents_api -->|"reads and writes"| node_database
node_incidents_api -->|"generates insights"| node_openai
node_incidents_api -->|"creates bridge"| node_teams
node_incidents_api -->|"sends notices"| node_email
node_incident_api -->|"reads and writes"| node_database
node_incident_api -->|"looks up recipients"| node_email
node_updates_api -->|"writes updates"| node_database
node_updates_api -->|"generates summary"| node_openai
node_updates_api -->|"looks up recipients"| node_email
node_updates_api -->|"syncs work notes"| node_servicenow
node_sites_api -->|"reads and writes"| node_database
node_analysis_api -->|"reads incident"| node_database
node_analysis_api -->|"searches records"| node_servicenow
node_analysis_api -->|"generates analysis"| node_gemini
node_copilot_api -->|"reads incidents"| node_database
node_copilot_api -->|"queries records"| node_servicenow
node_copilot_api -->|"answers prompt"| node_gemini
node_similar_api -->|"searches history"| node_database
node_similar_api -->|"summarizes matches"| node_gemini
node_analytics_api -->|"reads metrics"| node_database
node_reports_api -->|"queries incidents"| node_database
node_export_api -->|"queries incidents"| node_database
node_auth_api -->|"uses tokens"| node_auth_lib
node_auth_api -->|"reads and writes"| node_database

click node_home "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/page.tsx"
click node_incident_view "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/incidents/%5Bid%5D/page.tsx"
click node_analytics_view "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/analytics/page.tsx"
click node_reports_view "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/reports/page.tsx"
click node_sites_view "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/sites/page.tsx"
click node_admin_view "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/admin/page.tsx"
click node_incidents_api "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/incidents/route.ts"
click node_incident_api "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/incidents/%5Bid%5D/route.ts"
click node_updates_api "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/incidents/%5Bid%5D/updates/route.ts"
click node_sites_api "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/sites/route.ts"
click node_bulk_api "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/admin/bulk-upload/route.ts"
click node_analysis_api "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/incidents/%5Bid%5D/ai-analysis/route.ts"
click node_copilot_api "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/ai/copilot/route.ts"
click node_similar_api "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/reports/think/route.ts"
click node_analytics_api "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/analytics/route.ts"
click node_reports_api "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/reports/route.ts"
click node_export_api "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/reports/export/route.ts"
click node_auth_api "https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/auth/login/route.ts"
click node_auth_lib "https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/auth.ts"
click node_database "https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/prisma.ts"
click node_openai "https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/openai.ts"
click node_gemini "https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/gemini.ts"
click node_servicenow "https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/servicenow.ts"
click node_email "https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/email.ts"
click node_teams "https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/teams.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_home,node_incident_view,node_analytics_view,node_reports_view,node_sites_view,node_admin_view toneBlue
class node_incidents_api,node_incident_api,node_updates_api,node_sites_api,node_bulk_api toneAmber
class node_analysis_api,node_copilot_api,node_similar_api,node_analytics_api,node_reports_api,node_export_api toneMint
class node_auth_api,node_auth_lib,node_database,node_openai,node_gemini,node_servicenow,node_email,node_teams toneRose
class node_operator toneIndigo
```

## Components

### Operator experience

- [Outage dashboard](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/page.tsx): `src/app/page.tsx`
- [Incident workspace](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/incidents/%5Bid%5D/page.tsx): `src/app/incidents/[id]/page.tsx`
- [Analytics view](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/analytics/page.tsx): `src/app/analytics/page.tsx`
- [Reports view](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/reports/page.tsx): `src/app/reports/page.tsx`
- [Sites view](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/sites/page.tsx): `src/app/sites/page.tsx`
- [Administration](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/admin/page.tsx): `src/app/admin/page.tsx`

### Incident operations

- [Incident intake](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/incidents/route.ts): `src/app/api/incidents/route.ts`
- [Incident lifecycle](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/incidents/%5Bid%5D/route.ts): `src/app/api/incidents/[id]/route.ts`
- [Incident updates](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/incidents/%5Bid%5D/updates/route.ts): `src/app/api/incidents/[id]/updates/route.ts`
- [Site management](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/sites/route.ts): `src/app/api/sites/route.ts`
- [Bulk upload](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/admin/bulk-upload/route.ts): `src/app/api/admin/bulk-upload/route.ts`

### Analysis and reporting

- [AI incident analysis](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/incidents/%5Bid%5D/ai-analysis/route.ts): `src/app/api/incidents/[id]/ai-analysis/route.ts`
- [AI copilot](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/ai/copilot/route.ts): `src/app/api/ai/copilot/route.ts`
- [Historical matching](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/reports/think/route.ts): `src/app/api/reports/think/route.ts`
- [Operational metrics](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/analytics/route.ts): `src/app/api/analytics/route.ts`
- [Filtered reports](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/reports/route.ts): `src/app/api/reports/route.ts`
- [Report export](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/reports/export/route.ts): `src/app/api/reports/export/route.ts`

### Services and integrations

- [Authentication](https://github.com/xetaedge/cim-outage-centre/blob/main/src/app/api/auth/login/route.ts): `src/app/api/auth/login/route.ts`
- [Token utilities](https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/auth.ts): `src/lib/auth.ts`
- [Application database](https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/prisma.ts): `src/lib/prisma.ts`
- [OpenAI service](https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/openai.ts): `src/lib/openai.ts`
- [Gemini service](https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/gemini.ts): `src/lib/gemini.ts`
- [ServiceNow connector](https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/servicenow.ts): `src/lib/servicenow.ts`
- [Email service](https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/email.ts): `src/lib/email.ts`
- [Teams bridge](https://github.com/xetaedge/cim-outage-centre/blob/main/src/lib/teams.ts): `src/lib/teams.ts`

### Other components

- **Operator**

## Connections

- Operator → Outage dashboard: opens
- Operator → Incident workspace: manages
- Operator → Analytics view: reviews
- Operator → Reports view: reviews
- Operator → Sites view: manages
- Operator → Administration: configures
- Incident intake → Application database: reads and writes
- Incident intake → OpenAI service: generates insights
- Incident intake → Teams bridge: creates bridge
- Incident intake → Email service: sends notices
- Incident lifecycle → Application database: reads and writes
- Incident lifecycle → Email service: looks up recipients
- Incident updates → Application database: writes updates
- Incident updates → OpenAI service: generates summary
- Incident updates → Email service: looks up recipients
- Incident updates → ServiceNow connector: syncs work notes
- Site management → Application database: reads and writes
- AI incident analysis → Application database: reads incident
- AI incident analysis → ServiceNow connector: searches records
- AI incident analysis → Gemini service: generates analysis
- AI copilot → Application database: reads incidents
- AI copilot → ServiceNow connector: queries records
- AI copilot → Gemini service: answers prompt
- Historical matching → Application database: searches history
- Historical matching → Gemini service: summarizes matches
- Operational metrics → Application database: reads metrics
- Filtered reports → Application database: queries incidents
- Report export → Application database: queries incidents
- Authentication → Token utilities: uses tokens
- Authentication → Application database: reads and writes
