# christophervallesalazar/la-water-watch architecture

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

- Interactive diagram: https://gitdiagram.com/christophervallesalazar/la-water-watch
- Repository: https://github.com/christophervallesalazar/la-water-watch

## Overview

LA Water Watch presents water-system conditions and environmental burden through a map-oriented frontend and a Spring API. The documented backend workflow loads public datasets into persistent records, then serves map, system-detail, ranking, metadata, and address-lookup responses; address lookup geocodes an address before testing it against system boundaries. The frontend excerpt uses demo records and local state, and does not show API wiring, so no frontend-to-API connection is asserted. Some backend subsystem links rely on SOURCE INDEX references rather than full excerpts.

Main entry points: [`water-api/src/main/java/org/lawaterwatch/api/bootstrap/DataLoader.java`](https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/bootstrap/DataLoader.java) (Data loader), [`water-api/src/main/java/org/lawaterwatch/api/service/WaterSystemService.java`](https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/service/WaterSystemService.java) (System queries), [`water-api/src/main/java/org/lawaterwatch/api/repository`](https://github.com/christophervallesalazar/la-water-watch/tree/main/water-api/src/main/java/org/lawaterwatch/api/repository) (Data repositories), [`frontend/src/App.tsx`](https://github.com/christophervallesalazar/la-water-watch/blob/main/frontend/src/App.tsx) (Explore page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_app["Explore page<br/>[App.tsx]"]
  node_search["Address search<br/>[AddressSearch.tsx]"]
  node_mapview["Map view<br/>[MapView.tsx]"]
end

subgraph group_api["API and scoring"]
  node_controller["Water endpoints"]
  node_service["System queries"]
  node_geometry["Geometry operations"]
  node_geocoder["Address geocoder"]
  node_mapcache["Map response cache"]
end

subgraph group_ingest["Data ingestion"]
  node_loader["Data loader<br/>[DataLoader.java]"]
  node_loadmappers["Load mappers<br/>[LoadMappers.java]"]
  node_sabl["Boundary client<br/>[SablClient.java]"]
  node_epa["Violation client"]
  node_ces["CalEnviroScreen client"]
end

subgraph group_storage["Persistence"]
  node_repositories["Data repositories"]
  node_records["Water-system records<br/>[WaterSystem.java]"]
  node_database[("water.db")]
end

node_resident(("Resident"))
node_apiuser(("API client"))
node_census["Census geocoder"]
node_publicdata["Public data services"]

node_resident -->|"uses"| node_app
node_app -->|"renders"| node_search
node_app -->|"renders"| node_mapview
node_apiuser -->|"requests"| node_controller
node_controller -->|"delegates"| node_service
node_controller -->|"gets map"| node_mapcache
node_service -->|"geocodes"| node_geocoder
node_geocoder -->|"queries"| node_census
node_service -->|"rounds geometry"| node_geometry
node_service -->|"queries"| node_repositories
node_loader -->|"fetches boundaries"| node_sabl
node_loader -->|"fetches violations"| node_epa
node_loader -.->|"fetches indicators"| node_ces
node_loader -->|"maps records"| node_loadmappers
node_sabl -->|"requests data"| node_publicdata
node_epa -->|"requests data"| node_publicdata
node_ces -->|"requests data"| node_publicdata
node_loader -->|"persists data"| node_repositories
node_repositories -->|"reads and writes"| node_database
node_repositories -->|"stores entities"| node_records

click node_app "https://github.com/christophervallesalazar/la-water-watch/blob/main/frontend/src/App.tsx"
click node_search "https://github.com/christophervallesalazar/la-water-watch/blob/main/frontend/src/AddressSearch.tsx"
click node_mapview "https://github.com/christophervallesalazar/la-water-watch/blob/main/frontend/src/MapView.tsx"
click node_controller "https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/controller/WaterController.java"
click node_service "https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/service/WaterSystemService.java"
click node_geometry "https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/service/GeoJsonGeometry.java"
click node_geocoder "https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/client/CensusGeocodeClient.java"
click node_mapcache "https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/service/MapResponseCache.java"
click node_loader "https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/bootstrap/DataLoader.java"
click node_loadmappers "https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/bootstrap/LoadMappers.java"
click node_sabl "https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/client/SablClient.java"
click node_epa "https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/client/EpaViolationClient.java"
click node_ces "https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/client/CalEnviroScreenClient.java"
click node_repositories "https://github.com/christophervallesalazar/la-water-watch/tree/main/water-api/src/main/java/org/lawaterwatch/api/repository"
click node_records "https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/entity/WaterSystem.java"

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_app,node_search,node_mapview,node_apiuser toneBlue
class node_controller,node_service,node_geometry,node_geocoder,node_mapcache toneAmber
class node_loader,node_loadmappers,node_sabl,node_epa,node_ces toneMint
class node_repositories,node_records,node_database toneRose
class node_resident,node_census,node_publicdata toneIndigo
```

## Components

### Web experience

- [Explore page](https://github.com/christophervallesalazar/la-water-watch/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Address search](https://github.com/christophervallesalazar/la-water-watch/blob/main/frontend/src/AddressSearch.tsx): `frontend/src/AddressSearch.tsx`
- [Map view](https://github.com/christophervallesalazar/la-water-watch/blob/main/frontend/src/MapView.tsx): `frontend/src/MapView.tsx`

### API and scoring

- [Water endpoints](https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/controller/WaterController.java): `water-api/src/main/java/org/lawaterwatch/api/controller/WaterController.java`
- [System queries](https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/service/WaterSystemService.java): `water-api/src/main/java/org/lawaterwatch/api/service/WaterSystemService.java`
- [Geometry operations](https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/service/GeoJsonGeometry.java): `water-api/src/main/java/org/lawaterwatch/api/service/GeoJsonGeometry.java`
- [Address geocoder](https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/client/CensusGeocodeClient.java): `water-api/src/main/java/org/lawaterwatch/api/client/CensusGeocodeClient.java`
- [Map response cache](https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/service/MapResponseCache.java): `water-api/src/main/java/org/lawaterwatch/api/service/MapResponseCache.java`

### Data ingestion

- [Data loader](https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/bootstrap/DataLoader.java): `water-api/src/main/java/org/lawaterwatch/api/bootstrap/DataLoader.java`
- [Load mappers](https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/bootstrap/LoadMappers.java): `water-api/src/main/java/org/lawaterwatch/api/bootstrap/LoadMappers.java`
- [Boundary client](https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/client/SablClient.java): `water-api/src/main/java/org/lawaterwatch/api/client/SablClient.java`
- [Violation client](https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/client/EpaViolationClient.java): `water-api/src/main/java/org/lawaterwatch/api/client/EpaViolationClient.java`
- [CalEnviroScreen client](https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/client/CalEnviroScreenClient.java): `water-api/src/main/java/org/lawaterwatch/api/client/CalEnviroScreenClient.java`

### Persistence

- [Data repositories](https://github.com/christophervallesalazar/la-water-watch/tree/main/water-api/src/main/java/org/lawaterwatch/api/repository): `water-api/src/main/java/org/lawaterwatch/api/repository`
- [Water-system records](https://github.com/christophervallesalazar/la-water-watch/blob/main/water-api/src/main/java/org/lawaterwatch/api/entity/WaterSystem.java): `water-api/src/main/java/org/lawaterwatch/api/entity/WaterSystem.java`
- **water.db**

### Other components

- **Resident**
- **API client**
- **Census geocoder**
- **Public data services**

## Connections

- Resident → Explore page: uses (evidence: `frontend/src/App.tsx`)
- Explore page → Address search: renders (evidence: `frontend/src/App.tsx`)
- Explore page → Map view: renders (evidence: `frontend/src/App.tsx`)
- API client → Water endpoints: requests (evidence: `water-api/src/main/java/org/lawaterwatch/api/controller/WaterController.java`)
- Water endpoints → System queries: delegates (evidence: `water-api/src/main/java/org/lawaterwatch/api/controller/WaterController.java`)
- Water endpoints → Map response cache: gets map (evidence: `water-api/src/main/java/org/lawaterwatch/api/controller/WaterController.java`)
- System queries → Address geocoder: geocodes (evidence: `water-api/src/main/java/org/lawaterwatch/api/service/WaterSystemService.java`)
- Address geocoder → Census geocoder: queries (evidence: `water-api/src/main/java/org/lawaterwatch/api/client/CensusGeocodeClient.java`)
- System queries → Geometry operations: rounds geometry (evidence: `water-api/src/main/java/org/lawaterwatch/api/service/WaterSystemService.java`)
- System queries → Data repositories: queries (evidence: `water-api/src/main/java/org/lawaterwatch/api/service/WaterSystemService.java`)
- Data loader → Boundary client: fetches boundaries (evidence: `water-api/src/main/java/org/lawaterwatch/api/bootstrap/DataLoader.java`)
- Data loader → Violation client: fetches violations (evidence: `water-api/src/main/java/org/lawaterwatch/api/bootstrap/DataLoader.java`)
- Data loader → CalEnviroScreen client: fetches indicators
- Data loader → Load mappers: maps records (evidence: `water-api/src/main/java/org/lawaterwatch/api/bootstrap/LoadMappers.java`)
- Boundary client → Public data services: requests data (evidence: `water-api/src/main/java/org/lawaterwatch/api/client/SablClient.java`)
- Violation client → Public data services: requests data (evidence: `water-api/src/main/java/org/lawaterwatch/api/client/EpaViolationClient.java`)
- CalEnviroScreen client → Public data services: requests data (evidence: `water-api/src/main/java/org/lawaterwatch/api/client/CalEnviroScreenClient.java`)
- Data loader → Data repositories: persists data (evidence: `water-api/src/main/java/org/lawaterwatch/api/bootstrap/DataLoader.java`)
- Data repositories → water.db: reads and writes (evidence: `water-api/src/main/java/org/lawaterwatch/api/repository/WaterSystemRepository.java`)
- Data repositories → Water-system records: stores entities (evidence: `water-api/src/main/java/org/lawaterwatch/api/repository/WaterSystemRepository.java`)
