# ikjotsingh2710/civicpulse architecture

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

- Interactive diagram: https://gitdiagram.com/ikjotsingh2710/civicpulse
- Repository: https://github.com/ikjotsingh2710/civicpulse

## Overview

Civicpulse is a citizen-facing campus and city issue-reporting application with public issue discovery, government-portal handoff, and administration tools. The principal flow is a citizen signs in, prepares a report with a photo and location, submits it, and can track it or hand it to a jurisdictional portal. The graph also shows community issue views, account and engagement features, and admin operations. Relationships are limited to route declarations, excerpted calls, and SOURCE INDEX references; unsampled modules are represented by their existing paths, without assuming their internal behavior.

Main entry points: [`src/app/app.routes.ts`](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/app.routes.ts) (Application routes), [`src/app/core/tickets.service.ts`](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/tickets.service.ts) (Ticket service), [`src/app/features/report/report-page.ts`](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/report/report-page.ts) (Report submission), [`src/app/core/auth.service.ts`](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/auth.service.ts) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Citizen experience"]
  node_routes["Application routes<br/>[app.routes.ts]"]
  node_authpage["Sign-in<br/>[auth-page.ts]"]
  node_home["Home and discovery<br/>[home-page.ts]"]
  node_issues["Issue listings<br/>[issues-page.ts]"]
  node_profile["Profile and tracking<br/>[profile-page.ts]"]
  node_resolved["Resolved reports<br/>[resolved-page.ts]"]
  node_sharedreport["Shared report"]
  node_points["Pulse Points"]
  node_security["Security settings<br/>[security-page.ts]"]
end

subgraph group_reporting["Reports and portals"]
  node_report["Report submission<br/>[report-page.ts]"]
  node_tickets["Ticket service<br/>[tickets.service.ts]"]
  node_geolocate["Location capture<br/>[geolocate.ts]"]
  node_camera["Camera capture<br/>[camera-capture.ts]"]
  node_media["Photo storage<br/>[media.service.ts]"]
  node_portaldir["Portal directory"]
  node_portalsvc["Portal routing<br/>[portal.service.ts]"]
  node_jurisdiction["Jurisdiction matching<br/>[jurisdiction.ts]"]
  node_connectors["Portal connectors<br/>[connector.ts]"]
  node_handoff["Portal handoff<br/>[portal-handoff.ts]"]
  node_escalations["Ticket escalations"]
end

subgraph group_operations["Administration"]
  node_admin["Admin control desk<br/>[admin-page.ts]"]
  node_adminreports["Report administration<br/>[admin-reports.ts]"]
  node_adminservice["Admin service<br/>[admin.service.ts]"]
end

subgraph group_platform["Shared platform"]
  node_auth["Authentication<br/>[auth.service.ts]"]
  node_guards["Route guards<br/>[auth.guards.ts]"]
  node_supabaseclient["Supabase client<br/>[supabase.client.ts]"]
  node_updates["Report updates<br/>[updates.service.ts]"]
  node_notifications["Notifications"]
  node_i18n["Localization<br/>[i18n.service.ts]"]
  node_models["Domain models<br/>[models.ts]"]
  node_feedback["Feedback service"]
end

node_citizen(("Citizen"))
node_government(("Government portals"))
node_database[("Supabase data and auth")]

node_citizen -->|"opens app"| node_routes
node_routes -->|"routes to"| node_home
node_routes -->|"routes to"| node_authpage
node_routes -->|"routes to"| node_issues
node_routes -->|"routes to"| node_report
node_routes -->|"routes to"| node_profile
node_routes -->|"routes to"| node_resolved
node_routes -->|"routes to"| node_sharedreport
node_routes -->|"routes to"| node_portaldir
node_routes -->|"routes to"| node_points
node_routes -->|"routes to"| node_security
node_routes -->|"routes to"| node_escalations
node_routes -->|"routes to"| node_admin
node_routes -->|"checks access"| node_guards
node_authpage -->|"authenticates"| node_auth
node_report -->|"submits reports"| node_tickets
node_report -->|"uses location"| node_geolocate
node_report -->|"offers capture"| node_camera
node_report -->|"uses photos"| node_media
node_report -->|"offers handoff"| node_handoff
node_home -->|"loads tickets"| node_tickets
node_home -->|"offers capture"| node_camera
node_issues -->|"loads issues"| node_tickets
node_profile -->|"loads reports"| node_tickets
node_profile -->|"loads updates"| node_updates
node_resolved -->|"loads resolved"| node_tickets
node_sharedreport -->|"loads report"| node_tickets
node_escalations -->|"uses tickets"| node_tickets
node_portaldir -->|"loads directory"| node_portalsvc
node_handoff -->|"requests handoff"| node_portalsvc
node_portalsvc -->|"routes complaint"| node_jurisdiction
node_portalsvc -->|"creates connector"| node_connectors
node_handoff -->|"opens portal"| node_government
node_admin -->|"uses admin data"| node_adminservice
node_admin -->|"loads reports"| node_adminreports
node_adminreports -->|"uses ticket data"| node_tickets
node_tickets -->|"checks identity"| node_auth
node_tickets -->|"manages photos"| node_media
node_auth -->|"uses client"| node_supabaseclient
node_supabaseclient -->|"connects to"| node_database
node_adminservice -->|"uses client"| node_supabaseclient
node_notifications -->|"uses client"| node_supabaseclient
node_notifications -->|"uses identity"| node_auth
node_updates -->|"uses identity"| node_auth
node_updates -->|"uses tickets"| node_tickets
node_home -->|"uses translations"| node_i18n
node_report -->|"uses translations"| node_i18n
node_portaldir -->|"uses translations"| node_i18n

click node_routes "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/app.routes.ts"
click node_authpage "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/auth/auth-page.ts"
click node_home "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/home/home-page.ts"
click node_issues "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/issues/issues-page.ts"
click node_profile "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/profile/profile-page.ts"
click node_resolved "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/resolved/resolved-page.ts"
click node_sharedreport "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/share/shared-report-page.ts"
click node_points "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/points/pulse-points-page.ts"
click node_security "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/security/security-page.ts"
click node_report "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/report/report-page.ts"
click node_tickets "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/tickets.service.ts"
click node_geolocate "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/geolocate.ts"
click node_camera "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/shared/camera-capture.ts"
click node_media "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/media.service.ts"
click node_portaldir "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/portals/portal-directory-page.ts"
click node_portalsvc "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/portal.service.ts"
click node_jurisdiction "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/portal/jurisdiction.ts"
click node_connectors "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/portal/connector.ts"
click node_handoff "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/shared/portal-handoff.ts"
click node_escalations "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/escalations/escalations-page.ts"
click node_admin "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/admin/admin-page.ts"
click node_adminreports "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/admin/admin-reports.ts"
click node_adminservice "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/admin.service.ts"
click node_auth "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/auth.service.ts"
click node_guards "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/auth.guards.ts"
click node_supabaseclient "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/supabase.client.ts"
click node_updates "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/updates.service.ts"
click node_notifications "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/notifications.service.ts"
click node_i18n "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/i18n.service.ts"
click node_models "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/models.ts"
click node_feedback "https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/feedback.service.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_routes,node_authpage,node_home,node_issues,node_profile,node_resolved,node_sharedreport,node_points,node_security toneBlue
class node_report,node_tickets,node_geolocate,node_camera,node_media,node_portaldir,node_portalsvc,node_jurisdiction,node_connectors,node_handoff,node_escalations,node_database toneAmber
class node_admin,node_adminreports,node_adminservice toneMint
class node_auth,node_guards,node_supabaseclient,node_updates,node_notifications,node_i18n,node_models,node_feedback toneRose
class node_citizen,node_government toneIndigo
```

## Components

### Citizen experience

- [Application routes](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/app.routes.ts): `src/app/app.routes.ts`
- [Sign-in](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/auth/auth-page.ts): `src/app/features/auth/auth-page.ts`
- [Home and discovery](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/home/home-page.ts): `src/app/features/home/home-page.ts`
- [Issue listings](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/issues/issues-page.ts): `src/app/features/issues/issues-page.ts`
- [Profile and tracking](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/profile/profile-page.ts): `src/app/features/profile/profile-page.ts`
- [Resolved reports](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/resolved/resolved-page.ts): `src/app/features/resolved/resolved-page.ts`
- [Shared report](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/share/shared-report-page.ts): `src/app/features/share/shared-report-page.ts`
- [Pulse Points](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/points/pulse-points-page.ts): `src/app/features/points/pulse-points-page.ts`
- [Security settings](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/security/security-page.ts): `src/app/features/security/security-page.ts`

### Reports and portals

- [Report submission](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/report/report-page.ts): `src/app/features/report/report-page.ts`
- [Ticket service](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/tickets.service.ts): `src/app/core/tickets.service.ts`
- [Location capture](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/geolocate.ts): `src/app/core/geolocate.ts`
- [Camera capture](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/shared/camera-capture.ts): `src/app/shared/camera-capture.ts`
- [Photo storage](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/media.service.ts): `src/app/core/media.service.ts`
- [Portal directory](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/portals/portal-directory-page.ts): `src/app/features/portals/portal-directory-page.ts`
- [Portal routing](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/portal.service.ts): `src/app/core/portal.service.ts`
- [Jurisdiction matching](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/portal/jurisdiction.ts): `src/app/core/portal/jurisdiction.ts`
- [Portal connectors](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/portal/connector.ts): `src/app/core/portal/connector.ts`
- [Portal handoff](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/shared/portal-handoff.ts): `src/app/shared/portal-handoff.ts`
- [Ticket escalations](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/escalations/escalations-page.ts): `src/app/features/escalations/escalations-page.ts`

### Administration

- [Admin control desk](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/admin/admin-page.ts): `src/app/features/admin/admin-page.ts`
- [Report administration](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/features/admin/admin-reports.ts): `src/app/features/admin/admin-reports.ts`
- [Admin service](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/admin.service.ts): `src/app/core/admin.service.ts`

### Shared platform

- [Authentication](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/auth.service.ts): `src/app/core/auth.service.ts`
- [Route guards](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/auth.guards.ts): `src/app/core/auth.guards.ts`
- [Supabase client](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/supabase.client.ts): `src/app/core/supabase.client.ts`
- [Report updates](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/updates.service.ts): `src/app/core/updates.service.ts`
- [Notifications](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/notifications.service.ts): `src/app/core/notifications.service.ts`
- [Localization](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/i18n.service.ts): `src/app/core/i18n.service.ts`
- [Domain models](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/models.ts): `src/app/core/models.ts`
- [Feedback service](https://github.com/ikjotsingh2710/civicpulse/blob/main/src/app/core/feedback.service.ts): `src/app/core/feedback.service.ts`

### Other components

- **Citizen**
- **Government portals**
- **Supabase data and auth**

## Connections

- Citizen → Application routes: opens app (evidence: `src/app/app.routes.ts`)
- Application routes → Home and discovery: routes to (evidence: `src/app/app.routes.ts`)
- Application routes → Sign-in: routes to (evidence: `src/app/app.routes.ts`)
- Application routes → Issue listings: routes to (evidence: `src/app/app.routes.ts`)
- Application routes → Report submission: routes to (evidence: `src/app/app.routes.ts`)
- Application routes → Profile and tracking: routes to (evidence: `src/app/app.routes.ts`)
- Application routes → Resolved reports: routes to (evidence: `src/app/app.routes.ts`)
- Application routes → Shared report: routes to (evidence: `src/app/app.routes.ts`)
- Application routes → Portal directory: routes to (evidence: `src/app/app.routes.ts`)
- Application routes → Pulse Points: routes to (evidence: `src/app/app.routes.ts`)
- Application routes → Security settings: routes to (evidence: `src/app/app.routes.ts`)
- Application routes → Ticket escalations: routes to (evidence: `src/app/app.routes.ts`)
- Application routes → Admin control desk: routes to (evidence: `src/app/app.routes.ts`)
- Application routes → Route guards: checks access (evidence: `src/app/app.routes.ts`)
- Sign-in → Authentication: authenticates (evidence: `src/app/features/auth/auth-page.ts`)
- Report submission → Ticket service: submits reports (evidence: `src/app/features/report/report-page.ts`)
- Report submission → Location capture: uses location (evidence: `src/app/features/report/report-page.ts`)
- Report submission → Camera capture: offers capture (evidence: `src/app/features/report/report-page.ts`)
- Report submission → Photo storage: uses photos (evidence: `src/app/features/report/report-page.ts`)
- Report submission → Portal handoff: offers handoff (evidence: `src/app/features/report/report-page.ts`)
- Home and discovery → Ticket service: loads tickets (evidence: `src/app/features/home/home-page.ts`)
- Home and discovery → Camera capture: offers capture (evidence: `src/app/features/home/home-page.ts`)
- Issue listings → Ticket service: loads issues (evidence: `src/app/features/issues/issues-page.ts`)
- Profile and tracking → Ticket service: loads reports (evidence: `src/app/features/profile/profile-page.ts`)
- Profile and tracking → Report updates: loads updates (evidence: `src/app/features/profile/profile-page.ts`)
- Resolved reports → Ticket service: loads resolved (evidence: `src/app/features/resolved/resolved-page.ts`)
- Shared report → Ticket service: loads report (evidence: `src/app/features/share/shared-report-page.ts`)
- Ticket escalations → Ticket service: uses tickets (evidence: `src/app/features/escalations/escalations-page.ts`)
- Portal directory → Portal routing: loads directory (evidence: `src/app/features/portals/portal-directory-page.ts`)
- Portal handoff → Portal routing: requests handoff (evidence: `src/app/shared/portal-handoff.ts`)
- Portal routing → Jurisdiction matching: routes complaint (evidence: `src/app/core/portal.service.ts`)
- Portal routing → Portal connectors: creates connector (evidence: `src/app/core/portal.service.ts`)
- Portal handoff → Government portals: opens portal (evidence: `src/app/shared/portal-handoff.ts`)
- Admin control desk → Admin service: uses admin data (evidence: `src/app/features/admin/admin-page.ts`)
- Admin control desk → Report administration: loads reports (evidence: `src/app/features/admin/admin-page.ts`)
- Report administration → Ticket service: uses ticket data (evidence: `src/app/features/admin/admin-reports.ts`)
- Ticket service → Authentication: checks identity (evidence: `src/app/core/tickets.service.ts`)
- Ticket service → Photo storage: manages photos (evidence: `src/app/core/tickets.service.ts`)
- Authentication → Supabase client: uses client (evidence: `src/app/core/auth.service.ts`)
- Supabase client → Supabase data and auth: connects to (evidence: `src/app/core/supabase.client.ts`)
- Admin service → Supabase client: uses client (evidence: `src/app/core/admin.service.ts`)
- Notifications → Supabase client: uses client (evidence: `src/app/core/notifications.service.ts`)
- Notifications → Authentication: uses identity (evidence: `src/app/core/notifications.service.ts`)
- Report updates → Authentication: uses identity (evidence: `src/app/core/updates.service.ts`)
- Report updates → Ticket service: uses tickets (evidence: `src/app/core/updates.service.ts`)
- Home and discovery → Localization: uses translations (evidence: `src/app/features/home/home-page.ts`)
- Report submission → Localization: uses translations (evidence: `src/app/features/report/report-page.ts`)
- Portal directory → Localization: uses translations (evidence: `src/app/features/portals/portal-directory-page.ts`)
