# mahlatsim/campus-safety architecture

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

- Interactive diagram: https://gitdiagram.com/mahlatsim/campus-safety
- Repository: https://github.com/mahlatsim/campus-safety

## Overview

Campus Safety Dashboard is a Streamlit platform for authenticated incident reporting and campus safety information. A user registers or logs in, can submit a geolocated report subject to a daily limit, and views reports, safe routes, secure areas, and analytics. The root app and its authentication handler provide the clearest sampled implementation; the README also documents a demo-data streaming path through Kafka into PostgreSQL. STREAM contains parallel app, auth, producer, and consumer copies. Their broader equivalence is apparent from the tree and excerpts, but their full behavior was not inspected.

Main entry points: [`app.py`](https://github.com/mahlatsim/campus-safety/blob/main/app.py) (Dashboard app), [`auth/auth_handlers.py`](https://github.com/mahlatsim/campus-safety/blob/main/auth/auth_handlers.py) (Authentication), [`consumer.py`](https://github.com/mahlatsim/campus-safety/blob/main/consumer.py) (Kafka consumer), [`STREAM/consumer.py`](https://github.com/mahlatsim/campus-safety/blob/main/STREAM/consumer.py) (Kafka consumer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_root_app["Dashboard app<br/>[app.py]"]
  node_stream_app["Dashboard app<br/>[app.py]"]
  node_campus_app["Dashboard app<br/>[app.py]"]
end

subgraph group_identity["Authentication"]
  node_root_auth["Authentication<br/>[auth_handlers.py]"]
  node_stream_auth["Authentication<br/>[auth_handlers.py]"]
  node_campus_auth["Authentication<br/>[auth_handlers.py]"]
end

subgraph group_streaming["Demo streaming"]
  node_root_producer["Demo producer<br/>[producer.py]"]
  node_stream_producer["Demo producer<br/>[producer.py]"]
  node_campus_producer["Demo producer<br/>[producer.py]"]
  node_root_consumer["Kafka consumer<br/>[consumer.py]"]
  node_stream_consumer["Kafka consumer<br/>[consumer.py]"]
  node_campus_consumer["Kafka consumer<br/>[consumer.py]"]
end

subgraph group_persistence["Data services"]
  node_postgres[("PostgreSQL")]
end

node_user(("Campus user"))
node_geoapify{{"Geoapify"}}
node_kafka["Apache Kafka"]

node_user -->|"uses"| node_root_app
node_root_app -->|"renders auth"| node_root_auth
node_root_app -->|"reads and writes"| node_postgres
node_root_app -->|"geocodes locations"| node_geoapify
node_stream_app -->|"renders auth"| node_stream_auth
node_campus_app -->|"renders auth"| node_campus_auth
node_root_auth -->|"queries users"| node_postgres
node_root_producer -->|"publishes events"| node_kafka
node_kafka -->|"delivers events"| node_root_consumer
node_root_consumer -->|"inserts records"| node_postgres
node_stream_producer -->|"publishes events"| node_kafka
node_kafka -.->|"delivers events"| node_stream_consumer
node_stream_consumer -->|"inserts records"| node_postgres
node_campus_producer -->|"publishes events"| node_kafka
node_kafka -.->|"delivers events"| node_campus_consumer
node_campus_consumer -->|"inserts records"| node_postgres

click node_root_app "https://github.com/mahlatsim/campus-safety/blob/main/app.py"
click node_stream_app "https://github.com/mahlatsim/campus-safety/blob/main/STREAM/app.py"
click node_campus_app "https://github.com/mahlatsim/campus-safety/blob/main/STREAM/CampusSafety/app.py"
click node_root_auth "https://github.com/mahlatsim/campus-safety/blob/main/auth/auth_handlers.py"
click node_stream_auth "https://github.com/mahlatsim/campus-safety/blob/main/STREAM/auth/auth_handlers.py"
click node_campus_auth "https://github.com/mahlatsim/campus-safety/blob/main/STREAM/CampusSafety/auth/auth_handlers.py"
click node_root_producer "https://github.com/mahlatsim/campus-safety/blob/main/producer.py"
click node_stream_producer "https://github.com/mahlatsim/campus-safety/blob/main/STREAM/producer.py"
click node_campus_producer "https://github.com/mahlatsim/campus-safety/blob/main/STREAM/CampusSafety/producer.py"
click node_root_consumer "https://github.com/mahlatsim/campus-safety/blob/main/consumer.py"
click node_stream_consumer "https://github.com/mahlatsim/campus-safety/blob/main/STREAM/consumer.py"
click node_campus_consumer "https://github.com/mahlatsim/campus-safety/blob/main/STREAM/CampusSafety/consumer.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_root_app,node_stream_app,node_campus_app,node_user toneBlue
class node_root_auth,node_stream_auth,node_campus_auth toneAmber
class node_root_producer,node_stream_producer,node_campus_producer,node_root_consumer,node_stream_consumer,node_campus_consumer,node_geoapify toneMint
class node_postgres toneRose
class node_kafka toneIndigo
```

## Components

### User experience

- [Dashboard app](https://github.com/mahlatsim/campus-safety/blob/main/app.py): `app.py`
- [Dashboard app](https://github.com/mahlatsim/campus-safety/blob/main/STREAM/app.py): `STREAM/app.py`
- [Dashboard app](https://github.com/mahlatsim/campus-safety/blob/main/STREAM/CampusSafety/app.py): `STREAM/CampusSafety/app.py`

### Authentication

- [Authentication](https://github.com/mahlatsim/campus-safety/blob/main/auth/auth_handlers.py): `auth/auth_handlers.py`
- [Authentication](https://github.com/mahlatsim/campus-safety/blob/main/STREAM/auth/auth_handlers.py): `STREAM/auth/auth_handlers.py`
- [Authentication](https://github.com/mahlatsim/campus-safety/blob/main/STREAM/CampusSafety/auth/auth_handlers.py): `STREAM/CampusSafety/auth/auth_handlers.py`

### Demo streaming

- [Demo producer](https://github.com/mahlatsim/campus-safety/blob/main/producer.py): `producer.py`
- [Demo producer](https://github.com/mahlatsim/campus-safety/blob/main/STREAM/producer.py): `STREAM/producer.py`
- [Demo producer](https://github.com/mahlatsim/campus-safety/blob/main/STREAM/CampusSafety/producer.py): `STREAM/CampusSafety/producer.py`
- [Kafka consumer](https://github.com/mahlatsim/campus-safety/blob/main/consumer.py): `consumer.py`
- [Kafka consumer](https://github.com/mahlatsim/campus-safety/blob/main/STREAM/consumer.py): `STREAM/consumer.py`
- [Kafka consumer](https://github.com/mahlatsim/campus-safety/blob/main/STREAM/CampusSafety/consumer.py): `STREAM/CampusSafety/consumer.py`

### Data services

- **PostgreSQL**

### Other components

- **Campus user**
- **Geoapify**
- **Apache Kafka**

## Connections

- Campus user → Dashboard app: uses (evidence: `readme.md`)
- Dashboard app → Authentication: renders auth (evidence: `app.py`)
- Dashboard app → PostgreSQL: reads and writes (evidence: `readme.md`)
- Dashboard app → Geoapify: geocodes locations (evidence: `app.py`)
- Dashboard app → Authentication: renders auth (evidence: `STREAM/app.py`)
- Dashboard app → Authentication: renders auth (evidence: `STREAM/CampusSafety/app.py`)
- Authentication → PostgreSQL: queries users (evidence: `auth/auth_handlers.py`)
- Demo producer → Apache Kafka: publishes events (evidence: `producer.py`)
- Apache Kafka → Kafka consumer: delivers events (evidence: `readme.md`)
- Kafka consumer → PostgreSQL: inserts records (evidence: `consumer.py`)
- Demo producer → Apache Kafka: publishes events (evidence: `STREAM/producer.py`)
- Apache Kafka → Kafka consumer: delivers events
- Kafka consumer → PostgreSQL: inserts records (evidence: `STREAM/consumer.py`)
- Demo producer → Apache Kafka: publishes events (evidence: `STREAM/CampusSafety/producer.py`)
- Apache Kafka → Kafka consumer: delivers events
- Kafka consumer → PostgreSQL: inserts records (evidence: `STREAM/CampusSafety/consumer.py`)
