From a152e77fed906743b9b46421cc9fb32d53acbcd6 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Tue, 24 Feb 2026 21:38:56 -0800 Subject: [PATCH] feat: dark mode, community revenue messaging, design catalog update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Switch to dark theme by default (globals.css + default space.yaml) - Rewrite landing page copy to emphasize community revenue streams - "Revenue for Your Community" hero - "Merch That Funds Your Mission" section with revenue breakdown - Revenue routing to rFunds/DAOs/treasuries - Step 1: "Upload or Create a Design" - Step 3: "Ship Locally — Worldwide" (local fulfillment, less carbon) - Features: Revenue Streams, Local Fulfillment replace old cards - All designs now show on default space (space: all) - DefectFi design gets hoodie product variant - Fix light-mode hardcoded colors for dark compatibility (red-50, green-600) Co-Authored-By: Claude Opus 4.6 --- .../defectfi-dont-abuse-holes/metadata.yaml | 15 +- designs/shirts/fungi-logo-tee/metadata.yaml | 11 +- designs/stickers/fungi-spore/metadata.yaml | 6 +- frontend/app/design/page.tsx | 6 +- frontend/app/globals.css | 42 +--- frontend/app/page.tsx | 217 +++++++++++++----- frontend/app/upload/page.tsx | 6 +- spaces/_default/space.yaml | 36 +-- 8 files changed, 219 insertions(+), 120 deletions(-) diff --git a/designs/shirts/defectfi-dont-abuse-holes/metadata.yaml b/designs/shirts/defectfi-dont-abuse-holes/metadata.yaml index 8bd9d49..42bda84 100644 --- a/designs/shirts/defectfi-dont-abuse-holes/metadata.yaml +++ b/designs/shirts/defectfi-dont-abuse-holes/metadata.yaml @@ -1,8 +1,8 @@ name: "Don't Abuse the Holes!" slug: defectfi-dont-abuse-holes -description: "Defensive bug hunting meets punk resistance. Distressed typography with beetles crawling through the design — because the best defense is finding the vulnerabilities before they find you. #DefectFi" -tags: [defectfi, whistleblower, bug-bounty, punk, resistance, tee] -space: default +description: "Defensive bug hunting meets punk resistance. Distressed typography with beetles crawling through the design — because the best defense is finding the vulnerabilities before they find you. Revenue from this design supports the DefectFi community. #DefectFi" +tags: [defectfi, whistleblower, bug-bounty, punk, resistance, tee, community] +space: all category: shirts created: "2026-02-24" author: defectfi @@ -11,8 +11,8 @@ source: file: dont-abuse-the-holes.png format: png dimensions: - width: 3600 - height: 4800 + width: 1743 + height: 1786 dpi: 300 color_profile: sRGB @@ -22,5 +22,10 @@ products: sku: "71" variants: [S, M, L, XL, 2XL, 3XL] retail_price: 29.99 + - type: hoodie + provider: printful + sku: "146" + variants: [S, M, L, XL, 2XL] + retail_price: 49.99 status: active diff --git a/designs/shirts/fungi-logo-tee/metadata.yaml b/designs/shirts/fungi-logo-tee/metadata.yaml index 47278c1..5f49ba5 100644 --- a/designs/shirts/fungi-logo-tee/metadata.yaml +++ b/designs/shirts/fungi-logo-tee/metadata.yaml @@ -1,8 +1,8 @@ name: "Fungi Flows Logo Tee" slug: fungi-logo-tee -description: "The original Fungi Flows logo on a premium tee. Gold and bioluminescent green on deep purple — rep the mycelium movement." -tags: [fungiflows, mushroom, logo, hip-hop, pittsburgh, tee] -space: fungiflows +description: "The original Fungi Flows logo on a premium tee. Gold and bioluminescent green on deep purple — rep the mycelium movement. Revenue supports the Fungi Flows community." +tags: [fungiflows, mushroom, logo, hip-hop, pittsburgh, tee, community] +space: all category: shirts created: "2026-02-18" author: fungi-flows @@ -22,5 +22,10 @@ products: sku: "71" variants: [S, M, L, XL, 2XL] retail_price: 29.99 + - type: hoodie + provider: printful + sku: "146" + variants: [S, M, L, XL, 2XL] + retail_price: 49.99 status: active diff --git a/designs/stickers/fungi-spore/metadata.yaml b/designs/stickers/fungi-spore/metadata.yaml index 31ec0b1..e707648 100644 --- a/designs/stickers/fungi-spore/metadata.yaml +++ b/designs/stickers/fungi-spore/metadata.yaml @@ -1,8 +1,8 @@ name: "Spore Print Sticker" slug: fungi-spore -description: "Bioluminescent mushroom spore print design. Neon green on deep purple — the signature Fungi Flows aesthetic." -tags: [fungiflows, mushroom, spore, psychedelic, sticker] -space: fungiflows +description: "Bioluminescent mushroom spore print design. Neon green on deep purple — the signature Fungi Flows aesthetic. Revenue supports the Fungi Flows community." +tags: [fungiflows, mushroom, spore, psychedelic, sticker, community] +space: all category: stickers created: "2026-02-18" author: fungi-flows diff --git a/frontend/app/design/page.tsx b/frontend/app/design/page.tsx index ab1cf67..b74d420 100644 --- a/frontend/app/design/page.tsx +++ b/frontend/app/design/page.tsx @@ -189,7 +189,7 @@ export default function DesignPage() { {error && ( -
+
{error}
)} @@ -279,7 +279,7 @@ export default function DesignPage() { @@ -300,7 +300,7 @@ export default function DesignPage() { diff --git a/frontend/app/globals.css b/frontend/app/globals.css index bb992eb..eeb5cf6 100644 --- a/frontend/app/globals.css +++ b/frontend/app/globals.css @@ -4,48 +4,26 @@ @layer base { :root { - --background: 0 0% 100%; - --foreground: 222.2 84% 4.9%; - --card: 0 0% 100%; - --card-foreground: 222.2 84% 4.9%; - --popover: 0 0% 100%; - --popover-foreground: 222.2 84% 4.9%; - --primary: 195 80% 45%; - --primary-foreground: 0 0% 100%; - --secondary: 45 80% 55%; - --secondary-foreground: 222.2 47.4% 11.2%; - --muted: 210 40% 96.1%; - --muted-foreground: 215.4 16.3% 46.9%; - --accent: 210 40% 96.1%; - --accent-foreground: 222.2 47.4% 11.2%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 210 40% 98%; - --border: 214.3 31.8% 91.4%; - --input: 214.3 31.8% 91.4%; - --ring: 195 80% 45%; - --radius: 0.625rem; - } - - .dark { - --background: 264 30% 6%; + --background: 222 30% 6%; --foreground: 180 10% 96%; - --card: 264 30% 6%; + --card: 222 25% 8%; --card-foreground: 180 10% 96%; - --popover: 264 30% 6%; + --popover: 222 25% 8%; --popover-foreground: 180 10% 96%; --primary: 195 80% 50%; - --primary-foreground: 264 30% 6%; + --primary-foreground: 0 0% 100%; --secondary: 45 80% 55%; --secondary-foreground: 180 10% 96%; - --muted: 264 20% 15%; - --muted-foreground: 215 20.2% 65.1%; - --accent: 264 20% 15%; + --muted: 222 20% 14%; + --muted-foreground: 215 20% 65%; + --accent: 222 20% 14%; --accent-foreground: 180 10% 96%; --destructive: 0 62.8% 30.6%; --destructive-foreground: 210 40% 98%; - --border: 264 20% 15%; - --input: 264 20% 15%; + --border: 222 20% 16%; + --input: 222 20% 16%; --ring: 195 80% 50%; + --radius: 0.625rem; } } diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx index 50d5bf9..340eff4 100644 --- a/frontend/app/page.tsx +++ b/frontend/app/page.tsx @@ -83,7 +83,7 @@ export default async function HomePage() { Community Merch,
- On Demand + Revenue for Your Community )} @@ -95,11 +95,12 @@ export default async function HomePage() { "Custom merchandise for your community." ) : ( <> - Create a{" "} - Space for your - community's merchandise. Design, upload, and sell{" "} - print-on-demand{" "} - swag — stickers, shirts, and more. + Locally produced merch that{" "} + + feeds revenue directly into your community + + . Design, upload, and sell print-on-demand swag — every sale + funds your project's mission. )}

@@ -141,13 +142,13 @@ export default async function HomePage() { How It Works

- rSwag in 30 Seconds + From Design to Revenue in Minutes

- Upload your design,{" "} - preview it on products, - and order print-on-demand - merch shipped worldwide. + Create your community's + merch, sell it on demand, + and fund your + community's work — no inventory, no risk.

@@ -166,17 +167,18 @@ export default async function HomePage() { -

1. Upload a Design

+

1. Upload or Create a Design

- Upload your own artwork or generate a unique design with AI. - Transparent PNGs work best for clean product mockups. + Upload your own artwork or generate a unique design with our AI + studio. Logos, slogans, art — anything that represents your + community. - Your art, your merch. + Your community's identity, on merch.

@@ -199,13 +201,14 @@ export default async function HomePage() { /> -

2. Pick Products

+

2. Pick Products & Set Prices

Choose from t-shirts, hoodies, stickers, posters, mugs, and more. - See photorealistic mockups of your design on each product. + Set your markup — every dollar above cost goes directly into your + community's funding stream. - Preview before you order. + You set the margin, you keep the revenue.

@@ -224,32 +227,138 @@ export default async function HomePage() { -

3. Ship Worldwide

+

3. Ship Locally — Worldwide

- Printful prints and ships each order on demand. No inventory, - no waste — just quality merch delivered to your door. + Printful prints locally from the nearest fulfillment center — less + shipping, less carbon. Delivered to your community members anywhere + in the world. - Printed fresh, shipped fast. + Local production, global reach.

+ {/* ── Community Revenue Model ───────────────────────────── */} +
+
+
+

+ Merch That Funds Your Mission +

+

+ Every purchase feeds revenue directly into your community's + funding streams. No middlemen, no platform fees eating your margins. +

+
+ +
+ {/* Revenue Flow */} +
+
+
+ + + +
+

Direct Revenue Stream

+
+

+ Set your own margins. Printful handles production at cost, and + the markup goes straight into your community's treasury, DAO, + or project fund. +

+
+
+ Production cost + $9.25 +
+
+ Your price + $29.99 +
+
+ Community revenue + $20.74 per sale +
+
+
+ + {/* Community Benefits */} +
+
+
+ + + +
+

Built for Communities

+
+
    +
  • + + + + Branded Spaces — each community gets their own storefront with custom theme, logo, and catalog +
  • +
  • + + + + Zero inventory risk — items printed on demand, no upfront costs for your community +
  • +
  • + + + + Revenue routing — connect to rFunds, DAOs, or any wallet to stream merch revenue directly into community funding +
  • +
  • + + + + Local production — Printful fulfills from the nearest center, reducing shipping distance and carbon footprint +
  • +
+
+
+
+
+ {/* ── Features Grid ─────────────────────────────────────── */}

- Built for Communities + Everything Your Community Needs

- Everything you need to run a merch shop for your project or - community + Tools to design, sell, and ship merch that funds your collective work

@@ -272,8 +381,8 @@ export default async function HomePage() {

AI Design Studio

- Generate unique designs with AI or upload your own artwork. - Instant photorealistic mockups. + Generate unique designs with AI or upload your own. Instant + photorealistic product mockups.

@@ -295,8 +404,8 @@ export default async function HomePage() {

Community Spaces

- Each community gets its own branded storefront with custom themes, - logos, and product catalog. + Each community gets its own branded storefront — custom domain, + theme, and product catalog.

@@ -312,14 +421,14 @@ export default async function HomePage() { -

Zero Inventory

+

Revenue Streams

- Print-on-demand means no upfront costs, no warehouse, no waste. - Items are printed fresh per order. + Merch revenue flows directly to your community — connect to rFunds, + DAOs, treasuries, or any funding channel.

@@ -341,8 +450,8 @@ export default async function HomePage() {

Realistic Mockups

- See your design on real product photos via Printful's mockup - engine. No guessing how it'll look. + See your design on real products via Printful's mockup engine + before you ever commit to an order.

@@ -358,14 +467,14 @@ export default async function HomePage() { -

Secure Payments

+

Local Fulfillment

- Pay with Mollie — credit card, iDEAL, PayPal, and more. European - data residency for privacy. + Printed at the nearest Printful facility — shorter shipping + distances, less carbon, faster delivery.

@@ -381,14 +490,14 @@ export default async function HomePage() {

rSpace Ecosystem

- Part of the r* suite — integrates with rVote, rWork, rMaps, and - more collaborative tools. + Part of the r* suite — integrates with rFunds for treasury, rVote + for design governance, and more.

@@ -396,14 +505,15 @@ export default async function HomePage() { {/* ── Featured Products ─────────────────────────────────── */} {products.length > 0 && ( -
+

- Featured Products + Community Merch

- Print-on-demand — fulfilled by Printful, shipped worldwide. + Locally produced, print-on-demand — every sale supports the + community.

@@ -414,7 +524,7 @@ export default async function HomePage() { href={`/products/${product.slug}`} className="group block" > -
+
- Join the rSpace Ecosystem + Fund Your Community

- Ready to launch your community's merch? + Turn your community's identity into a revenue stream

- Create a Space for your project, upload your designs, and let your - community order swag — all powered by print-on-demand. + Create a Space, upload your designs, and start selling merch that + funds your community's work. Every sale flows directly into your + community's funding channels.

- Browse the Demo + Browse the Shop
diff --git a/frontend/app/upload/page.tsx b/frontend/app/upload/page.tsx index 1459133..952fd2e 100644 --- a/frontend/app/upload/page.tsx +++ b/frontend/app/upload/page.tsx @@ -303,7 +303,7 @@ export default function UploadPage() {
{error && ( -
+
{error}
)} @@ -354,7 +354,7 @@ export default function UploadPage() { @@ -375,7 +375,7 @@ export default function UploadPage() { diff --git a/spaces/_default/space.yaml b/spaces/_default/space.yaml index 857a648..51fe163 100644 --- a/spaces/_default/space.yaml +++ b/spaces/_default/space.yaml @@ -1,30 +1,30 @@ id: default name: "rSwag" -tagline: "Merch for the rSpace ecosystem" -description: "Stickers, shirts, and more — designed by the community, printed on demand." +tagline: "Community Merch, On Demand" +description: "Your community's merch shop — designed locally, printed on demand. Revenue flows directly back to your community." domain: "rswag.online" footer_text: "rSpace. Infrastructure for the commons." theme: - primary: "195 80% 45%" + primary: "195 80% 50%" primary_foreground: "0 0% 100%" secondary: "45 80% 55%" - secondary_foreground: "222.2 47.4% 11.2%" - background: "0 0% 100%" - foreground: "222.2 84% 4.9%" - card: "0 0% 100%" - card_foreground: "222.2 84% 4.9%" - popover: "0 0% 100%" - popover_foreground: "222.2 84% 4.9%" - muted: "210 40% 96.1%" - muted_foreground: "215.4 16.3% 46.9%" - accent: "210 40% 96.1%" - accent_foreground: "222.2 47.4% 11.2%" - destructive: "0 84.2% 60.2%" + secondary_foreground: "180 10% 96%" + background: "222 30% 6%" + foreground: "180 10% 96%" + card: "222 25% 8%" + card_foreground: "180 10% 96%" + popover: "222 25% 8%" + popover_foreground: "180 10% 96%" + muted: "222 20% 14%" + muted_foreground: "215 20% 65%" + accent: "222 20% 14%" + accent_foreground: "180 10% 96%" + destructive: "0 62.8% 30.6%" destructive_foreground: "210 40% 98%" - border: "214.3 31.8% 91.4%" - input: "214.3 31.8% 91.4%" - ring: "195 80% 45%" + border: "222 20% 16%" + input: "222 20% 16%" + ring: "195 80% 50%" design_filter: "all" logo_url: null