[object Object]

← back to AsSeenInMovies

asseeninmovies: /spotted gallery — 4-tile stats strip (placements/films/brands/categories) with responsive @media; mirrors /spotted/queue header pattern

17d9d2da3f0c86ac579617ad30d352216b4604a7 · 2026-05-12 17:04:33 -0700 · SteveStudio2

Files touched

Diff

commit 17d9d2da3f0c86ac579617ad30d352216b4604a7
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Tue May 12 17:04:33 2026 -0700

    asseeninmovies: /spotted gallery — 4-tile stats strip (placements/films/brands/categories) with responsive @media; mirrors /spotted/queue header pattern
---
 server.js | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/server.js b/server.js
index 317250c..c50f16e 100644
--- a/server.js
+++ b/server.js
@@ -268,6 +268,13 @@ app.get('/spotted', async (req, res) => {
     const total = parseInt(totalR.rows[0].n, 10);
     const totalPages = Math.max(1, Math.ceil(total / limit));
     const catsR = await pool.query(`SELECT product_category, count(*) AS n FROM asim_spotted WHERE verified_at IS NOT NULL AND (verified_by IS NULL OR verified_by NOT LIKE 'rejected%') AND product_category IS NOT NULL GROUP BY 1 ORDER BY 2 DESC`);
+    const statsR = await pool.query(`
+      SELECT
+        (SELECT count(*) FROM asim_spotted WHERE verified_at IS NOT NULL AND (verified_by IS NULL OR verified_by NOT LIKE 'rejected%')) AS placements,
+        (SELECT count(DISTINCT movie_id) FROM asim_spotted WHERE verified_at IS NOT NULL AND (verified_by IS NULL OR verified_by NOT LIKE 'rejected%')) AS movies,
+        (SELECT count(DISTINCT NULLIF(TRIM(brand),'')) FROM asim_spotted WHERE verified_at IS NOT NULL AND (verified_by IS NULL OR verified_by NOT LIKE 'rejected%')) AS brands,
+        (SELECT count(DISTINCT product_category) FROM asim_spotted WHERE verified_at IS NOT NULL AND (verified_by IS NULL OR verified_by NOT LIKE 'rejected%') AND product_category IS NOT NULL) AS categories`);
+    const gs = statsR.rows[0] || {};
     const qs = (overrides = {}) => {
       const u = new URLSearchParams();
       if (cat) u.set('category', cat);
@@ -324,9 +331,20 @@ app.get('/spotted', async (req, res) => {
         .submit-banner a{padding:7px 18px;background:var(--gold);color:#1a1410;border-radius:5px;font-size:11.5px;letter-spacing:0.12em;text-transform:uppercase;text-decoration:none;font-weight:600}
         .submit-banner a:hover{filter:brightness(1.1)}
         .pager{display:flex;gap:10px;align-items:center;justify-content:center;margin:32px 0}
+        .sp-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:18px 0 22px}
+        .sp-stats .stat{padding:13px 14px;border:1px solid var(--line);border-radius:6px;background:rgba(255,255,255,0.02);display:flex;flex-direction:column;gap:2px}
+        .sp-stats .num{font-family:var(--serif);font-size:30px;font-weight:500;color:var(--gold);line-height:1.0}
+        .sp-stats .lbl{font-size:10.5px;letter-spacing:0.1em;text-transform:uppercase;color:var(--ink-faint)}
+        @media (max-width:560px){.sp-stats{grid-template-columns:repeat(2,1fr)}}
       </style>
       <h1 class="title">SPOTTED</h1>
       <p class="meta-line">${total.toLocaleString()} verified product placements — set decor, wallcoverings, lighting, props.</p>
+      <div class="sp-stats">
+        <div class="stat"><span class="num">${Number(gs.placements||0).toLocaleString()}</span><span class="lbl">placements</span></div>
+        <div class="stat"><span class="num">${Number(gs.movies||0).toLocaleString()}</span><span class="lbl">films</span></div>
+        <div class="stat"><span class="num">${Number(gs.brands||0).toLocaleString()}</span><span class="lbl">brands</span></div>
+        <div class="stat"><span class="num">${Number(gs.categories||0).toLocaleString()}</span><span class="lbl">categories</span></div>
+      </div>
 
       <div class="submit-banner">
         <span>Saw something on screen that we don't have yet?</span>

← 3d60e9b asseeninmovies: /spotted/queue stats header (4-tile strip —  ·  back to AsSeenInMovies  ·  asseeninmovies: home page perf — parallelize 4 queries via P 25508fb →