[object Object]

← back to Quadrille Showroom

chore: lint, refactor, v1.3.0 (session close)

3ac09a0b59892afba5165a08ce3a1600d6696ac8 · 2026-07-02 08:16:17 -0700 · Steve

- hoist crypto require to module top (drop 2 inline requires)
- age handler == null -> === null (strict-equality consistency)
- version 1.2.2 -> 1.3.0 (sample-request submit feature landed this session)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Files touched

Diff

commit 3ac09a0b59892afba5165a08ce3a1600d6696ac8
Author: Steve <steve@designerwallcoverings.com>
Date:   Thu Jul 2 08:16:17 2026 -0700

    chore: lint, refactor, v1.3.0 (session close)
    
    - hoist crypto require to module top (drop 2 inline requires)
    - age handler == null -> === null (strict-equality consistency)
    - version 1.2.2 -> 1.3.0 (sample-request submit feature landed this session)
    
    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---
 package-lock.json     | 4 ++--
 package.json          | 2 +-
 public/js/showroom.js | 2 +-
 server.js             | 3 +--
 4 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 7e787d5..77ff195 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "quadrille-showroom",
-  "version": "1.2.2",
+  "version": "1.3.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "quadrille-showroom",
-      "version": "1.2.2",
+      "version": "1.3.0",
       "license": "ISC",
       "dependencies": {
         "compression": "^1.8.1",
diff --git a/package.json b/package.json
index e4dea79..f8206d8 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "quadrille-showroom",
-  "version": "1.2.2",
+  "version": "1.3.0",
   "main": "server.js",
   "scripts": {
     "start": "node server.js",
diff --git a/public/js/showroom.js b/public/js/showroom.js
index 801fae6..7e1494b 100644
--- a/public/js/showroom.js
+++ b/public/js/showroom.js
@@ -3914,7 +3914,7 @@ function initHUD() {
       const v = ageInput.value.trim();
       const n = v === '' ? null : Math.max(0, Math.min(120, parseInt(v, 10) || 0));
       visitorAge = n;
-      if (n == null) localStorage.removeItem('qh_visitor_age');
+      if (n === null) localStorage.removeItem('qh_visitor_age');
       else localStorage.setItem('qh_visitor_age', String(n));
     });
   }
diff --git a/server.js b/server.js
index df5f8e0..e51a313 100644
--- a/server.js
+++ b/server.js
@@ -3,6 +3,7 @@ const helmet = require('helmet');
 const compression = require('compression');
 const path = require('path');
 const fs = require('fs');
+const crypto = require('crypto');
 
 const app = express();
 app.use(helmet({ contentSecurityPolicy: false }));
@@ -187,7 +188,6 @@ app.post('/api/sample-request', (req, res) => {
   const notes = clampMulti(b.notes, 2000);
 
   const created_at = new Date().toISOString();
-  const crypto = require('crypto');
   const id = 'sr_' + crypto.createHash('sha1')
     .update(created_at + JSON.stringify(samples)).digest('hex').slice(0, 12);
   const record = { id, created_at, ip: req.ip || null, age, samples, contact, notes };
@@ -280,7 +280,6 @@ app.get('/api/thumb', async (req, res) => {
   const url = req.query.url;
 
   // Cache key by source + width
-  const crypto = require('crypto');
   const ck = crypto.createHash('sha1').update((sku || url || '') + '|' + w).digest('hex').slice(0, 24);
   const cacheFile = path.join(THUMB_CACHE, ck + '.jpg');
   try {

← fb869a9 Wire the George email picker for sample requests (sending ga  ·  back to Quadrille Showroom  ·  5x sweep 1: retry transient upstream in /api/thumb (cold-cac d9cf3b2 →