Commit Graph

397 Commits

Author SHA1 Message Date
Jeff Emmett ef60e29da3 feat(rflows): richer 4-layer demo with overflow cascading down and back up
Redesign both demo presets with deeper multi-layer funnel networks:
- demoNodes: 3 sources → treasury → 3 domains → 5 teams → 11 outcomes
- simDemoNodes: 2 sources → treasury → 4 domains → 4 sub-teams → 10 outcomes
- Overflow paths create visible bidirectional flow (down and back up)
- Wider spacing between nodes for breathing room
- River view: larger layout constants (layer height, gaps, segment length)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 14:42:48 -07:00
Jeff Emmett 26c1e72bb1 feat(rsplat): switch to Hunyuan3D v2.1 for reliable image-to-3D
SAM 3D was designed for object segmentation, not full-scene
reconstruction — failed on arbitrary images. Hunyuan3D v2.1 produces
high-quality textured GLB meshes from any single image reliably.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 14:37:57 -07:00
Jeff Emmett 8ea2bb871b feat(rtube,rmeets): live 360° stream splitting + Jitsi External API
- rtube: 4 live-split proxy routes (start/status/stop/hls), new "360 Live"
  mode in folk-video-player with HLS.js multi-view grid player
- rmeets: ?api=1 route for Jitsi External API mode, new folk-jitsi-room
  web component with 360° Director panel (canvas captureStream)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 14:28:13 -07:00
Jeff Emmett 0f1090db44 feat(rsplat): switch AI generation from Trellis 2 to SAM 3D
SAM 3D outputs native Gaussian splat .ply files (rendered via existing
initSplatViewer) instead of GLB meshes, with full-scene support including
people and backgrounds. Faster generation (5-30s vs 45-75s), $0.02/gen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 14:03:39 -07:00
Jeff Emmett d270e7c03a feat(rtube): integrate 360split for splitting 360° videos into flat perspectives
Server-side proxy routes (POST /api/360split, GET status, POST import) fetch
video from R2, submit to video360-splitter, and import results back. Frontend
adds Split 360° button with settings modal, progress polling, and library import.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 13:55:31 -07:00
Jeff Emmett d62a5e9b15 feat(rtasks): add list view with checkmarks, drag-drop reordering with drop indicators
Board/List view toggle in nav bar. List view shows tasks grouped by status
with checkboxes (check → DONE, uncheck → TODO), priority left-border accent,
and strikethrough for completed items. Board view now shows a blue pulsing
drop indicator line during drag, supports in-column reordering via sort_order,
and cross-column drops land at the cursor position. Cache version bumped.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 13:48:28 -07:00
Jeff Emmett 0afde7547c Deep-link "Open in rTasks" to backlog task with banner
- "Open in rTasks" button passes ?backlog=TASK-ID query param
- Kanban component reads param and shows indigo banner with task ID
- Dismiss button removes banner and cleans URL

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 13:41:34 -07:00
Jeff Emmett cf296a3bb3 Add toggle (check/uncheck) to checklist items + "Open in rTasks" button
- checkAC → toggleAC: clicking a checked item unchecks it
- Tokens generated for all items (checked and unchecked)
- Checked items now clickable with green checkmark links
- Uncheck shows amber banner; check shows green banner
- "Open in rTasks" button links to kanban board

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 13:31:55 -07:00
Jeff Emmett 0728c9e516 chore(rsplat): bump JS/CSS cache versions for Cloudflare
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 13:28:44 -07:00
Jeff Emmett cf93b33c8b feat(rsplat): add % progress bar for 3D generation, fix auth token lookup
Replace indeterminate sliding animation with a realistic percentage fill
bar using logarithmic curve (asymptotes at 95%, based on ~60s typical
Trellis 2 timing). Jumps to 100% on completion.

Fix "sign in to save" showing for authenticated users by checking both
localStorage and cookie for auth token, and improving the 401 message
to "Session expired" when a token exists locally.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 13:02:38 -07:00
Jeff Emmett 21b1e8fa0a feat(rsplat): image staging endpoint, viewer improvements, SW updates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:24:40 -07:00
Jeff Emmett 9ecffff692 fix: use internal Docker SMTP hostname and fix noreply@rmail.online creds
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:17:05 -07:00
Jeff Emmett d0fbbd2ee5 fix(rtasks): mount checklist routes at top level to bypass space auth
The checklist check/send endpoints don't need space context — the HMAC
token and API key provide their own auth. Routes are now:
  GET  /rtasks/check/:token
  POST /api/rtasks/send

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:09:37 -07:00
Jeff Emmett 0ad67c54a6 feat(rtasks): add email checklist with HMAC-signed click-to-check links
POST /checklist/send builds and emails a styled checklist from backlog AC items.
GET /checklist/:token verifies the HMAC signature, toggles the AC in the
markdown file, and re-renders the page with fresh links for remaining items.

Adds dev-ops volume mount and RTASKS_HMAC_SECRET/RTASKS_API_KEY env vars.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:02:14 -07:00
Jeff Emmett d008b78727 fix(rsplat): save-to-gallery, remove broken media upload, fix leaks
- Add POST /api/splats/save-generated so AI-generated 3D models persist
- Add "Save to Gallery" button in viewer after AI generation
- Remove non-functional "Upload Photos/Video" tab (no processing worker)
- Add 120s server-side timeout on fal.ai Trellis 2 fetch
- Fix GLB viewer memory leak (animation loop + resize listener on disconnect)
- Show elapsed time + phase messages during generation progress
- Bump CSS v3, JS v4 cache versions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 00:56:33 -07:00
Jeff Emmett 8a82223b6f fix: remove deprecated PWA meta tag, add 3D gen timeout, quiet WS errors
Remove apple-mobile-web-app-capable (redundant with manifest.json display),
add AbortController timeout + 524 handling for /api/3d-gen fetch, and
downgrade CommunitySync WS error to console.warn since reconnect is automatic.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:23:00 -07:00
Jeff Emmett 9008640f79 perf(rnetwork): optimize 3D graph rendering + fix cross-platform mobile PWA
Graph performance: seed node positions to prevent NaN geometry warnings,
cache sprite textures, reduce simulation ticks (120→50 warmup, 300→150
cooldown), cap particles at 2, lower sphere segments, halve label canvas
size, add sessionStorage graph data cache with 60s TTL.

Mobile PWA: add both mobile-web-app-capable (Chrome/Android) and
apple-mobile-web-app-capable (iOS), viewport-fit=cover for notch support,
apple-mobile-web-app-title, safe-area CSS insets on header/body, fix
admin.html missing all mobile meta tags.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:08:22 -07:00
Jeff Emmett e498233666 chore: bump JS cache versions for multiplayer updates
rchoices v=2, rswag v=2, rwallet v=13

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 21:10:49 -07:00
Jeff Emmett 7e430490ba feat(rflows): rename progress bar to Repayment Progress, make it minimizable
- Timeline bar now shows "Repayment Progress" label
- Added minimize button (─/▶) to collapse the bar to a compact toggle
- When minimized, hides the track, label, and tick counter

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 01:19:16 +00:00
Jeff Emmett d3a6ad7dda feat: add Automerge schemas + local-first-clients for remaining modules
- rdesign: linked Affine projects per space
- rdocs: linked Docmost documents per space
- rmeets: meeting scheduling and history
- rmaps: persistent annotations, routes, meeting points
- rforum: local-first-client wrapping existing provision schemas

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:49:51 -07:00
Jeff Emmett a504a24a55 feat: add Automerge schemas + local-first-clients for tier-3 modules
- rdata: shared analytics dashboard config
- rphotos: shared album curation and photo annotations
- rtube: shared playlists and watch party sync
- rpubs: local-first-client wrapping existing draft schemas

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:47:37 -07:00
Jeff Emmett b86af45610 feat(rnetwork): add Automerge schemas + local-first-client for CRM sync
Contact metadata, relationships, and graph layout positions sync
via CRDT. Delegations remain server-authoritative in PostgreSQL.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:45:01 -07:00
Jeff Emmett ee54ec219d feat(rnetwork): add Layers mode for multi-rApp 3D visualization
Adds a "Layers" toggle to the graph viewer that lets users select 2-3
rApps and visualize them as labeled planes on user-assignable axes
(XY/XZ/YZ) with hub+feed nodes, cross-layer flow wiring via compatible
FlowKinds, animated particle edges, and unrestricted camera orbit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:44:50 -07:00
Jeff Emmett c0d2276d46 feat(rschedule): add local-first-client.ts for standalone sync
Wraps existing Automerge schemas with DocumentManager/DocSyncManager
for direct client-side sync. CRUD methods for jobs, reminders,
workflows, and execution log.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:43:26 -07:00
Jeff Emmett c0ae0e9a53 feat(rwallet): add multiplayer shared watchlist via Automerge CRDT
Shared wallet address watchlist syncs across space members. Click
watched address to load it in the visualizer. Transaction annotations
and dashboard config schema ready for future use.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:39:41 -07:00
Jeff Emmett 20c4a19e06 feat(rnetwork): absolute token weights instead of fractional averages
Weight accounting now uses actual base weights per authority (×100 for
integer tokens). Formula: effective = max(0, base - delegatedAway) + received.
If you have 95 Gov tokens and delegate 48, you retain 47; the recipient
gains 48 on top of their own base.

- Detail panel shows breakdown: base − delegated + received = effective
- Badge shows integer token count per authority
- Member list sidebar shows per-authority G/E/T weights (color-coded)
- Sorted by total effective weight (sum across all authorities)
- No more averages — absolute weight of voice

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:39:05 -07:00
Jeff Emmett 0db93695d8 feat(rswag): add multiplayer design sync via Automerge CRDT
Shared design metadata syncs across space members in real-time.
"Space Designs" gallery shows all designs with download links.
Artifact generation auto-publishes design metadata to peers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:34:06 -07:00
Jeff Emmett b67f30ac0a feat(rchoices): add multiplayer voting sessions via Automerge CRDT
Create local-first-client.ts and schemas.ts for real-time collaborative
voting. Dashboard now shows live polls with session cards, vote tallies,
and owner controls (close/delete). Votes sync across tabs via WebSocket.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:28:42 -07:00
Jeff Emmett 7cab8d6187 feat(rnetwork): responsive zoom, larger nodes/labels, member list sidebar
- Zoom: 2x/0.5x steps (was 1.33x/0.75x), 200ms animation, scroll speed 2.5x
- Node sizing: range 6-56px in trust mode (was 4-30px) for dramatic differentiation
- Text labels: 512x96 canvas with 36px font, 14x3.5 sprite scale (was 256x64, 24px, 8x2)
- Member list sidebar: toggled via "List" button, shows admins/members/viewers grouped
  with effective weight, click to fly camera to node, responsive mobile stack layout

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:21:23 -07:00
Jeff Emmett c233f1338b fix(rsplat): use three/addons/ import path to match importmap
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:18:19 -07:00
Jeff Emmett 03de21ddd5 feat(rnetwork): concentric spheres layout with Fibonacci distribution
Replace flat ring layout with 3D sphere distribution using Fibonacci
spiral for even node placement. Wireframe sphere guides replace flat
ring guides — visible from every camera angle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:05:30 -07:00
Jeff Emmett 246b51b2e0 feat(rbudgets): multiplayer sync, interactive pie chart, flow integration
- Add budget CRUD methods to FlowsLocalFirstClient (saveBudgetAllocation,
  addBudgetSegment, removeBudgetSegment, setBudgetTotalAmount)
- Init local-first client in budget view with real-time onChange sync
- extractBudgetState() recomputes collective averages from Automerge doc
- Debounced auto-save (1s) via scheduleBudgetSave() on slider/pie changes
- Interactive pie chart: click wedges to select, drag boundaries between
  segments to adjust allocation percentages with angle-to-pct geometry
- Selected segment highlighting (scaled wedge, white border, detail panel,
  slider row highlight, legend/table row click-to-select)
- "Apply to Flow" button pushes collective budget into canvas flow as
  funnel node with spending allocations mapped to outcome nodes
- LIVE indicator when WebSocket connected
- Falls back to API for demo/unauthenticated users

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:04:02 -07:00
Jeff Emmett 2cce369b7b chore(rsplat): bump JS/CSS cache version to v=2
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:03:22 -07:00
Jeff Emmett c5f757d050 fix(rsplat): resize images client-side before 3D generation, pass through fal.ai errors
Mobile photos (12MP+) were causing generation failures due to large base64 payloads.
Now resizes to max 1024px before sending. Server now returns actual fal.ai error
messages instead of generic "3D generation failed".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 16:56:35 -07:00
Jeff Emmett e5b5c551b1 feat(rnetwork): multi-select delegation with per-node sliders and fuzzy search
- Click any person/member node to add them to delegation selection
- Each selected node gets 3 inline sliders (Gov/Econ/Tech) for weight assignment
- Fuzzy search input in delegation panel to find and add members by name
- Remaining weight display per authority
- "Confirm All Delegations" commits all at once, recomputes weights live
- Replaces old two-step popup with single-panel multi-select UX

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 16:54:45 -07:00
Jeff Emmett 48cbf22492 fix(rnetwork): check URL space slug not effectiveSpace for demo detection
effectiveSpace resolves to 'global' for rnetwork (global-scoped module),
so check the URL space param instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 16:49:55 -07:00
Jeff Emmett 33721819db fix(rnetwork): show demo members in demo space even when CRM token exists
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 16:47:56 -07:00
Jeff Emmett 98cd239418 feat(rnetwork): weight accounting, ring layout, inline delegation UI
- Per-authority effective weight computation (delegated/received/retained)
- Concentric ring layout (admin/member/viewer) with visual guides
- Inline delegation popup with total + domain split sliders
- Authority labels renamed: Gov/Econ/Tech with consistent colors
- Authority-filtered edge view in trust mode
- Demo delegation preview with live graph updates
- Trust API endpoints for delegation CRUD and score queries

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 16:34:54 -07:00
Jeff Emmett af43e98812 feat(rflows): add rBudgets collective budget allocation sub-view
Adds a new "rBudgets" sub-tab to rFlows where participants allocate
budgets across departments via sliders, with a collective SVG pie chart
showing aggregated results. Includes schema v4 migration, budget CRUD
API routes, demo seed data (5 segments, 4 participants, $500k pool),
and slider auto-normalization to 100%. Removes redundant "Flows" and
"Flow Viewer" entries from outputPaths/subPageInfos.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 16:11:32 -07:00
Jeff Emmett cab80f30e7 refactor(rnetwork): move Open CRM to sub-nav header
Remove standalone "Open CRM" button from graph view body and add
"Open Twenty CRM" as an external link in the module sub-nav bar,
next to Community CRM. Dashed border + margin-left:auto pushes it
to the right edge for visual distinction.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 15:52:10 -07:00
Jeff Emmett e6f78a67e8 feat(rflows): Sankey-consistent edge widths, split controls, vessel path fixes
- Add computeFlowWidths() pre-pass for per-node proportional edge widths
  (outgoing edges sum to node pipe width, 8-80px range)
- Replace +/- buttons on edges with draggable split controls on nodes
  (source, funnel spending, funnel overflow — min 5% clamp, 60fps updates)
- Fix vessel wall path discontinuities by interpolating at pipe boundaries
- Stabilize overflow pipe sizing (fixed height, CSS opacity transitions)
- Tighten funnel foreignObject bounds to eliminate pointer-events overlap
- Replace foreignObject zone/overflow labels with SVG <text> elements
- Add inflow pipe indicator bars on funnels showing flow fill ratio

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 15:44:14 -07:00
Jeff Emmett 4cdba2e7de fix(rwallet): align yield rates table columns with fixed-width layout
Use table-layout:fixed with colgroup for consistent APY/30d Avg/TVL
column alignment. Dedicated yield-rates-table class with right-aligned
monospace numeric columns. Bump JS cache v=12.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 15:40:59 -07:00
Jeff Emmett a0723e261a fix(rbooks): use imported randomUUID() instead of crypto.randomUUID()
crypto.randomUUID() crashes in the server context during demo space
initialization, causing 502 Bad Gateway on /rbooks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 14:29:13 -07:00
Jeff Emmett fdf2a429f5 fix(rwallet): populate yield APY stats, hide top tabs on yield view
- Fix DeFi Llama field mapping: use apyMean30d + apyPct7D (apyMean7d
  doesn't exist in their API)
- Add apyBase, apy30d fields to YieldOpportunity type
- Deduplicate rates table (best APY per protocol+chain+asset)
- Hide "My Wallets / Wallet Visualizer" top tab bar on yield page
- Color-code APY values, better TVL formatting (B/M)
- Bump JS cache to v=11

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 12:41:11 -07:00
Jeff Emmett f9d4164f28 chore(rwallet): bump JS cache version to v=10
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 12:35:34 -07:00
Jeff Emmett 6d40904fa7 fix(rwallet): yield page renders standalone without wallet detection
Force topTab=visualizer and skip hero/address/features/examples when
activeView is yield. Works for both authenticated and anonymous users.
Yield rates auto-load on page init without requiring a wallet address.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 12:33:40 -07:00
Jeff Emmett 8da42095c6 fix(rwallet): show yield rates standalone on /yield page
Yield tab now auto-loads rates on page init and renders independently
of wallet detection — no longer gated behind hasData(). Shows rates
comparison table, header with description, and back button.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 11:58:02 -07:00
Jeff Emmett 3436393bfb feat(rwallet): add Aave V3 + Morpho Blue auto-yield for idle treasury
Adds yield-generating capability for idle stablecoins (USDC/USDT/DAI)
on Ethereum and Base via Aave V3 and Morpho Blue vaults, using the
existing Safe multisig proposal flow for governance.

New lib files: yield-protocols (constants/ABIs), yield-rates (DeFi Llama
+ Morpho GraphQL with 5min cache), yield-positions (on-chain queries),
yield-tx-builder (MultiSend calldata for Safe proposals),
yield-strategy (idle detection + allocation suggestions).

5 API routes, "Yield" view tab with rates table, position cards, and
advisory strategy suggestions. Zero new dependencies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 10:17:54 -07:00
Jeff Emmett 2264267ded feat(rflows): floating play button, auto-start demo, minimizable panels
- Add prominent floating Play/Pause FAB button (bottom center)
  with glow effect and pulse animation while running
- Auto-start simulation for demo and sim-demo flows on load
- Analytics panel now has a minimize button (◀/▶) to collapse
  to a narrow strip, preserving screen space
- Keep existing toolbar Play button for discoverability

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 17:15:21 +00:00
Jeff Emmett 99131df914 fix(rMortgage): use 5/10/15yr borrower term options
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 02:18:57 -07:00