[object Object]

← back to Nationalrealestate

Map page: Top Markets strip (top-8 ranked, clickable to detail) + Brokers nav link

dd7b00236e14524ceba07f0cefca4f7a0d5f7bce · 2026-07-21 15:01:42 -0700 · Steve Abrams

Files touched

Diff

commit dd7b00236e14524ceba07f0cefca4f7a0d5f7bce
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Jul 21 15:01:42 2026 -0700

    Map page: Top Markets strip (top-8 ranked, clickable to detail) + Brokers nav link
---
 public/index.html | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/public/index.html b/public/index.html
index b7a6ba2..cd64303 100644
--- a/public/index.html
+++ b/public/index.html
@@ -46,6 +46,7 @@
   <nav>
     <a href="/" class="active">Map</a>
     <a href="/markets.html">Markets</a>
+    <a href="/brokers.html">Brokers</a>
     <a href="/watchlist.html">Watchlist</a>
     <a href="/admin.html">Admin</a>
   </nav>
@@ -54,6 +55,12 @@
 <div id="map"></div>
 <div id="legend"><div class="t">Loading…</div></div>
 <div id="status">loading county data…</div>
+<div id="topmkts" style="position:fixed;right:14px;top:64px;z-index:1000;background:rgba(17,21,29,.94);
+  border:1px solid var(--line);border-radius:10px;padding:10px 12px;max-width:250px;display:none;">
+  <div style="font-size:12px;color:var(--gold);font-weight:700;margin-bottom:6px;">Top Markets
+    <a href="/markets.html" style="float:right;color:var(--muted);font-weight:400;font-size:11px;text-decoration:none;">all →</a></div>
+  <div id="topmkts-list"></div>
+</div>
 
 <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
         integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>
@@ -160,6 +167,22 @@ function onEachFeature(f, layer){
   layer.on('click', () => { location.href = `/market.html?key=county:${f.id}`; });
 }
 
+async function loadTopMarkets(){
+  try {
+    const d = await fetch('/api/markets?type=county').then(r => r.json());
+    const top = (d.rows || []).filter(r => r.rank).sort((a, b) => a.rank - b.rank).slice(0, 8);
+    if (!top.length) return;
+    document.getElementById('topmkts-list').innerHTML = top.map(r => `
+      <a href="/market.html?key=${r.key}" style="display:flex;gap:8px;align-items:baseline;
+        text-decoration:none;color:var(--fg);font-size:12px;padding:2px 0;">
+        <span style="color:var(--muted);font-variant-numeric:tabular-nums;width:16px;">${r.rank}</span>
+        <span style="flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">${r.name}, ${r.state}</span>
+        <span style="color:var(--gold);font-weight:700;font-variant-numeric:tabular-nums;">${r.opportunity_score.toFixed(1)}</span>
+      </a>`).join('');
+    document.getElementById('topmkts').style.display = 'block';
+  } catch {}
+}
+
 (async function init(){
   renderButtons();
   const [geo] = await Promise.all([
@@ -168,6 +191,7 @@ function onEachFeature(f, layer){
   ]);
   geojson = geo;
   geoLayer = L.geoJSON(geo, { style: styleFeature, onEachFeature }).addTo(map);
+  loadTopMarkets();
 })();
 </script>
 </body>

← bf3451d auto-save: 2026-07-21T14:38:01 (1 files) — src/enrich/firm_w  ·  back to Nationalrealestate  ·  Compare Markets page: up to 4 markets side-by-side (best-val 502de06 →