feat: dark mode, community revenue messaging, design catalog update
- 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 <noreply@anthropic.com>
This commit is contained in:
parent
dd873b91b5
commit
a152e77fed
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ export default function DesignPage() {
|
|||
</div>
|
||||
|
||||
{error && (
|
||||
<div className="p-4 bg-red-50 border border-red-200 rounded-md text-red-700">
|
||||
<div className="p-4 bg-destructive/10 border border-destructive/30 rounded-md text-red-400">
|
||||
{error}
|
||||
</div>
|
||||
)}
|
||||
|
|
@ -279,7 +279,7 @@ export default function DesignPage() {
|
|||
<span
|
||||
className={
|
||||
generatedDesign.status === "active"
|
||||
? "text-green-600"
|
||||
? "text-emerald-400"
|
||||
: "text-yellow-600"
|
||||
}
|
||||
>
|
||||
|
|
@ -300,7 +300,7 @@ export default function DesignPage() {
|
|||
</button>
|
||||
<button
|
||||
onClick={handleDelete}
|
||||
className="px-4 py-2 border border-red-300 text-red-600 rounded-md font-medium hover:bg-red-50 transition-colors"
|
||||
className="px-4 py-2 border border-red-500/30 text-red-400 rounded-md font-medium hover:bg-red-500/10 transition-colors"
|
||||
>
|
||||
Discard
|
||||
</button>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ export default async function HomePage() {
|
|||
Community Merch,
|
||||
<br />
|
||||
<span className="text-transparent bg-clip-text bg-gradient-to-r from-primary to-secondary">
|
||||
On Demand
|
||||
Revenue for Your Community
|
||||
</span>
|
||||
</>
|
||||
)}
|
||||
|
|
@ -95,11 +95,12 @@ export default async function HomePage() {
|
|||
"Custom merchandise for your community."
|
||||
) : (
|
||||
<>
|
||||
Create a{" "}
|
||||
<strong className="text-foreground">Space</strong> for your
|
||||
community's merchandise. Design, upload, and sell{" "}
|
||||
<strong className="text-foreground">print-on-demand</strong>{" "}
|
||||
swag — stickers, shirts, and more.
|
||||
Locally produced merch that{" "}
|
||||
<strong className="text-foreground">
|
||||
feeds revenue directly into your community
|
||||
</strong>
|
||||
. Design, upload, and sell print-on-demand swag — every sale
|
||||
funds your project's mission.
|
||||
</>
|
||||
)}
|
||||
</p>
|
||||
|
|
@ -141,13 +142,13 @@ export default async function HomePage() {
|
|||
How It Works
|
||||
</span>
|
||||
<h2 className="mt-3 text-2xl sm:text-3xl font-bold">
|
||||
rSwag in 30 Seconds
|
||||
From Design to Revenue in Minutes
|
||||
</h2>
|
||||
<p className="mt-2 text-lg text-muted-foreground max-w-2xl mx-auto">
|
||||
<strong className="text-primary">Upload</strong> your design,{" "}
|
||||
<strong className="text-secondary">preview</strong> it on products,
|
||||
and <strong className="text-foreground">order</strong> print-on-demand
|
||||
merch shipped worldwide.
|
||||
<strong className="text-primary">Create</strong> your community's
|
||||
merch, <strong className="text-secondary">sell</strong> it on demand,
|
||||
and <strong className="text-foreground">fund</strong> your
|
||||
community's work — no inventory, no risk.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -166,17 +167,18 @@ export default async function HomePage() {
|
|||
<path
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
d="M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12"
|
||||
d="M9.53 16.122a3 3 0 00-5.78 1.128 2.25 2.25 0 01-2.4 2.245 4.5 4.5 0 008.4-2.245c0-.399-.078-.78-.22-1.128zm0 0a15.998 15.998 0 003.388-1.62m-5.043-.025a15.994 15.994 0 011.622-3.395m3.42 3.42a15.995 15.995 0 004.764-4.648l3.876-5.814a1.151 1.151 0 00-1.597-1.597L14.146 6.32a15.996 15.996 0 00-4.649 4.763m3.42 3.42a6.776 6.776 0 00-3.42-3.42"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 className="font-bold text-lg">1. Upload a Design</h3>
|
||||
<h3 className="font-bold text-lg">1. Upload or Create a Design</h3>
|
||||
</div>
|
||||
<p className="text-sm text-muted-foreground leading-relaxed">
|
||||
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.
|
||||
<strong className="text-foreground block mt-2">
|
||||
Your art, your merch.
|
||||
Your community's identity, on merch.
|
||||
</strong>
|
||||
</p>
|
||||
</div>
|
||||
|
|
@ -199,13 +201,14 @@ export default async function HomePage() {
|
|||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 className="font-bold text-lg">2. Pick Products</h3>
|
||||
<h3 className="font-bold text-lg">2. Pick Products & Set Prices</h3>
|
||||
</div>
|
||||
<p className="text-sm text-muted-foreground leading-relaxed">
|
||||
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.
|
||||
<strong className="text-foreground block mt-2">
|
||||
Preview before you order.
|
||||
You set the margin, you keep the revenue.
|
||||
</strong>
|
||||
</p>
|
||||
</div>
|
||||
|
|
@ -224,32 +227,138 @@ export default async function HomePage() {
|
|||
<path
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
d="M6 12L3.269 3.126A59.768 59.768 0 0121.485 12 59.77 59.77 0 013.27 20.876L5.999 12zm0 0h7.5"
|
||||
d="M12.75 3.03v.568c0 .334.148.65.405.864l1.068.89c.442.369.535 1.01.216 1.49l-.51.766a2.25 2.25 0 01-1.161.886l-.143.048a1.107 1.107 0 00-.57 1.664c.369.555.169 1.307-.427 1.605L9 13.125l.423 1.059a.956.956 0 01-1.652.928l-.679-.906a1.125 1.125 0 00-1.906.172L4.5 15.75l-.612.153M12.75 3.031a9 9 0 00-8.862 12.872M12.75 3.031a9 9 0 016.69 14.036m0 0l-.177-.529A2.25 2.25 0 0017.128 15H16.5l-.324-.324a1.453 1.453 0 00-2.328.377l-.036.073a1.586 1.586 0 01-.982.816l-.99.282c-.55.157-.894.702-.8 1.267l.073.438a2.253 2.253 0 01-1.699 2.608l-.425.108A9.012 9.012 0 013.888 15.9"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 className="font-bold text-lg">3. Ship Worldwide</h3>
|
||||
<h3 className="font-bold text-lg">3. Ship Locally — Worldwide</h3>
|
||||
</div>
|
||||
<p className="text-sm text-muted-foreground leading-relaxed">
|
||||
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.
|
||||
<strong className="text-foreground block mt-2">
|
||||
Printed fresh, shipped fast.
|
||||
Local production, global reach.
|
||||
</strong>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* ── Community Revenue Model ───────────────────────────── */}
|
||||
<section className="py-16 bg-muted/30">
|
||||
<div className="max-w-5xl mx-auto px-4">
|
||||
<div className="text-center mb-12">
|
||||
<h2 className="text-2xl sm:text-3xl font-bold mb-4">
|
||||
Merch That Funds Your Mission
|
||||
</h2>
|
||||
<p className="text-lg text-muted-foreground max-w-2xl mx-auto">
|
||||
Every purchase feeds revenue directly into your community's
|
||||
funding streams. No middlemen, no platform fees eating your margins.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-8 max-w-4xl mx-auto">
|
||||
{/* Revenue Flow */}
|
||||
<div className="border border-primary/20 rounded-xl p-6 bg-card">
|
||||
<div className="flex items-center gap-3 mb-4">
|
||||
<div className="h-10 w-10 rounded-full bg-gradient-to-br from-green-500 to-emerald-600 flex items-center justify-center shrink-0">
|
||||
<svg
|
||||
className="h-5 w-5 text-white"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
strokeWidth={2}
|
||||
>
|
||||
<path
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
d="M2.25 18L9 11.25l4.306 4.307a11.95 11.95 0 015.814-5.519l2.74-1.22m0 0l-5.94-2.28m5.94 2.28l-2.28 5.941"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 className="font-bold text-lg">Direct Revenue Stream</h3>
|
||||
</div>
|
||||
<p className="text-sm text-muted-foreground leading-relaxed mb-4">
|
||||
Set your own margins. Printful handles production at cost, and
|
||||
the markup goes straight into your community's treasury, DAO,
|
||||
or project fund.
|
||||
</p>
|
||||
<div className="bg-muted/50 rounded-lg p-4 text-sm space-y-2">
|
||||
<div className="flex justify-between">
|
||||
<span className="text-muted-foreground">Production cost</span>
|
||||
<span>$9.25</span>
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<span className="text-muted-foreground">Your price</span>
|
||||
<span>$29.99</span>
|
||||
</div>
|
||||
<div className="border-t border-border pt-2 flex justify-between font-bold text-primary">
|
||||
<span>Community revenue</span>
|
||||
<span>$20.74 per sale</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Community Benefits */}
|
||||
<div className="border border-primary/20 rounded-xl p-6 bg-card">
|
||||
<div className="flex items-center gap-3 mb-4">
|
||||
<div className="h-10 w-10 rounded-full bg-gradient-to-br from-primary to-primary/60 flex items-center justify-center shrink-0">
|
||||
<svg
|
||||
className="h-5 w-5 text-white"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
strokeWidth={2}
|
||||
>
|
||||
<path
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
d="M18 18.72a9.094 9.094 0 003.741-.479 3 3 0 00-4.682-2.72m.94 3.198l.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0112 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 016 18.719m12 0a5.971 5.971 0 00-.941-3.197m0 0A5.995 5.995 0 0012 12.75a5.995 5.995 0 00-5.058 2.772m0 0a3 3 0 00-4.681 2.72 8.986 8.986 0 003.74.477m.94-3.197a5.971 5.971 0 00-.94 3.197M15 6.75a3 3 0 11-6 0 3 3 0 016 0zm6 3a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0zm-13.5 0a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0z"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 className="font-bold text-lg">Built for Communities</h3>
|
||||
</div>
|
||||
<ul className="text-sm text-muted-foreground space-y-3">
|
||||
<li className="flex items-start gap-2">
|
||||
<svg className="h-5 w-5 text-primary shrink-0 mt-0.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
|
||||
<path strokeLinecap="round" strokeLinejoin="round" d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||
</svg>
|
||||
<span><strong className="text-foreground">Branded Spaces</strong> — each community gets their own storefront with custom theme, logo, and catalog</span>
|
||||
</li>
|
||||
<li className="flex items-start gap-2">
|
||||
<svg className="h-5 w-5 text-primary shrink-0 mt-0.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
|
||||
<path strokeLinecap="round" strokeLinejoin="round" d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||
</svg>
|
||||
<span><strong className="text-foreground">Zero inventory risk</strong> — items printed on demand, no upfront costs for your community</span>
|
||||
</li>
|
||||
<li className="flex items-start gap-2">
|
||||
<svg className="h-5 w-5 text-primary shrink-0 mt-0.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
|
||||
<path strokeLinecap="round" strokeLinejoin="round" d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||
</svg>
|
||||
<span><strong className="text-foreground">Revenue routing</strong> — connect to rFunds, DAOs, or any wallet to stream merch revenue directly into community funding</span>
|
||||
</li>
|
||||
<li className="flex items-start gap-2">
|
||||
<svg className="h-5 w-5 text-primary shrink-0 mt-0.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
|
||||
<path strokeLinecap="round" strokeLinejoin="round" d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||
</svg>
|
||||
<span><strong className="text-foreground">Local production</strong> — Printful fulfills from the nearest center, reducing shipping distance and carbon footprint</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* ── Features Grid ─────────────────────────────────────── */}
|
||||
<section className="py-16 max-w-5xl mx-auto px-4">
|
||||
<div className="text-center mb-12">
|
||||
<h2 className="text-2xl sm:text-3xl font-bold mb-4">
|
||||
Built for Communities
|
||||
Everything Your Community Needs
|
||||
</h2>
|
||||
<p className="text-muted-foreground">
|
||||
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
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -272,8 +381,8 @@ export default async function HomePage() {
|
|||
</div>
|
||||
<h3 className="font-semibold mb-2">AI Design Studio</h3>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -295,8 +404,8 @@ export default async function HomePage() {
|
|||
</div>
|
||||
<h3 className="font-semibold mb-2">Community Spaces</h3>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -312,14 +421,14 @@ export default async function HomePage() {
|
|||
<path
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
d="M6.633 10.5c.806 0 1.533-.446 2.031-1.08a9.041 9.041 0 012.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 00.322-1.672V3a.75.75 0 01.75-.75A2.25 2.25 0 0116.5 4.5c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 01-2.649 7.521c-.388.482-.987.729-1.605.729H14.23c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 00-1.423-.23H5.904M14.25 9h2.25M5.904 18.75c.083.205.173.405.27.602.197.4-.078.898-.523.898h-.908c-.889 0-1.713-.518-1.972-1.368a12 12 0 01-.521-3.507c0-1.553.295-3.036.831-4.398C3.387 10.203 4.167 9.75 5 9.75h1.053c.472 0 .745.556.5.96a8.958 8.958 0 00-1.302 4.665c0 1.194.232 2.333.654 3.375z"
|
||||
d="M2.25 18L9 11.25l4.306 4.307a11.95 11.95 0 015.814-5.519l2.74-1.22m0 0l-5.94-2.28m5.94 2.28l-2.28 5.941"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 className="font-semibold mb-2">Zero Inventory</h3>
|
||||
<h3 className="font-semibold mb-2">Revenue Streams</h3>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -341,8 +450,8 @@ export default async function HomePage() {
|
|||
</div>
|
||||
<h3 className="font-semibold mb-2">Realistic Mockups</h3>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -358,14 +467,14 @@ export default async function HomePage() {
|
|||
<path
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
d="M2.25 8.25h19.5M2.25 9h19.5m-16.5 5.25h6m-6 2.25h3m-3.75 3h15a2.25 2.25 0 002.25-2.25V6.75A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25v10.5A2.25 2.25 0 004.5 19.5z"
|
||||
d="M12 21a9.004 9.004 0 008.716-6.747M12 21a9.004 9.004 0 01-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 017.843 4.582M12 3a8.997 8.997 0 00-7.843 4.582m15.686 0A11.953 11.953 0 0112 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0121 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0112 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 013 12c0-1.605.42-3.113 1.157-4.418"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 className="font-semibold mb-2">Secure Payments</h3>
|
||||
<h3 className="font-semibold mb-2">Local Fulfillment</h3>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -381,14 +490,14 @@ export default async function HomePage() {
|
|||
<path
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
d="M12.75 3.03v.568c0 .334.148.65.405.864l1.068.89c.442.369.535 1.01.216 1.49l-.51.766a2.25 2.25 0 01-1.161.886l-.143.048a1.107 1.107 0 00-.57 1.664c.369.555.169 1.307-.427 1.605L9 13.125l.423 1.059a.956.956 0 01-1.652.928l-.679-.906a1.125 1.125 0 00-1.906.172L4.5 15.75l-.612.153M12.75 3.031a9 9 0 00-8.862 12.872M12.75 3.031a9 9 0 016.69 14.036m0 0l-.177-.529A2.25 2.25 0 0017.128 15H16.5l-.324-.324a1.453 1.453 0 00-2.328.377l-.036.073a1.586 1.586 0 01-.982.816l-.99.282c-.55.157-.894.702-.8 1.267l.073.438a2.253 2.253 0 01-1.699 2.608l-.425.108A9.012 9.012 0 013.888 15.9"
|
||||
d="M13.5 16.875h3.375m0 0h3.375m-3.375 0V13.5m0 3.375v3.375M6 10.5h2.25a2.25 2.25 0 002.25-2.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v2.25A2.25 2.25 0 006 10.5zm0 9.75h2.25A2.25 2.25 0 0010.5 18v-2.25a2.25 2.25 0 00-2.25-2.25H6a2.25 2.25 0 00-2.25 2.25V18A2.25 2.25 0 006 20.25zm9.75-9.75H18a2.25 2.25 0 002.25-2.25V6A2.25 2.25 0 0018 3.75h-2.25A2.25 2.25 0 0013.5 6v2.25a2.25 2.25 0 002.25 2.25z"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3 className="font-semibold mb-2">rSpace Ecosystem</h3>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -396,14 +505,15 @@ export default async function HomePage() {
|
|||
|
||||
{/* ── Featured Products ─────────────────────────────────── */}
|
||||
{products.length > 0 && (
|
||||
<section className="py-16 bg-muted/30">
|
||||
<section className="py-16">
|
||||
<div className="max-w-5xl mx-auto px-4">
|
||||
<div className="text-center mb-10">
|
||||
<h2 className="text-2xl sm:text-3xl font-bold mb-2">
|
||||
Featured Products
|
||||
Community Merch
|
||||
</h2>
|
||||
<p className="text-muted-foreground">
|
||||
Print-on-demand — fulfilled by Printful, shipped worldwide.
|
||||
Locally produced, print-on-demand — every sale supports the
|
||||
community.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
@ -414,7 +524,7 @@ export default async function HomePage() {
|
|||
href={`/products/${product.slug}`}
|
||||
className="group block"
|
||||
>
|
||||
<div className="relative overflow-hidden rounded-xl border bg-card shadow-sm transition-all duration-300 hover:shadow-xl hover:-translate-y-1">
|
||||
<div className="relative overflow-hidden rounded-xl border border-border/50 bg-card shadow-sm transition-all duration-300 hover:shadow-xl hover:shadow-primary/5 hover:-translate-y-1 hover:border-primary/30">
|
||||
<div className="aspect-square bg-muted relative overflow-hidden">
|
||||
<img
|
||||
src={`${API_URL}/designs/${product.slug}/mockup?type=${getMockupType(product.product_type)}`}
|
||||
|
|
@ -470,14 +580,15 @@ export default async function HomePage() {
|
|||
<div className="absolute bottom-0 left-0 w-64 h-64 bg-secondary/10 rounded-full blur-3xl" />
|
||||
<div className="py-12 sm:py-16 text-center space-y-6 relative px-6">
|
||||
<span className="inline-flex items-center rounded-full text-sm px-4 py-1.5 bg-primary/10 text-primary border border-primary/20 font-medium">
|
||||
Join the rSpace Ecosystem
|
||||
Fund Your Community
|
||||
</span>
|
||||
<h2 className="text-2xl sm:text-3xl font-bold">
|
||||
Ready to launch your community's merch?
|
||||
Turn your community's identity into a revenue stream
|
||||
</h2>
|
||||
<p className="text-lg text-muted-foreground max-w-xl mx-auto">
|
||||
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.
|
||||
</p>
|
||||
<div className="flex flex-col sm:flex-row justify-center gap-4">
|
||||
<Link
|
||||
|
|
@ -503,7 +614,7 @@ export default async function HomePage() {
|
|||
href="/products"
|
||||
className="inline-flex items-center justify-center rounded-lg border border-primary/30 hover:bg-primary/5 px-8 py-3.5 text-lg font-medium transition-colors"
|
||||
>
|
||||
Browse the Demo
|
||||
Browse the Shop
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@ export default function UploadPage() {
|
|||
</div>
|
||||
|
||||
{error && (
|
||||
<div className="p-4 bg-red-50 border border-red-200 rounded-md text-red-700">
|
||||
<div className="p-4 bg-destructive/10 border border-destructive/30 rounded-md text-red-400">
|
||||
{error}
|
||||
</div>
|
||||
)}
|
||||
|
|
@ -354,7 +354,7 @@ export default function UploadPage() {
|
|||
<span
|
||||
className={
|
||||
uploadedDesign.status === "active"
|
||||
? "text-green-600"
|
||||
? "text-emerald-400"
|
||||
: "text-yellow-600"
|
||||
}
|
||||
>
|
||||
|
|
@ -375,7 +375,7 @@ export default function UploadPage() {
|
|||
</button>
|
||||
<button
|
||||
onClick={handleDelete}
|
||||
className="px-4 py-2 border border-red-300 text-red-600 rounded-md font-medium hover:bg-red-50 transition-colors"
|
||||
className="px-4 py-2 border border-red-500/30 text-red-400 rounded-md font-medium hover:bg-red-500/10 transition-colors"
|
||||
>
|
||||
Discard
|
||||
</button>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue