← 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
M data/chip-chats.jsonM data/moodboards.jsonM data/pairings.jsonM data/reviews.jsonM data/vision-cache.json
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 →