Commit Graph

968 Commits

Author SHA1 Message Date
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 66de66c2a3 Merge branch 'dev' 2026-03-15 16:35:26 -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 f1094e1a8b Merge branch 'dev' 2026-03-15 16:11:41 -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 4b47cc8340 Merge branch 'dev' 2026-03-15 15:52:17 -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 1765204d0d Merge branch 'dev' 2026-03-15 15:44:24 -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 36d36b97ce Merge branch 'dev' 2026-03-15 12:15:33 -07:00
Jeff Emmett 374f4adccb chore(backlog): add tasks 111-117 — rMortgage, yield, Braid, payment-infra open items
- TASK-111: rMortgage sub-tab (Done)
- TASK-112: Auto-yield Aave V3 + Morpho Blue (Done)
- TASK-113: Braid transport + SimpletonClient (Done)
- TASK-114: Get Transak API credentials (To Do, signup required)
- TASK-115: Get Basescan API key (To Do, signup required)
- TASK-116: Test CRDT escrow on Base Sepolia (To Do, signup required)
- TASK-117: Deploy escrow to Base mainnet (To Do, blocked by 114-116)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 12:15:25 -07:00
Jeff Emmett dda7df99ad Merge branch 'dev' 2026-03-15 12:13:25 -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
Jeff Emmett a1f8702988 feat(rMortgage): aggregate pool viz, earnings comparison, fewer tranches
- Pool summary cards clickable → aggregate breakdown vessel showing
  total outstanding/repaid/reinvested with earnings comparison bar
- Lender detail: earnings bar (interest vs reinvestment), advantage
  callout showing % gain from reinvesting returns
- Borrower options reduced from 6 to 3 tranches (10yr, 20yr, 30yr)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 02:14:39 -07:00
Jeff Emmett d955d18af4 fix(build): use regex pattern for three.js externalization in rsplat
The string pattern "three/addons/" didn't match "three/examples/jsm/..."
imports, causing vite build to fail on a clean Docker build.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 01:28:31 -07:00
Jeff Emmett 600e9080d0 feat(rflows): add rMortgage sub-tab with trust-backed lending & DeFi reinvestment
Social mortgage lending tracker at /mortgage with pool overview, active
positions table, lender detail vessel visualization, borrower options
panel (monthly-budget-constrained with lender fill bars), live Aave v3
rates on Base, reinvestment tracker, and yield projection calculator.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 01:23:14 -07:00
Jeff Emmett d642b856a9 feat(rflows): animated flow effects on waterfalls and connections
- 5-layer animated flow strips inside waterfall paths (denser, more visible)
- Glowing edge lines along waterfall boundaries
- Animated white dashes flowing along center spine of each waterfall
- Pulsing entry glow where flow meets a funnel or outcome node
- Exit glow where flow leaves a source or funnel
- Flow amount labels ($X.Xk/mo) on each waterfall
- Overflow branches now have animated flow strips and entry pulse
- New entryPulse CSS animation for connection point emphasis

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 05:56:30 +00:00
Jeff Emmett 35eadc8a34 feat(rflows): smaller funnels for faster simulation, all outcomes start at $0
- Shrink all funnel thresholds/capacities by ~5x so they fill and drain
  visibly within a few simulation ticks
- Zero out all outcome fundingReceived and reset statuses to not-started
- Same treatment for both BCRG Demo and Simulation Demo presets
- Funnels now cycle through fill/overflow/spend much more dynamically

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 05:17:02 +00:00
Jeff Emmett d7c1aaae9c feat(rflows): pipe size = desiredOutflow, flow = inflowRate
River visualization now shows:
- Pipe width = monthly desiredOutflow (what the funnel needs)
- Inner flow height = inflowRate (what it actually receives)
- Underfunded funnels (<95%) shown in red with funding percentage
- Label shows "$inflow → $outflow/mo" for at-a-glance funding health
- Fully funded funnels get sufficiency sparkle

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 04:52:55 +00:00
Jeff Emmett 3d4d2112dd feat(rflows): add simulation demo preset and dual pipe/flow visualization
- Add simDemoNodes preset: 1 source → treasury → 3 domain funnels → 6 outcomes
  All values start at zero so users can watch flow propagate through the system
- River visualization now shows pipe capacity (outer width) separately from
  active flow (inner fill height), making the two dimensions visually distinct
- Pipe width based on funnel capacity, inner flow based on current fill ratio
- Add "Simulation Demo" as a loadable flow alongside the BCRG Demo

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 04:10:13 +00:00
Jeff Emmett ccca8318a3 feat: payment email notifications, GLB viewer, and EncryptID email lookup
- Add EncryptID internal endpoint for email lookup by userId
- rcart: send "Payment Sent" to payer and "Payment Received" to recipient
- rcart: resolve emails via EncryptID when not provided in request
- rsplat: add GLB/GLTF 3D viewer using Three.js GLTFLoader
- rsplat: enable publicWrite for photo uploads without space membership
- docker-compose: add SITE_URL and SPLAT_NOTIFY_EMAIL env vars

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 04:02:07 +00:00
Jeff Emmett a2cebbddfa Merge branch 'dev' 2026-03-14 12:24:57 -07:00
Jeff Emmett 44e7639124 fix(rnetwork): switch to unpkg CDN with dynamic fallback for 3d-force-graph
jsdelivr was returning 503. Switch primary CDN to unpkg and add a dynamic
fallback loader that tries both CDNs if the initial script tag fails.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 12:24:54 -07:00
Jeff Emmett 778dfa90e5 Merge branch 'dev' 2026-03-12 23:34:57 -07:00
Jeff Emmett 28922da39f feat: typed ports, flow bridging, governance gates & data transforms
Unify arrow data pipes, LayerFlows, and governance shapes into a
coherent workflow substrate for collaborative rApp pipelines.

- Module-specific typed ports for 10 rApp modules (rcal, rtasks, etc.)
- Port picker UI when connecting shapes with port descriptors
- Flow-typed arrow coloring (economic=green, governance=purple, etc.)
- Arrow ↔ LayerFlow bridge: auto-create/remove Automerge flows
- Governance gates: vote/choice shapes can gate arrow data flow
- Safe data transforms on arrows (filter, map, pick, count, first, last)
- Transform editor UI (double-click or right-click pipe arrows)
- folk-feed auto-creation when dragging arrow to empty canvas

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 23:34:45 -07:00
Jeff Emmett ceb3d70495 Merge branch 'dev' 2026-03-12 22:45:22 -07:00
Jeff Emmett a1f8103237 fix(rnetwork): remove header and stats bar to maximize canvas space
Remove the "Network Graph" title and People/Organizations/Members/Cross-org
stats bar. Reduce toolbar margin for minimal chrome above the canvas.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:45:19 -07:00
Jeff Emmett 6cd1066e57 Merge branch 'dev' 2026-03-12 22:44:43 -07:00
Jeff Emmett 2532efd6cc fix(shell): align subnav/tabbar directly below tab row (top: 92px)
The subnav and tabbar had top: 128px which left a 36px gap below the
tab row. Changed to 92px (56px header + 36px tab row) and removed
extra margin-bottom. Added sibling rule so tabbar stacks below subnav
when both are present.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:44:36 -07:00
Jeff Emmett e1af7c785b Merge branch 'dev' 2026-03-12 22:42:37 -07:00
Jeff Emmett 40be1c63b3 feat(rmaps): add collaborative room sync to canvas folk-map shape
Integrate RoomSync, participant markers, location sharing, waypoints,
emoji avatars, and participant panel into the canvas map shape. Users
can now create collaborative map rooms directly from the canvas toolbar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:42:34 -07:00
Jeff Emmett ddaada7598 Merge branch 'dev' 2026-03-12 21:25:56 -07:00
Jeff Emmett 1b2842fc4a fix(rwallet): remove all gap between top tabs and content
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 21:25:53 -07:00
Jeff Emmett 13e7f75f0b Merge branch 'dev' 2026-03-12 21:20:10 -07:00
Jeff Emmett 8957dd8ea7 chore(rwallet): bump cache version to v=9
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 21:20:07 -07:00
Jeff Emmett fb249a8853 Merge branch 'dev' 2026-03-12 21:18:32 -07:00
Jeff Emmett 4d72ba164e feat(rmaps): decompose modals into sub-components + SW offline pinging
Extract meeting point, share, import, and privacy modals from
folk-map-viewer.ts (2504→2147 lines) into standalone web components
that communicate via CustomEvent dispatch. Add OSM tile caching
(cache-first, LRU at 500), IndexedDB room state persistence for
offline location pinging, and auto-persist room state on every sync
update so last-known positions survive tab close.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 21:18:16 -07:00
Jeff Emmett bae633c8df Merge branch 'dev' 2026-03-12 21:13:18 -07:00
Jeff Emmett 7c363dbae9 fix(rwallet): reduce gap between top tabs and content
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 21:13:10 -07:00
Jeff Emmett b0d918274d fix(rmaps): commit all pending rmaps changes and missing files
Add map-privacy.ts and updated folk-map-viewer.ts, map-push.ts, mod.ts
that were modified locally but never committed, breaking Docker builds.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 20:38:26 -07:00
Jeff Emmett 21a9a0f7e3 fix(rmaps): add missing map-import.ts to repo
File was created locally but never committed, breaking Docker builds.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 20:37:42 -07:00
Jeff Emmett e37fefe8a4 fix(rnetwork): treat TWENTY_API_TOKEN=disabled as unset
Infisical injects secrets at startup when the env var is empty/falsy,
so setting it to "disabled" blocks injection while this change ensures
the demo data fallback still triggers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 20:36:51 -07:00