From 4c91ba4c6d15b169dc9dd9baf1927585f6cb4256 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Wed, 15 Apr 2026 00:27:17 +0000 Subject: [PATCH] fix(rtime): remove duplicate header tabs in sub-navigation The shell's rapp-subnav rendered Canvas/Collaborate/Fulfillment pills (from outputPaths) while the folk-timebank-app component also rendered its own tab-bar with the same three views. Remove outputPaths and add explicit routes for /canvas and /collaborate so URLs still work but navigation only appears once via the component's internal tab-bar. Co-Authored-By: Claude Opus 4.6 (1M context) --- modules/rtime/mod.ts | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/modules/rtime/mod.ts b/modules/rtime/mod.ts index a722f6dd..8530eadc 100644 --- a/modules/rtime/mod.ts +++ b/modules/rtime/mod.ts @@ -1175,6 +1175,36 @@ routes.post("/api/tasks/:id/export-to-backlog", async (c) => { }); }); +routes.get("/canvas", (c) => { + const space = c.req.param("space") || "demo"; + + return c.html(renderShell({ + title: `${space} โ€” Canvas | rTime | rSpace`, + moduleId: "rtime", + spaceSlug: space, + modules: getModuleInfoList(), + theme: "dark", + body: ``, + scripts: ``, + styles: ``, + })); +}); + +routes.get("/collaborate", (c) => { + const space = c.req.param("space") || "demo"; + + return c.html(renderShell({ + title: `${space} โ€” Collaborate | rTime | rSpace`, + moduleId: "rtime", + spaceSlug: space, + modules: getModuleInfoList(), + theme: "dark", + body: ``, + scripts: ``, + styles: ``, + })); +}); + routes.get("/dashboard", (c) => { const space = c.req.param("space") || "demo"; @@ -1226,11 +1256,8 @@ export const timeModule: RSpaceModule = { filterable: true, }, ], - outputPaths: [ - { path: "canvas", name: "Canvas", icon: "๐Ÿงบ", description: "Unified commitment pool & task weaving canvas" }, - { path: "collaborate", name: "Collaborate", icon: "๐Ÿค", description: "Intent-routed collaboration matching" }, - { path: "dashboard", name: "Fulfillment", icon: "๐Ÿ“Š", description: "Personal commitment fulfillment tracking" }, - ], + // Views (Canvas, Collaborate, Fulfillment) are handled by the component's + // internal tab-bar โ€” no outputPaths needed to avoid duplicate navigation. onboardingActions: [ { label: "Pledge Hours", icon: "โณ", description: "Add a commitment to the pool", type: 'create', href: '/rtime' }, ],