[object Object]

← back to AbramsEgo

auto-save: 2026-07-01T18:38:06 (8 files) — data/local-fleet.json data/revenue.json public/index.html public/landing.html server.js

1c592313f126222fd49047c19bab972c30d53568 · 2026-07-01 18:38:07 -0700 · Steve Abrams

Files touched

Diff

commit 1c592313f126222fd49047c19bab972c30d53568
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Jul 1 18:38:07 2026 -0700

    auto-save: 2026-07-01T18:38:06 (8 files) — data/local-fleet.json data/revenue.json public/index.html public/landing.html server.js
---
 data/affiliate-clicks.jsonl     |   1 +
 data/local-fleet.json           |   2 +-
 data/revenue.json               |   9 +-
 data/wpb-licensing-catalog.json | 777 ++++++++++++++++++++++++++++++++++++++++
 memos/licensing-channels.md     |  72 ++++
 public/index.html               |   2 +-
 public/landing.html             | 150 ++++++++
 server.js                       |  26 +-
 8 files changed, 1033 insertions(+), 6 deletions(-)

diff --git a/data/affiliate-clicks.jsonl b/data/affiliate-clicks.jsonl
new file mode 100644
index 0000000..5f8aa25
--- /dev/null
+++ b/data/affiliate-clicks.jsonl
@@ -0,0 +1 @@
+{"ts":"2026-07-02T01:37:20.097Z","slug":"digitalocean","ua":"curl/8.7.1","ref":""}
diff --git a/data/local-fleet.json b/data/local-fleet.json
index 7b15295..f281d7d 100644
--- a/data/local-fleet.json
+++ b/data/local-fleet.json
@@ -1 +1 @@
-{"fetchedAt":"2026-07-02T01:07:57.246Z","procs":[{"name":"api-token-dashboard","status":"online","cpu":0,"memMB":48,"restarts":null,"uptimeMs":7835000,"startedAt":"2026-07-01T22:57:22.246Z"},{"name":"abramsego","status":"stopped","cpu":null,"memMB":null,"restarts":null,"uptimeMs":null,"startedAt":null}]}
\ No newline at end of file
+{"fetchedAt":"2026-07-02T01:38:06.721Z","procs":[{"name":"api-token-dashboard","status":"online","cpu":0,"memMB":49,"restarts":null,"uptimeMs":9644000,"startedAt":"2026-07-01T22:57:22.721Z"},{"name":"abramsego","status":"stopped","cpu":null,"memMB":null,"restarts":null,"uptimeMs":null,"startedAt":null}]}
\ No newline at end of file
diff --git a/data/revenue.json b/data/revenue.json
index 0eb7d86..7540e45 100644
--- a/data/revenue.json
+++ b/data/revenue.json
@@ -1,5 +1,5 @@
 {
-  "updatedAt": "2026-07-01T17:13:33.202Z",
+  "updatedAt": "2026-07-02T01:26:08.138Z",
   "engines": [
     {
       "key": "sell_product",
@@ -28,6 +28,13 @@
       "status": "gated",
       "amount": 0,
       "note": "ad network + public site — awaiting Steve go-live"
+    },
+    {
+      "key": "licensing",
+      "label": "License WPB designs (B2B/marketplaces)",
+      "status": "gated",
+      "amount": 0,
+      "note": "catalog built — awaiting Steve channel signups"
     }
   ]
 }
\ No newline at end of file
diff --git a/data/wpb-licensing-catalog.json b/data/wpb-licensing-catalog.json
new file mode 100644
index 0000000..60cea5f
--- /dev/null
+++ b/data/wpb-licensing-catalog.json
@@ -0,0 +1,777 @@
+{
+  "generatedAt": "2026-07-02T01:25:00.461Z",
+  "source": "https://wallpapersback.com/api/designs (read-only GET; LIVE published designs only)",
+  "eligibility": "Only designs LIVE on wallpapersback.com (settlement-passed + published, user_removed=false) are eligible. Unpublished/removed designs are never included.",
+  "pricingNote": "ALL PRICING IS DRAFT — indicative only, nothing is listed or offered for sale. Steve approves channels + pricing before any listing or outreach.",
+  "count": 24,
+  "designs": [
+    {
+      "id": 57710,
+      "title": "Greige Carouse No.57710",
+      "category": "drunk-animals",
+      "kind": "seamless_tile",
+      "dominantHex": null,
+      "createdAt": "2026-06-09T19:58:01.387737+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/57710",
+      "wpbUrl": "https://wallpapersback.com/design/57710",
+      "styleLine": "Revelrous animal characters mid-carouse on a soft greige ground — conversation-piece whimsy with a neutral palette that still behaves in a real room.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 56250,
+      "title": "Chamois Atelier No.56250",
+      "category": "muybridge-plate · saddle-mocha",
+      "kind": "seamless_tile",
+      "dominantHex": "#fdf9e7",
+      "createdAt": "2026-06-02T15:21:03.69746+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/56250",
+      "wpbUrl": "https://wallpapersback.com/design/56250",
+      "styleLine": "Muybridge-style sequential motion plates in saddle-mocha on chamois — a scholarly, gallery-wall rhythm for studies, bars and menswear-leaning spaces.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 40178,
+      "title": "Apricot Folio No.40178",
+      "category": "chinoiserie · champagne-linen",
+      "kind": "seamless_tile",
+      "dominantHex": "#D9C7B1",
+      "createdAt": "2026-05-25T00:39:15.088479+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/40178",
+      "wpbUrl": "https://wallpapersback.com/design/40178",
+      "styleLine": "Hand-painted-look chinoiserie branches drifting across a champagne-linen ground — classic East-meets-West elegance in warm apricot neutrals.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 57669,
+      "title": "Chamois Reverie No.57669",
+      "category": "monterey-mural",
+      "kind": "mural_panel",
+      "dominantHex": "#c9b99c",
+      "createdAt": "2026-06-04T07:06:59.658824+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/57669",
+      "wpbUrl": "https://wallpapersback.com/design/57669",
+      "styleLine": "Full-wall Monterey coastal reverie in sun-washed chamois — a panel mural that reads as fine-art scenery rather than repeat wallpaper.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 249,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 795,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 4500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 40172,
+      "title": "Oxblood Origin No.40172",
+      "category": "stripe · oxblood",
+      "kind": "seamless_tile",
+      "dominantHex": "#802424",
+      "createdAt": "2026-05-25T00:36:21.550418+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/40172",
+      "wpbUrl": "https://wallpapersback.com/design/40172",
+      "styleLine": "A disciplined heritage stripe in deep oxblood — tailored, masculine, and instantly at home in libraries, halls and hospitality corridors.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 54111,
+      "title": "Chamois Studio No.54111",
+      "category": "designer-zoo-calm",
+      "kind": "seamless_tile",
+      "dominantHex": "#e3ded4",
+      "createdAt": "2026-05-28T17:38:18.705988+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/54111",
+      "wpbUrl": "https://wallpapersback.com/design/54111",
+      "styleLine": "A serene designer-zoo menagerie in muted chamois — calm, illustrative animals with the restraint of a high-end nursery-to-study crossover.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 7448,
+      "title": "Foxes Slumber in Bottle Green",
+      "category": "stoned-animals",
+      "kind": "seamless_tile",
+      "dominantHex": "#3e603c",
+      "createdAt": "2026-05-14T21:46:02.99694+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/7448",
+      "wpbUrl": "https://wallpapersback.com/design/7448",
+      "styleLine": "Heavy-lidded foxes slumbering in bottle green — moody storybook charm with saturated, jewel-box color.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 10024,
+      "title": "Greige Reverie No.10024",
+      "category": "inspired",
+      "kind": "seamless_tile",
+      "dominantHex": "#938f85",
+      "createdAt": "2026-05-20T07:16:31.92345+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/10024",
+      "wpbUrl": "https://wallpapersback.com/design/10024",
+      "styleLine": "A heritage-inspired abstract in layered greige — quiet, textural pattern that flatters furniture instead of fighting it.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 57678,
+      "title": "Terracotta Atelier No.57678",
+      "category": "damask",
+      "kind": "seamless_tile",
+      "dominantHex": "#423730",
+      "createdAt": "2026-06-04T16:04:07.982096+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/57678",
+      "wpbUrl": "https://wallpapersback.com/design/57678",
+      "styleLine": "Traditional damask reworked in terracotta and umber — old-world formality with an earthy, contemporary temperature.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 57718,
+      "title": "Chamois Folio No.57718",
+      "category": "cactus",
+      "kind": "seamless_tile",
+      "dominantHex": "#f1e5c9",
+      "createdAt": "2026-06-09T20:18:38.448608+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/57718",
+      "wpbUrl": "https://wallpapersback.com/design/57718",
+      "styleLine": "Desert cactus silhouettes on warm chamois — southwestern character kept polite enough for coastal and transitional rooms.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 38848,
+      "title": "Greige Folio No.38848",
+      "category": "cactus-11ft-mural",
+      "kind": "mural",
+      "dominantHex": "#7d7972",
+      "createdAt": "2026-05-21T21:03:03.164563+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/38848",
+      "wpbUrl": "https://wallpapersback.com/design/38848",
+      "styleLine": "An 11-foot floor-to-ceiling cactus mural in soft greige — sculptural desert scale for feature walls and lobbies.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 249,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 795,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 4500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 138,
+      "title": "Apricot Garden No.138",
+      "category": "floral",
+      "kind": "seamless_tile",
+      "dominantHex": "#e5bfac",
+      "createdAt": "2026-05-12T04:45:45.035538+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/138",
+      "wpbUrl": "https://wallpapersback.com/design/138",
+      "styleLine": "A soft apricot garden floral — romantic, painterly blooms with vintage-print warmth.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 40138,
+      "title": "Chamois Folio No.40138",
+      "category": "designer-scenic · chamois",
+      "kind": "seamless_tile",
+      "dominantHex": "#F5F1E4",
+      "createdAt": "2026-05-25T00:17:04.77785+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/40138",
+      "wpbUrl": "https://wallpapersback.com/design/40138",
+      "styleLine": "A scenic panoramic toile in chamois — pastoral storytelling in a single sweeping colorway.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 57717,
+      "title": "Prussian Origin No.57717",
+      "category": "geometric-block-leaves",
+      "kind": "seamless_tile",
+      "dominantHex": "#021233",
+      "createdAt": "2026-06-09T20:16:56.941806+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/57717",
+      "wpbUrl": "https://wallpapersback.com/design/57717",
+      "styleLine": "Block-printed leaf geometry on deep Prussian blue — graphic, wood-block texture with serious nighttime drama.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 57705,
+      "title": "Greige Lattice No.57705",
+      "category": "geometric",
+      "kind": "seamless_tile",
+      "dominantHex": null,
+      "createdAt": "2026-06-09T19:35:56.28038+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/57705",
+      "wpbUrl": "https://wallpapersback.com/design/57705",
+      "styleLine": "A greige lattice geometric — architectural trellis order that layers under art and millwork effortlessly.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 54049,
+      "title": "Celadon Reverie No.54049",
+      "category": "drunk-monkeys-v2",
+      "kind": "seamless_tile",
+      "dominantHex": "#8bc17d",
+      "createdAt": "2026-05-28T13:32:04.189382+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/54049",
+      "wpbUrl": "https://wallpapersback.com/design/54049",
+      "styleLine": "Playful monkeys tumbling across a celadon ground — chinoiserie mischief in a fresh botanical green.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 57688,
+      "title": "Sloths Saunter in Greige",
+      "category": "drunk-animals",
+      "kind": "seamless_tile",
+      "dominantHex": null,
+      "createdAt": "2026-06-09T19:16:22.518518+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/57688",
+      "wpbUrl": "https://wallpapersback.com/design/57688",
+      "styleLine": "Sloths sauntering through a greige canopy — slow-living humor rendered in grown-up neutrals.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 56249,
+      "title": "Chamois Reverie No.56249",
+      "category": "muybridge-plate · saddle-mocha",
+      "kind": "seamless_tile",
+      "dominantHex": "#fdf9e7",
+      "createdAt": "2026-06-02T15:21:01.66356+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/56249",
+      "wpbUrl": "https://wallpapersback.com/design/56249",
+      "styleLine": "A second Muybridge motion-study plate in chamois reverie — sepia sequences with archival, printed-page character.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 40177,
+      "title": "Chamois Origin No.40177",
+      "category": "chinoiserie · smoke-ash",
+      "kind": "seamless_tile",
+      "dominantHex": "#DED7C1",
+      "createdAt": "2026-05-25T00:38:48.585999+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/40177",
+      "wpbUrl": "https://wallpapersback.com/design/40177",
+      "styleLine": "Chinoiserie branchwork in smoke-ash over warm chamois — softened contrast for bedrooms and quiet dining rooms.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 57668,
+      "title": "Chamois Folio No.57668",
+      "category": "monterey-mural",
+      "kind": "mural_panel",
+      "dominantHex": "#f3edde",
+      "createdAt": "2026-06-04T07:04:38.110538+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/57668",
+      "wpbUrl": "https://wallpapersback.com/design/57668",
+      "styleLine": "A companion Monterey mural panel in pale chamois — airy coastal scenery for multi-panel installations.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 249,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 795,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 4500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 40171,
+      "title": "Honey Studio No.40171",
+      "category": "stripe · antique-brass",
+      "kind": "seamless_tile",
+      "dominantHex": "#B49555",
+      "createdAt": "2026-05-25T00:35:57.822834+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/40171",
+      "wpbUrl": "https://wallpapersback.com/design/40171",
+      "styleLine": "A honeyed stripe in antique brass — warm metallic-leaning bands with old-hotel polish.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 54109,
+      "title": "Chamois Reverie No.54109",
+      "category": "designer-zoo-calm",
+      "kind": "seamless_tile",
+      "dominantHex": "#c3bfaa",
+      "createdAt": "2026-05-28T17:29:36.439473+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/54109",
+      "wpbUrl": "https://wallpapersback.com/design/54109",
+      "styleLine": "Designer-zoo calm in deeper chamois — the menagerie line in a moodier, tea-stained neutral.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 7445,
+      "title": "Raccoons Drift in Claret",
+      "category": "stoned-animals",
+      "kind": "seamless_tile",
+      "dominantHex": "#76443a",
+      "createdAt": "2026-05-14T21:44:36.210008+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/7445",
+      "wpbUrl": "https://wallpapersback.com/design/7445",
+      "styleLine": "Raccoons drifting in claret — rich wine-dark ground with sly, characterful wildlife.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    },
+    {
+      "id": 10006,
+      "title": "Greige Studio No.10006",
+      "category": "inspired",
+      "kind": "seamless_tile",
+      "dominantHex": "#697072",
+      "createdAt": "2026-05-20T07:15:16.412401+00:00",
+      "img": "https://wallpapersback.com/designs/img/by-id/10006",
+      "wpbUrl": "https://wallpapersback.com/design/10006",
+      "styleLine": "An inspired abstract study in cool greige — smoky, mineral tones for modern minimal interiors.",
+      "licenseTiers": [
+        {
+          "tier": "digital_single_use",
+          "label": "Digital single-use license",
+          "priceUsd": 149,
+          "terms": "one product / one campaign, non-exclusive, no resale of the file"
+        },
+        {
+          "tier": "commercial_print",
+          "label": "Commercial print license",
+          "priceUsd": 495,
+          "terms": "print-on-demand & physical goods, non-exclusive, attribution optional"
+        },
+        {
+          "tier": "exclusive",
+          "label": "Exclusive license",
+          "priceUsd": 2500,
+          "terms": "category-exclusive buyout, design retired from other channels"
+        }
+      ],
+      "pricingStatus": "DRAFT"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/memos/licensing-channels.md b/memos/licensing-channels.md
new file mode 100644
index 0000000..7142af7
--- /dev/null
+++ b/memos/licensing-channels.md
@@ -0,0 +1,72 @@
+# Engine 5 — License Wallpaper's Back designs (channel strategy, ALL GATED)
+
+**Created:** 2026-07-01 · **Owner:** vp-abramsego (engine) / vp-special-projects (WPB catalog) · **Status:** DRAFT — every channel below is a Steve-gated switch. Nothing is signed up, listed, or contacted.
+
+> Feeds task 41's consolidated go-live approval memo. If that memo exists at
+> `~/.claude/yolo-queue/pending-approval/abramsego-golive-260701.md`, append this as its
+> **"5. licensing"** switch section (autonomous writes to that path are harness-blocked,
+> so it lives in-repo until Steve or task 41 moves it).
+
+## What's built (local, non-gated)
+- `data/wpb-licensing-catalog.json` — 24 designs cached from the **read-only** public feed
+  `https://wallpapersback.com/api/designs`. Selection round-robins across all 16 live style
+  families (chinoiserie, muybridge-plate, drunk-animals, designer-zoo-calm, monterey-mural,
+  stripe, damask, cactus, floral, scenic, geometrics, …) for maximum variety.
+  **Eligibility hard rail honored:** only designs LIVE on wallpapersback.com
+  (`is_published: true`, `user_removed: false` — i.e. already settlement-passed + published).
+  No WPB DB writes, no WPB deploys, images stay WPB-hosted.
+- LLM licensing copy per design: 1-line style description + 3 DRAFT tiers
+  (digital single-use $149 / commercial print $495 / exclusive $2,500; murals $249/$795/$4,500).
+- Landing section "License our original designs" on `/landing` (still behind Basic Auth,
+  `PUBLIC_LANDING=0`): sortable (Newest/Color/Style/SKU/Title) + density slider, both
+  localStorage-persisted per Steve's grid rules; inquiry CTA → `POST /api/waitlist`
+  with `source:"licensing"` + tier(+design id).
+- Engine pill 5 `licensing` in the revenue registry, gated; flips live only when real
+  income lands via `/api/revenue/record`.
+
+## Ranked channels (each = one Steve switch)
+
+### 1. Print-on-demand marketplaces (fastest to first dollar, lowest lift)
+| Channel | What it requires | Revenue mechanics |
+|---|---|---|
+| **Spoonflower** | Artist account, upload seamless tiles (already print-clean at 150 DPI from the WPB pipeline), set designs "for sale" | ~10–15% commission on wallpaper/fabric/home goods sold; passive after upload |
+| **Society6 / Redbubble** | Artist account, upload square art files | ~10% base margin (S6), artist-set markups (RB); wallpaper + adjacent products (pillows, art prints) |
+| **Creative Market / Adobe Stock (patterns)** | Shop approval, package tiles as digital pattern files | 50–70% of each digital sale; sells the FILE (digital single-use tier) — decide first whether digital-file sales are acceptable vs. print-only |
+
+**Risk note:** marketplace uploads grant those platforms broad display/print licenses and price
+anchors (~$5–20 digital). If exclusivity deals (tier 3) matter, keep the exclusive-eligible
+subset OFF marketplaces — the two models conflict per-design.
+
+### 2. Etsy shop — digital + fulfilled-by-WPB (own the customer)
+- Requires: Etsy seller account (~$0.20/listing), listing fees + ~6.5% transaction fee.
+- Sell printed-roll orders fulfilled through the existing WPB print pipeline, and/or digital
+  license downloads. Higher margin than POD marketplaces; more ops (customer service).
+- Natural A/B: list the same 24-design licensing catalog and see which families pull.
+
+### 3. B2B licensing outreach (highest $/deal, slowest)
+- Targets: boutique hotel/hospitality procurement, interior-design studios, wallpaper
+  manufacturers hunting fresh collections (the inverse of DW's vendor relationships — Steve
+  already knows which houses buy outside art), stationery/textile brands.
+- Requires: a one-page licensing sheet (the catalog JSON + landing section IS the pitch page),
+  outreach emails — **send-to-list is hard-gated**, drafts only until Steve approves.
+- Mechanics: flat license fees per the tier sheet, or royalty (5–10% of wholesale) for
+  collections. Exclusives ($2.5k–$4.5k draft) retire the design from other channels.
+
+### 4. Patternbank / WGSN-adjacent design marketplaces (trade-facing)
+- Requires: portfolio application; they curate.
+- Mechanics: site sells the design (often exclusive transfer) at trade prices ($150–$500+),
+  takes ~30–50%. Good clearing house for designs that don't move on consumer channels.
+
+## Suggested first move (when Steve flips a switch)
+Spoonflower first: zero listing cost, the WPB pipeline already outputs seamless
+150-DPI-clean tiles, and it validates per-family demand before any B2B outreach. Etsy second.
+B2B outreach only once there's a sales screenshot to point at.
+
+## The switch (what Steve approves)
+- [ ] APPROVE channel(s): Spoonflower / S6-RB / Creative Market / Etsy / B2B outreach / Patternbank
+- [ ] APPROVE or REVISE draft tier pricing (marked DRAFT everywhere until then)
+- [ ] Decide: digital-file sales allowed, or print-only?
+- [ ] Which designs (if any) reserved exclusive-only (kept off marketplaces)?
+
+Until all four are answered: catalog + landing stay local-only behind auth; no accounts, no
+listings, no outreach, no WPB writes.
diff --git a/public/index.html b/public/index.html
index 15a0d72..04b5ca9 100644
--- a/public/index.html
+++ b/public/index.html
@@ -105,7 +105,7 @@
     <h2>💰 Self-Funding P&amp;L <span class="muted" id="pnlwin">· today</span></h2>
     <div class="pnlgrid">
       <div class="stat"><div class="k">Cost today</div><div class="v" id="pnl-cost">—</div><div class="muted" id="pnl-cost-sub"></div></div>
-      <div class="stat"><div class="k">Revenue today</div><div class="v gold" id="pnl-rev">—</div><div class="muted">4 engines · gated</div></div>
+      <div class="stat"><div class="k">Revenue today</div><div class="v gold" id="pnl-rev">—</div><div class="muted">5 engines · gated</div></div>
       <div class="stat"><div class="k">Net</div><div class="v" id="pnl-net">—</div><div class="muted">revenue − cost</div></div>
       <div class="stat"><div class="k">Self-funding</div><div class="v" id="pnl-pct">—</div><div class="muted">of run cost covered</div></div>
     </div>
diff --git a/public/landing.html b/public/landing.html
index 5965932..fee8a1b 100644
--- a/public/landing.html
+++ b/public/landing.html
@@ -86,6 +86,25 @@
   .wl input:focus{outline:none;border-color:var(--accent)}
   .wl .msg{margin-top:12px;font-size:12px;min-height:16px}
   .wl .msg.ok{color:var(--good)}.wl .msg.err{color:var(--bad)}
+  /* — licensing grid (engine 5) — sort + density per Steve's grid rules — */
+  .lic-controls{display:flex;gap:22px;align-items:center;margin:0 0 18px;font-size:12px;color:var(--dim)}
+  .lic-controls label{display:flex;gap:8px;align-items:center}
+  .lic-controls select{background:#0c1420;border:1px solid var(--line);color:var(--ink);
+    border-radius:8px;padding:7px 10px;font-family:var(--mono);font-size:12px}
+  .lic-controls input[type=range]{accent-color:var(--accent);width:130px}
+  .lic-grid{display:grid;grid-template-columns:repeat(var(--lic-cols,4),1fr);gap:14px}
+  @media(max-width:760px){.lic-grid{grid-template-columns:repeat(2,1fr)}}
+  .lic-card{background:linear-gradient(180deg,var(--panel),var(--panel2));border:1px solid var(--line);
+    border-radius:12px;overflow:hidden;display:flex;flex-direction:column}
+  .lic-card img{width:100%;aspect-ratio:1/1;object-fit:cover;display:block;background:#0c1420}
+  .lic-card .b{padding:12px 14px;display:flex;flex-direction:column;gap:6px;flex:1}
+  .lic-card .t{font-size:13px;font-weight:700}
+  .lic-card .d{font-size:11px;color:var(--dim);flex:1}
+  .lic-card .tiers-line{font-size:10px;color:var(--gold)}
+  .lic-card .row{display:flex;gap:8px;align-items:center;justify-content:space-between;margin-top:4px}
+  .lic-card .row a{font-size:11px}
+  #lic-form select{background:#0c1420;border:1px solid var(--line);color:var(--ink);
+    border-radius:9px;padding:12px 10px;font-family:var(--mono);font-size:13px}
   footer{max-width:1120px;margin:0 auto;padding:26px 20px;color:var(--dim);font-size:11px;
     display:flex;gap:14px;flex-wrap:wrap;align-items:center}
   .tag{font-size:10px;color:var(--warn);border:1px solid #ffb45444;background:#ffb4540f;
@@ -99,6 +118,7 @@
   <nav class="nav">
     <a href="#features">Features</a>
     <a href="#pricing">Pricing</a>
+    <a href="#licensing">Licensing</a>
     <a href="/index.html">Live demo →</a>
     <a href="/api/report/sample">Sample report</a>
     <a class="btn ghost" href="#waitlist">Join waitlist</a>
@@ -226,6 +246,49 @@
     <p class="pricing-note" id="pricing-note">Prices indicative · billing not yet live — join the waitlist and you'll be first to know when checkout opens.</p>
   </section>
 
+  <!-- LICENSING (engine 5) — original Wallpaper's Back designs available to
+       license. Grid is fed by /api/licensing/catalog (a read-only cache of
+       designs LIVE on wallpapersback.com); prices are DRAFT copy only and the
+       inquiry CTA just posts to the waitlist — no sale happens here. -->
+  <section id="licensing">
+    <div class="kicker">Original designs · licensing</div>
+    <h2>License our original designs</h2>
+    <p class="sub">Every pattern below is an original, live on
+      <a href="https://wallpapersback.com" target="_blank" rel="noopener noreferrer">Wallpaper's Back</a> —
+      our AI-assisted, human-curated wallpaper studio. License them for your own products,
+      print runs, or campaigns. <span class="tag">Pricing DRAFT — inquiries only</span></p>
+    <div class="lic-controls">
+      <label>Sort
+        <select id="lic-sort">
+          <option value="newest">Newest</option>
+          <option value="color">Color</option>
+          <option value="style">Style</option>
+          <option value="sku">SKU A→Z</option>
+          <option value="title">Title A→Z</option>
+        </select>
+      </label>
+      <label>Density
+        <input id="lic-density" type="range" min="2" max="6" step="1" value="4" />
+      </label>
+    </div>
+    <div class="lic-grid" id="lic-grid"></div>
+    <div class="wl" id="lic-inquiry" style="margin-top:30px">
+      <div class="kicker" style="margin-bottom:8px">License inquiry</div>
+      <h2 style="margin-bottom:6px;font-size:19px">Ask about a design</h2>
+      <p class="sub" style="margin:0" id="lic-context">Pick a design above, or send a general licensing inquiry.</p>
+      <form id="lic-form">
+        <input id="lic-email" type="email" required autocomplete="email" placeholder="you@brand.com" />
+        <select id="lic-tier">
+          <option value="digital_single_use">Digital single-use</option>
+          <option value="commercial_print" selected>Commercial print</option>
+          <option value="exclusive">Exclusive</option>
+        </select>
+        <button class="btn gold" type="submit">Send inquiry</button>
+      </form>
+      <div class="msg" id="lic-msg"></div>
+    </div>
+  </section>
+
   <!-- WAITLIST -->
   <section id="waitlist">
     <div class="wl">
@@ -361,6 +424,93 @@ const usd = (n)=> n==null? '—' : '$'+Number(n).toFixed(n<1?4:2);
   }catch(e){ /* house ad stays */ }
 })();
 
+// Licensing grid (engine 5) ← GET /api/licensing/catalog. Sort + density
+// controls persist in localStorage (Steve's hard rule for grids >12 items).
+// Inquiry posts to /api/waitlist with source:"licensing" — interest capture
+// only; actual listings/outreach stay Steve-gated.
+(async function licensing(){
+  const sec=$('licensing'), grid=$('lic-grid');
+  let designs=[];
+  try{
+    const j = await (await fetch('/api/licensing/catalog')).json();
+    designs = (j && j.designs) || [];
+  }catch(e){}
+  if(!designs.length){ sec.hidden = true; return; }
+
+  // color buckets for the Color sort: white → warm → green → blue → purple → dark
+  function colorBucket(hex){
+    if(!hex) return 9;
+    const n=parseInt(hex.replace('#',''),16); if(isNaN(n)) return 9;
+    const r=(n>>16&255)/255, g=(n>>8&255)/255, b=(n&255)/255;
+    const mx=Math.max(r,g,b), mn=Math.min(r,g,b), l=(mx+mn)/2, d=mx-mn;
+    if(l>0.86) return 0;                       // white/cream
+    if(l<0.16) return 8;                       // near-black
+    if(d<0.08) return 7;                       // gray/greige
+    let h=0;
+    if(mx===r) h=((g-b)/d)%6; else if(mx===g) h=(b-r)/d+2; else h=(r-g)/d+4;
+    h=(h*60+360)%360;
+    if(h<70||h>=330) return 1;                 // warm (red/orange/yellow)
+    if(h<170) return 2;                        // green
+    if(h<260) return 3;                        // blue
+    return 4;                                  // purple
+  }
+  const sorters={
+    newest:(a,b)=>new Date(b.createdAt)-new Date(a.createdAt),
+    color:(a,b)=>colorBucket(a.dominantHex)-colorBucket(b.dominantHex)||a.id-b.id,
+    style:(a,b)=>(a.category||'').localeCompare(b.category||'')||a.id-b.id,
+    sku:(a,b)=>String(a.id).localeCompare(String(b.id),undefined,{numeric:true}),
+    title:(a,b)=>(a.title||'').localeCompare(b.title||''),
+  };
+  const sortSel=$('lic-sort'), dens=$('lic-density');
+  sortSel.value = localStorage.getItem('lic-sort') || 'newest';
+  dens.value = localStorage.getItem('lic-cols') || '4';
+  function usd0(n){ return '$'+Number(n).toLocaleString(); }
+  let picked=null; // {id,title} from a card's Inquire button
+  function render(){
+    localStorage.setItem('lic-sort', sortSel.value);
+    localStorage.setItem('lic-cols', dens.value);
+    grid.style.setProperty('--lic-cols', dens.value);
+    const list=[...designs].sort(sorters[sortSel.value]||sorters.newest);
+    grid.innerHTML=list.map(d=>{
+      const t=d.licenseTiers||[];
+      const line=t.map(x=>x.label.replace(' license','')+' '+usd0(x.priceUsd)).join(' · ');
+      return `<div class="lic-card">
+        <a href="${d.wpbUrl}" target="_blank" rel="noopener noreferrer"><img loading="lazy" src="${d.img}" alt="${d.title}"></a>
+        <div class="b">
+          <div class="t">${d.title}</div>
+          <div class="d">${d.styleLine}</div>
+          <div class="tiers-line">DRAFT · ${line}</div>
+          <div class="row">
+            <a href="${d.wpbUrl}" target="_blank" rel="noopener noreferrer">View on WPB →</a>
+            <a href="#lic-inquiry" data-lic-id="${d.id}" data-lic-title="${d.title}">Inquire</a>
+          </div>
+        </div>
+      </div>`;
+    }).join('');
+    grid.querySelectorAll('[data-lic-id]').forEach(a=>a.addEventListener('click',()=>{
+      picked={id:a.dataset.licId,title:a.dataset.licTitle};
+      $('lic-context').textContent='Re: '+picked.title+' (#'+picked.id+')';
+    }));
+  }
+  sortSel.addEventListener('change',render);
+  dens.addEventListener('input',render);
+  render();
+
+  $('lic-form').addEventListener('submit', async (e)=>{
+    e.preventDefault();
+    const email=$('lic-email').value.trim(), msg=$('lic-msg');
+    const tier=($('lic-tier').value+(picked?':'+picked.id:'')).slice(0,40);
+    msg.className='msg'; msg.textContent='…sending';
+    try{
+      const r = await fetch('/api/waitlist',{method:'POST',headers:{'Content-Type':'application/json'},
+        body:JSON.stringify({email, tier, source:'licensing'})});
+      const j = await r.json();
+      if(r.ok && j.ok){ msg.className='msg ok'; msg.textContent='Inquiry received — we’ll reach out with licensing details. 🎉'; $('lic-form').reset(); }
+      else { msg.className='msg err'; msg.textContent=j.error||'Could not send — try again.'; }
+    }catch(err){ msg.className='msg err'; msg.textContent='Network error — try again.'; }
+  });
+})();
+
 // Waitlist capture → POST /api/waitlist
 $('wl-form').addEventListener('submit', async (e)=>{
   e.preventDefault();
diff --git a/server.js b/server.js
index 2170c87..9c2700c 100644
--- a/server.js
+++ b/server.js
@@ -3,7 +3,7 @@
  *
  * A single-page dashboard over Steve's real fleet (OpenClaw / @androoagi
  * "agent environment" style), plus a self-funding P&L: it accounts for its own
- * token + energy COST and tracks REVENUE from four (gated) engines so it can
+ * token + energy COST and tracks REVENUE from five (gated) engines so it can
  * pay for itself. "Claude needs to be paid for."
  *
  * Design: a 30s background buildSnapshot() gathers every (slow) source once and
@@ -700,7 +700,7 @@ function collectCost() {
   return out;
 }
 
-// --- REVENUE side of the P&L (four gated engines) --------------------------
+// --- REVENUE side of the P&L (five gated engines) --------------------------
 function defaultRevenue() {
   return {
     updatedAt: new Date().toISOString(),
@@ -709,6 +709,7 @@ function defaultRevenue() {
       { key: 'affiliate', label: 'Affiliate / commission', status: 'gated', amount: 0, note: 'DW referral + directory lead-gen — awaiting affiliate signup + placement' },
       { key: 'billable_work', label: 'Agent does billable work', status: 'gated', amount: 0, note: 'arbitrage / paid reports / metered API — awaiting billing rail' },
       { key: 'ads', label: 'Ads on a public property', status: 'gated', amount: 0, note: 'ad network + public site — awaiting Steve go-live' },
+      { key: 'licensing', label: 'License WPB designs (B2B/marketplaces)', status: 'gated', amount: 0, note: 'catalog built — awaiting Steve channel signups' },
     ],
   };
 }
@@ -746,6 +747,10 @@ function collectRevenue() {
   let base;
   try { base = JSON.parse(fs.readFileSync(REVENUE_FILE, 'utf8')); }
   catch (e) { base = defaultRevenue(); try { fs.writeFileSync(REVENUE_FILE, JSON.stringify(base, null, 2)); } catch (e2) {} }
+  // a revenue.json written before a new engine existed would otherwise hide it
+  for (const def of defaultRevenue().engines) {
+    if (!(base.engines || []).some((e) => e && e.key === def.key)) base.engines = [...(base.engines || []), def];
+  }
   const led = readRevenueLedger();
   // fold real income into each engine; an engine with income is de-facto "live"
   base.engines = (base.engines || []).map((e) => ({ ...e, amount: round(led.byEngine[e.key] || 0, 2), status: (led.byEngine[e.key] || 0) > 0 ? 'live' : e.status }));
@@ -908,6 +913,9 @@ function isPublicLandingPath(req) {
     // ads surface: the ads.txt stub (crawled by ad networks, must be public)
     // and the ad-slot config (pub id only — pub ids ship in every ad snippet).
     if (req.path === '/ads.txt' || req.path === '/api/ads/config') return true;
+    // licensing surface (engine 5): cached catalog of LIVE wallpapersback.com
+    // designs + DRAFT tier copy — no money mechanism, images stay WPB-hosted.
+    if (req.path === '/api/licensing/catalog') return true;
     // affiliate surface: tracked redirects + the non-draft strip data (labels
     // and slugs only — the registry's urls/notes stay behind auth).
     return req.path.startsWith('/go/') || req.path === '/api/affiliates';
@@ -936,7 +944,7 @@ for (const key of ['system', 'localFleet', 'kamatera', 'canaries', 'crons', 'act
 // above). This is the ONLY money-touching write — it just logs income that
 // actually landed; it does NOT charge anyone. Turning an engine's *mechanism*
 // on (Stripe, ads, affiliate) stays gated to Steve.
-const REVENUE_ENGINES = ['sell_product', 'affiliate', 'billable_work', 'ads'];
+const REVENUE_ENGINES = ['sell_product', 'affiliate', 'billable_work', 'ads', 'licensing'];
 app.post('/api/revenue/record', async (req, res) => {
   const b = req.body || {};
   if (!REVENUE_ENGINES.includes(b.engine)) return res.status(400).json({ error: `engine must be one of ${REVENUE_ENGINES.join(', ')}` });
@@ -1308,6 +1316,18 @@ app.get('/api/ads/config', (req, res) => {
   res.json({ enabled: !!AD_NETWORK_PUB_ID, pubId: AD_NETWORK_PUB_ID || null });
 });
 
+// --- Licensing engine (engine 5): WPB design licensing catalog --------------
+// Read-only cache of designs that are LIVE on wallpapersback.com (already
+// settlement-passed + published; unpublished/user_removed are never eligible).
+// Pricing in the file is DRAFT copy only — no listing, sale, or outreach
+// happens here; external channel signups are Steve's gated switch (see
+// memos/licensing-channels.md). Refresh = re-run the read-only feed pull.
+const LICENSING_CATALOG_FILE = path.join(DATA_DIR, 'wpb-licensing-catalog.json');
+app.get('/api/licensing/catalog', (req, res) => {
+  try { res.json(JSON.parse(fs.readFileSync(LICENSING_CATALOG_FILE, 'utf8'))); }
+  catch (e) { res.json({ count: 0, designs: [], note: 'catalog not built yet' }); }
+});
+
 // Waitlist email capture from the landing page → appends to data/waitlist.jsonl.
 // This is NOT a money mechanism — it only collects interest; no Stripe, no
 // charge, no send. One row per signup; basic email validation + dedupe-friendly.

← e664926 feat(ads): house-ad slot + ads.txt stub  ·  back to AbramsEgo  ·  style: apply design-research top items (androoagi/norma patt 63d3686 →