# ke1ruuu/securetanza architecture

> Architecture diagram of the GitHub repository ke1ruuu/securetanza, 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/ke1ruuu/securetanza
- Repository: https://github.com/ke1ruuu/securetanza

## Overview

SecureTanza is a crime-incident mapping, analytics, and administration application. The main user flow is viewing incidents on the public map or dashboard, requesting filtered crime data, and exploring geographic and time-based patterns; authorized staff can upload spreadsheets, where records are mapped, deduplicated, stored, and evaluated for notifications. Separate administration capabilities cover users, audit logs, backups, notifications, and performance. The tree and excerpts support these subsystem boundaries, but many UI-to-API links and unsampled service internals are not shown, so those connections are omitted.

Main entry points: [`backend/lib/prisma.ts`](https://github.com/ke1ruuu/securetanza/blob/main/backend/lib/prisma.ts) (Database access), [`backend/api/crimes/upload/route.ts`](https://github.com/ke1ruuu/securetanza/blob/main/backend/api/crimes/upload/route.ts) (Spreadsheet upload), [`app/api/system/performance/route.ts`](https://github.com/ke1ruuu/securetanza/blob/main/app/api/system/performance/route.ts) (Performance API), [`app/map/page.tsx`](https://github.com/ke1ruuu/securetanza/blob/main/app/map/page.tsx) (Crime map)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_map_page["Crime map<br/>[page.tsx]"]
  node_dashboard["Dashboard views<br/>[page.tsx]"]
  node_map_layers["Map layers and controls<br/>[tanza-map-root.tsx]"]
  node_analytics_views["Analytics and reports<br/>[analytics-tab.tsx]"]
end

subgraph group_crime["Crime data"]
  node_crime_routes["Crime API<br/>[route.ts]"]
  node_upload_route["Spreadsheet upload<br/>[route.ts]"]
  node_crime_service["Crime services<br/>[crime.service.ts]"]
  node_barangay_mapping["Barangay mapping<br/>[barangay-mapper.ts]"]
  node_dedup["Crime deduplication"]
  node_notification_engine["Notification analysis"]
end

subgraph group_admin["Administration"]
  node_notification_api["Notification management API<br/>[route.ts]"]
  node_user_api["User administration API<br/>[route.ts]"]
  node_audit_api["Audit log API<br/>[route.ts]"]
  node_backup_api["Backup API<br/>[route.ts]"]
  node_performance_api["Performance API<br/>[route.ts]"]
  node_backup_service["Backup service<br/>[backup.service.ts]"]
end

subgraph group_infrastructure["Runtime infrastructure"]
  node_cache["Read-through cache<br/>[cache.service.ts]"]
  node_prisma["Database access<br/>[prisma.ts]"]
  node_database[("PostgreSQL<br/>[database.ts]")]
end

node_user(("Public and staff users"))

node_user -->|"opens map"| node_map_page
node_user -->|"opens dashboard"| node_dashboard
node_map_page -->|"renders map"| node_map_layers
node_dashboard -->|"shows analysis"| node_analytics_views
node_crime_routes -->|"requests crime data"| node_crime_service
node_upload_route -->|"maps names"| node_barangay_mapping
node_upload_route -->|"checks duplicates"| node_dedup
node_upload_route -->|"writes incidents"| node_prisma
node_upload_route -->|"evaluates batch"| node_notification_engine
node_notification_engine -->|"persists notifications"| node_prisma
node_notification_api -->|"reads and updates"| node_prisma
node_user_api -->|"manages accounts"| node_prisma
node_audit_api -->|"reads and writes logs"| node_prisma
node_backup_api -->|"requests backups"| node_backup_service
node_performance_api -->|"measures database"| node_prisma
node_performance_api -->|"reads and clears"| node_cache
node_prisma -->|"accesses"| node_database

click node_map_page "https://github.com/ke1ruuu/securetanza/blob/main/app/map/page.tsx"
click node_dashboard "https://github.com/ke1ruuu/securetanza/blob/main/app/dashboard/page.tsx"
click node_map_layers "https://github.com/ke1ruuu/securetanza/blob/main/components/map/tanza-map-root.tsx"
click node_analytics_views "https://github.com/ke1ruuu/securetanza/blob/main/components/dashboard/analytics-tab.tsx"
click node_crime_routes "https://github.com/ke1ruuu/securetanza/blob/main/backend/api/crimes/route.ts"
click node_upload_route "https://github.com/ke1ruuu/securetanza/blob/main/backend/api/crimes/upload/route.ts"
click node_crime_service "https://github.com/ke1ruuu/securetanza/blob/main/backend/services/crime.service.ts"
click node_barangay_mapping "https://github.com/ke1ruuu/securetanza/blob/main/backend/lib/barangay-mapper.ts"
click node_dedup "https://github.com/ke1ruuu/securetanza/blob/main/backend/lib/crime-deduplication.ts"
click node_notification_engine "https://github.com/ke1ruuu/securetanza/blob/main/backend/lib/notification-engine.ts"
click node_notification_api "https://github.com/ke1ruuu/securetanza/blob/main/app/api/notifications/route.ts"
click node_user_api "https://github.com/ke1ruuu/securetanza/blob/main/app/api/users/route.ts"
click node_audit_api "https://github.com/ke1ruuu/securetanza/blob/main/app/api/audit-logs/route.ts"
click node_backup_api "https://github.com/ke1ruuu/securetanza/blob/main/app/api/backups/route.ts"
click node_performance_api "https://github.com/ke1ruuu/securetanza/blob/main/app/api/system/performance/route.ts"
click node_backup_service "https://github.com/ke1ruuu/securetanza/blob/main/backend/services/backup.service.ts"
click node_cache "https://github.com/ke1ruuu/securetanza/blob/main/backend/cache/cache.service.ts"
click node_prisma "https://github.com/ke1ruuu/securetanza/blob/main/backend/lib/prisma.ts"
click node_database "https://github.com/ke1ruuu/securetanza/blob/main/backend/config/database.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_map_page,node_dashboard,node_map_layers,node_analytics_views,node_user toneBlue
class node_crime_routes,node_upload_route,node_crime_service,node_barangay_mapping,node_dedup,node_notification_engine toneAmber
class node_notification_api,node_user_api,node_audit_api,node_backup_api,node_performance_api,node_backup_service toneMint
class node_cache,node_prisma,node_database toneRose
```

## Components

### User experience

- [Crime map](https://github.com/ke1ruuu/securetanza/blob/main/app/map/page.tsx): `app/map/page.tsx`
- [Dashboard views](https://github.com/ke1ruuu/securetanza/blob/main/app/dashboard/page.tsx): `app/dashboard/page.tsx`
- [Map layers and controls](https://github.com/ke1ruuu/securetanza/blob/main/components/map/tanza-map-root.tsx): `components/map/tanza-map-root.tsx`
- [Analytics and reports](https://github.com/ke1ruuu/securetanza/blob/main/components/dashboard/analytics-tab.tsx): `components/dashboard/analytics-tab.tsx`

### Crime data

- [Crime API](https://github.com/ke1ruuu/securetanza/blob/main/backend/api/crimes/route.ts): `backend/api/crimes/route.ts`
- [Spreadsheet upload](https://github.com/ke1ruuu/securetanza/blob/main/backend/api/crimes/upload/route.ts): `backend/api/crimes/upload/route.ts`
- [Crime services](https://github.com/ke1ruuu/securetanza/blob/main/backend/services/crime.service.ts): `backend/services/crime.service.ts`
- [Barangay mapping](https://github.com/ke1ruuu/securetanza/blob/main/backend/lib/barangay-mapper.ts): `backend/lib/barangay-mapper.ts`
- [Crime deduplication](https://github.com/ke1ruuu/securetanza/blob/main/backend/lib/crime-deduplication.ts): `backend/lib/crime-deduplication.ts`
- [Notification analysis](https://github.com/ke1ruuu/securetanza/blob/main/backend/lib/notification-engine.ts): `backend/lib/notification-engine.ts`

### Administration

- [Notification management API](https://github.com/ke1ruuu/securetanza/blob/main/app/api/notifications/route.ts): `app/api/notifications/route.ts`
- [User administration API](https://github.com/ke1ruuu/securetanza/blob/main/app/api/users/route.ts): `app/api/users/route.ts`
- [Audit log API](https://github.com/ke1ruuu/securetanza/blob/main/app/api/audit-logs/route.ts): `app/api/audit-logs/route.ts`
- [Backup API](https://github.com/ke1ruuu/securetanza/blob/main/app/api/backups/route.ts): `app/api/backups/route.ts`
- [Performance API](https://github.com/ke1ruuu/securetanza/blob/main/app/api/system/performance/route.ts): `app/api/system/performance/route.ts`
- [Backup service](https://github.com/ke1ruuu/securetanza/blob/main/backend/services/backup.service.ts): `backend/services/backup.service.ts`

### Runtime infrastructure

- [Read-through cache](https://github.com/ke1ruuu/securetanza/blob/main/backend/cache/cache.service.ts): `backend/cache/cache.service.ts`
- [Database access](https://github.com/ke1ruuu/securetanza/blob/main/backend/lib/prisma.ts): `backend/lib/prisma.ts`
- [PostgreSQL](https://github.com/ke1ruuu/securetanza/blob/main/backend/config/database.ts): `backend/config/database.ts`

### Other components

- **Public and staff users**

## Connections

- Public and staff users → Crime map: opens map
- Public and staff users → Dashboard views: opens dashboard
- Crime map → Map layers and controls: renders map
- Dashboard views → Analytics and reports: shows analysis
- Crime API → Crime services: requests crime data
- Spreadsheet upload → Barangay mapping: maps names
- Spreadsheet upload → Crime deduplication: checks duplicates
- Spreadsheet upload → Database access: writes incidents
- Spreadsheet upload → Notification analysis: evaluates batch
- Notification analysis → Database access: persists notifications
- Notification management API → Database access: reads and updates
- User administration API → Database access: manages accounts
- Audit log API → Database access: reads and writes logs
- Backup API → Backup service: requests backups
- Performance API → Database access: measures database
- Performance API → Read-through cache: reads and clears
- Database access → PostgreSQL: accesses
