# zeezafra/broker-kring2-website architecture

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

- Interactive diagram: https://gitdiagram.com/zeezafra/broker-kring2-website
- Repository: https://github.com/zeezafra/broker-kring2-website

## Overview

This is a Cebu real-estate brokerage site with public property discovery and lead capture, plus an admin workspace for managing listings and inquiries. The visitor path is to search or browse listings, open a listing, then submit an inquiry; administrators maintain inventory and review leads. Backend modules show listing validation, location resolution, persistence, and inquiry notification. The README is empty and several routes and modules were not sampled, so uncertain UI-to-API links are omitted rather than inferred.

Main entry points: [`backend/src/admin.ts`](https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/admin.ts) (Admin API), [`backend/src/db.ts`](https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/db.ts) (Prisma database client), [`backend/src/inquiries.ts`](https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/inquiries.ts) (Inquiry API), [`frontend/lib/public-api.ts`](https://github.com/zeezafra/broker-kring2-website/blob/main/frontend/lib/public-api.ts) (Public API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public Property Experience"]
  node_home["Home page<br/>[page.tsx]"]
  node_searchfilters["Search filters"]
  node_searchlogic["Search state<br/>[search.ts]"]
  node_publicfetch["Public API client<br/>[public-api.ts]"]
  node_listingroutes["Property pages"]
  node_leadforms["Inquiry and sell forms"]
end

subgraph group_admin["Broker Admin"]
  node_adminui["Admin property form<br/>[PropertyForm.tsx]"]
  node_adminclient["Admin API client<br/>[admin-api.ts]"]
  node_adminroutes["Admin screens"]
end

subgraph group_api["Backend API"]
  node_propertyapi["Public property API<br/>[properties.ts]"]
  node_adminapi["Admin API<br/>[admin.ts]"]
  node_inquiryapi["Inquiry API<br/>[inquiries.ts]"]
end

subgraph group_core["Domain and Persistence"]
  node_auth["Admin auth<br/>[auth.ts]"]
  node_inputvalidation["Listing validation<br/>[propertyInput.ts]"]
  node_locations["Location resolution<br/>[locations.ts]"]
  node_notify["Lead notification<br/>[notify.ts]"]
  node_dbclient["Prisma database client<br/>[db.ts]"]
end

node_visitor(("Property seeker"))
node_adminuser(("Broker administrator"))
node_database[("PostgreSQL")]

node_visitor -->|"visits"| node_home
node_home -->|"browses listings"| node_listingroutes
node_searchfilters -->|"builds search"| node_searchlogic
node_publicfetch -->|"encodes filters"| node_searchlogic
node_listingroutes -.->|"fetches listings"| node_publicfetch
node_publicfetch -->|"requests listings"| node_propertyapi
node_visitor -->|"submits lead"| node_leadforms
node_adminuser -->|"manages inventory"| node_adminroutes
node_adminroutes -.->|"renders form"| node_adminui
node_adminui -->|"saves listing"| node_adminclient
node_adminclient -.->|"sends admin requests"| node_adminapi
node_propertyapi -->|"queries listings"| node_dbclient
node_adminapi -->|"reads and writes"| node_dbclient
node_adminapi -->|"checks access"| node_auth
node_adminapi -->|"validates listings"| node_inputvalidation
node_inputvalidation -->|"resolves location"| node_locations
node_propertyapi -->|"uses region keys"| node_locations
node_inquiryapi -->|"stores inquiries"| node_dbclient
node_inquiryapi -->|"checks origin"| node_auth
node_inquiryapi -->|"notifies broker"| node_notify
node_dbclient -->|"connects"| node_database

click node_home "https://github.com/zeezafra/broker-kring2-website/blob/main/frontend/app/page.tsx"
click node_searchfilters "https://github.com/zeezafra/broker-kring2-website/blob/main/frontend/components/PropertyFilters.tsx"
click node_searchlogic "https://github.com/zeezafra/broker-kring2-website/blob/main/frontend/lib/search.ts"
click node_publicfetch "https://github.com/zeezafra/broker-kring2-website/blob/main/frontend/lib/public-api.ts"
click node_listingroutes "https://github.com/zeezafra/broker-kring2-website/tree/main/frontend/app/properties"
click node_leadforms "https://github.com/zeezafra/broker-kring2-website/tree/main/frontend/components"
click node_adminui "https://github.com/zeezafra/broker-kring2-website/blob/main/frontend/components/admin/PropertyForm.tsx"
click node_adminclient "https://github.com/zeezafra/broker-kring2-website/blob/main/frontend/lib/admin-api.ts"
click node_adminroutes "https://github.com/zeezafra/broker-kring2-website/tree/main/frontend/app/admin"
click node_propertyapi "https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/properties.ts"
click node_adminapi "https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/admin.ts"
click node_inquiryapi "https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/inquiries.ts"
click node_auth "https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/auth.ts"
click node_inputvalidation "https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/propertyInput.ts"
click node_locations "https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/locations.ts"
click node_notify "https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/notify.ts"
click node_dbclient "https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/db.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_home,node_searchfilters,node_searchlogic,node_publicfetch,node_listingroutes,node_leadforms toneBlue
class node_adminui,node_adminclient,node_adminroutes,node_database toneAmber
class node_propertyapi,node_adminapi,node_inquiryapi toneMint
class node_auth,node_inputvalidation,node_locations,node_notify,node_dbclient toneRose
class node_visitor,node_adminuser toneIndigo
```

## Components

### Public Property Experience

- [Home page](https://github.com/zeezafra/broker-kring2-website/blob/main/frontend/app/page.tsx): `frontend/app/page.tsx`
- [Search filters](https://github.com/zeezafra/broker-kring2-website/blob/main/frontend/components/PropertyFilters.tsx): `frontend/components/PropertyFilters.tsx`
- [Search state](https://github.com/zeezafra/broker-kring2-website/blob/main/frontend/lib/search.ts): `frontend/lib/search.ts`
- [Public API client](https://github.com/zeezafra/broker-kring2-website/blob/main/frontend/lib/public-api.ts): `frontend/lib/public-api.ts`
- [Property pages](https://github.com/zeezafra/broker-kring2-website/tree/main/frontend/app/properties): `frontend/app/properties`
- [Inquiry and sell forms](https://github.com/zeezafra/broker-kring2-website/tree/main/frontend/components): `frontend/components`

### Broker Admin

- [Admin property form](https://github.com/zeezafra/broker-kring2-website/blob/main/frontend/components/admin/PropertyForm.tsx): `frontend/components/admin/PropertyForm.tsx`
- [Admin API client](https://github.com/zeezafra/broker-kring2-website/blob/main/frontend/lib/admin-api.ts): `frontend/lib/admin-api.ts`
- [Admin screens](https://github.com/zeezafra/broker-kring2-website/tree/main/frontend/app/admin): `frontend/app/admin`

### Backend API

- [Public property API](https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/properties.ts): `backend/src/properties.ts`
- [Admin API](https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/admin.ts): `backend/src/admin.ts`
- [Inquiry API](https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/inquiries.ts): `backend/src/inquiries.ts`

### Domain and Persistence

- [Admin auth](https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/auth.ts): `backend/src/auth.ts`
- [Listing validation](https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/propertyInput.ts): `backend/src/propertyInput.ts`
- [Location resolution](https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/locations.ts): `backend/src/locations.ts`
- [Lead notification](https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/notify.ts): `backend/src/notify.ts`
- [Prisma database client](https://github.com/zeezafra/broker-kring2-website/blob/main/backend/src/db.ts): `backend/src/db.ts`

### Other components

- **Property seeker**
- **Broker administrator**
- **PostgreSQL**

## Connections

- Property seeker → Home page: visits
- Home page → Property pages: browses listings (evidence: `frontend/app/page.tsx`)
- Search filters → Search state: builds search (evidence: `frontend/components/PropertyFilters.tsx`)
- Public API client → Search state: encodes filters (evidence: `frontend/lib/public-api.ts`)
- Property pages → Public API client: fetches listings
- Public API client → Public property API: requests listings (evidence: `frontend/lib/public-api.ts`)
- Property seeker → Inquiry and sell forms: submits lead
- Broker administrator → Admin screens: manages inventory
- Admin screens → Admin property form: renders form
- Admin property form → Admin API client: saves listing (evidence: `frontend/components/admin/PropertyForm.tsx`)
- Admin API client → Admin API: sends admin requests
- Public property API → Prisma database client: queries listings (evidence: `backend/src/properties.ts`)
- Admin API → Prisma database client: reads and writes (evidence: `backend/src/admin.ts`)
- Admin API → Admin auth: checks access (evidence: `backend/src/admin.ts`)
- Admin API → Listing validation: validates listings (evidence: `backend/src/admin.ts`)
- Listing validation → Location resolution: resolves location (evidence: `backend/src/propertyInput.ts`)
- Public property API → Location resolution: uses region keys (evidence: `backend/src/properties.ts`)
- Inquiry API → Prisma database client: stores inquiries (evidence: `backend/src/inquiries.ts`)
- Inquiry API → Admin auth: checks origin (evidence: `backend/src/inquiries.ts`)
- Inquiry API → Lead notification: notifies broker (evidence: `backend/src/inquiries.ts`)
- Prisma database client → PostgreSQL: connects (evidence: `backend/src/db.ts`)
