| id |
title |
status |
assignee |
created_date |
updated_date |
labels |
dependencies |
references |
priority |
| TASK-61 |
Canvas tab bar + rApps toolbar + iframe shell for all modules |
Done |
|
2026-02-26 02:04 |
2026-02-26 02:04 |
| canvas |
| rApps |
| toolbar |
| tab-bar |
| iframe-shell |
|
|
| website/canvas.html |
| server/shell.ts |
| shared/components/rstack-tab-bar.ts |
| shared/url-helpers.ts |
|
high |
Description
Add the missing tab bar to the canvas page so users can switch between rApp layers (with full CommunitySync/Automerge persistence). Add an "rApps" toolbar group that embeds any of the 18 remaining modules as interactive iframes directly on the canvas. Switch all 20 module page routes to renderIframeShell, loading standalone domains inside the unified shell.
Acceptance Criteria
Final Summary
Changes (22 files, +343 / -142)\n\n### Canvas tab bar (website/canvas.html)\n- Added <rstack-tab-bar> element between header and toolbar\n- Tab bar init JS: default canvas layer, layer-switch/add/close navigation\n- CommunitySync wiring: persists layers, flows, reorder, view mode to Automerge CRDT\n- Syncs remote layer/flow changes from other users\n\n### rApps toolbar group (website/canvas.html)\n- New "rApps" dropdown with 18 module embed buttons\n- Each creates a folk-embed shape pointing to the module URL via rspaceNavUrl()\n- Modules: rNotes, rPhotos, rBooks, rPubs, rFiles, rWork, rForum, rInbox, rTube, rFunds, rWallet, rVote, rCart, rData, rNetwork, rSplat, rProviders, rSwag\n\n### Iframe shell (server/shell.ts + 20 modules)\n- New renderIframeShell() wraps standalone app domains in the unified rSpace shell\n- All 20 module page routes switched from renderShell to renderIframeShell\n- Modules load their standalone domain (e.g. rnotes.online) in a seamless iframe\n\nCommit: 5c2c7f4 on dev, merged to main