chore: add backlog tasks for canvas tab bar and persistence features
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
abca93757b
commit
ae9bbebb4a
|
|
@ -0,0 +1,45 @@
|
|||
---
|
||||
id: TASK-61
|
||||
title: Canvas tab bar + rApps toolbar + iframe shell for all modules
|
||||
status: Done
|
||||
assignee:
|
||||
- '@claude'
|
||||
created_date: '2026-02-26 02:04'
|
||||
updated_date: '2026-02-26 02:04'
|
||||
labels:
|
||||
- canvas
|
||||
- rApps
|
||||
- toolbar
|
||||
- tab-bar
|
||||
- iframe-shell
|
||||
dependencies: []
|
||||
references:
|
||||
- website/canvas.html
|
||||
- server/shell.ts
|
||||
- shared/components/rstack-tab-bar.ts
|
||||
- shared/url-helpers.ts
|
||||
priority: high
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||
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.
|
||||
<!-- SECTION:DESCRIPTION:END -->
|
||||
|
||||
## Acceptance Criteria
|
||||
<!-- AC:BEGIN -->
|
||||
- [x] #1 Canvas page renders rstack-tab-bar between header and toolbar
|
||||
- [x] #2 Tab bar initializes with canvas as default layer and persists via CommunitySync
|
||||
- [x] #3 New rApps toolbar group with 18 module embed buttons
|
||||
- [x] #4 Each rApp button creates a folk-embed shape with correct module URL
|
||||
- [x] #5 All 20 module page routes use renderIframeShell with standalone domains
|
||||
- [x] #6 renderIframeShell function added to server/shell.ts
|
||||
- [x] #7 Build passes with no errors
|
||||
<!-- AC:END -->
|
||||
|
||||
## Final Summary
|
||||
|
||||
<!-- SECTION:FINAL_SUMMARY:BEGIN -->
|
||||
## 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
|
||||
<!-- SECTION:FINAL_SUMMARY:END -->
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
---
|
||||
id: TASK-62
|
||||
title: Tab bar persistence + iframe loading/error states
|
||||
status: Done
|
||||
assignee: []
|
||||
created_date: '2026-02-26 02:19'
|
||||
updated_date: '2026-02-26 02:19'
|
||||
labels:
|
||||
- bugfix
|
||||
- shell
|
||||
- iframe
|
||||
dependencies:
|
||||
- TASK-61
|
||||
priority: high
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||
Fix two issues from the iframe shell rollout: (1) tab bar was resetting to a single tab on every page navigation — now persists in localStorage, (2) iframed standalone apps that aren't running showed a blank page — now shows spinner + 12s timeout error panel with retry/open-directly actions. Also converts rSwag to iframe shell (missed in TASK-61).
|
||||
<!-- SECTION:DESCRIPTION:END -->
|
||||
|
||||
## Acceptance Criteria
|
||||
<!-- AC:BEGIN -->
|
||||
- [x] #1 Tabs persist across full-page navigations via localStorage
|
||||
- [x] #2 Opening a new rApp adds it as a tab alongside existing ones
|
||||
- [x] #3 Closing active tab navigates to first remaining tab
|
||||
- [x] #4 Iframe shows loading spinner while standalone app loads
|
||||
- [x] #5 12s timeout shows error panel if standalone app unreachable
|
||||
- [x] #6 Error panel has Retry button and Open Directly link
|
||||
- [x] #7 rSwag module converted to iframe shell
|
||||
- [x] #8 CommunitySync merges with localStorage tabs when connected
|
||||
<!-- AC:END -->
|
||||
|
||||
## Final Summary
|
||||
|
||||
<!-- SECTION:FINAL_SUMMARY:BEGIN -->
|
||||
Rewrote tab bar initialization in `server/shell.ts` to use `localStorage` keyed per space (`rspace_tabs_{spaceSlug}`). Previously `tabBar.setLayers([defaultLayer])` was called with only the current module on every page load, wiping all previous tabs. Now reads from localStorage first, adds the current module if missing, and persists before rendering.\n\nAdded loading/error states to `renderIframeShell()`: spinner overlay during load, 12s timeout that shows an error panel with the module name, domain that failed, Retry button, and Open Directly link. Iframe fades in on successful load.\n\nConverted `modules/swag/mod.ts` to use `renderIframeShell` with `swag.mycofi.earth` (missed in TASK-61).\n\nCommit: `fa6a2ce` — merged to main.
|
||||
<!-- SECTION:FINAL_SUMMARY:END -->
|
||||
Loading…
Reference in New Issue