From 2e67417ddc41d260c04394c43d30e2826c979dd4 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Wed, 25 Feb 2026 23:34:25 -0800 Subject: [PATCH 1/2] feat: add missing standalone domain routing for all rApps Added standaloneDomain to rsplat module (rsplat.online). Added 8 missing Traefik routers: rnotes, rfiles, rphotos, rinbox, rcart, rsplat, swag.mycofi.earth, providers.mycofi.earth. All 22 standalone-domain modules now have matching Traefik routing. Co-Authored-By: Claude Opus 4.6 --- docker-compose.yml | 33 ++++++++++++++++++++++++++++++++- modules/splat/mod.ts | 1 + 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 15d26fd..353c318 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -76,7 +76,6 @@ services: - "traefik.http.routers.rspace-rvote.entrypoints=web" - "traefik.http.routers.rspace-rvote.priority=120" - "traefik.http.routers.rspace-rvote.service=rspace-online" - # rnotes.online — re-deployed standalone with Memory Card spec (Feb 22) - "traefik.http.routers.rspace-rwork.rule=Host(`rwork.online`)" - "traefik.http.routers.rspace-rwork.entrypoints=web" - "traefik.http.routers.rspace-rwork.priority=120" @@ -109,6 +108,38 @@ services: - "traefik.http.routers.rspace-rmaps.entrypoints=web" - "traefik.http.routers.rspace-rmaps.priority=120" - "traefik.http.routers.rspace-rmaps.service=rspace-online" + - "traefik.http.routers.rspace-rnotes.rule=Host(`rnotes.online`)" + - "traefik.http.routers.rspace-rnotes.entrypoints=web" + - "traefik.http.routers.rspace-rnotes.priority=120" + - "traefik.http.routers.rspace-rnotes.service=rspace-online" + - "traefik.http.routers.rspace-rfiles.rule=Host(`rfiles.online`)" + - "traefik.http.routers.rspace-rfiles.entrypoints=web" + - "traefik.http.routers.rspace-rfiles.priority=120" + - "traefik.http.routers.rspace-rfiles.service=rspace-online" + - "traefik.http.routers.rspace-rphotos.rule=Host(`rphotos.online`)" + - "traefik.http.routers.rspace-rphotos.entrypoints=web" + - "traefik.http.routers.rspace-rphotos.priority=120" + - "traefik.http.routers.rspace-rphotos.service=rspace-online" + - "traefik.http.routers.rspace-rinbox.rule=Host(`rinbox.online`)" + - "traefik.http.routers.rspace-rinbox.entrypoints=web" + - "traefik.http.routers.rspace-rinbox.priority=120" + - "traefik.http.routers.rspace-rinbox.service=rspace-online" + - "traefik.http.routers.rspace-rcart.rule=Host(`rcart.online`)" + - "traefik.http.routers.rspace-rcart.entrypoints=web" + - "traefik.http.routers.rspace-rcart.priority=120" + - "traefik.http.routers.rspace-rcart.service=rspace-online" + - "traefik.http.routers.rspace-rsplat.rule=Host(`rsplat.online`)" + - "traefik.http.routers.rspace-rsplat.entrypoints=web" + - "traefik.http.routers.rspace-rsplat.priority=120" + - "traefik.http.routers.rspace-rsplat.service=rspace-online" + - "traefik.http.routers.rspace-rswag.rule=Host(`swag.mycofi.earth`)" + - "traefik.http.routers.rspace-rswag.entrypoints=web" + - "traefik.http.routers.rspace-rswag.priority=120" + - "traefik.http.routers.rspace-rswag.service=rspace-online" + - "traefik.http.routers.rspace-rproviders.rule=Host(`providers.mycofi.earth`)" + - "traefik.http.routers.rspace-rproviders.entrypoints=web" + - "traefik.http.routers.rspace-rproviders.priority=120" + - "traefik.http.routers.rspace-rproviders.service=rspace-online" # Service configuration - "traefik.http.services.rspace-online.loadbalancer.server.port=3000" - "traefik.docker.network=traefik-public" diff --git a/modules/splat/mod.ts b/modules/splat/mod.ts index c8b986b..343ba2f 100644 --- a/modules/splat/mod.ts +++ b/modules/splat/mod.ts @@ -539,6 +539,7 @@ export const splatModule: RSpaceModule = { icon: "🔮", description: "3D Gaussian splat viewer", routes, + standaloneDomain: "rsplat.online", async onSpaceCreate(_spaceSlug: string) { // Splats are scoped by space_slug column. No per-space setup needed. From 833c6aaf66fb9ae0aee7348e30c939bbb3701c5f Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Wed, 25 Feb 2026 23:39:43 -0800 Subject: [PATCH 2/2] refactor: remove rProviders from rApps, fix rSwag domain to rswag.online MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit rProviders (providers.mycofi.earth) is a separate project — removed module registration, app switcher entry, tab bar badge, canvas embed button, Traefik router, and standalone config. rSwag domain updated from swag.mycofi.earth to rswag.online across all references. Co-Authored-By: Claude Opus 4.6 --- docker-compose.standalone.yml | 13 +------------ docker-compose.yml | 6 +----- lib/folk-rapp.ts | 1 - modules/swag/mod.ts | 8 ++++---- server/index.ts | 2 -- shared/components/rstack-app-switcher.ts | 2 -- shared/components/rstack-tab-bar.ts | 1 - website/canvas.html | 2 -- 8 files changed, 6 insertions(+), 29 deletions(-) diff --git a/docker-compose.standalone.yml b/docker-compose.standalone.yml index 2be9904..174caf0 100644 --- a/docker-compose.standalone.yml +++ b/docker-compose.standalone.yml @@ -82,17 +82,6 @@ services: traefik.http.routers.rcart-sa.entrypoints: web traefik.http.services.rcart-sa.loadbalancer.server.port: "3000" - # ── rProviders ── - rproviders-standalone: - <<: *standalone-base - container_name: rproviders-standalone - command: ["bun", "run", "modules/providers/standalone.ts"] - labels: - <<: *traefik-enabled - traefik.http.routers.rproviders-sa.rule: Host(`providers.mycofi.earth`) - traefik.http.routers.rproviders-sa.entrypoints: web - traefik.http.services.rproviders-sa.loadbalancer.server.port: "3000" - # ── rSwag ── rswag-standalone: <<: *standalone-base @@ -105,7 +94,7 @@ services: SWAG_ARTIFACTS_DIR: /data/swag-artifacts labels: <<: *traefik-enabled - traefik.http.routers.rswag-sa.rule: Host(`swag.mycofi.earth`) + traefik.http.routers.rswag-sa.rule: Host(`rswag.online`) traefik.http.routers.rswag-sa.entrypoints: web traefik.http.services.rswag-sa.loadbalancer.server.port: "3000" diff --git a/docker-compose.yml b/docker-compose.yml index 353c318..3a607c0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -132,14 +132,10 @@ services: - "traefik.http.routers.rspace-rsplat.entrypoints=web" - "traefik.http.routers.rspace-rsplat.priority=120" - "traefik.http.routers.rspace-rsplat.service=rspace-online" - - "traefik.http.routers.rspace-rswag.rule=Host(`swag.mycofi.earth`)" + - "traefik.http.routers.rspace-rswag.rule=Host(`rswag.online`)" - "traefik.http.routers.rspace-rswag.entrypoints=web" - "traefik.http.routers.rspace-rswag.priority=120" - "traefik.http.routers.rspace-rswag.service=rspace-online" - - "traefik.http.routers.rspace-rproviders.rule=Host(`providers.mycofi.earth`)" - - "traefik.http.routers.rspace-rproviders.entrypoints=web" - - "traefik.http.routers.rspace-rproviders.priority=120" - - "traefik.http.routers.rspace-rproviders.service=rspace-online" # Service configuration - "traefik.http.services.rspace-online.loadbalancer.server.port=3000" - "traefik.docker.network=traefik-public" diff --git a/lib/folk-rapp.ts b/lib/folk-rapp.ts index dbacf11..3fd51c1 100644 --- a/lib/folk-rapp.ts +++ b/lib/folk-rapp.ts @@ -33,7 +33,6 @@ const MODULE_META: Record { // Build artifact envelope const proto = c.req.header("x-forwarded-proto") || "https"; - const host = c.req.header("host") || "swag.mycofi.earth"; + const host = c.req.header("host") || "rswag.online"; const baseUrl = `${proto}://${host}`; const renderTargetKey = `${product.id}-${result.format}`; @@ -123,7 +123,7 @@ routes.post("/api/artifact", async (c) => { id: artifactId, schema_version: "1.0", type: "print-ready", - origin: "swag.mycofi.earth", + origin: "rswag.online", source_space: sourceSpace || null, creator: { id: creatorId || "anonymous", @@ -168,7 +168,7 @@ routes.post("/api/artifact", async (c) => { }, next_actions: [ { tool: "rcart.online", action: "list-for-sale", label: "Sell in community shop", endpoint: "/api/catalog/ingest", method: "POST" }, - { tool: "swag.mycofi.earth", action: "edit-design", label: "Edit design", endpoint: "/editor", method: "GET" }, + { tool: "rswag.online", action: "edit-design", label: "Edit design", endpoint: "/editor", method: "GET" }, { tool: "rfiles.online", action: "archive", label: "Save to files", endpoint: "/api/v1/files/import", method: "POST" }, ], }; @@ -246,5 +246,5 @@ export const swagModule: RSpaceModule = { icon: "\u{1F3A8}", description: "Design print-ready swag: stickers, posters, tees", routes, - standaloneDomain: "swag.mycofi.earth", + standaloneDomain: "rswag.online", }; diff --git a/server/index.ts b/server/index.ts index eac52ac..d55dc3d 100644 --- a/server/index.ts +++ b/server/index.ts @@ -44,7 +44,6 @@ import { canvasModule } from "../modules/canvas/mod"; import { booksModule } from "../modules/books/mod"; import { pubsModule } from "../modules/pubs/mod"; import { cartModule } from "../modules/cart/mod"; -import { providersModule } from "../modules/providers/mod"; import { swagModule } from "../modules/swag/mod"; import { choicesModule } from "../modules/choices/mod"; import { fundsModule } from "../modules/funds/mod"; @@ -73,7 +72,6 @@ registerModule(canvasModule); registerModule(booksModule); registerModule(pubsModule); registerModule(cartModule); -registerModule(providersModule); registerModule(swagModule); registerModule(choicesModule); registerModule(fundsModule); diff --git a/shared/components/rstack-app-switcher.ts b/shared/components/rstack-app-switcher.ts index c9510b1..7248d9b 100644 --- a/shared/components/rstack-app-switcher.ts +++ b/shared/components/rstack-app-switcher.ts @@ -41,7 +41,6 @@ const MODULE_BADGES: Record = { rwallet: { badge: "rW", color: "#fde047" }, // yellow-300 rcart: { badge: "rCt", color: "#fdba74" }, // orange-300 rauctions: { badge: "rA", color: "#fca5a5" }, // red-300 - rproviders: { badge: "rPr", color: "#fdba74" }, // orange-300 rtube: { badge: "rTu", color: "#f9a8d4" }, // pink-300 // Sharing rphotos: { badge: "rPh", color: "#f9a8d4" }, // pink-200 @@ -79,7 +78,6 @@ const MODULE_CATEGORIES: Record = { rwallet: "Funding & Commerce", rcart: "Funding & Commerce", rauctions: "Funding & Commerce", - rproviders: "Funding & Commerce", rphotos: "Sharing", rnetwork: "Sharing", rsocials: "Sharing", diff --git a/shared/components/rstack-tab-bar.ts b/shared/components/rstack-tab-bar.ts index 2bfb6b5..1756e84 100644 --- a/shared/components/rstack-tab-bar.ts +++ b/shared/components/rstack-tab-bar.ts @@ -43,7 +43,6 @@ const MODULE_BADGES: Record = { rwallet: { badge: "rW", color: "#fde047" }, rcart: { badge: "rCt", color: "#fdba74" }, rauctions: { badge: "rA", color: "#fca5a5" }, - rproviders: { badge: "rPr", color: "#fdba74" }, rtube: { badge: "rTu", color: "#f9a8d4" }, rphotos: { badge: "rPh", color: "#f9a8d4" }, rnetwork: { badge: "rNe", color: "#93c5fd" }, diff --git a/website/canvas.html b/website/canvas.html index 013ac69..d1ab1d9 100644 --- a/website/canvas.html +++ b/website/canvas.html @@ -677,7 +677,6 @@ - @@ -1666,7 +1665,6 @@ { btnId: "embed-data", moduleId: "rdata" }, { btnId: "embed-network", moduleId: "rnetwork" }, { btnId: "embed-splat", moduleId: "rsplat" }, - { btnId: "embed-providers", moduleId: "rproviders" }, { btnId: "embed-swag", moduleId: "rswag" }, ];