← back to Labj Cre Banks
Viewer: surface data provenance (LABJ-pointer vs public-source), per-row source badge, clearer detail labels (TK-10411)
221f2f7f723dd2c957f6e2c149b0a92376ff5916 · 2026-08-10 11:55:07 -0700 · Steve Abrams
Files touched
Diff
commit 221f2f7f723dd2c957f6e2c149b0a92376ff5916
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Aug 10 11:55:07 2026 -0700
Viewer: surface data provenance (LABJ-pointer vs public-source), per-row source badge, clearer detail labels (TK-10411)
---
public/index.html | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/public/index.html b/public/index.html
index 84b062a..61f389b 100644
--- a/public/index.html
+++ b/public/index.html
@@ -44,6 +44,12 @@
.detail-grid { display: grid; grid-template-columns: 160px 1fr; gap: 2px 14px; font-size: 12px; }
.detail-grid b { color: #555; font-weight: 600; }
.count { padding: 6px 18px; font-size: 12px; color: #666; background: #faf8f4; }
+ .prov { padding: 8px 18px; font-size: 12px; line-height: 1.5; color: #3a3a3a;
+ background: #eef3ea; border-bottom: 1px solid #d6e0cf; }
+ .prov b { color: #1a1a1a; }
+ .pill { font-size: 10px; font-weight: 700; padding: 2px 7px; border-radius: 999px; letter-spacing: .3px; }
+ .orig-labj { background: #12223a; color: #fff; }
+ .orig-research { background: #e7e2d6; color: #5a5344; }
</style>
</head>
<body>
@@ -58,6 +64,7 @@
<button id="reset">Reset</button>
<span style="font-size:12px;color:#888">tip: click a row to expand · click a header to sort · drag headers to reorder</span>
</div>
+<div class="prov" id="prov">loading provenance…</div>
<div class="chips" id="chips"></div>
<div class="colpanel" id="colpanel"></div>
<div class="count" id="count"></div>
@@ -73,9 +80,9 @@ const ALL_COLS = [
["specialties","Specialties"], ["key_metric","Metric"],
["state","State"], ["zip","Zip"], ["address","Address"],
["advertiser_fit_reason","Fit reason"], ["source_company","Sources"],
- ["origin","Origin"], ["last_verified","Verified"]
+ ["origin","Source"], ["last_verified","Verified"]
];
-const DEFAULT_COLS = ["company_name","categories","advertiser_fit_score","city",
+const DEFAULT_COLS = ["company_name","origin","categories","advertiser_fit_score","city",
"website","main_phone","top_local_executive","marketing_pr_contact","public_email","last_verified"];
let DATA = [], state = load();
@@ -87,6 +94,14 @@ fetch("./labj_master.json").then(r=>r.json()).then(d=>{
DATA = d.records || d;
document.getElementById("meta").textContent =
`${d.count||DATA.length} companies · generated ${d.generated||""} · sorted by RENTV advertiser-fit`;
+ const labj = DATA.filter(r=>r.origin==="labj_seed").length;
+ const research = DATA.length - labj;
+ const withSrc = DATA.filter(r=>(r.source_company||"").trim()).length;
+ document.getElementById("prov").innerHTML =
+ `<b>Where this data comes from:</b> LABJ's paid "Book of Lists" is used only as a <i>discovery/ranking pointer</i> — every field is rebuilt from independent public sources with attribution (no LABJ paid product is reproduced). ` +
+ `<b>${labj}</b> firms were captured from LABJ's <i>public</i> list rows (ranks 1–3, the only rows LABJ shows for free); ` +
+ `<b>${research}</b> were rebuilt from each firm's own public web presence (LABJ used only to know which firms/categories to research). ` +
+ `<b>${withSrc}/${DATA.length}</b> carry public source URLs — click any row to see its <i>LABJ list pointer</i> and its <i>data sources</i>. The <span class="pill orig-labj">LABJ</span> / <span class="pill orig-research">Research</span> badge on each row marks which.`;
buildChips(); buildColPanel(); applyDensity(); render();
});
@@ -142,6 +157,10 @@ function cell(r,k){
if(k==="main_phone" && v) return `<a href="tel:${v.replace(/[^0-9+]/g,'')}">${v}</a>`;
if(k==="advertiser_fit_score") return `<span class="score ${scoreClass(+v)}">${v}</span>`;
if(k==="categories") return `<span class="cat">${v.replace(/ \| /g,'<br>')}</span>`;
+ if(k==="origin"){
+ if(v==="labj_seed") return `<span class="pill orig-labj" title="Captured from LABJ's public list (top-3 rows)">LABJ</span>`;
+ return `<span class="pill orig-research" title="Rebuilt from independent public sources; LABJ used as a category pointer">Research</span>`;
+ }
return v;
}
@@ -198,7 +217,7 @@ function toggleDetail(tr, r){
["Top exec","top_local_executive"],["Exec title","exec_title"],
["Mktg/PR contact","marketing_pr_contact"],["Mktg/PR title","marketing_pr_title"],["Email","public_email"],
["Specialties","specialties"],["Key metric","key_metric"],["LA presence","la_presence"],
- ["Sources","source_company"],["LABJ pointer","source_labj"],["Origin","origin"],["Verified","last_verified"]];
+ ["Data sources (public)","source_company"],["LABJ list (discovery pointer)","source_labj"],["Record source","origin"],["Verified","last_verified"]];
let h='<div class="detail-grid">';
flds.forEach(([lab,k])=>{
let v = k? (r[k]||"") : `${r.city||""} ${r.state||""} ${r.zip||""}`.trim();
← 6067c89 Restore verified Rexford CEO Laura Clark (eff. 2026-04-01, s
·
back to Labj Cre Banks
·
chore: gitignore __pycache__ (session close) 992b50e →