[object Object]

← back to Ventura Claw Leads

feat(admin): surface share-count on dashboard stat row

c5e7571c96c5559816a9634afb1c7af8326adb44 · 2026-05-07 08:05:52 -0700 · Steve Abrams

Adds a 6th stat card (Shares · all-time) alongside Total/Last 30d/Delivered/
Pending/Unread/Profile views/Shares. Closes the loop on tick 30 so claimed
business owners see when their listing is being shared, not just messaged
or viewed. Raw stat query extends with a single subselect on businesses.share_count.
Tests stable at 46/46.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit c5e7571c96c5559816a9634afb1c7af8326adb44
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu May 7 08:05:52 2026 -0700

    feat(admin): surface share-count on dashboard stat row
    
    Adds a 6th stat card (Shares · all-time) alongside Total/Last 30d/Delivered/
    Pending/Unread/Profile views/Shares. Closes the loop on tick 30 so claimed
    business owners see when their listing is being shared, not just messaged
    or viewed. Raw stat query extends with a single subselect on businesses.share_count.
    Tests stable at 46/46.
    
    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
 routes/admin.js           | 3 ++-
 views/admin/dashboard.ejs | 5 +++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/routes/admin.js b/routes/admin.js
index e0b9055..4338579 100644
--- a/routes/admin.js
+++ b/routes/admin.js
@@ -29,7 +29,8 @@ router.get('/', async (req, res, next) => {
         (SELECT COALESCE(SUM(n), 0)::int FROM business_views
           WHERE business_id = $1 AND day > CURRENT_DATE - interval '30 days') AS views_30d,
         (SELECT COALESCE(SUM(n), 0)::int FROM business_views
-          WHERE business_id = $1 AND day = CURRENT_DATE) AS views_today
+          WHERE business_id = $1 AND day = CURRENT_DATE) AS views_today,
+        (SELECT COALESCE(share_count, 0)::int FROM businesses WHERE id = $1) AS shares_total
       FROM business_interest WHERE business_id = $1
     `, [biz.id]);
     const recent = await db.many(`
diff --git a/views/admin/dashboard.ejs b/views/admin/dashboard.ejs
index 1ddf3d8..ddabcab 100644
--- a/views/admin/dashboard.ejs
+++ b/views/admin/dashboard.ejs
@@ -39,6 +39,11 @@
       <p style="font-family:var(--serif);font-size:36px;color:var(--brass);margin:0"><%= stats.views_30d %></p>
       <p style="font-size:11px;color:var(--fg-muted);margin:4px 0 0;letter-spacing:0.06em;text-transform:uppercase">last 30 days · <%= stats.views_today %> today</p>
     </div>
+    <div class="side-card" style="text-align:center">
+      <h3>Shares</h3>
+      <p style="font-family:var(--serif);font-size:36px;color:var(--brass);margin:0"><%= stats.shares_total %></p>
+      <p style="font-size:11px;color:var(--fg-muted);margin:4px 0 0;letter-spacing:0.06em;text-transform:uppercase">all-time</p>
+    </div>
   </div>
 
   <%

← f5d2cd9 feat(ux): hand-drawn SVG glyphs replace emoji on vertical he  ·  back to Ventura Claw Leads  ·  feat(seo): per-business dynamic Open Graph images d818054 →