chore: add backlog tasks 14-17

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-02-15 10:09:30 -07:00
parent 0a32944243
commit 65aeceddd1
4 changed files with 157 additions and 0 deletions

View File

@ -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
<!-- SECTION:DESCRIPTION:BEGIN -->
Fixed multiple issues preventing the FolkJS canvas and shapes from working properly.
<!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria
<!-- AC:BEGIN -->
- [ ] #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
<!-- AC:END -->
## Final Summary
<!-- SECTION:FINAL_SUMMARY:BEGIN -->
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)
<!-- SECTION:FINAL_SUMMARY:END -->

View File

@ -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
<!-- SECTION:DESCRIPTION:BEGIN -->
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.
<!-- SECTION:DESCRIPTION:END -->
## Final Summary
<!-- SECTION:FINAL_SUMMARY:BEGIN -->
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.
<!-- SECTION:FINAL_SUMMARY:END -->

View File

@ -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
<!-- SECTION:DESCRIPTION:BEGIN -->
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.
<!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria
<!-- AC:BEGIN -->
- [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
<!-- AC:END -->
## Final Summary
<!-- SECTION:FINAL_SUMMARY:BEGIN -->
## 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`
<!-- SECTION:FINAL_SUMMARY:END -->

View File

@ -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
<!-- SECTION:DESCRIPTION:BEGIN -->
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.
<!-- SECTION:DESCRIPTION:END -->
## Final Summary
<!-- SECTION:FINAL_SUMMARY:BEGIN -->
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.
<!-- SECTION:FINAL_SUMMARY:END -->