[object Object]

← back to Wallco Ai

rename Cactus Curator → Design Curator: /admin/design-curator route + file, old path 301-redirects (query preserved), nav + title + sister-page links updated (internal /api/cactus-* names unchanged)

9f06acea13544442dd2784c7a065b38f529df5c8 · 2026-06-01 07:01:28 -0700 · Steve Abrams

Files touched

Diff

commit 9f06acea13544442dd2784c7a065b38f529df5c8
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon Jun 1 07:01:28 2026 -0700

    rename Cactus Curator → Design Curator: /admin/design-curator route + file, old path 301-redirects (query preserved), nav + title + sister-page links updated (internal /api/cactus-* names unchanged)
---
 public/admin/{cactus-curator.html => design-curator.html} |  4 ++--
 public/admin/drunk-curator.html                           |  2 +-
 public/admin/workspace.html                               |  2 +-
 server.js                                                 | 13 ++++++++++---
 4 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/public/admin/cactus-curator.html b/public/admin/design-curator.html
similarity index 99%
rename from public/admin/cactus-curator.html
rename to public/admin/design-curator.html
index 5267369..6955bc5 100644
--- a/public/admin/cactus-curator.html
+++ b/public/admin/design-curator.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1">
-<title>Cactus Curator — wallco.ai admin</title>
+<title>Design Curator — wallco.ai admin</title>
 <style>
   :root { --cols: 5; --bg:#0e0f10; --panel:#17191b; --line:#272b2e; --ink:#e9ecef; --mut:#9aa3ab; --accent:#7bc96f; }
   * { box-sizing: border-box; }
@@ -194,7 +194,7 @@
 <body>
 <header>
   <div class="row">
-    <h1><span class="leaf">❖</span> Cactus Curator</h1>
+    <h1><span class="leaf">❖</span> Design Curator</h1>
     <span class="pill" id="stat">loading…</span>
     <label class="ctl">Collection
       <select id="collection" title="switch the curated line — navigates to ?category=&lt;line&gt;"></select>
diff --git a/public/admin/drunk-curator.html b/public/admin/drunk-curator.html
index c7033b5..b3097c2 100644
--- a/public/admin/drunk-curator.html
+++ b/public/admin/drunk-curator.html
@@ -726,7 +726,7 @@ _autoTog.addEventListener('change',()=>{
   if(autoIdOn){ autoIdCurrent(); }
   else { const b=$('#eboxes'); if(b) b.innerHTML=''; document.getElementById('scanning')?.remove(); }
 });
-{ const gl=document.getElementById('gridlink'); if(gl) gl.href=q('/admin/cactus-curator'+(CATEGORY?'?category='+encodeURIComponent(CATEGORY):'')); }
+{ const gl=document.getElementById('gridlink'); if(gl) gl.href=q('/admin/design-curator'+(CATEGORY?'?category='+encodeURIComponent(CATEGORY):'')); }
 loadCollections();
 (async function(){
   const r=await fetch(q('/api/admin/drunk/list'+(CATEGORY?'?category='+encodeURIComponent(CATEGORY):'')));
diff --git a/public/admin/workspace.html b/public/admin/workspace.html
index 7067d92..dd49e33 100644
--- a/public/admin/workspace.html
+++ b/public/admin/workspace.html
@@ -67,7 +67,7 @@
 <script>
 // ---- Catalog of openable admin grids/pages ----
 const PAGES = [
-  ['Cactus Curator',        '/admin/cactus-curator'],
+  ['Design Curator',        '/admin/design-curator'],
   ['Drunk Curator',         '/admin/drunk-curator'],
   ['Dogs Curator',          '/admin/dogs-curator'],
   ['Botanical Curator',     '/admin/botanical-wonders-curator'],
diff --git a/server.js b/server.js
index d350b48..86e450d 100644
--- a/server.js
+++ b/server.js
@@ -1421,9 +1421,16 @@ app.get('/api/admin/botanical-wonders/list', (req, res) => {
 //   2 digital → unpublish, sell as digital file (stamps digital_file_at date)
 //   3 fix     → keep but needs fixing (flags needs_fixing_at date)
 //   4 live    → keep, go live in web viewer (publish + web_viewer flag)
-app.get('/admin/cactus-curator', (req, res) => {
+// Renamed 2026-06-01: "Cactus Curator" (legacy codename) → "Design Curator".
+// Canonical path is now /admin/design-curator; old /admin/cactus-curator
+// 301-redirects (query preserved) so existing bookmarks/links keep working.
+app.get('/admin/design-curator', (req, res) => {
   if (!isAdmin(req)) return res.status(404).type('html').send('<h1>404</h1>');
-  res.sendFile(path.join(__dirname, 'public', 'admin', 'cactus-curator.html'));
+  res.sendFile(path.join(__dirname, 'public', 'admin', 'design-curator.html'));
+});
+app.get('/admin/cactus-curator', (req, res) => {
+  const i = req.originalUrl.indexOf('?');
+  res.redirect(301, '/admin/design-curator' + (i >= 0 ? req.originalUrl.slice(i) : ''));
 });
 
 // ── /admin/rooms — master gallery of EVERY saved room-setting render ───────
@@ -5544,7 +5551,7 @@ function htmlHeader(active) {
        any page on the public site. -->
   <div id="admin-nav" hidden style="margin-top:14px;padding-top:14px;border-top:1px solid var(--line,#e5e0d4)">
     <div style="font:600 10.5px/1 ui-sans-serif,system-ui,sans-serif;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint,#7a6e5a);margin:0 14px 8px">Admin</div>
-    <a href="/admin/cactus-curator" class="${active === '/admin/cactus-curator' ? 'active' : ''}">🌵 Cactus Curator (grid)</a>
+    <a href="/admin/design-curator" class="${active === '/admin/design-curator' ? 'active' : ''}">🎨 Design Curator (grid)</a>
     <a href="/admin/bleed-review"   class="${active === '/admin/bleed-review'   ? 'active' : ''}">🩸 Bleed Review</a>
     <a href="/admin/drunk-curator"  class="${active === '/admin/drunk-curator'  ? 'active' : ''}">🥃 Hot-or-Not + Wall Viewer</a>
     <a href="/admin/rooms"          class="${active === '/admin/rooms'          ? 'active' : ''}">🛋 Room Renders Gallery</a>

← 365dbd6 BLEED_GHOST cohort triage report (7875 designs, read-only):  ·  back to Wallco Ai  ·  overnight loop: extend to daytime (stop_hour=18, cap=140), s ca8e0ff →