All internal rMeets links were hardcoded to /{space}/rmeets, so clicking
Quick Meet on https://demo.rspace.online/rmeets landed on
https://demo.rspace.online/demo/rmeets/<id> — a banned path-with-subdomain
URL. Added rmeetsBase(c) that returns /rmeets on {space}.rspace.online and
/{space}/rmeets elsewhere; swept all five `base` sites plus the inline
meeting page's meetsBase.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
User preference: quiet + feminine. Swap Andrew (male) for Emma
(calmer, softer female than Aria). Drop volume 0.3 -> 0.25, reset
pitch to natural (deeper shift made it sound male). Rate stays slow.
Published hosted_url, pdf_url, epub_url, and all links in the reader
page now use {space}.rspace.online/rpubs/... (subdomain form) instead
of path-scoped rspace.online/{space}/rpubs/... — matching the site
convention that space slugs always appear as subdomains.
The server already rewrites subdomain → path-scope internally for
routing, so Hono route mounts stay the same.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Prior voice-mode prompt leaned too far into caveman/telegraphic speech
('drop articles'). User wants brevity with proper grammar — short
complete sentences, not neanderthal fragments.
- Add Web Speech API captions overlay in the default Jitsi meeting view,
broadcasting final/interim transcripts over Jitsi's data channel so each
participant sees everyone's speech in real time.
- Toggle via the MI FAB dropdown; degrades gracefully where SR is unsupported.
- miApiFetch + /api/mi-proxy now forward X-MI-Internal-Key so the Meeting
Intelligence recordings/search/meetings lists resolve from the backend
without per-user tokens.
- docker-compose exposes MEETING_INTELLIGENCE_API_URL, MI_INTERNAL_KEY,
JITSI_URL to the rspace container.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Default voice en-US-AvaMultilingualNeural -> en-US-AndrewMultilingualNeural
(smoother, less feminine timbre).
- Volume 0.55 -> 0.3, rate -8% -> -10%, pitch -2Hz -> -6Hz.
- Browser fallback matches: pitch 0.85, volume 0.3.
- Client passes voiceMode flag to /api/mi/ask; server appends a VOICE
MODE section to the system prompt demanding ≤1-2 short sentences,
no lists/markdown/emoji/preamble — because listening to long replies
is tedious.
Suspended contexts silently queued audio that never played. Await resume,
split connect() chain to avoid undefined-return on older browsers, and
re-check state after source setup in case first resume lost the gesture.
- epub-gen.ts: reflowable (markdown → styled xhtml) and fixed-layout
(Typst per-page PNGs wrapped as pre-paginated EPUB3). No new deps.
- typst-compile.ts: compileDocumentToPages() rasterizes Typst directly
to PNG via the CLI (no poppler/mupdf needed).
- Persistent publications store at /data/rpubs-publications/{space}/{slug}
with public reader page, PDF + EPUB downloads at /{space}/rpubs/publications/{slug}.
- Preview/Press step now has quick EPUB download buttons next to PDF.
- Publish panel: "Publish to {space}" is now the primary action, showing
hosted URL + copy-link after publishing. EPUB variants remain in downloads.
- Dockerfile: new PUBS_DIR volume for persistence.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Deduplicate cursor rendering using #uniquePeers() (was showing
multiple cursors per user from different tabs/sessions)
- Strict same-page filtering: cursors only visible when peers share
the same effectiveViewId (viewId ?? moduleId)
- Users on different rApps no longer see each other's cursors
- Applied same fixes to focus rings and panel "different view" badge
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Dockerfile.encryptid was missing COPY for server/welcome-email.ts,
causing container crash on startup.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Banzhaf & Shapley-Shubik power index computation via DP, integrated
into trust engine 5-min cycle. Power tab in rNetwork 3D graph viewer
with animated bar chart, Gini/HHI gauges, and Banzhaf-scaled node
sizes. On-demand computation when DB empty. Left-drag now rotates.
New files:
- src/encryptid/power-indices.ts (pure math: Banzhaf DP, SS DP, Gini, HHI)
- modules/rnetwork/components/folk-power-indices.ts (standalone component)
API: GET /api/power-indices, GET /api/power-indices/:did,
POST /api/power-indices/simulate
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Restructured rTime from pool+weaving side-by-side to commitment entry
form (left 50%) and pool orb visualization (right 50%). Inline form
replaces modal for pledging time. Commitments list shows below form.
Weaving SVG moved to separate toggled view via "Weave" button.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Enable chat notifications (brief popup for all participants)
- Move chat panel to right side via CHAT_PANEL_POSITION
- Applied to both clean room mode and folk-jitsi-room shell mode
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add "recording" to Jitsi toolbarButtons in both clean room mode
and folk-jitsi-room shell mode so users can trigger Jibri recording
- Add "View Transcript & Summary" link on meeting-ended screen
- Jibri network connectivity fixed on Netcup (was on wrong Docker
network, couldn't reach Prosody XMPP)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add saveDocImmediate() for synchronous awaitable saves (no debounce)
- Add SyncServer.flushAll() to iterate all in-memory docs
- Fix eviction race: onDocEvict now uses saveDocImmediate instead of
debounced saveDoc (which could fire after doc deleted from memory)
- Add SIGTERM/SIGINT handlers with 10s timeout safety net
- Add visibilitychange flush on client (reliable on mobile/bfcache)
- Flush pending IDB saves in DocSyncManager.disconnect()
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Only redirect to personal dashboard when on demo landing page.
Logging in from any module page now reloads in place.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove readonly and auto-focus the username webauthn input so mobile
browsers show passkey suggestions immediately when the sign-in modal
opens, matching the desktop experience.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add conditional mediation to sign-in modal so mobile browsers show
saved passkeys with usernames in the autofill area (desktop parity)
- Add publicWrite to rcred module so recompute route's own auth runs
instead of being blocked by the global write-access middleware
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Filter restored tabs against valid moduleIds from moduleList, deduplicate
on every restore path (localStorage, server sync, BroadcastChannel).
Add closed-module tracking to renderExternalAppShell to prevent server
sync from resurrecting tabs closed in the current session.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add shell tabs: Commitment Pool, Fulfillment, Open in Cyclos
- Move stats (hours, contributors, skill breakdown) into pool legend
- Remove internal tab-bar and stats-bar from component
- Listen for rapp-tab-change shell events for view switching
- Legacy routes redirect to new tab paths
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add app.notFound() handler with themed 404 page instead of Hono's
plain "404 Not Found". Restrict canvas.html SPA fallback to /rspace
sub-paths only — was serving index.html for all unmatched routes,
causing stale "Activated" page to appear on navigation errors.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add pool-out port to folk-commitment-pool, two new applets (weaving-coverage
for rTime, resource-coverage for rTasks), fetchLiveData polling in FolkApplet,
and canvas AI tool declarations for both new applets.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Reduce tabs to Members (default), Trust, CRM
- Remove empty outputPaths (Connections, Groups placeholders)
- Hide subnav when tabbar is present (avoid double menu)
- CRM tab redirects to the CRM sub-app
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
serveStatic resolves relative to dist/, so /dist/modules/ doubled the
prefix and 404'd. All other modules use /modules/rcred/file.js.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace inline filter buttons with standard shell sub-tabs (Members,
People, Companies, Trust, Layers). Default view now renders the 3D graph
on the Members tab with proper shell navigation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Dashboard was empty because folk-cred-dashboard.ts had no Vite build
entry — the JS never got compiled. Add build step to vite.config.ts,
fix script src to /dist/modules/rcred/folk-cred-dashboard.js, and
darken badge background from #fbbf24 to #d97706 so it doesn't blend
with the ⭐ emoji.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add r⭐ badge for rcred in favicon, app-switcher, and tab-bar badge
maps. Render 'r' with #dc8300 orange in badge pills across all three
components (favicon SVG tspan, app-switcher HTML spans, tab-bar HTML
spans). App names (e.g. "rDocs") intentionally left uncolored.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Triggers recomputeSpace('demo') 10s after init if no scores exist.
Allows unauthenticated recompute on demo space so visitors can click
the Recompute button.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
rcred.rspace.online was being treated as a space slug, triggering
auto-provision + redirect to /rspace. Now any subdomain matching a
known module ID (rcred, rvote, etc.) redirects to demo.rspace.online/{moduleId}.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 1 integration: fetch Drips account state via GraphQL API (eth_call fallback),
map streams → Source nodes and splits → Outcome nodes with auto-layout, import into
canvas flows with dedup and resync tracking. Schema v5→v6 adds dripsSyncs to CanvasFlow.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Week view: replace calc()-based absolute positioning with a mirror grid
overlay (grid-template-columns: 44px repeat(7,1fr)) so event columns
align pixel-perfectly with the underlying CSS grid at any browser zoom.
Fix min-interval padding to match min display size in week view
(20→23 min for 18px height) and day-horizontal view (30→45 min for
60px width), preventing visual bleed between adjacent short events.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove authenticatorAttachment:'platform' constraint so Firefox (and all
browsers) show security keys, phone-as-authenticator, and PIN options
alongside biometrics when registering a new passkey.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Simulation now has a 🔁 button that auto-replays the flow visualization.
Detects steady state, pauses briefly, resets to initial snapshot, repeats.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Demo space now seeds a clean welcome card explaining rSpace plus organized
feature cards for all 32+ rApps grouped by category, instead of 75 random
scenario objects.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Single-click module to zoom into cluster with smooth camera animation,
revealing doc labels. Double-click to open in new tab. Breadcrumb bar
for back-navigation. Non-focused nodes dim to 15% for context.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Send branded welcome email when user first adds profileEmail
- Reframe landing page around group coordination, not app listing
- Wordmark: orange r + teal Space matching favicon branding
- (you)rSpace wordplay in tagline, final CTA, meta tags, email
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
One-click extraction of generated artifacts (images, videos, SVGs) from
generator tools into standalone canvas objects visible to all collaborators.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>