commit 920c90984d75138dc9e557db1b0e727f1cbf98fa Author: Jeff Emmett Date: Wed Feb 25 00:20:09 2026 -0800 Initial landing page diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ea94948 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,21 @@ +node_modules +.git +.gitignore +*.md +.env* +Dockerfile +docker-compose*.yml +.dockerignore +backlog +.next +out +.cache +dist +build +coverage +.github +.vscode +.idea +__pycache__ +*.pyc +.pytest_cache diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e11a8e9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM nginx:alpine +COPY index.html /usr/share/nginx/html/index.html +COPY nginx.conf /etc/nginx/conf.d/default.conf +EXPOSE 80 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..2472814 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,20 @@ +services: + rswag: + build: . + restart: unless-stopped + labels: + - "traefik.enable=true" + - "traefik.http.routers.rswag.rule=Host(`rswag.online`) || Host(`www.rswag.online`)" + - "traefik.http.services.rswag.loadbalancer.server.port=80" + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:80/"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 15s + networks: + - traefik-public + +networks: + traefik-public: + external: true diff --git a/index.html b/index.html new file mode 100644 index 0000000..b07352f --- /dev/null +++ b/index.html @@ -0,0 +1,828 @@ + + + + + + + rSwag — Community Merch & Swag + + + + + + + + + + +
+ Part of the r* Ecosystem +

Community Merch & Swag

+

+ Design and sell custom merchandise for your community. + T-shirts, stickers, mugs — all integrated with r* spaces. +

+

+ rSwag makes it easy for communities to create, sell, and distribute branded merchandise. + From custom t-shirt designs to sticker packs and mugs, everything is print-on-demand + with no upfront inventory. Revenue flows directly to community treasuries through rFunds. +

+ +
+ + +
+
+

Wear your community

+

+ Merch that builds belonging and funds community projects. +

+
+
+
🎨
+

Custom Designs

+

Upload artwork, use the built-in design editor, or generate designs with AI. Create product mockups and preview them before publishing to your storefront.

+
+
+
🚚
+

Print on Demand

+

No inventory, no upfront costs. Products are printed and shipped when ordered. Support for t-shirts, hoodies, mugs, stickers, tote bags, and more.

+
+
+
🏪
+

Community Storefronts

+

Each r* space gets its own branded storefront. Members can browse, buy, and even submit design proposals. Revenue goes straight to the community treasury.

+
+
+
+
+ + +
+
+

How it works

+
+
+
1
+
+

Design your merch

+

Upload logos and artwork or create designs in the editor. Apply them to products, preview mockups, and set pricing with community-controlled margins.

+
+
+
+
2
+
+

Open your storefront

+

Publish products to your community's branded store. Share links, embed product cards in rSpace, and let members browse and purchase.

+
+
+
+
3
+
+

Ship and earn

+

Orders are fulfilled automatically through print-on-demand partners. Revenue flows to the community treasury via rFunds. Track sales in rData.

+
+
+
+
+
+ + + + + + + + diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..28dfc83 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,21 @@ +server { + listen 80; + server_name rswag.online www.rswag.online; + root /usr/share/nginx/html; + index index.html; + + location / { + try_files $uri $uri/ /index.html; + } + + # Cache static assets + location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff2?)$ { + expires 7d; + add_header Cache-Control "public, immutable"; + } + + # Security headers + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Content-Type-Options "nosniff" always; + add_header Referrer-Policy "strict-origin-when-cross-origin" always; +}