Commit Graph

1649 Commits

Author SHA1 Message Date
Jeff Emmett 5af2eec04e Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m20s Details
2026-04-06 12:28:01 -04:00
Jeff Emmett 6c1298b796 fix(routing): prevent cached 301 redirects on root and standalone domains
Root route now sends no-cache headers to bust stale 301s from the
rcal standaloneDomain mishap. Standalone domain redirects changed from
301 (permanent/browser-cached) to 302 (temporary) so misconfiguration
can never stick in user browsers again.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 12:27:53 -04:00
Jeff Emmett c037e13423 feat(rmeets): minimal mode for clean meeting links without rSpace shell
Add ?minimal=1 query param that renders a full-screen Jitsi meeting
page without the rSpace header, tab bar, or module chrome. Used by
scheduled meeting links so guests get a clean, direct video call
experience. Includes prejoin screen, all standard Jitsi controls,
and auto-closes the tab when the meeting ends.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 01:24:31 +00:00
Jeff Emmett 905481eb84 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m22s Details
2026-04-05 16:04:08 -04:00
Jeff Emmett 7e07170304 fix: ranking drag-drop, spider slider drag, video gen timeout & progress
- Ranking: replace broken :hover drop-target with getBoundingClientRect hit testing
- Spider: add #isSliding guard to prevent slider destruction during drag
- Video gen: bump timeout to 10min, show real fal.ai queue position/status
- Fix NotificationCategory type to include 'payment' in db.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 16:03:58 -04:00
Jeff Emmett 8d7af7ce29 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m19s Details
2026-04-05 15:59:49 -04:00
Jeff Emmett 4420d9cafe feat(shell): move app switcher from left sidebar to bottom-right FAB
Repositions the rApp switcher as a floating action button in the bottom-right
corner that expands upward into a rounded panel. Removes all sidebar push-offset
CSS since the panel now overlays content without layout shift.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 15:59:36 -04:00
Jeff Emmett e32e80fc09 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m22s Details
2026-04-05 15:24:47 -04:00
Jeff Emmett 15ca1868b0 fix(rcal): fix calendar view layout bugs — uneven day widths, event overlap, duplicate detail
- Change grid-template-columns from repeat(7, 1fr) to repeat(7, minmax(0, 1fr)) to prevent
  content from stretching day cells unevenly
- Add computeEventColumns() helper using greedy interval-coloring algorithm with per-cluster
  column counts for tiling overlapping events side-by-side
- Apply sub-column layout to day view, week view, and horizontal day view so concurrent events
  no longer render on top of each other
- Guard duplicate day detail rendering when expanded day is at end-of-row or last day of month

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 15:24:30 -04:00
Jeff Emmett 5f00991264 Merge branch 'dev'
CI/CD / deploy (push) Successful in 3m0s Details
2026-04-05 15:14:14 -04:00
Jeff Emmett e4a0ccd80b feat(rtime): add gas tank fuel gauge and mycelial auto-connect suggestion
Replace thin 4px progress bar on task nodes with a prominent 12px fuel
gauge showing committed (green) + proposed (amber) hours vs total needed.
When an orb is dropped on open canvas, auto-find nearest unfulfilled task
and show a pulsing preview wire with confirm/dismiss buttons — human
approval required before creating the connection.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 15:13:54 -04:00
Jeff Emmett 06af5919bb Merge branch 'dev'
CI/CD / deploy (push) Failing after 3m0s Details
2026-04-05 14:29:38 -04:00
Jeff Emmett a43bc3b3ee fix: make profile dropdown buttons clickable (pointerdown→click)
pointerdown on document was hiding the dropdown before click could fire
on My Account / My Spaces / My Wallets buttons. Switching to click lets
stopPropagation in item handlers prevent premature close.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 14:29:20 -04:00
Jeff Emmett 0ed80a935b Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m8s Details
2026-04-04 19:25:22 -04:00
Jeff Emmett 9897bf6517 fix(rcal): revert standaloneDomain to rcal.online — rspace.online hijacked all traffic
Setting standaloneDomain to "rspace.online" caused the domain→module redirect
system to treat ALL rspace.online traffic as rcal, redirecting / to /rcal.
The correct value is "rcal.online" which redirects old rcal.online → rspace.online/rcal.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 19:25:14 -04:00
Jeff Emmett 9d3b3aa4a4 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m14s Details
2026-04-04 19:14:41 -04:00
Jeff Emmett b1c54a6e66 fix: update rCal landing, de-spam info popups, fix stale URLs & banner persistence
- rCal landing: strip inline style overrides, use standard rl-* CSS classes
- rCal mod: update standaloneDomain from rcal.online to rspace.online
- Info popup: change from per-rApp auto-show to global one-time auto-show
- Update banner: track dismissal in sessionStorage so it stops re-showing
  on every page load within the same session (likely the "persistent banner")
- rpubs landing: fix stale rcart.online URLs → demo.rspace.online/rcart

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 19:14:27 -04:00
Jeff Emmett 810d6d8cd7 Merge dev into main — resolve mod.ts conflict (take dev version with demo seeding)
CI/CD / deploy (push) Failing after 2m12s Details
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 18:58:17 -04:00
Jeff Emmett efb7ee5600 fix(rexchange): add demo seeding and server-rendered order book page
Replace missing folk-exchange-app.js with server-rendered HTML order book.
Seed 8 demo intents, 2 trades, and 5 reputation records on startup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 18:57:59 -04:00
Jeff Emmett cb95fdf850 feat(rexchange): add P2P crypto/fiat exchange module with escrow & reputation
CI/CD / deploy (push) Failing after 2m14s Details
Community members post buy/sell intents for CRDT tokens (cUSDC, $MYCO, fUSDC)
against 8 fiat currencies. Bipartite solver matches intents every 60s. Escrow
via token-service burn/mint trio. Reputation scoring with badges. 14 API routes,
canvas shape with physics orbs, and landing page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 18:32:37 -04:00
Jeff Emmett 66f3957bc4 fix: load persisted docs before module onInit to prevent re-seeding
Module onInit functions (rvote, rtasks, rcal, etc.) call seedDemoIfEmpty
which checks the sync server for existing docs. Previously onInit ran
as an IIFE before loadAllDocs completed, so it always found empty docs
and re-seeded demo data — overwriting user deletions/changes. Now
onInit runs inside the loadAllDocs .then() chain, ensuring persisted
data is loaded before any seed checks run.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 18:32:37 -04:00
Jeff Emmett a52cad4ee6 feat(rgov): clickable signoff gates with authority check + project recalc
Binary signoff nodes now have a clickable checkbox that toggles
satisfied state. Checks EncryptID JWT for authority (assignee match),
falls back to allowing anyone in demo mode. Toggling a signoff
auto-recalculates connected project aggregator gate counts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 18:32:37 -04:00
Jeff Emmett 3a3b83c807 fix(rgov): mobile-friendly canvas with collapsible sidebars and touch support
- Collapsible palette sidebar (hamburger toggle, hidden by default on mobile)
- Pinch-to-zoom and two-finger pan for touch/pen
- Larger touch targets for ports and zoom controls
- Responsive text sizing and compact toolbar on small screens
- Detail panel goes full-width on very small screens
- touch-action: none on SVG to prevent browser gesture conflicts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 18:32:37 -04:00
Jeff Emmett cc12f7a936 feat(rgov): standalone n8n-style GovMod circuit canvas
Add <folk-gov-circuit> component with interactive SVG canvas pre-loaded
with 3 demo governance circuits. 8 node types (signoff, threshold, knob,
project, quadratic, conviction, multisig, sankey) with pan/zoom, node
dragging, Bezier wiring, palette sidebar, and detail panel. Compatible
with rspace canvas shape types for rapplet integration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 18:32:37 -04:00
Jeff Emmett 996f9ec465 fix(rgov): render canvas directly instead of redirecting to /rspace
The rgov module page was showing a static description with a link to
/rspace. Now it renders the actual canvas (same as rspace module) with
moduleId="rgov" so GovMod shapes display inline at /rgov.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 18:32:37 -04:00
Jeff Emmett bf8e11d426 feat(rexchange): add P2P crypto/fiat exchange module with escrow & reputation
Community members post buy/sell intents for CRDT tokens (cUSDC, $MYCO, fUSDC)
against 8 fiat currencies. Bipartite solver matches intents every 60s. Escrow
via token-service burn/mint trio. Reputation scoring with badges. 14 API routes,
canvas shape with physics orbs, and landing page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 18:32:16 -04:00
Jeff Emmett 7f98dfcdb1 fix: load persisted docs before module onInit to prevent re-seeding
Module onInit functions (rvote, rtasks, rcal, etc.) call seedDemoIfEmpty
which checks the sync server for existing docs. Previously onInit ran
as an IIFE before loadAllDocs completed, so it always found empty docs
and re-seeded demo data — overwriting user deletions/changes. Now
onInit runs inside the loadAllDocs .then() chain, ensuring persisted
data is loaded before any seed checks run.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 04:05:51 +00:00
Jeff Emmett df8901c975 feat(rgov): clickable signoff gates with authority check + project recalc
Binary signoff nodes now have a clickable checkbox that toggles
satisfied state. Checks EncryptID JWT for authority (assignee match),
falls back to allowing anyone in demo mode. Toggling a signoff
auto-recalculates connected project aggregator gate counts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 02:07:13 +00:00
Jeff Emmett ba7a5733b8 fix(rgov): mobile-friendly canvas with collapsible sidebars and touch support
- Collapsible palette sidebar (hamburger toggle, hidden by default on mobile)
- Pinch-to-zoom and two-finger pan for touch/pen
- Larger touch targets for ports and zoom controls
- Responsive text sizing and compact toolbar on small screens
- Detail panel goes full-width on very small screens
- touch-action: none on SVG to prevent browser gesture conflicts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 02:04:52 +00:00
Jeff Emmett 2e2fbae8bf feat(rgov): standalone n8n-style GovMod circuit canvas
Add <folk-gov-circuit> component with interactive SVG canvas pre-loaded
with 3 demo governance circuits. 8 node types (signoff, threshold, knob,
project, quadratic, conviction, multisig, sankey) with pan/zoom, node
dragging, Bezier wiring, palette sidebar, and detail panel. Compatible
with rspace canvas shape types for rapplet integration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:55:52 +00:00
Jeff Emmett 5b4ab00a2d fix(rgov): render canvas directly instead of redirecting to /rspace
The rgov module page was showing a static description with a link to
/rspace. Now it renders the actual canvas (same as rspace module) with
moduleId="rgov" so GovMod shapes display inline at /rgov.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:41:08 +00:00
Jeff Emmett 0e2eebf890 feat(encryptid): add wallet lookup + payment notification APIs
Add internal endpoints for payment infrastructure integration:
- GET /api/internal/user-by-wallet — resolve wallet to email/username
- POST /api/internal/notify — trigger in-app notifications by wallet/DID
- Add 'payment' notification category and payment_sent/received event types

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:28:33 +00:00
Jeff Emmett 8f8ec25788 feat(encryptid): add wallet lookup + payment notification APIs
CI/CD / deploy (push) Successful in 3m3s Details
Add internal endpoints for payment infrastructure integration:
- GET /api/internal/user-by-wallet — resolve wallet to email/username
- POST /api/internal/notify — trigger in-app notifications by wallet/DID
- Add 'payment' notification category and payment_sent/received event types

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 00:59:49 +00:00
Jeff Emmett 7e61d23799 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m17s Details
2026-04-03 17:39:44 -07:00
Jeff Emmett d1a9fc338d feat(rtime): add external time logs API and fulfillment dashboard
Add ExternalTimeLog schema and REST endpoints for ingesting time entries
from backlog-md CLI. Auto-creates commitments, links to existing tasks,
and supports solo settlement with reputation/skill curve updates.

New Fulfillment dashboard tab shows time logs, skill totals with progress
bars, and inline settle buttons. Export-to-backlog endpoint enables
importing rTime tasks into local backlog.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 17:38:08 -07:00
Jeff Emmett eff95072ea Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m41s Details
2026-04-03 17:03:55 -07:00
Jeff Emmett b3d6f2eba8 feat(rgov): add quadratic, conviction, multisig & sankey GovMods
Four new governance circuit shapes for delegated democracy:
- folk-gov-quadratic: weight transformer (sqrt/log/linear dampening)
- folk-gov-conviction: time-weighted conviction accumulator (gate/tuner modes)
- folk-gov-multisig: M-of-N multiplexor gate with signer management
- folk-gov-sankey: auto-discovered governance flow visualizer with animated SVG

Registered in canvas-tools (4 AI tool declarations), index exports,
mod.ts (shapes, tools, types, seed Circuit 3), folk-gov-project
(recognizes new types), and landing page (Advanced GovMods section).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 17:03:39 -07:00
Jeff Emmett 5f2b3fd8d1 fix(rcart): streamline Transak widget — skip exchange screen, auto-fill user data
Added hideExchangeScreen, isAutoFillUserData, and paymentMethod params
to both Transak endpoints. This skips the initial exchange screen (we
already provide all required fields) and auto-fills email for Lite KYC,
reducing friction for small transactions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 16:04:59 -07:00
Jeff Emmett 42546c9a63 fix: use internal mailcow relay (port 25) for all SMTP transports
SMTP auth on port 587 was broken across all modules due to stale
credentials. Since rspace is on the mailcow Docker network, all 6
SMTP transports now use unauthenticated relay on port 25 when the
host is the internal postfix container. Fixes emails for: payment
receipts, space invitations, inbox approvals, agent notifications,
scheduled emails, and publication sharing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 15:12:42 -07:00
Jeff Emmett 4919ca1021 fix(rcart): use port 25 internal relay for payment emails
SMTP auth credentials were stale, causing all payment confirmation
emails to silently fail. Since rspace is on the mailcow Docker network,
use unauthenticated relay on port 25 instead of port 587 with auth.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 15:06:57 -07:00
Jeff Emmett 55067729b1 fix(rcart): graceful server-side page for paid/expired/cancelled payments
When a payment request is in a terminal state (paid, confirmed, expired,
cancelled, filled), the /pay/:id route now renders a static HTML page
with a clear message instead of loading the full JS component. Prevents
"corrupted content error" and shows a friendly "already paid" message.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:58:35 -07:00
Jeff Emmett f9dc06394c fix(rcart): force Transak dark mode with colorMode param
Text inputs were rendering in light mode making text invisible against
the dark background. Added colorMode: 'DARK' to both Transak widget
endpoints.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:52:28 -07:00
Jeff Emmett 15990cc147 fix(rcart): infer Transak fiat amount from crypto amount for stablecoins
When fiatAmount wasn't explicitly set on a payment request, Transak
defaulted to 300 USD. Now for USDC/USDT/DAI/cUSDC, the fiat amount
is inferred from the crypto amount (1:1 peg) so the widget opens with
the correct payment amount.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:48:48 -07:00
Jeff Emmett 4d06156e5f fix(rtime): scale commitment orbs relative to basket size
Orb radius now uses 8-15% of basket radius with sqrt(hours) scaling
instead of fixed pixel sizes (18+hours*9). Prevents orbs from being
oversized on small baskets or undersized on large ones. Hover expansion
also scales proportionally (15% instead of fixed 5px).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:41:05 -07:00
Jeff Emmett 0337797b7c fix(rtime): enable touch drag for commitment pool orbs on mobile
Add touch-action:none on canvas and preventDefault on pointerdown to
prevent the browser from claiming touch events for scroll/pan gestures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:35:45 -07:00
Jeff Emmett d4612d6fb8 fix(ascii-gen): handle raw HTML response from ascii-art service
The ascii-art service returns raw HTML, not JSON. Wrap response in
{html, text} JSON envelope and strip tags for plain text version.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:31:22 -07:00
Jeff Emmett 46c326278a feat: ASCII art canvas tool, video gen fixes, scribus/notebook sidecars
- Add folk-ascii-gen canvas shape with pattern/palette selectors
- Add POST /api/ascii-gen proxy to ascii-art service
- Register create_ascii_art in canvas tools + triage panel
- Fix WAN 2.1 t2v endpoint URL (fal-ai/wan/v2.1 → fal-ai/wan-t2v)
- Convert video gen to async job queue (avoids Cloudflare timeouts)
- Fix Docker API Content-Type bug in sidecar-manager
- Convert scribus-novnc and open-notebook to on-demand sidecars
- Add ensureSidecar("scribus-novnc") to rDesign bridge proxy
- Fix Hono ContextVariableMap and handleTransakMessage type errors

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:25:48 -07:00
Jeff Emmett 4ecdbc0ef0 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m34s Details
2026-04-03 14:20:59 -07:00
Jeff Emmett 801de38b4a feat(rtime): commitment splitting, pool removal & approval workflow
When dragging a commitment to a task, hours are now split (min of
available, needed), the pool orb shrinks or disappears, and
connections track proposed/committed status with approve/decline UI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 14:20:48 -07:00
Jeff Emmett b83dc1d32d Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m20s Details
2026-04-03 14:17:50 -07:00