How this site keeps itself current
Two inputs drive every status on the Homes page: the MLS and the DHB Properties sheet. This page documents the design so it can be built on real hosting without re-deciding anything.
One record per house
Every home is one row with a status field, and the website is a view of that row. Changing the status moves the home between tabs; nothing is retyped.
| Status | Shows under | Set by |
|---|---|---|
| Under construction | Coming Soon, with est. completion | DHB Properties sheet (field schedule) |
| Off market | Off Market (price shown, call for access) | DHB Properties sheet |
| Active listing | For Sale, with MLS photos and description | MLS intake (MLS # emailed or entered) |
| Pending | Under Contract (greyed card) | MLS status change, confirmed by sheet |
| Closed | Sold (address, plan, sq ft, closing month) | MLS status change, confirmed by sheet |
MLS intake
- You send the MLS number to listings@dhbllc.net (subject or body), or type it in the admin form below. Address works too; MLS # is unambiguous.
- A worker looks the listing up in NTREIS through the brokerage's RESO Web API or IDX feed (Master Key Realty's data-access agreement), and pulls price, description, photos, beds/baths/sq ft and status.
- It writes the house record and re-publishes
data/listings.json. The card appears under For Sale within minutes. - Status changes follow automatically. The worker re-checks every active MLS # daily; Active → Pending → Closed moves the card to Under Contract, then Sold.
- The DHB Properties sheet is the checkpoint. If the sheet and the MLS disagree (sheet says off-market, MLS says active), the site shows the sheet's status and flags the conflict to you by email.
DHB Properties sheet
The Properties page is generated from the Google Sheet with tools/sheet_to_json.py. On real hosting this runs on a schedule (hourly) or on a webhook when the sheet changes. Keep editing the sheet exactly as today; the site follows.
Homeowner Portal
Each buyer's spec sheet is encrypted with a key derived from address + buyer name + initial offer date (PBKDF2, 200,000 rounds, AES-256-GCM) and published as a file. The site never holds a readable copy, so the page works on plain static hosting.
Adding a home takes two commands on the Specifications Schedule PDF you already produce: tools/spec_from_pdf.py turns the PDF into structured data (item, specification, color/finish, brand·source with SKU/serial, property details, material-matching note, disclaimer), then tools/make_spec.py encrypts it with the buyer's three details. In production this is one upload form in the admin area. Demo sign-in: address 5805 Barkridge Dr, buyer Demo Buyer, offer date 11/01/2026.
Moving to GoDaddy hosting
The site is plain HTML, CSS, JS and JSON. Upload the folder to the GoDaddy Web Hosting plan and point dhbllc.net at it; nothing else changes. The MLS worker and the sheet sync are small scheduled scripts that can run on the same hosting (PHP/cron) or on a free tier of any job runner, writing the JSON files into the site folder.