[object Object]

← back to Ventura Corridor

iter 141: category emoji map on /scoreboard — 36 verticals mapped, fallback ✦

6ffa8b06a8b7e3dced2d1d0586e9756b493c9fab · 2026-05-06 19:04:43 -0700 · SteveStudio2

Files touched

Diff

commit 6ffa8b06a8b7e3dced2d1d0586e9756b493c9fab
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Wed May 6 19:04:43 2026 -0700

    iter 141: category emoji map on /scoreboard — 36 verticals mapped, fallback ✦
---
 public/scoreboard.html | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/public/scoreboard.html b/public/scoreboard.html
index 88e4bf0..c1a88be 100644
--- a/public/scoreboard.html
+++ b/public/scoreboard.html
@@ -69,6 +69,18 @@ main{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:2
 
 <script>
 function escHtml(s) { return String(s ?? '').replace(/[&<>"']/g, c => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[c])); }
+const CATEGORY_EMOJI = {
+  restaurant: '🍴', food: '🍴', cafe: '☕', bar: '🍷', bakery: '🥐',
+  professional: '⚖️', legal: '⚖️', accounting: '📒', insurance: '📑', 'real-estate': '🏠',
+  medical: '🩺', dental: '🦷', wellness: '🌿', therapy: '🧘',
+  beauty: '✨', salon: '💇', barbershop: '💈', spa: '🛁', nails: '💅',
+  fitness: '💪', yoga: '🧘‍♀️', studio: '🎬',
+  shop: '🛍', boutique: '👗', jewelry: '💍', florist: '💐', furniture: '🛋', hardware: '🔧',
+  hospitality: '🏨', hotel: '🏨', event: '🎉',
+  pet: '🐶', auto: '🚗', cleaning: '🧼', creative: '🎨', music: '🎵',
+  feature: '✦', uncategorized: '✦', misc: '✦',
+};
+function emojiForCat(c) { return CATEGORY_EMOJI[String(c || '').toLowerCase()] || '✦'; }
 async function load() {
   const d = await fetch('/api/magazine/scoreboard').then(r => r.json());
   const boards = [
@@ -78,7 +90,7 @@ async function load() {
     },
     {
       title: 'Hottest verticals', deck: 'feature counts by category', rows: d.hot_verticals,
-      render: r => `<span style="text-transform:capitalize">${escHtml((r.category_tag || 'uncategorized').replace(/-/g, ' '))}</span><span></span><span class="v">${r.n}</span>`
+      render: r => `<span><span style="margin-right:8px;font-size:16px">${emojiForCat(r.category_tag)}</span><span style="text-transform:capitalize">${escHtml((r.category_tag || 'uncategorized').replace(/-/g, ' '))}</span></span><span></span><span class="v">${r.n}</span>`
     },
     {
       title: 'Sponsor candidates', deck: 'paid-ad runners worth pitching', rows: d.sponsor_candidates,
@@ -93,7 +105,7 @@ async function load() {
     },
     {
       title: 'Latest features', deck: 'fresh off the press', rows: d.latest,
-      render: r => `<a href="/magazine/${r.id}">${escHtml(r.headline || r.biz_name)}</a><span class="name">${escHtml((r.category_tag || '').replace(/-/g,' '))}</span><span class="v">${new Date(r.generated_at).toLocaleDateString('en-US',{month:'short',day:'numeric'})}</span>`
+      render: r => `<a href="/magazine/${r.id}">${escHtml(r.headline || r.biz_name)}</a><span class="name">${emojiForCat(r.category_tag)} ${escHtml((r.category_tag || '').replace(/-/g,' '))}</span><span class="v">${new Date(r.generated_at).toLocaleDateString('en-US',{month:'short',day:'numeric'})}</span>`
     },
     {
       title: 'Longest editorial', deck: 'qwen3 ran with the prompt', rows: d.longest_editorial,

← 548f05d iter 140: daily-standup audio summary — Samantha TTS + m4a +  ·  back to Ventura Corridor  ·  iter 143: feedback POST → George email Steve on typo/correct d1f4883 →