# vivekanand1190/municipal_grievance architecture

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

- Interactive diagram: https://gitdiagram.com/vivekanand1190/municipal_grievance
- Repository: https://github.com/vivekanand1190/municipal_grievance

## Overview

FixMyCity is a municipal grievance platform: citizens authenticate, file geolocated, classified complaints with photo evidence, and track or support reports; municipal staff review, assign, and resolve them, with feedback and analytics completing the loop. The graph preserves the README’s public map, duplicate checks, notifications, and analytics capabilities. Some subsystem wiring is based on README/API documentation because the corresponding source excerpts are partial; uncertain links are omitted.

Main entry points: [`backend/routes/complaints.js`](https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/routes/complaints.js) (Complaint workflows), [`backend/routes/auth.js`](https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/routes/auth.js) (Authentication routes), [`frontend/citizen/portal.js`](https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/citizen/portal.js) (Report and track), [`backend/db.js`](https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/db.js) (Grievance data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_citizen["Citizen experience"]
  node_citizen_ui["Report and track<br/>[portal.js]"]
  node_history_ui["Complaint history<br/>[my-complaints.js]"]
  node_public_map["Public reports map<br/>[public-map.html]"]
  node_citizen_login["Citizen login<br/>[login.js]"]
end

subgraph group_admin["Administration"]
  node_admin_ui["Admin dashboard<br/>[dashboard.js]"]
  node_admin_map["Staff map<br/>[map.html]"]
  node_analytics_ui["Analytics dashboard<br/>[analytics.js]"]
  node_admin_login["Admin login<br/>[login.js]"]
end

subgraph group_backend["Application services"]
  node_server["HTTP server<br/>[index.js]"]
  node_auth_routes["Authentication routes<br/>[auth.js]"]
  node_complaint_routes["Complaint workflows<br/>[complaints.js]"]
  node_auth_helpers["JWT authorization<br/>[auth.js]"]
  node_classifier["Complaint classifier<br/>[classifier.js]"]
  node_mailer["Email notifications<br/>[mailer.js]"]
end

subgraph group_data["Data and integrations"]
  node_database[("Grievance data<br/>[db.js]")]
  node_photo_store[("Uploaded evidence")]
  node_chart_generator["Analytics charts<br/>[generate_charts.py]"]
end

node_citizen(("Citizen"))
node_staff(("Municipal staff"))
node_mongo[("MongoDB")]
node_smtp["Ethereal SMTP"]

node_citizen -->|"signs in"| node_citizen_login
node_citizen_login -->|"requests session"| node_auth_routes
node_auth_routes -->|"looks up citizen"| node_database
node_auth_routes -->|"signs token"| node_auth_helpers
node_citizen -->|"files report"| node_citizen_ui
node_citizen_ui -->|"submits complaint"| node_complaint_routes
node_complaint_routes -->|"checks identity"| node_auth_helpers
node_complaint_routes -->|"classifies text"| node_classifier
node_complaint_routes -->|"stores photo"| node_photo_store
node_complaint_routes -->|"checks and records"| node_database
node_citizen_ui -->|"checks nearby"| node_complaint_routes
node_citizen_ui -->|"supports report"| node_complaint_routes
node_citizen_ui -->|"opens history"| node_history_ui
node_history_ui -->|"loads reports"| node_complaint_routes
node_history_ui -->|"submits feedback"| node_complaint_routes
node_citizen -->|"views reports"| node_public_map
node_public_map -->|"requests map data"| node_complaint_routes
node_staff -->|"signs in"| node_admin_login
node_admin_login -->|"requests session"| node_auth_routes
node_auth_routes -->|"looks up admin"| node_database
node_staff -->|"manages cases"| node_admin_ui
node_admin_ui -->|"lists and updates"| node_complaint_routes
node_staff -->|"views case locations"| node_admin_map
node_admin_map -->|"requests geotags"| node_complaint_routes
node_staff -->|"reviews analytics"| node_analytics_ui
node_analytics_ui -->|"requests statistics"| node_complaint_routes
node_complaint_routes -->|"queries statistics"| node_database
node_complaint_routes -->|"runs chart analysis"| node_chart_generator
node_complaint_routes -->|"sends status update"| node_mailer
node_mailer -.->|"delivers email"| node_smtp
node_database -->|"reads and writes"| node_mongo
node_server -->|"mounts routes"| node_auth_routes
node_server -->|"mounts routes"| node_complaint_routes

click node_citizen_ui "https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/citizen/portal.js"
click node_history_ui "https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/citizen/my-complaints.js"
click node_public_map "https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/public-map.html"
click node_citizen_login "https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/citizen/login.js"
click node_admin_ui "https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/admin/dashboard.js"
click node_admin_map "https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/admin/map.html"
click node_analytics_ui "https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/admin/analytics.js"
click node_admin_login "https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/admin/login.js"
click node_server "https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/index.js"
click node_auth_routes "https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/routes/auth.js"
click node_complaint_routes "https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/routes/complaints.js"
click node_auth_helpers "https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/auth.js"
click node_classifier "https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/classifier.js"
click node_mailer "https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/mailer.js"
click node_database "https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/db.js"
click node_photo_store "https://github.com/vivekanand1190/municipal_grievance/tree/main/backend/uploads"
click node_chart_generator "https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/generate_charts.py"

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_citizen_ui,node_history_ui,node_public_map,node_citizen_login toneBlue
class node_admin_ui,node_admin_map,node_analytics_ui,node_admin_login,node_mongo toneAmber
class node_server,node_auth_routes,node_complaint_routes,node_auth_helpers,node_classifier,node_mailer toneMint
class node_database,node_photo_store,node_chart_generator toneRose
class node_citizen,node_staff,node_smtp toneIndigo
```

## Components

### Citizen experience

- [Report and track](https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/citizen/portal.js): `frontend/citizen/portal.js`
- [Complaint history](https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/citizen/my-complaints.js): `frontend/citizen/my-complaints.js`
- [Public reports map](https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/public-map.html): `frontend/public-map.html`
- [Citizen login](https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/citizen/login.js): `frontend/citizen/login.js`

### Administration

- [Admin dashboard](https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/admin/dashboard.js): `frontend/admin/dashboard.js`
- [Staff map](https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/admin/map.html): `frontend/admin/map.html`
- [Analytics dashboard](https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/admin/analytics.js): `frontend/admin/analytics.js`
- [Admin login](https://github.com/vivekanand1190/municipal_grievance/blob/main/frontend/admin/login.js): `frontend/admin/login.js`

### Application services

- [HTTP server](https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/index.js): `backend/index.js`
- [Authentication routes](https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/routes/auth.js): `backend/routes/auth.js`
- [Complaint workflows](https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/routes/complaints.js): `backend/routes/complaints.js`
- [JWT authorization](https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/auth.js): `backend/auth.js`
- [Complaint classifier](https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/classifier.js): `backend/classifier.js`
- [Email notifications](https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/mailer.js): `backend/mailer.js`

### Data and integrations

- [Grievance data](https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/db.js): `backend/db.js`
- [Uploaded evidence](https://github.com/vivekanand1190/municipal_grievance/tree/main/backend/uploads): `backend/uploads`
- [Analytics charts](https://github.com/vivekanand1190/municipal_grievance/blob/main/backend/generate_charts.py): `backend/generate_charts.py`

### Other components

- **Citizen**
- **Municipal staff**
- **MongoDB**
- **Ethereal SMTP**

## Connections

- Citizen → Citizen login: signs in
- Citizen login → Authentication routes: requests session
- Authentication routes → Grievance data: looks up citizen
- Authentication routes → JWT authorization: signs token
- Citizen → Report and track: files report
- Report and track → Complaint workflows: submits complaint
- Complaint workflows → JWT authorization: checks identity
- Complaint workflows → Complaint classifier: classifies text
- Complaint workflows → Uploaded evidence: stores photo
- Complaint workflows → Grievance data: checks and records
- Report and track → Complaint workflows: checks nearby
- Report and track → Complaint workflows: supports report
- Report and track → Complaint history: opens history
- Complaint history → Complaint workflows: loads reports
- Complaint history → Complaint workflows: submits feedback
- Citizen → Public reports map: views reports
- Public reports map → Complaint workflows: requests map data
- Municipal staff → Admin login: signs in
- Admin login → Authentication routes: requests session
- Authentication routes → Grievance data: looks up admin
- Municipal staff → Admin dashboard: manages cases
- Admin dashboard → Complaint workflows: lists and updates
- Municipal staff → Staff map: views case locations
- Staff map → Complaint workflows: requests geotags
- Municipal staff → Analytics dashboard: reviews analytics
- Analytics dashboard → Complaint workflows: requests statistics
- Complaint workflows → Grievance data: queries statistics
- Complaint workflows → Analytics charts: runs chart analysis
- Complaint workflows → Email notifications: sends status update
- Email notifications → Ethereal SMTP: delivers email
- Grievance data → MongoDB: reads and writes
- HTTP server → Authentication routes: mounts routes
- HTTP server → Complaint workflows: mounts routes
