[object Object]

← back to Wallco Ai

package: pin multer dep (wallco prod kept losing it on npm ci because not in lock)

05ab37b234cb4a8918fe6273a74f7a8b762e527a · 2026-05-13 12:55:22 -0700 · SteveStudio2

Files touched

Diff

commit 05ab37b234cb4a8918fe6273a74f7a8b762e527a
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Wed May 13 12:55:22 2026 -0700

    package: pin multer dep (wallco prod kept losing it on npm ci because not in lock)
---
 data/designs.json | 904 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 package-lock.json | 146 ++++++++-
 package.json      |   3 +-
 3 files changed, 1050 insertions(+), 3 deletions(-)

diff --git a/data/designs.json b/data/designs.json
index c71887e..358911e 100644
--- a/data/designs.json
+++ b/data/designs.json
@@ -59037,7 +59037,7 @@
     "created_at": "2026-05-13T16:32:41.924168+00:00",
     "motifs": [],
     "user_removed": false,
-    "user_color_good": null,
+    "user_color_good": true,
     "user_style_good": null,
     "user_scale_good": null,
     "user_stars": null,
@@ -74940,5 +74940,907 @@
     "user_scale_good": null,
     "user_stars": null,
     "room_mockups": []
+  },
+  {
+    "id": 3634,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#b79e73",
+    "saturation": 0.321,
+    "title": "Honey Salon No.3634",
+    "handle": "wallco-3634",
+    "image_url": "/designs/img/1778701483396_1374834493.png",
+    "filename": "1778701483396_1374834493.png",
+    "generator": "wallco.ai",
+    "seed": 1374834493,
+    "is_published": false,
+    "created_at": "2026-05-13T19:44:51.913672+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3635,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#b79e73",
+    "saturation": 0.321,
+    "title": "Honey Baroque No.3635",
+    "handle": "wallco-3635",
+    "image_url": "/designs/img/var_3634_hue+60_1778701492022.png",
+    "filename": "var_3634_hue+60_1778701492022.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:44:54.249773+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3636,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#b79e73",
+    "saturation": 0.321,
+    "title": "Honey Damask No.3636",
+    "handle": "wallco-3636",
+    "image_url": "/designs/img/var_3634_hue+120_1778701494254.png",
+    "filename": "var_3634_hue+120_1778701494254.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:44:56.5357+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3637,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#b79e73",
+    "saturation": 0.321,
+    "title": "Honey Heirloom No.3637",
+    "handle": "wallco-3637",
+    "image_url": "/designs/img/var_3634_hue+180_1778701496539.png",
+    "filename": "var_3634_hue+180_1778701496539.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:44:58.817587+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3638,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#b79e73",
+    "saturation": 0.321,
+    "title": "Honey Atelier No.3638",
+    "handle": "wallco-3638",
+    "image_url": "/designs/img/var_3634_hue-60_1778701498823.png",
+    "filename": "var_3634_hue-60_1778701498823.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:45:01.243782+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3639,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#b79e73",
+    "saturation": 0.321,
+    "title": "Honey Salon No.3639",
+    "handle": "wallco-3639",
+    "image_url": "/designs/img/var_3634_mono_1778701501248.png",
+    "filename": "var_3634_mono_1778701501248.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:45:03.574337+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3640,
+    "kind": "seamless_tile",
+    "category": "drunk-animals",
+    "dominant_hex": "#6a557a",
+    "saturation": 0.179,
+    "title": "Mauve Hiccup No.3640",
+    "handle": "wallco-3640",
+    "image_url": "/designs/img/1778701531342_1389659568.png",
+    "filename": "1778701531342_1389659568.png",
+    "generator": "wallco.ai",
+    "seed": 1389659568,
+    "is_published": false,
+    "created_at": "2026-05-13T19:45:39.643641+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3641,
+    "kind": "seamless_tile",
+    "category": "stoned-animals",
+    "dominant_hex": "#5d614e",
+    "saturation": 0.109,
+    "title": "Olive Trip No.3641",
+    "handle": "wallco-3641",
+    "image_url": "/designs/img/1778701531488_19192430.png",
+    "filename": "1778701531488_19192430.png",
+    "generator": "wallco.ai",
+    "seed": 19192430,
+    "is_published": false,
+    "created_at": "2026-05-13T19:45:43.331741+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3642,
+    "kind": "seamless_tile",
+    "category": "drunk-animals",
+    "dominant_hex": "#383850",
+    "saturation": 0.176,
+    "title": "Sapphire Tableau No.3642",
+    "handle": "wallco-3642",
+    "image_url": "/designs/img/1778701560898_424552523.png",
+    "filename": "1778701560898_424552523.png",
+    "generator": "wallco.ai",
+    "seed": 424552523,
+    "is_published": false,
+    "created_at": "2026-05-13T19:46:12.643775+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3643,
+    "kind": "seamless_tile",
+    "category": "drunk-animals",
+    "dominant_hex": "#1e384b",
+    "saturation": 0.429,
+    "title": "Sapphire Reverie No.3643",
+    "handle": "wallco-3643",
+    "image_url": "/designs/img/1778701621898_1537711990.png",
+    "filename": "1778701621898_1537711990.png",
+    "generator": "wallco.ai",
+    "seed": 1537711990,
+    "is_published": false,
+    "created_at": "2026-05-13T19:47:14.05589+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3644,
+    "kind": "seamless_tile",
+    "category": "stoned-animals",
+    "dominant_hex": "#755656",
+    "saturation": 0.153,
+    "title": "Rose Vespers No.3644",
+    "handle": "wallco-3644",
+    "image_url": "/designs/img/1778701621898_27251394.png",
+    "filename": "1778701621898_27251394.png",
+    "generator": "wallco.ai",
+    "seed": 27251394,
+    "is_published": false,
+    "created_at": "2026-05-13T19:47:17.242919+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3645,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#1e303f",
+    "saturation": 0.355,
+    "title": "Sapphire Baroque No.3645",
+    "handle": "wallco-3645",
+    "image_url": "/designs/img/1778701672222_2017601377.png",
+    "filename": "1778701672222_2017601377.png",
+    "generator": "wallco.ai",
+    "seed": 2017601377,
+    "is_published": false,
+    "created_at": "2026-05-13T19:48:04.078255+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3646,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#1e303f",
+    "saturation": 0.355,
+    "title": "Sapphire Damask No.3646",
+    "handle": "wallco-3646",
+    "image_url": "/designs/img/var_3645_hue+60_1778701684203.png",
+    "filename": "var_3645_hue+60_1778701684203.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:48:06.434361+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3647,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#1e303f",
+    "saturation": 0.355,
+    "title": "Sapphire Heirloom No.3647",
+    "handle": "wallco-3647",
+    "image_url": "/designs/img/var_3645_hue+120_1778701686439.png",
+    "filename": "var_3645_hue+120_1778701686439.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:48:09.7704+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3648,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#1e303f",
+    "saturation": 0.355,
+    "title": "Sapphire Atelier No.3648",
+    "handle": "wallco-3648",
+    "image_url": "/designs/img/var_3645_hue+180_1778701689781.png",
+    "filename": "var_3645_hue+180_1778701689781.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:48:14.628127+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3649,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#1e303f",
+    "saturation": 0.355,
+    "title": "Sapphire Salon No.3649",
+    "handle": "wallco-3649",
+    "image_url": "/designs/img/var_3645_hue-60_1778701694643.png",
+    "filename": "var_3645_hue-60_1778701694643.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:48:21.478725+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3650,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#1e303f",
+    "saturation": 0.355,
+    "title": "Sapphire Baroque No.3650",
+    "handle": "wallco-3650",
+    "image_url": "/designs/img/var_3645_mono_1778701701491.png",
+    "filename": "var_3645_mono_1778701701491.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:48:25.895577+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3651,
+    "kind": "seamless_tile",
+    "category": "drunk-animals",
+    "dominant_hex": "#a56987",
+    "saturation": 0.25,
+    "title": "Rose Tipple No.3651",
+    "handle": "wallco-3651",
+    "image_url": "/designs/img/1778701711321_945485715.png",
+    "filename": "1778701711321_945485715.png",
+    "generator": "wallco.ai",
+    "seed": 945485715,
+    "is_published": false,
+    "created_at": "2026-05-13T19:48:42.176008+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3652,
+    "kind": "seamless_tile",
+    "category": "stoned-animals",
+    "dominant_hex": "#272a38",
+    "saturation": 0.179,
+    "title": "Sapphire Stardust No.3652",
+    "handle": "wallco-3652",
+    "image_url": "/designs/img/1778701711486_767975653.png",
+    "filename": "1778701711486_767975653.png",
+    "generator": "wallco.ai",
+    "seed": 767975653,
+    "is_published": false,
+    "created_at": "2026-05-13T19:48:43.858658+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3653,
+    "kind": "seamless_tile",
+    "category": "drunk-animals",
+    "dominant_hex": "#966756",
+    "saturation": 0.271,
+    "title": "Amber Reverie No.3653",
+    "handle": "wallco-3653",
+    "image_url": "/designs/img/1778701801356_2080390617.png",
+    "filename": "1778701801356_2080390617.png",
+    "generator": "wallco.ai",
+    "seed": 2080390617,
+    "is_published": false,
+    "created_at": "2026-05-13T19:50:26.491325+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3654,
+    "kind": "seamless_tile",
+    "category": "stoned-animals",
+    "dominant_hex": "#1b2025",
+    "saturation": 0.156,
+    "title": "Sapphire Vespers No.3654",
+    "handle": "wallco-3654",
+    "image_url": "/designs/img/1778701801483_1787686250.png",
+    "filename": "1778701801483_1787686250.png",
+    "generator": "wallco.ai",
+    "seed": 1787686250,
+    "is_published": false,
+    "created_at": "2026-05-13T19:50:29.543681+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3655,
+    "kind": "seamless_tile",
+    "category": "drunk-animals",
+    "dominant_hex": "#537152",
+    "saturation": 0.159,
+    "title": "Sage Vignette No.3655",
+    "handle": "wallco-3655",
+    "image_url": "/designs/img/1778701813261_314338445.png",
+    "filename": "1778701813261_314338445.png",
+    "generator": "wallco.ai",
+    "seed": 314338445,
+    "is_published": false,
+    "created_at": "2026-05-13T19:50:31.847603+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3656,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#b96934",
+    "saturation": 0.561,
+    "title": "Amber Damask No.3656",
+    "handle": "wallco-3656",
+    "image_url": "/designs/img/1778701864351_1552362160.png",
+    "filename": "1778701864351_1552362160.png",
+    "generator": "wallco.ai",
+    "seed": 1552362160,
+    "is_published": false,
+    "created_at": "2026-05-13T19:51:13.1333+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3657,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#b96934",
+    "saturation": 0.561,
+    "title": "Amber Heirloom No.3657",
+    "handle": "wallco-3657",
+    "image_url": "/designs/img/var_3656_hue+60_1778701873240.png",
+    "filename": "var_3656_hue+60_1778701873240.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:51:15.523763+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3658,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#b96934",
+    "saturation": 0.561,
+    "title": "Amber Atelier No.3658",
+    "handle": "wallco-3658",
+    "image_url": "/designs/img/var_3656_hue+120_1778701875527.png",
+    "filename": "var_3656_hue+120_1778701875527.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:51:17.794919+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3659,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#b96934",
+    "saturation": 0.561,
+    "title": "Amber Salon No.3659",
+    "handle": "wallco-3659",
+    "image_url": "/designs/img/var_3656_hue+180_1778701877801.png",
+    "filename": "var_3656_hue+180_1778701877801.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:51:20.010286+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3660,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#b96934",
+    "saturation": 0.561,
+    "title": "Amber Baroque No.3660",
+    "handle": "wallco-3660",
+    "image_url": "/designs/img/var_3656_hue-60_1778701880015.png",
+    "filename": "var_3656_hue-60_1778701880015.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:51:22.209724+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3661,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#b96934",
+    "saturation": 0.561,
+    "title": "Amber Damask No.3661",
+    "handle": "wallco-3661",
+    "image_url": "/designs/img/var_3656_mono_1778701882213.png",
+    "filename": "var_3656_mono_1778701882213.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:51:24.508112+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3662,
+    "kind": "seamless_tile",
+    "category": "drunk-animals",
+    "dominant_hex": "#95514e",
+    "saturation": 0.313,
+    "title": "Rose Tableau No.3662",
+    "handle": "wallco-3662",
+    "image_url": "/designs/img/1778701891325_2024167281.png",
+    "filename": "1778701891325_2024167281.png",
+    "generator": "wallco.ai",
+    "seed": 2024167281,
+    "is_published": false,
+    "created_at": "2026-05-13T19:51:39.549921+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3663,
+    "kind": "seamless_tile",
+    "category": "stoned-animals",
+    "dominant_hex": "#647948",
+    "saturation": 0.254,
+    "title": "Sage Daydream No.3663",
+    "handle": "wallco-3663",
+    "image_url": "/designs/img/1778701891489_502419263.png",
+    "filename": "1778701891489_502419263.png",
+    "generator": "wallco.ai",
+    "seed": 502419263,
+    "is_published": false,
+    "created_at": "2026-05-13T19:51:39.953078+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3664,
+    "kind": "seamless_tile",
+    "category": "drunk-animals",
+    "dominant_hex": "#da2e99",
+    "saturation": 0.699,
+    "title": "Plum Soir\u00e9e No.3664",
+    "handle": "wallco-3664",
+    "image_url": "/designs/img/1778701981306_394484979.png",
+    "filename": "1778701981306_394484979.png",
+    "generator": "wallco.ai",
+    "seed": 394484979,
+    "is_published": false,
+    "created_at": "2026-05-13T19:53:16.816061+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3665,
+    "kind": "seamless_tile",
+    "category": "stoned-animals",
+    "dominant_hex": "#b17181",
+    "saturation": 0.291,
+    "title": "Rose Hazefield No.3665",
+    "handle": "wallco-3665",
+    "image_url": "/designs/img/1778701981497_362721013.png",
+    "filename": "1778701981497_362721013.png",
+    "generator": "wallco.ai",
+    "seed": 362721013,
+    "is_published": false,
+    "created_at": "2026-05-13T19:53:20.18735+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3666,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#645640",
+    "saturation": 0.22,
+    "title": "Honey Damask No.3666",
+    "handle": "wallco-3666",
+    "image_url": "/designs/img/1778702053363_1443080330.png",
+    "filename": "1778702053363_1443080330.png",
+    "generator": "wallco.ai",
+    "seed": 1443080330,
+    "is_published": false,
+    "created_at": "2026-05-13T19:54:21.714931+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3667,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#645640",
+    "saturation": 0.22,
+    "title": "Honey Heirloom No.3667",
+    "handle": "wallco-3667",
+    "image_url": "/designs/img/var_3666_hue+60_1778702061826.png",
+    "filename": "var_3666_hue+60_1778702061826.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:54:23.921654+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3668,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#645640",
+    "saturation": 0.22,
+    "title": "Honey Atelier No.3668",
+    "handle": "wallco-3668",
+    "image_url": "/designs/img/var_3666_hue+120_1778702063926.png",
+    "filename": "var_3666_hue+120_1778702063926.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:54:26.12055+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3669,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#645640",
+    "saturation": 0.22,
+    "title": "Honey Salon No.3669",
+    "handle": "wallco-3669",
+    "image_url": "/designs/img/var_3666_hue+180_1778702066124.png",
+    "filename": "var_3666_hue+180_1778702066124.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:54:28.329401+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3670,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#645640",
+    "saturation": 0.22,
+    "title": "Honey Baroque No.3670",
+    "handle": "wallco-3670",
+    "image_url": "/designs/img/var_3666_hue-60_1778702068333.png",
+    "filename": "var_3666_hue-60_1778702068333.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:54:30.481959+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3671,
+    "kind": "seamless_tile",
+    "category": "damask",
+    "dominant_hex": "#645640",
+    "saturation": 0.22,
+    "title": "Honey Damask No.3671",
+    "handle": "wallco-3671",
+    "image_url": "/designs/img/var_3666_mono_1778702070485.png",
+    "filename": "var_3666_mono_1778702070485.png",
+    "generator": "wallco.ai",
+    "seed": 0,
+    "is_published": false,
+    "created_at": "2026-05-13T19:54:32.631846+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3672,
+    "kind": "seamless_tile",
+    "category": "drunk-animals",
+    "dominant_hex": "#56302e",
+    "saturation": 0.303,
+    "title": "Rose Tableau No.3672",
+    "handle": "wallco-3672",
+    "image_url": "/designs/img/1778702071313_1566141811.png",
+    "filename": "1778702071313_1566141811.png",
+    "generator": "wallco.ai",
+    "seed": 1566141811,
+    "is_published": false,
+    "created_at": "2026-05-13T19:54:39.56942+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3673,
+    "kind": "seamless_tile",
+    "category": "stoned-animals",
+    "dominant_hex": "#7f8261",
+    "saturation": 0.145,
+    "title": "Olive Daydream No.3673",
+    "handle": "wallco-3673",
+    "image_url": "/designs/img/1778702071483_394095012.png",
+    "filename": "1778702071483_394095012.png",
+    "generator": "wallco.ai",
+    "seed": 394095012,
+    "is_published": false,
+    "created_at": "2026-05-13T19:54:43.064994+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
+  },
+  {
+    "id": 3674,
+    "kind": "seamless_tile",
+    "category": "drunk-animals",
+    "dominant_hex": "#d12f73",
+    "saturation": 0.638,
+    "title": "Rose Soir\u00e9e No.3674",
+    "handle": "wallco-3674",
+    "image_url": "/designs/img/1778702072102_2060677012.png",
+    "filename": "1778702072102_2060677012.png",
+    "generator": "wallco.ai",
+    "seed": 2060677012,
+    "is_published": false,
+    "created_at": "2026-05-13T19:54:50.498739+00:00",
+    "motifs": [],
+    "user_removed": false,
+    "user_color_good": null,
+    "user_style_good": null,
+    "user_scale_good": null,
+    "user_stars": null,
+    "room_mockups": []
   }
 ]
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index b710c00..cae9b8f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,7 +14,8 @@
         "dotenv": "^17.4.2",
         "express": "^5.2.1",
         "express-rate-limit": "^8.5.1",
-        "jsonwebtoken": "^9.0.3"
+        "jsonwebtoken": "^9.0.3",
+        "multer": "^2.1.1"
       }
     },
     "../inline-editor": {
@@ -46,6 +47,12 @@
         "node": ">= 0.6"
       }
     },
+    "node_modules/append-field": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
+      "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==",
+      "license": "MIT"
+    },
     "node_modules/body-parser": {
       "version": "2.2.2",
       "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz",
@@ -76,6 +83,23 @@
       "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
       "license": "BSD-3-Clause"
     },
+    "node_modules/buffer-from": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+      "license": "MIT"
+    },
+    "node_modules/busboy": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+      "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+      "dependencies": {
+        "streamsearch": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=10.16.0"
+      }
+    },
     "node_modules/bytes": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -168,6 +192,21 @@
         "node": ">= 0.6"
       }
     },
+    "node_modules/concat-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
+      "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+      "engines": [
+        "node >= 6.0"
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^3.0.2",
+        "typedarray": "^0.0.6"
+      }
+    },
     "node_modules/content-disposition": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz",
@@ -723,6 +762,68 @@
       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "license": "MIT"
     },
+    "node_modules/multer": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/multer/-/multer-2.1.1.tgz",
+      "integrity": "sha512-mo+QTzKlx8R7E5ylSXxWzGoXoZbOsRMpyitcht8By2KHvMbf3tjwosZ/Mu/XYU6UuJ3VZnODIrak5ZrPiPyB6A==",
+      "license": "MIT",
+      "dependencies": {
+        "append-field": "^1.0.0",
+        "busboy": "^1.6.0",
+        "concat-stream": "^2.0.0",
+        "type-is": "^1.6.18"
+      },
+      "engines": {
+        "node": ">= 10.16.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/express"
+      }
+    },
+    "node_modules/multer/node_modules/media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/multer/node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/multer/node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/multer/node_modules/type-is": {
+      "version": "1.6.18",
+      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+      "license": "MIT",
+      "dependencies": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.24"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/negotiator": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
@@ -845,6 +946,20 @@
         "node": ">= 0.10"
       }
     },
+    "node_modules/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "node_modules/router": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
@@ -1031,6 +1146,23 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/streamsearch": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+      "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
     "node_modules/toidentifier": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
@@ -1054,6 +1186,12 @@
         "node": ">= 0.6"
       }
     },
+    "node_modules/typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
+      "license": "MIT"
+    },
     "node_modules/unpipe": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -1063,6 +1201,12 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+      "license": "MIT"
+    },
     "node_modules/vary": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
diff --git a/package.json b/package.json
index a73d7db..86cee58 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,7 @@
     "dotenv": "^17.4.2",
     "express": "^5.2.1",
     "express-rate-limit": "^8.5.1",
-    "jsonwebtoken": "^9.0.3"
+    "jsonwebtoken": "^9.0.3",
+    "multer": "^2.1.1"
   }
 }

← e5bfcad wallco-ai: gate Rate panel on admin, restore See-in-Room gen  ·  back to Wallco Ai  ·  settlement: hard-delete 14-design Cane Trellis chain (banana ef4e20c →