# mizcausevic-dev/property-schema-publisher architecture

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

- Interactive diagram: https://gitdiagram.com/mizcausevic-dev/property-schema-publisher
- Repository: https://github.com/mizcausevic-dev/property-schema-publisher

## Overview

Property Schema Publisher turns property records into scored listing schema and brokerage entities, then exposes readiness summaries, listing manifests, and repair guidance through an API and dashboard pages. The principal workflow is an HTTP request handled by FastAPI, which calls the schema service; the service reads the JSON property catalog, scores listings, and builds schema payloads. Dashboard and manifest views are rendered separately. The README documents FAQ, entity-linkage, neighborhood, school, and content-quality signals; sampled scoring confirms several of these, but the data and implementation excerpts do not establish a separate content-generation pipeline.

Main entry points: [`app/render.py`](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/render.py) (Page renderer), [`app/services/schema_service.py`](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/services/schema_service.py) (Schema service), [`app/main.py`](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/main.py) (HTTP interface), [`app/data/sample_properties.json`](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/data/sample_properties.json) (Property catalog)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API entry"]
  node_http["HTTP interface<br/>[main.py]"]
  node_http_result["API responses<br/>[main.py]"]
end

subgraph group_domain["Schema engine"]
  node_catalog["Property catalog"]
  node_service["Schema service<br/>[schema_service.py]"]
  node_scoring["Readiness scoring<br/>[schema_service.py]"]
  node_listing_schema["Listing schema<br/>[schema_service.py]"]
  node_brokerage_schema["Brokerage schema<br/>[schema_service.py]"]
end

subgraph group_surfaces["User surfaces"]
  node_renderer["Page renderer<br/>[render.py]"]
  node_dashboard["Dashboard summary<br/>[render.py]"]
  node_manifest["Listing manifest<br/>[render.py]"]
  node_repair_queue["Repair queue<br/>[render.py]"]
  node_api_summary["API summary<br/>[render.py]"]
  node_pages["HTML pages<br/>[render.py]"]
end

node_operator(("Listing team"))

node_operator -->|"requests"| node_http
node_http -->|"renders pages"| node_renderer
node_http -->|"calls service"| node_service
node_service -->|"reads records"| node_catalog
node_service -->|"scores listings"| node_scoring
node_service -->|"builds listing schema"| node_listing_schema
node_service -->|"builds brokerage schema"| node_brokerage_schema
node_renderer -->|"requests page data"| node_service
node_renderer -->|"renders"| node_dashboard
node_renderer -->|"renders"| node_manifest
node_renderer -->|"renders"| node_repair_queue
node_renderer -->|"renders"| node_api_summary
node_http -->|"returns JSON"| node_http_result
node_renderer -->|"returns HTML"| node_pages
node_http_result -->|"responds"| node_operator
node_pages -->|"serves pages"| node_operator

click node_http "https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/main.py"
click node_renderer "https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/render.py"
click node_catalog "https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/data/sample_properties.json"
click node_service "https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/services/schema_service.py"
click node_scoring "https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/services/schema_service.py"
click node_listing_schema "https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/services/schema_service.py"
click node_brokerage_schema "https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/services/schema_service.py"
click node_dashboard "https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/render.py"
click node_manifest "https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/render.py"
click node_repair_queue "https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/render.py"
click node_api_summary "https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/render.py"
click node_http_result "https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/main.py"
click node_pages "https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/render.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_http,node_http_result toneBlue
class node_catalog,node_service,node_scoring,node_listing_schema,node_brokerage_schema toneAmber
class node_renderer,node_dashboard,node_manifest,node_repair_queue,node_api_summary,node_pages toneMint
class node_operator toneIndigo
```

## Components

### API entry

- [HTTP interface](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/main.py): `app/main.py`
- [API responses](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/main.py): `app/main.py`

### Schema engine

- [Property catalog](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/data/sample_properties.json): `app/data/sample_properties.json`
- [Schema service](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/services/schema_service.py): `app/services/schema_service.py`
- [Readiness scoring](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/services/schema_service.py): `app/services/schema_service.py`
- [Listing schema](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/services/schema_service.py): `app/services/schema_service.py`
- [Brokerage schema](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/services/schema_service.py): `app/services/schema_service.py`

### User surfaces

- [Page renderer](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/render.py): `app/render.py`
- [Dashboard summary](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/render.py): `app/render.py`
- [Listing manifest](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/render.py): `app/render.py`
- [Repair queue](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/render.py): `app/render.py`
- [API summary](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/render.py): `app/render.py`
- [HTML pages](https://github.com/mizcausevic-dev/property-schema-publisher/blob/main/app/render.py): `app/render.py`

### Other components

- **Listing team**

## Connections

- Listing team → HTTP interface: requests
- HTTP interface → Page renderer: renders pages
- HTTP interface → Schema service: calls service
- Schema service → Property catalog: reads records
- Schema service → Readiness scoring: scores listings
- Schema service → Listing schema: builds listing schema
- Schema service → Brokerage schema: builds brokerage schema
- Page renderer → Schema service: requests page data
- Page renderer → Dashboard summary: renders
- Page renderer → Listing manifest: renders
- Page renderer → Repair queue: renders
- Page renderer → API summary: renders
- HTTP interface → API responses: returns JSON
- Page renderer → HTML pages: returns HTML
- API responses → Listing team: responds
- HTML pages → Listing team: serves pages
