[object Object]

← back to Nationalrealestate

Property page: render deed events + public-record links (deep vs search-portal)

f195028078353f9397048183bedeaa2fe841fb11 · 2026-07-26 07:42:44 -0700 · Steve Abrams

Files touched

Diff

commit f195028078353f9397048183bedeaa2fe841fb11
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sun Jul 26 07:42:44 2026 -0700

    Property page: render deed events + public-record links (deep vs search-portal)
---
 public/property.html | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/public/property.html b/public/property.html
index c2c37d7..b8bfad2 100644
--- a/public/property.html
+++ b/public/property.html
@@ -176,9 +176,21 @@ async function load(loc){
     `AIN ${p.ain} · county ${d.county} · ${p.bedrooms ?? '—'} bd / ${p.bathrooms ?? '—'} ba · ` +
     `${int0(p.sqft)} sqft · built ${p.year_built || '—'}`;
 
-  // 1 Property History — full sale records table when the county source has them (King WA)
+  // 1 Property History — recorded-document events, sale records, and public-record links
   const sales = d.property_history.sales || [];
-  body('s_history', sales.length
+  const events = d.property_history.events || [];
+  const pr = d.public_records || [];
+  const recLinks = pr.length
+    ? `<div class="note"><b>Public records:</b> ` + pr.map(r =>
+        `<a href="${esc(r.url)}" target="_blank" rel="noopener noreferrer">${esc(r.label)}</a>${r.deep_link ? ' ↗' : ''}`).join(' &nbsp;·&nbsp; ')
+      + (pr.some(r => r.deep_link === false) ? `<br><span style="opacity:.7">↗ = direct record; others are search portals (enter the APN)</span>` : '') + `</div>`
+    : '';
+  const histCore = events.length
+    ? `<table><tr><th>Date</th><th>Type</th><th>Doc #</th><th>Record</th></tr>` +
+      events.map(e => `<tr><td>${esc(e.date)}</td><td>${esc(e.event_type)}</td><td>${esc(e.doc_number || '—')}</td>
+        <td>${e.source_url ? `<a href="${esc(e.source_url)}" target="_blank" rel="noopener noreferrer">view</a>` : '—'}</td></tr>`).join('') +
+      `</table><div class="note">${esc(d.property_history.note)}</div>`
+    : sales.length
     ? `<table><tr><th>Date</th><th>Price</th><th>Buyer</th><th>Seller</th></tr>` +
       sales.map(s => `<tr><td>${esc(s.date)}</td><td>${usd0(s.price)}</td>
         <td>${esc(s.buyer || '—')}</td><td>${esc(s.seller || '—')}</td></tr>`).join('') +
@@ -187,7 +199,8 @@ async function load(loc){
     ? stats([['Last Recording Date', esc(d.property_history.last_recording_date)],
              ['Sale Price', usd0(d.property_history.sale_price)]]) +
       `<div class="note">${esc(d.property_history.note)}</div>`
-    : pendingNote(d.property_history.note));
+    : pendingNote(d.property_history.note);
+  body('s_history', histCore + recLinks);
 
   // 2 Tax History
   const rolls = d.tax_history.rolls.filter(r => r.roll_year);

← bb6c7e8 Contrarian fixes: honest public-record links (deep vs search  ·  back to Nationalrealestate  ·  Generalize SD adapter Poway->county-wide sweep (1.09M parcel 854bc7a →