Landing pages now consistently include "Start Guided Tour →" in the
hero CTA area. Components that already had internal tours (rbnb, rvnb,
rsplat) get a public startTour() wrapper; rtime and rmeets get full
TourEngine integration with contextual steps.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The demo previously showed a static SVG world map with 6 hardcoded print
providers — completely different from the real app. Now shows a real
MapLibre GL map with 5 animated participants, 4 waypoint pins, a route
line, and the full app UI (header, sidebar, controls, mobile bottom sheet).
Visitors see exactly what the product looks like.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Port hcc-mem-staging SPA into rSpace as the rTime module. Canvas-based
commitment pool with physics orbs, SVG weaving editor with hex nodes
and bezier wires, execution panel, and optional Cyclos timebank proxy.
Automerge CRDT persistence, demo seeding, and full landing page
explaining community-based ledgers and emergent collaboration.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add 120s AbortController timeout to apiFetch so wizard can't hang
forever on slow networks (shows "Request timed out" instead of stuck)
- Switch content generation from gemini-2.5-pro to gemini-2.5-flash
to avoid Cloudflare/Traefik proxy timeouts (pro model took 30-60s+)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Extract markdown-tiptap.ts and yjs-ws-provider.ts to shared/ for reuse
- Thread bodies render as formatted markdown via marked
- Replace compose textarea with TipTap rich-text editor + Yjs collab
- Add formatting toolbar (bold, italic, lists, code, links, etc.)
- Add TipTap comment editor with tiptap-json storage format
- Server accepts content_format on comment API
- Full ProseMirror + collab cursor CSS scoped to shadow DOM
- Editors cleaned up on navigation and disconnect
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Batch consecutive keystrokes into single suggestions via session tracker,
debounce panel sync (400ms) to prevent letter-by-letter flicker, and add
HTML5 drag-and-drop to move notes between notebooks in the sidebar.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move < button from inside search header to absolute-positioned on the
sidebar border at vertical midpoint. Matches the > reopen tab style.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Session was stored as { claims: { username, sub } } but getSessionInfo()
read sess.username (top-level) instead of sess.claims.username — always
falling back to "Anonymous". Fixed in all 3 locations: folk-notes-app,
comment-panel, collab-presence.
Also fixed awareness race: Yjs provider broadcast initial awareness before
user field was set, creating a ghost "anonymous" peer. Now identity is set
on awareness before provider connects, and the duplicate set is removed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Suggestions now appear as cards in the right-hand comment sidebar
with author, type (Added/Deleted), text preview, and Accept/Reject
- Clicking a suggestion card scrolls the editor to the marked text
- Removed "Accept All" and "Reject All" from the review bar — too blunt
- Review bar now directs users to the sidebar for granular review
- Sidebar auto-opens when suggestions exist
- Inline popover accept/reject still works for quick actions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add collapse button (<) in sidebar header top-right and reopen tab (>)
on left edge when collapsed. CSS grid transition for smooth animation.
Hidden on mobile where slide navigation handles sidebar state.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add GET /api/threads, /api/threads/:id, /api/campaigns, /api/campaigns/:id
REST endpoints so other rApps can fetch rsocials data
- Register folk-social-thread/campaign/newsletter in MI triage panel,
tool schema, system prompt, and KNOWN_TRIAGE_SHAPES
- Add rsocials MODULE_PORTS (threads-out, campaigns-out, post-published,
campaign-data) and WIDGET_API to folk-rapp for embed/widget mode
- Add rsocials to folk-feed FEED_ENDPOINTS (threads, campaigns, newsletter)
and normalize response arrays (threads, campaigns, drafts)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Transak staging sets X-Frame-Options: sameorigin, blocking iframe embedding.
Server now uses x-forwarded-host header for correct referrerDomain behind
Traefik, and returns env (STAGING/PRODUCTION) in transak-session response.
Client opens a popup window for staging instead of iframe.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Each space gets {space}-agent@rspace.online as a real Mailcow mailbox
(auto-provisioned with generated password). Inbound emails are IMAP-polled
and processed by MI (Gemini Flash) for auto-reply. All outbound emails
(approvals, notifications) set reply-to to the agent address so replies
route back through MI.
- mailcow.ts: createMailbox/deleteMailbox/mailboxExists API
- schema.sql + db.ts: agent_mailboxes table for per-space IMAP creds
- space-alias-service.ts: provisionAgentMailbox/deprovisionAgentMailbox
- server.ts: internal routes for agent mailbox CRUD + member-emails
- rinbox/mod.ts: initAgentMailbox, per-space IMAP sync, processAgentMI
- rinbox/agent-notify.ts: sendSpaceNotification (BCC members)
- rcal/rtasks/rvote: notification hooks on create
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Type **bold**, _italic_, ~~strike~~, `code`, etc. and they auto-convert
to rich text. Pasting markdown also converts to formatted content.
Added to all 4 editor instances (Yjs, legacy, bookmark, image, audio).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Comment sidebar → full-width bottom sheet at ≤768px (was ≤480px)
- Toolbar: collab tools (comment, suggest) reordered first on mobile
via CSS order so they're visible without scrolling
- Suggestion review bar wraps at mobile widths
- Toolbar scroll + larger touch targets promoted to ≤768px breakpoint
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove Personal, Agents, Tour from nav header. Move Guide/About behind
info icon (ⓘ). Space mailbox ({space}@rspace.online) shown first with
highlighted card spanning full width. Add demo threads for space mailbox.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Drafts tab shown by default with Automerge-backed CRUD. Listmonk tabs
conditionally appear when configured. Info banner for unconfigured state.
Draft editor with HTML preview, status dropdown, subscriber management.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace overlay sidebar with horizontal flex stack: full-width doc list
slides to full-width editor with back bar on note tap. Resize-aware.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Space invites: Convert both username-add and email-invite (existing user)
paths from direct-add to invite flow — creates space_invite via EncryptID,
sends invite email with Accept button, dispatches space_invite notification
with Accept/Decline buttons in the notification bell. No one gets forcefully
added to a space anymore.
rSocials content linking: All generated campaign content now links through
to actual editable content. Draft post cards in thread gallery are clickable
(thread editor or campaign view). Campaign manager post cards expand on click
and thread badges link to thread editor. Wizard success screen shows
individual thread links. CampaignPost schema gains threadId field, stored on
commit so posts maintain their thread association.
Also includes canvas social media tools, social shape components
(folk-social-thread, folk-social-campaign, folk-social-newsletter),
and MI context-aware suggestion registry.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- KiCad, FreeCAD, Blender, Scribus: add .wrapper flex container with
height:100% + min-height:0 so content stays within element bounds
- KiCad assembler: regex fallback for non-JSON tool results (SVG, Gerber, PDF)
- Scribus image gen: actually write downloaded fal.ai images to disk
(was creating imagePath but never saving bytes)
- Mount rspace-files volume in scribus-novnc so generated images are
accessible from both containers
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use curveStepAfter for the balance river so step transitions happen
exactly at transaction dates (curveBasis didn't pass through data points,
causing waterfall shapes to disconnect from the river edges)
- Update hardcoded USD estimates to current CoinGecko prices (2026-03-25)
- Add SAFE, COW, ENS, LDO, BAL to the price estimate table
- Fix BigInt→Number precision for large token balances (>2^53 wei) in
both price-feed enrichment and transfer value parsing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Stats, balance table, and DeFi positions all filter by selected chain
- Added proportional color bar showing each chain's share of total value
- Chain buttons show USD value + percentage on hover
- Bumped JS cache version to v=21
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
REST API events use location_lat/location_lng while the map panel
filters on latitude/longitude. Demo events set both, but non-demo
events only had location_lat/location_lng — so the map was always
empty outside demo.
Normalize both REST and Automerge event data to include latitude/
longitude aliases.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add <link rel="preload"> hints for MapLibre JS+CSS in the module HTML
so the browser starts fetching them in parallel with the main bundle,
instead of waiting until joinRoom() calls loadMapLibre().
Switch from unpkg (slow, no HTTP/2) to jsDelivr (faster edge caching).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace minimal rDesign landing with full rl-* pattern (hero, features,
how-it-works, capabilities, open source, data protection, CTA)
- Add Scribus button to Create toolbar group in canvas (folk-design-agent)
- Export FolkDesignAgent from lib/index.ts, register in canvas.html
- Update module icon from 🎯 to 🎨 (matches favicon + MODULE_META)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Backend: detect chains where Safe has transaction history even if
current balance is zero (queries all-transactions?limit=1)
- Frontend: stats (Total Value, Tokens) now update when clicking
chain filter buttons instead of always showing all-chain totals
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rewrite suggestion plugin to use ProseMirror props (handleTextInput,
handleKeyDown, handlePaste) instead of broken filterTransaction approach.
Typed text gets suggestionInsert mark (green underline), deleted text gets
suggestionDelete mark (red strikethrough). Add per-suggestion accept/reject
popover and review bar with Accept All / Reject All.
Fix comment panel text overflow with box-sizing: border-box, add
collapse/minimize toggle button.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SSE transport crashes on concurrent connections (supergateway
single-session limit). StreamableHTTP supports multiple sessions.
Also set KICAD_PYTHON=/usr/bin/python3 for existsSync validation
and install missing requests package.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reads COINGECKO_API_KEY from env (injected via Infisical) and appends
x_cg_demo_api_key param. Enables batch lookups + spam filtering.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Single-token wallets get CoinGecko verification + spam filtering.
Multi-token wallets attempt batch (works with Pro/Demo keys), degrade
gracefully on free tier — Safe API trusted+exclude_spam handles most spam.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix duplicate tiptap extension warnings by disabling link/underline in
StarterKit v3 (which now includes them by default)
- Move comment panel from metaZone (destroyed by renderMeta) to dedicated
comment sidebar next to the editor, Google Docs style
- Add click-on-highlight to open comment thread in sidebar
- New comment creation shows inline textarea with auto-focus
- Fix suggestion plugin: pass view getter instead of broken state.view access
- Improve comment panel styling: avatars, Google Docs yellow active border,
cleaner thread layout, Ctrl+Enter to submit, Escape to cancel
- Bump folk-notes-app cache version to v=7
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Revert per-address batching (rate limit cascade). Track cgAvailable flag
in cache — only apply spam filter when CoinGecko successfully returned data.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CoinGecko free tier now limits to 1 contract address per request.
Process in batches of 3 concurrent single-address requests with 1.5s delay.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ERC-20 tokens not recognized by CoinGecko and valued < $1 by Safe API
are now stripped from balance responses, removing fake ETH and airdrop spam.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Was reading `encryptid-token` (doesn't exist), now reads `encryptid_session`
and extracts `.accessToken` matching the pattern used by all other modules.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Dots were overlapping in small day cells. Now renders full-width 2px
color-coded stripes (solid for confirmed, dashed for tentative). Multi-day
spans also thinner (10px) with hidden text on mobile.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove internal view-tabs from folk-wallet-viewer — navigation now handled
entirely by shell subnav outputPaths: Budget (default), Token Balances, Flows.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Transfers: handle ETHEREUM_TRANSACTION txType as inflows (was only scanning
tx.transfers), exclude self-transfers from embedded transfers loop.
Balances: hide unpriced ERC-20s (airdrop spam) while keeping native tokens,
CRDT tokens, and CoinGecko-priced tokens. Filter zero balances on single-chain
Safe endpoint. Bump JS cache to v=20.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Simplify rWallet from 5 internal tabs to 3: Token Balances, Budget Visualization
(default), and Flows (Sankey + timeline scrubber with play/pause). Remove Yield
shell-level outputPath and route. Budget view auto-loads transfer data on entry.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>