Commit Graph

1177 Commits

Author SHA1 Message Date
Jeff Emmett acafe15c4b feat(spaces): resolve member DIDs to usernames in space settings
Add POST /api/users/resolve-dids batch endpoint in EncryptID, proxy
/api/users/* through rspace server, and batch-resolve missing displayNames
in the space settings panel so owners and members show usernames not DIDs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 16:39:48 -07:00
Jeff Emmett 8a3cb3d6ba Merge branch 'dev' 2026-03-21 16:25:13 -07:00
Jeff Emmett a415d6c308 fix(mi): only minimize on Escape when input empty, fix mobile transform
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 16:25:06 -07:00
Jeff Emmett 2c8292e40c Merge branch 'dev' 2026-03-21 16:22:48 -07:00
Jeff Emmett b7aadf66cd feat(sync): proxy /api/user/* to EncryptID for cross-session tab state
Adds catch-all proxy route so client tab sync requests (saveTabs/syncTabsFromServer)
reach the EncryptID container. Also fixes rstack-mi panel positioning and
Shadow DOM click-outside handling.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 16:22:37 -07:00
Jeff Emmett b3c55040b3 Merge branch 'dev' 2026-03-21 16:18:50 -07:00
Jeff Emmett 9ed39d5cd0 fix(rpubs): adjust editor height to account for sub-nav bar
The editor used calc(100vh - 92px) which only accounted for header+tab
row, but the rpubs sub-nav (~48px) pushed the Generate Preview button
below the fold. Now uses calc(100vh - 140px).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 16:18:43 -07:00
Jeff Emmett eb3b1fe176 Merge branch 'dev' 2026-03-21 16:13:44 -07:00
Jeff Emmett fec0149f55 fix(shell): ensure header settings/history buttons are clickable
Add z-index stacking contexts to header left/right sections so buttons
render above center content and backdrop-filter pseudo-element. Add
overflow:hidden on center to prevent search bar overflow into button areas.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 16:13:38 -07:00
Jeff Emmett 9d6783604a Merge branch 'dev' 2026-03-21 16:04:32 -07:00
Jeff Emmett b679fc9f1f feat(spaces): bridge email invites with EncryptID identity system
New users get sent to /join for passkey registration + auto-space-join.
Existing users are directly added with in-app + email notification.
Add-by-username now also sends email notification if email is on file.

- Add id to /api/users/lookup response
- Enhance /api/internal/user-email/:userId with recovery + profile email
- Add GET /api/internal/user-by-email for email→DID resolution
- Rewrite POST /:slug/invite to use identity invite flow
- Add email notification to POST /:slug/members/add
- Add success/error feedback to space settings invite UI

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 16:04:22 -07:00
Jeff Emmett ecbbd2d5ff Merge branch 'dev' 2026-03-21 16:01:13 -07:00
Jeff Emmett ad2120f4fb fix(spaces): keep create-space dropdown open during interaction
The dropdown closed on every click (radio buttons, input focus, etc.)
because a global document click listener removed the "open" class.

- Add menu-level stopPropagation so clicks inside the dropdown don't
  close it
- Only close on clicks outside both trigger and menu
- Preserve form state (name, visibility, open/closed) across
  close/reopen so content isn't lost when accidentally clicking away

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 15:59:31 -07:00
Jeff Emmett 4823d92bd5 Merge branch 'dev' 2026-03-21 15:28:07 -07:00
Jeff Emmett 8ba805f3fa fix(rpubs): correct editor height to match shell layout (92px offset)
The editor used calc(100vh - 52px) but the shell has a 56px header +
36px tab row = 92px total. This pushed "Generate Preview" below the
fold. Also adds min-height on flipbook preview container.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 15:27:58 -07:00
Jeff Emmett 18cf1194d5 Merge branch 'dev' 2026-03-21 15:24:23 -07:00
Jeff Emmett ca9e91651c fix(spaces): default visibility to private (sovereign by default)
Spaces with missing/undefined visibility were falling through to "public"
in 7 places: normalizeVisibility fallback, migrateVisibility early return,
renderShell default, getSpaceConfig, space list APIs, and the HTML
injection middleware. All now default to "private". The migrateVisibility
function now writes "private" to docs with missing visibility on load.

Also fixed jeff and hash spaces on production (were undefined → private).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 15:24:00 -07:00
Jeff Emmett 8809dda6b8 Merge branch 'dev' 2026-03-21 15:03:16 -07:00
Jeff Emmett 7c29ccea41 feat(rinbox): bridge Listmonk newsletter campaigns with multisig approval
Newsletter campaigns now require N-of-M team member approval via rInbox
before Listmonk starts sending. The send-newsletter workflow node creates
a draft campaign and gates it through the team inbox; a manual submit-
approval route is also available. The multisig email UI shows a green
"Newsletter Approval" badge with campaign ID for newsletter approvals.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 15:03:06 -07:00
Jeff Emmett c83656d74b Merge branch 'dev' 2026-03-21 14:49:39 -07:00
Jeff Emmett 57e03f3049 feat(rsocials): add Campaign Wizard button to campaigns dashboard
Prominent teal gradient button in header and empty state of the
campaigns tab, linking to the AI-guided wizard.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 14:49:28 -07:00
Jeff Emmett 112fd29d9c Merge branch 'dev' 2026-03-21 14:42:00 -07:00
Jeff Emmett 5ad6c6ff77 feat(rsocials): add Campaign Wizard with 5-step AI-guided creation flow
Progressive approval workflow: paste brief → AI extracts structure →
AI generates per-platform posts → review with per-post regen →
commit (saves campaign, creates threads, drafts newsletters, builds workflow DAG).

Includes MI integration for Cmd+K campaign creation and vite build entry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 14:41:45 -07:00
Jeff Emmett f7c41594e4 Merge branch 'dev' 2026-03-21 14:23:33 -07:00
Jeff Emmett f8ab716722 feat(x402): bridge on-chain USDC payments with CRDT token ledger
Connects x402 (on-chain USDC via Base) and CRDT token system (Automerge cUSDC)
in both directions: on-chain payments auto-mint cUSDC to payer's DID, and users
can pay with cUSDC balance via new "crdt" payment scheme. 402 responses now
return both exact and crdt payment options.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 14:23:24 -07:00
Jeff Emmett 68ea2fe548 Merge branch 'dev' 2026-03-21 14:13:41 -07:00
Jeff Emmett aca0e6b353 feat(rsocials): connect drafted threads to campaign flows via picker dropdowns
Replace manual thread ID entry with select dropdowns in both campaign planner
and workflow components. Server-side publish-thread handler now resolves
linked threadId from Automerge doc when inline content is empty.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 14:13:31 -07:00
Jeff Emmett 55cd1743c2 Merge branch 'dev' 2026-03-21 13:59:44 -07:00
Jeff Emmett d31e8fdca4 feat(spaces): blank canvas init + team inbox provisioning
New spaces start with an empty canvas instead of 25+ template shapes.
Each space gets a {slug}@rspace.online team inbox (multi-sig ready)
via the rinbox onSpaceCreate hook. Fix EncryptID auto-provision passing
raw string instead of SpaceLifecycleContext to module hooks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 13:59:35 -07:00
Jeff Emmett 041f7423de Merge branch 'dev' 2026-03-21 13:52:24 -07:00
Jeff Emmett 97bf2d7987 feat(rwallet): integrate CRDT token flows into wallet visualizations
- Add transferTokens() and getAllTransfers() to token service
- Seed DAO ecosystem: cUSDC + BFT tokens, 3 treasuries, 6 participants,
  ~30 transactions spread over 60 days
- Add /api/crdt-tokens/transfers endpoint for ledger history
- Wire CRDT transfers into loadTransfers() with DID→pseudo-address mapping
- Update data transforms (timeline, sankey, multichain) to support
  _fromLabel/_toLabel for human-readable CRDT participant names
- Show viz tabs (Timeline, Flow Map, Sankey) when CRDT tokens exist
- Add "local"/"CRDT" chain to color and name maps

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 13:47:14 -07:00
Jeff Emmett 76eb197241 Merge branch 'dev' 2026-03-21 13:18:19 -07:00
Jeff Emmett ac9bd302d1 fix(rsocials): replace hardcoded dark-mode colors with CSS variables for light/dark theme support
Buttons, badges, focus states, avatars, links, inputs, and surfaces across
all rSocials components now use --rs-primary, --rs-error, --rs-success,
--rs-accent, --rs-bg-surface, --rs-input-bg, etc. with dark-mode fallbacks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 13:18:13 -07:00
Jeff Emmett 7778656fcd Merge branch 'dev' 2026-03-21 12:27:13 -07:00
Jeff Emmett e879f5e2f0 fix(rwallet): remove My Wallets / Wallet Visualizer top tab bar
Show the visualizer view directly without the top-level tab switcher,
keeping the sub-tab header (Balances, Yield, Timeline, etc.) intact.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 12:27:03 -07:00
Jeff Emmett dfd116feb7 Merge branch 'dev' 2026-03-21 12:26:46 -07:00
Jeff Emmett 031ffbbbfa feat(rpubs): replace sidebar with 3-step wizard flow (Create → Preview → Publish)
Restructures the editor from a cramped sidebar layout to a full-width stepped wizard,
matching the rpubs.online/press UX. Format and drafts moved to toolbar dropdowns,
auto-advances to preview after PDF generation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 12:26:38 -07:00
Jeff Emmett 4b8fd2fed0 Merge branch 'dev' 2026-03-20 23:51:37 -07:00
Jeff Emmett 4793f9c117 feat(crowdsurf): restore module and add Elo pairwise ranking layer
Restore CrowdSurf as standalone module with full integration (server,
app-switcher, shell favicon, rchoices tab, vite build). Add sortition-
based pairwise Elo ranking: users compare two activities head-to-head,
updating Elo ratings. Includes API endpoints (/api/crowdsurf/pair,
/api/crowdsurf/compare), Rank tab with leaderboard, and Elo badges.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 23:51:24 -07:00
Jeff Emmett 64aef258d1 Merge branch 'dev' 2026-03-20 23:22:05 -07:00
Jeff Emmett d99b85046c feat(rswag): full feature parity — POD clients, dithering, AI gen, fulfillment
8-phase implementation bringing rSwag module to parity with standalone rswag.online:
- Printful v2 + Prodigi v4 API clients with sandbox mode
- 11 dithering algorithms + screen-print color separations
- Gemini AI design generation + user artwork upload
- ~15 new API routes (designs, mockups, storefront, fulfillment, admin)
- 4-tab frontend UI (Browse, Create, HitherDither, Orders)
- Interactive revenue Sankey diagram on landing page
- Fulfillment bridge routing orders to nearest POD provider

Also includes: rChats module scaffold, rVote enhancements, crowdsurf removal,
rchoices cleanup, rwallet tweaks, app-switcher updates.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 23:21:53 -07:00
Jeff Emmett fea7e09c04 Merge branch 'dev' 2026-03-20 23:16:58 -07:00
Jeff Emmett e09ae1d8d2 fix(rnetwork): prevent TubeGeometry NaN errors in 3D graph
Links with curved curvature create TubeGeometry that crashes with NaN
positions when force simulation hasn't converged yet. Add linkVisibility
guard to hide links until both endpoints have valid coordinates, and
bump warmupTicks from 50 to 100 for more settling time.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 23:16:45 -07:00
Jeff Emmett d3cad4dc1c Merge branch 'dev' 2026-03-20 23:01:32 -07:00
Jeff Emmett 31fe552755 feat(rflows): add organic/mycorrhizal view mode toggle
Adds a toggleable alternative rendering mode for the rFlows canvas.
Sources become sporangia, funnels become mycorrhizal junctions,
outcomes become fruiting bodies, and edges become branching hyphae
with earth-tone aesthetics. Same data, same interactions, same ports.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 23:01:20 -07:00
Jeff Emmett 05646eeb4e Merge branch 'dev' 2026-03-20 22:55:22 -07:00
Jeff Emmett f5b455f83c feat(rpubs): port full feature parity from rpubs-online
Flipbook preview (pdf.js + StPageFlip), saddle-stitch imposition
(pdf-lib), DIY print guides, email PDF, printer discovery (curated
+ OSM Overpass), rCart order/batch integration, publish panel with
Share/DIY/Order tabs. 5 new API routes, 6 new files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 22:55:10 -07:00
Jeff Emmett 77f2e9ae56 fix(rpubs): allow public PDF generation + fix zine auto-spawn
- Add publicWrite to rpubs module (PDF gen is computational, not a write)
- Fix zine auto-spawn: wait for community-sync-ready event instead of
  fragile 800ms timeout

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 22:20:08 -07:00
Jeff Emmett d39c24c61b fix(rpubs): fix shadow root double-attach and PDF generate route
- Guard attachShadow with existing check to prevent crash on reconnect
- Fix API path: /pubs/api/generate → /rpubs/api/generate (module ID is rpubs)
- The "Unexpected non-whitespace character" error was HTML 404 parsed as JSON

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 22:14:16 -07:00
Jeff Emmett c23d7eb65b fix(canvas): reminder widget expands from schedule icon position
Instead of popping up at fixed top-right, the reminder mini-calendar
now appears at the 📅 icon's location and scales out from it.
Icon hides while widget is open, reappears on close.
Viewport-clamped to prevent off-screen overflow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 21:54:50 -07:00