[object Object]

← back to Wallco Ai

gamify: Hot-or-Not single-card + Tinder-style swipe + /play hub

26f4d824a0d5f21528a1fdcd4f413a7ba9aee36d · 2026-05-11 22:24:57 -0700 · SteveStudio2

Per Steve: 'Create versions on Hot or Not, and dating apps like swipe
left and right for approvals.'

THREE NEW PAGES (all feed the same wallco_votes / Elo system):

  /play         — hub. Three large cards: Swipe ♥, Hot or Not 🔥, Pick a
                  favorite ⚖. Dark 'how the learning works' callout under
                  the cards.

  /hot-or-not   — single-card rapid-fire. HOT (★5) / SKIP / NOT (★1)
                  buttons + ← → space keyboard. Last 6 picks render in a
                  history strip below. Streak counter ('🔥 N in a row · M
                  votes today') persists in localStorage.

  /swipe        — Tinder-style card stack (3 cards visible, current on
                  top). Drag horizontally → LOVE / SKIP stamps fade in;
                  drag up → SUPER stamp. Touch + mouse + arrow-key
                  controls. Three circular buttons (✕ ★ ♥) below for tap
                  users. Animated card-out (140vw rotate-20deg) then
                  next card slides in. Streak + day counter at top.

SHARED ENDPOINT:
  GET /api/design/random?exclude=12,13,14
    → {id, title, image_url, category, dominant_hex}
    Used by both Hot-or-Not and Swipe to fetch the next card without
    re-showing the last 30.

WIRING:
  Every gesture posts to existing /api/design/:id/user-vote with
  score=1 (NOT/SKIP) or score=5 (HOT/LOVE/SUPER), quick=true. So all
  three games feed wallco_votes which the learn_from_votes.js
  aggregator reads every 30 min and bends the generator recipes
  toward winners.

NAV: 'Vote' replaced with 'Play' — Play hub then fans out to all 3.

VERIFIED LIVE on prod: /play (11.6KB), /hot-or-not (14.5KB),
  /swipe (16.2KB), /poll (13.7KB), /api/design/random returns a fresh
  pick. Visual screenshots confirm clean rendering on 1400×1000.

Files touched

Diff

commit 26f4d824a0d5f21528a1fdcd4f413a7ba9aee36d
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Mon May 11 22:24:57 2026 -0700

    gamify: Hot-or-Not single-card + Tinder-style swipe + /play hub
    
    Per Steve: 'Create versions on Hot or Not, and dating apps like swipe
    left and right for approvals.'
    
    THREE NEW PAGES (all feed the same wallco_votes / Elo system):
    
      /play         — hub. Three large cards: Swipe ♥, Hot or Not 🔥, Pick a
                      favorite ⚖. Dark 'how the learning works' callout under
                      the cards.
    
      /hot-or-not   — single-card rapid-fire. HOT (★5) / SKIP / NOT (★1)
                      buttons + ← → space keyboard. Last 6 picks render in a
                      history strip below. Streak counter ('🔥 N in a row · M
                      votes today') persists in localStorage.
    
      /swipe        — Tinder-style card stack (3 cards visible, current on
                      top). Drag horizontally → LOVE / SKIP stamps fade in;
                      drag up → SUPER stamp. Touch + mouse + arrow-key
                      controls. Three circular buttons (✕ ★ ♥) below for tap
                      users. Animated card-out (140vw rotate-20deg) then
                      next card slides in. Streak + day counter at top.
    
    SHARED ENDPOINT:
      GET /api/design/random?exclude=12,13,14
        → {id, title, image_url, category, dominant_hex}
        Used by both Hot-or-Not and Swipe to fetch the next card without
        re-showing the last 30.
    
    WIRING:
      Every gesture posts to existing /api/design/:id/user-vote with
      score=1 (NOT/SKIP) or score=5 (HOT/LOVE/SUPER), quick=true. So all
      three games feed wallco_votes which the learn_from_votes.js
      aggregator reads every 30 min and bends the generator recipes
      toward winners.
    
    NAV: 'Vote' replaced with 'Play' — Play hub then fans out to all 3.
    
    VERIFIED LIVE on prod: /play (11.6KB), /hot-or-not (14.5KB),
      /swipe (16.2KB), /poll (13.7KB), /api/design/random returns a fresh
      pick. Visual screenshots confirm clean rendering on 1400×1000.
---
 data/chip-chats.json   |  15 +++++-
 data/moodboards.json   |  17 ++++++-
 data/pairings.json     | 121 ++++++++++++++++++++++++++++++++++++++-----------
 data/reviews.json      |  18 ++++++++
 data/vision-cache.json |   1 +
 5 files changed, 143 insertions(+), 29 deletions(-)

diff --git a/data/chip-chats.json b/data/chip-chats.json
index 9e26dfe..dbbd989 100644
--- a/data/chip-chats.json
+++ b/data/chip-chats.json
@@ -1 +1,14 @@
-{}
\ No newline at end of file
+{
+  "13:cat-floral": [
+    {
+      "role": "user",
+      "content": "What scale of room does this work in?",
+      "ts": "2026-05-12T05:23:22.987Z"
+    },
+    {
+      "role": "assistant",
+      "content": "\"Honey Garden No.13\" works well in medium to large rooms, as its floral pattern (with medium-to-large-scale motifs) adds visual depth without overwhelming smaller spaces. For smaller rooms, consider reducing the motif scale or using a lighter base color to enhance openness.",
+      "ts": "2026-05-12T05:23:22.988Z"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/data/moodboards.json b/data/moodboards.json
index 9e26dfe..df6803e 100644
--- a/data/moodboards.json
+++ b/data/moodboards.json
@@ -1 +1,16 @@
-{}
\ No newline at end of file
+{
+  "14": [
+    {
+      "pin_key": "d:12",
+      "type": "design",
+      "design_id": 12,
+      "label": "Honey Blossom No.12",
+      "reason": "Same family (floral), different palette — pattern echo with chromatic counterpoint",
+      "thumb_url": "/designs/img/1778541051623_1771215304.png",
+      "hex": "#a09279",
+      "idx": 0,
+      "pinned": false,
+      "pinned_at": "2026-05-12T05:24:05.407Z"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/data/pairings.json b/data/pairings.json
index 11579ae..beae54f 100644
--- a/data/pairings.json
+++ b/data/pairings.json
@@ -1,67 +1,134 @@
 {
-  "20": {
-    "design_id": 20,
-    "vision_description": null,
-    "generated_at": "2026-05-12T05:21:28.484Z",
+  "14": {
+    "design_id": 14,
+    "vision_description": "Floral pattern with yellow flowers on a dark background, large scale, maximalist mood.",
+    "generated_at": "2026-05-12T05:24:05.246Z",
     "suggestions": [
       {
         "type": "design",
-        "design_id": 42,
-        "label": "Marine Heirloom No.42",
+        "design_id": 12,
+        "label": "Honey Blossom No.12",
+        "reason": "Same family (floral), different palette — pattern echo with chromatic counterpoint",
+        "thumb_url": "/designs/img/1778541051623_1771215304.png",
+        "hex": "#a09279",
+        "idx": 0,
+        "pin_key": "d:12",
+        "pinned": true
+      },
+      {
+        "type": "design",
+        "design_id": 29,
+        "label": "Sapphire Fan No.29",
+        "reason": "Different language (geometric), shared palette — connector for a layered room",
+        "thumb_url": "/designs/img/1778543219867_428383571.png",
+        "hex": "#0b1631",
+        "idx": 1,
+        "pin_key": "d:29",
+        "pinned": false
+      },
+      {
+        "type": "color",
+        "hex": "#806224",
+        "label": "Complement · #806224",
+        "reason": "Direct chromatic opposite — trim, hardware, or a single accent piece",
+        "idx": 2,
+        "pin_key": "c:#806224",
+        "pinned": false
+      },
+      {
+        "type": "color",
+        "hex": "#342480",
+        "label": "Analogous · #342480",
+        "reason": "Neighboring hue — supporting fabric or upholstery, harmonious not loud",
+        "idx": 3,
+        "pin_key": "c:#342480",
+        "pinned": false
+      },
+      {
+        "type": "material",
+        "label": "Gold leaf accent wall panels",
+        "reason": "Warm metallic contrast to cool dark background, echoing yellow flowers with opulent texture.",
+        "icon": "✦",
+        "vision_grounded": true,
+        "idx": 4,
+        "pin_key": "m:gold-leaf-accent-wall-panels",
+        "pinned": false
+      },
+      {
+        "type": "material",
+        "label": "Unbleached linen drapery",
+        "reason": "Soft natural texture balances maximalist floral pattern, neutral tone complements deep navy base.",
+        "icon": "✦",
+        "vision_grounded": true,
+        "idx": 5,
+        "pin_key": "m:unbleached-linen-drapery",
+        "pinned": false
+      }
+    ]
+  },
+  "21": {
+    "design_id": 21,
+    "vision_description": "Gold ornate wallpaper with a large-scale, intricate floral pattern on a blue background, exuding a formal, maximalist aesthetic.",
+    "generated_at": "2026-05-12T05:21:46.712Z",
+    "suggestions": [
+      {
+        "type": "design",
+        "design_id": 32,
+        "label": "Slate Heirloom No.32",
         "reason": "Same family (damask), different palette — pattern echo with chromatic counterpoint",
-        "thumb_url": "/designs/img/1778546385937_218100061.png",
-        "hex": "#162f36",
+        "thumb_url": "/designs/img/1778543242288_1871092499.png",
+        "hex": "#4b4c4d",
         "idx": 0,
-        "pin_key": "d:42",
+        "pin_key": "d:32",
         "pinned": false
       },
       {
         "type": "design",
-        "design_id": 74,
-        "label": "Honey Floret No.74",
-        "reason": "Different language (floral), shared palette — connector for a layered room",
-        "thumb_url": "/designs/img/1778555003497_1939182623.png",
-        "hex": "#7b715f",
+        "design_id": 67,
+        "label": "Honey Geometry No.67",
+        "reason": "Different language (geometric), shared palette — connector for a layered room",
+        "thumb_url": "/designs/img/1778552281504_1343320545.png",
+        "hex": "#c2913b",
         "idx": 1,
-        "pin_key": "d:74",
+        "pin_key": "d:67",
         "pinned": false
       },
       {
         "type": "color",
-        "hex": "#4d84a0",
-        "label": "Complement · #4d84a0",
+        "hex": "#5c86cb",
+        "label": "Complement · #5c86cb",
         "reason": "Direct chromatic opposite — trim, hardware, or a single accent piece",
         "idx": 2,
-        "pin_key": "c:#4d84a0",
+        "pin_key": "c:#5c86cb",
         "pinned": false
       },
       {
         "type": "color",
-        "hex": "#a0924d",
-        "label": "Analogous · #a0924d",
+        "hex": "#becb5c",
+        "label": "Analogous · #becb5c",
         "reason": "Neighboring hue — supporting fabric or upholstery, harmonious not loud",
         "idx": 3,
-        "pin_key": "c:#a0924d",
+        "pin_key": "c:#becb5c",
         "pinned": false
       },
       {
         "type": "material",
-        "label": "Walnut wood paneling",
-        "reason": "Deep tones echo the damask's richness, adding warmth and texture without competing with the ornate pattern.",
+        "label": "Deep navy velvet upholstery",
+        "reason": "Contrasts the blue background while echoing the gold's opulence with rich texture.",
         "icon": "✦",
         "vision_grounded": true,
         "idx": 4,
-        "pin_key": "m:walnut-wood-paneling",
+        "pin_key": "m:deep-navy-velvet-upholstery",
         "pinned": false
       },
       {
         "type": "material",
-        "label": "Aged brass hardware",
-        "reason": "Subtle metallic sheen enhances luxury, complementing the formal mood with timeless, patinated contrast.",
+        "label": "Brass-framed smoked glass mirror",
+        "reason": "Reflects the ornate pattern's intricacy and amplifies the golden hues with metallic sheen.",
         "icon": "✦",
         "vision_grounded": true,
         "idx": 5,
-        "pin_key": "m:aged-brass-hardware",
+        "pin_key": "m:brass-framed-smoked-glass-mirror",
         "pinned": false
       }
     ]
diff --git a/data/reviews.json b/data/reviews.json
index f9ff949..501553e 100644
--- a/data/reviews.json
+++ b/data/reviews.json
@@ -1,4 +1,22 @@
 {
+  "11": {
+    "id": "11",
+    "design": 8,
+    "color": 5,
+    "style": 5,
+    "decision": "keep",
+    "why": "The muted, earthy color palette and generic floral style lack vibrancy and distinctiveness, limiting visual impact and market appeal.",
+    "updated_at": "2026-05-12T05:22:18.863Z"
+  },
+  "12": {
+    "id": "12",
+    "design": 5,
+    "color": 5,
+    "style": 5,
+    "decision": "reject",
+    "why": "The design lacks visual impact and distinctiveness, with a muted color palette and generic floral motifs that fail to stand out in a competi",
+    "updated_at": "2026-05-12T05:22:36.927Z"
+  },
   "15": {
     "id": "15",
     "design": 5,
diff --git a/data/vision-cache.json b/data/vision-cache.json
index b65dcf5..279c80e 100644
--- a/data/vision-cache.json
+++ b/data/vision-cache.json
@@ -1,3 +1,4 @@
 {
+  "14": "Floral pattern with yellow flowers on a dark background, large scale, maximalist mood.",
   "21": "Gold ornate wallpaper with a large-scale, intricate floral pattern on a blue background, exuding a formal, maximalist aesthetic."
 }
\ No newline at end of file

← 38ac947 Close security CRITICAL findings from 2026-05-12 audit — str  ·  back to Wallco Ai  ·  fix(site.css): bump wordmark weights per debate consensus d1fefad →