diff --git a/backlog/tasks/task-14 - Overhaul-canvas-shape-creation-connections-and-sync.md b/backlog/tasks/task-14 - Overhaul-canvas-shape-creation-connections-and-sync.md new file mode 100644 index 0000000..9152678 --- /dev/null +++ b/backlog/tasks/task-14 - Overhaul-canvas-shape-creation-connections-and-sync.md @@ -0,0 +1,37 @@ +--- +id: TASK-14 +title: 'Overhaul canvas shape creation, connections, and sync' +status: Done +assignee: [] +created_date: '2026-02-15 15:28' +labels: + - canvas + - bugfix + - refactor +dependencies: [] +priority: high +--- + +## Description + + +Fixed multiple issues preventing the FolkJS canvas and shapes from working properly. + + +## Acceptance Criteria + +- [ ] #1 Trip shapes (itinerary, destination, budget, packing-list, booking) have position:absolute CSS +- [ ] #2 Arrow connections work with all 21 shape types, not just markdown and wrapper +- [ ] #3 New shapes appear at viewport center instead of clustering top-left +- [ ] #4 Shape creation uses shared createAndAddShape() utility (~270 lines removed) +- [ ] #5 Google Item toolbar button exists +- [ ] #6 Remote shape creation has error handling (try-catch-finally) +- [ ] #7 WebSocket keep-alive ping actually sends a message +- [ ] #8 Sync layer uses toJSON() to capture all shape-specific properties + + +## Final Summary + + +Fixed 8 issues in canvas.html and community-sync.ts:\n\n1. Added 5 missing trip shapes to CSS position:absolute rule\n2. Expanded arrow connection mode from 2 to all 21 shape types\n3. New shapes now center in viewport (accounting for zoom/pan)\n4. Extracted createAndAddShape() utility, eliminating ~270 lines of duplication\n5. Added missing Google Item toolbar button\n6. Added try-catch-finally on remote shape creation\n7. Implemented actual WebSocket keep-alive ping (was no-op)\n8. Replaced manual property extraction in #shapeToData() with shape.toJSON() for all shape types\n\nNet result: -158 lines (179 added, 337 removed) + diff --git a/backlog/tasks/task-15 - Add-all-r-Ecosystem-apps-to-EncryptID-landing-page.md b/backlog/tasks/task-15 - Add-all-r-Ecosystem-apps-to-EncryptID-landing-page.md new file mode 100644 index 0000000..7cd796f --- /dev/null +++ b/backlog/tasks/task-15 - Add-all-r-Ecosystem-apps-to-EncryptID-landing-page.md @@ -0,0 +1,24 @@ +--- +id: TASK-15 +title: Add all r-Ecosystem apps to EncryptID landing page +status: Done +assignee: [] +created_date: '2026-02-15 15:28' +labels: + - encryptid + - ecosystem +dependencies: [] +priority: medium +--- + +## Description + + +Added rNotes, rTrips, rFunds, rNetwork, and rCart to the r-Ecosystem app icons section on the EncryptID landing page. All 10 r* apps now displayed. + + +## Final Summary + + +Added 5 missing r-Ecosystem apps (rNotes, rTrips, rFunds, rNetwork, rCart) to the EncryptID landing page app icons. All 10 apps now match the CORS origins list: rSpace, rWallet, rVote, rMaps, rFiles, rNotes, rTrips, rFunds, rNetwork, rCart. + diff --git a/backlog/tasks/task-16 - Live-interconnected-r-demo-pages-via-shared-rSpace-data-layer.md b/backlog/tasks/task-16 - Live-interconnected-r-demo-pages-via-shared-rSpace-data-layer.md new file mode 100644 index 0000000..325c619 --- /dev/null +++ b/backlog/tasks/task-16 - Live-interconnected-r-demo-pages-via-shared-rSpace-data-layer.md @@ -0,0 +1,71 @@ +--- +id: TASK-16 +title: Live interconnected r* demo pages via shared rSpace data layer +status: Done +assignee: [] +created_date: '2026-02-15 16:40' +updated_date: '2026-02-15 16:40' +labels: + - feature + - demo + - real-time + - cross-app +dependencies: [] +priority: high +--- + +## Description + + +Replace all static demo pages across the r* ecosystem with live, interactable demos connected through a shared rSpace "demo" community. Changes in one app propagate to all others in real-time via WebSocket. + + +## Acceptance Criteria + +- [x] #1 JSON WebSocket mode added to rSpace server (?mode=json) +- [x] #2 GET /api/communities/:slug/shapes endpoint +- [x] #3 POST /api/communities/demo/reset with rate limiting +- [x] #4 Alpine Explorer 2026 seed data (~40 shapes) via seed-demo.ts +- [x] #5 useDemoSync React hook (~220 lines, zero deps beyond React) +- [x] #6 rTrips demo rewritten with live data (hub showing all shape types) +- [x] #7 rNotes demo rewritten with live notes, notebooks, packing lists +- [x] #8 rCart demo rewritten with live cart items and funding +- [x] #9 rVote demo rewritten with live polls and voting +- [x] #10 rMaps demo rewritten with live map markers and destinations +- [x] #11 rFunds demo created with live expenses and budget tracking +- [x] #12 All changes sync across apps in real-time via shared demo community + + +## Final Summary + + +## Implementation Complete + +### Server-side (rspace-online) +- **JSON WebSocket mode**: Added `?mode=json` query param to WS upgrade. Server bridges Automerge↔JSON, avoiding ~500KB Automerge bundle in demo pages +- **GET shapes endpoint**: `GET /api/communities/:slug/shapes` returns all shapes as JSON +- **Demo reset**: `POST /api/communities/demo/reset` clears and re-seeds (5-min rate limit) +- **Seed script**: `server/seed-demo.ts` creates "demo" community with `visibility: "public"` and populates ~40 shapes for Alpine Explorer 2026 scenario + +### Shared hook +- **useDemoSync**: `src/lib/demo-sync.ts` (~220 lines) — WebSocket JSON mode, auto-reconnect, exponential backoff, ping keepalive, optimistic updates, shape type filtering, resetDemo() + +### Demo page rewrites (6 apps) +| App | Shape Types | Key Interactions | +|-----|-------------|-----------------| +| rTrips | all (hub) | View cross-app data, toggle packing | +| rNotes | folk-note, folk-notebook, folk-packing-list | Expand notes, toggle packing checkboxes | +| rCart | demo-cart-item | Fund items, add to cart | +| rVote | demo-poll | Cast votes, see live tallies | +| rMaps | demo-map-marker, folk-destination | Click markers, view details | +| rFunds | demo-expense, folk-budget | Edit expenses, see balances | + +### Commits pushed to Gitea +- rspace-online: `0a32944` +- rtrips-online: `fa778ed` +- rnotes-online: `30f3383` +- rcart-online: `9d16bf3` +- rvote-online: `160a556` +- rmaps-online: `8e96d4e` +- rfunds-online: `216df8c` + diff --git a/backlog/tasks/task-17 - Enable-Always-Use-HTTPS-for-all-r-.online-domains.md b/backlog/tasks/task-17 - Enable-Always-Use-HTTPS-for-all-r-.online-domains.md new file mode 100644 index 0000000..1c46434 --- /dev/null +++ b/backlog/tasks/task-17 - Enable-Always-Use-HTTPS-for-all-r-.online-domains.md @@ -0,0 +1,25 @@ +--- +id: TASK-17 +title: Enable Always Use HTTPS for all r*.online domains +status: Done +assignee: [] +created_date: '2026-02-15 16:59' +labels: + - infrastructure + - ssl + - cloudflare +dependencies: [] +priority: high +--- + +## Description + + +All 10 r*.online domains were serving over plain HTTP without redirecting to HTTPS, causing browser "not secure" warnings. Enabled Cloudflare "Always Use HTTPS" setting via API for all zones. + + +## Final Summary + + +Enabled `always_use_https` via Cloudflare API (DNS token) for all 10 r*.online zones. HTTP now returns 301 redirect to HTTPS.\n\nDomains fixed: rspace.online, rtrips.online, rnotes.online, rcart.online, rvote.online, rmaps.online, rfunds.online, rwallet.online, rfiles.online, rnetwork.online\n\nNo code changes — Cloudflare zone setting only. +