Wrap formData() in try/catch with logging to diagnose Content-Type
issues through Cloudflare tunnel. Also fix client-side error handling
to clear progress timer and show actual error message on failure.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Default upload mode is now "Generate from Image" instead of splat upload
- Clicking anywhere in the dotted drop area opens the file browser
(not just the "browse" link)
- Add cursor: pointer to upload mode areas
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Make /api/3d-gen async with job queue + email notification on completion
- Add reminder mini-calendar widget to canvas (top-right on shape select)
- Make items draggable across 6 modules (rNotes, rTasks, rFiles, rSplat, rPhotos, rBooks)
- Upgrade rCal drop handler with time-picker popover instead of confirm()
- Show reminder indicators (dots + badges) on calendar days
- Fix subdomain routing: remove space slug from server-rendered sub-nav,
tab bar, and module links in production (/{moduleId} not /{space}/{moduleId})
- Add buildSpaceUrl() helper for correct external URL generation
- Fix rcart payment URLs for subdomain routing
- Fix rSchedule email links to use subdomain format
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Switch to fal.ai queue API (submit/poll/result) with 5-min deadline
to avoid synchronous timeout on long-running textured mesh generation
- Bump controls z-index to 100 so buttons aren't obscured by the
GaussianSplats3D canvas overlay
- Update progress phases for Hunyuan3D timing (60-180s)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Synchronous fal.run endpoint times out for textured mesh generation.
Switch to queue.fal.run submit/poll/result pattern with 5-minute
deadline. Update client progress phases for longer generation time.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SAM 3D was designed for object segmentation, not full-scene
reconstruction — failed on arbitrary images. Hunyuan3D v2.1 produces
high-quality textured GLB meshes from any single image reliably.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- rtube: 4 live-split proxy routes (start/status/stop/hls), new "360 Live"
mode in folk-video-player with HLS.js multi-view grid player
- rmeets: ?api=1 route for Jitsi External API mode, new folk-jitsi-room
web component with 360° Director panel (canvas captureStream)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SAM 3D outputs native Gaussian splat .ply files (rendered via existing
initSplatViewer) instead of GLB meshes, with full-scene support including
people and backgrounds. Faster generation (5-30s vs 45-75s), $0.02/gen.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Server-side proxy routes (POST /api/360split, GET status, POST import) fetch
video from R2, submit to video360-splitter, and import results back. Frontend
adds Split 360° button with settings modal, progress polling, and library import.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Board/List view toggle in nav bar. List view shows tasks grouped by status
with checkboxes (check → DONE, uncheck → TODO), priority left-border accent,
and strikethrough for completed items. Board view now shows a blue pulsing
drop indicator line during drag, supports in-column reordering via sort_order,
and cross-column drops land at the cursor position. Cache version bumped.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- "Open in rTasks" button passes ?backlog=TASK-ID query param
- Kanban component reads param and shows indigo banner with task ID
- Dismiss button removes banner and cleans URL
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- checkAC → toggleAC: clicking a checked item unchecks it
- Tokens generated for all items (checked and unchecked)
- Checked items now clickable with green checkmark links
- Uncheck shows amber banner; check shows green banner
- "Open in rTasks" button links to kanban board
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace indeterminate sliding animation with a realistic percentage fill
bar using logarithmic curve (asymptotes at 95%, based on ~60s typical
Trellis 2 timing). Jumps to 100% on completion.
Fix "sign in to save" showing for authenticated users by checking both
localStorage and cookie for auth token, and improving the 401 message
to "Session expired" when a token exists locally.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The checklist check/send endpoints don't need space context — the HMAC
token and API key provide their own auth. Routes are now:
GET /rtasks/check/:token
POST /api/rtasks/send
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
POST /checklist/send builds and emails a styled checklist from backlog AC items.
GET /checklist/:token verifies the HMAC signature, toggles the AC in the
markdown file, and re-renders the page with fresh links for remaining items.
Adds dev-ops volume mount and RTASKS_HMAC_SECRET/RTASKS_API_KEY env vars.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add POST /api/splats/save-generated so AI-generated 3D models persist
- Add "Save to Gallery" button in viewer after AI generation
- Remove non-functional "Upload Photos/Video" tab (no processing worker)
- Add 120s server-side timeout on fal.ai Trellis 2 fetch
- Fix GLB viewer memory leak (animation loop + resize listener on disconnect)
- Show elapsed time + phase messages during generation progress
- Bump CSS v3, JS v4 cache versions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove apple-mobile-web-app-capable (redundant with manifest.json display),
add AbortController timeout + 524 handling for /api/3d-gen fetch, and
downgrade CommunitySync WS error to console.warn since reconnect is automatic.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Graph performance: seed node positions to prevent NaN geometry warnings,
cache sprite textures, reduce simulation ticks (120→50 warmup, 300→150
cooldown), cap particles at 2, lower sphere segments, halve label canvas
size, add sessionStorage graph data cache with 60s TTL.
Mobile PWA: add both mobile-web-app-capable (Chrome/Android) and
apple-mobile-web-app-capable (iOS), viewport-fit=cover for notch support,
apple-mobile-web-app-title, safe-area CSS insets on header/body, fix
admin.html missing all mobile meta tags.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Timeline bar now shows "Repayment Progress" label
- Added minimize button (─/▶) to collapse the bar to a compact toggle
- When minimized, hides the track, label, and tick counter
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- rdesign: linked Affine projects per space
- rdocs: linked Docmost documents per space
- rmeets: meeting scheduling and history
- rmaps: persistent annotations, routes, meeting points
- rforum: local-first-client wrapping existing provision schemas
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Contact metadata, relationships, and graph layout positions sync
via CRDT. Delegations remain server-authoritative in PostgreSQL.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a "Layers" toggle to the graph viewer that lets users select 2-3
rApps and visualize them as labeled planes on user-assignable axes
(XY/XZ/YZ) with hub+feed nodes, cross-layer flow wiring via compatible
FlowKinds, animated particle edges, and unrestricted camera orbit.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wraps existing Automerge schemas with DocumentManager/DocSyncManager
for direct client-side sync. CRUD methods for jobs, reminders,
workflows, and execution log.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Shared wallet address watchlist syncs across space members. Click
watched address to load it in the visualizer. Transaction annotations
and dashboard config schema ready for future use.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Weight accounting now uses actual base weights per authority (×100 for
integer tokens). Formula: effective = max(0, base - delegatedAway) + received.
If you have 95 Gov tokens and delegate 48, you retain 47; the recipient
gains 48 on top of their own base.
- Detail panel shows breakdown: base − delegated + received = effective
- Badge shows integer token count per authority
- Member list sidebar shows per-authority G/E/T weights (color-coded)
- Sorted by total effective weight (sum across all authorities)
- No more averages — absolute weight of voice
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Shared design metadata syncs across space members in real-time.
"Space Designs" gallery shows all designs with download links.
Artifact generation auto-publishes design metadata to peers.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Create local-first-client.ts and schemas.ts for real-time collaborative
voting. Dashboard now shows live polls with session cards, vote tallies,
and owner controls (close/delete). Votes sync across tabs via WebSocket.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Zoom: 2x/0.5x steps (was 1.33x/0.75x), 200ms animation, scroll speed 2.5x
- Node sizing: range 6-56px in trust mode (was 4-30px) for dramatic differentiation
- Text labels: 512x96 canvas with 36px font, 14x3.5 sprite scale (was 256x64, 24px, 8x2)
- Member list sidebar: toggled via "List" button, shows admins/members/viewers grouped
with effective weight, click to fly camera to node, responsive mobile stack layout
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace flat ring layout with 3D sphere distribution using Fibonacci
spiral for even node placement. Wireframe sphere guides replace flat
ring guides — visible from every camera angle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add budget CRUD methods to FlowsLocalFirstClient (saveBudgetAllocation,
addBudgetSegment, removeBudgetSegment, setBudgetTotalAmount)
- Init local-first client in budget view with real-time onChange sync
- extractBudgetState() recomputes collective averages from Automerge doc
- Debounced auto-save (1s) via scheduleBudgetSave() on slider/pie changes
- Interactive pie chart: click wedges to select, drag boundaries between
segments to adjust allocation percentages with angle-to-pct geometry
- Selected segment highlighting (scaled wedge, white border, detail panel,
slider row highlight, legend/table row click-to-select)
- "Apply to Flow" button pushes collective budget into canvas flow as
funnel node with spending allocations mapped to outcome nodes
- LIVE indicator when WebSocket connected
- Falls back to API for demo/unauthenticated users
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Mobile photos (12MP+) were causing generation failures due to large base64 payloads.
Now resizes to max 1024px before sending. Server now returns actual fal.ai error
messages instead of generic "3D generation failed".
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Click any person/member node to add them to delegation selection
- Each selected node gets 3 inline sliders (Gov/Econ/Tech) for weight assignment
- Fuzzy search input in delegation panel to find and add members by name
- Remaining weight display per authority
- "Confirm All Delegations" commits all at once, recomputes weights live
- Replaces old two-step popup with single-panel multi-select UX
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
effectiveSpace resolves to 'global' for rnetwork (global-scoped module),
so check the URL space param instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 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>
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>
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>
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>
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>
- 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>
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>
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>
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>
- 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>
- 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>
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>
- 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>
- 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>
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>
- 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>
- 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>
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>
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>
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>
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>
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>
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>
Add types/hono.d.ts declaring effectiveSpace, spaceRole, and isOwner
on Hono's ContextVariableMap. Remove 127 "as any" casts across 18
files. Fix ParticipantStatus type in rmaps SyncMessage union.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Contribute button now offers "Pay Now" (creates a PaymentRequest linked
to the cart, navigates to the existing payment page) alongside "Record
Manual". When the payment completes, the server auto-records a
contribution on the cart with amount, method, and txHash.
- Add recipientAddress to ShoppingCartDoc, linkedCartId to PaymentRequestMeta
- New POST /api/shopping-carts/:cartId/contribute-pay route
- Payment status handler propagates paid → cart contribution
- Payment page shows "Return to Cart" link for linked payments
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds Arbitrum Sepolia, Optimism Sepolia, Polygon Amoy, Avalanche Fuji,
and BSC Testnet with RPC URLs, native tokens, popular ERC-20s, and
Alchemy slug mappings.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Enrich 5 demo orders with items, buyer, payment, provider, and timeline.
Order cards show thumbnails and item counts; clicking opens a detail view
with payment info, buyer, provider, and timeline using the existing
catalog-detail 2-column layout. Demo payments expanded to 5 (3 linked).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove Demo DAO and space hub placeholder nodes — members now connect
only via trust delegation edges. Add 24 new members (m25–m48) with
ops-vertical specializations and expand delegation arrays to 141 edges
(47 per authority) with proper hierarchical flow patterns.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The flex centering on main:has() was causing the subnav to shrink-wrap
and the page content to left-align on desktop. Use margin: 0 auto on
the components directly so the subnav stays full-width.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replaces vertical faucet sources with horizontal side taps (pipe → rotary
valve → angled nozzle → stream), rectangular tank funnels with tapered
vessels (wide top → narrow drain spout, overflow pipes at max threshold),
and card-style outcomes with U-shaped collection basins (status-colored
water fill, ripple patterns, phase markers).
Adds SVG defs for metallic pipe gradients, water surface shimmer, ripple
patterns, overflow splash effects, and status-colored basin water fills.
CSS animations for water shimmer, overflow pulse, basin transitions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
demo.rspace.online subdomain already identifies the space, so paths
should not redundantly include /demo/. Replaced 7 occurrences across
rcart, rswag, rpubs, rschedule, and space-switcher with either relative
paths or full demo.rspace.online URLs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Theme fix: Hub page CSS used non-existent variable names with dark-mode
fallbacks (--rs-surface, --rs-bg, --rs-surface-hover), so it always
rendered dark regardless of user theme. Fixed to use correct theme
variables (--rs-bg-surface, --rs-input-bg, --rs-bg-hover, etc.).
Also removed forced theme:"dark" override on the hub page route.
Subnav: Added "Create Call" to outputPaths so the module subnav shows
Create Call / Rooms / Recordings pills. Added mobile breakpoint for
the hub nav cards.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The cart.css had `display:flex; align-items:center` on main:has(folk-payment-page)
which fought with the component's own `width:100%; margin:0 auto` centering:
- flex align-items:center shrunk the subnav to content width
- padding:0 0.5rem overrode shell.css padding-top:92px (desktop)
- Redundant since all components already self-center with margin:auto
Also hide the shop subnav on public-facing pages (/pay/:id, /group-buy/:id)
since payers/pledgers don't need Carts/Catalog/Orders navigation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove duplicate internal nav (.rapp-nav tabs) from folk-cart-shop —
the shell subnav pills already provide this navigation
- Read initial-view attribute so shell subnav routing works correctly
- Add margin: 0 auto centering to all narrow page components
(payment-page, payment-request, payments-dashboard, group-buy-page)
- Add overflow-wrap: break-word to prevent text/address overflow
- Comprehensive mobile breakpoints across all components:
- folk-cart-shop: 600px + 400px (grid stacking, card sizing, forms)
- folk-payments-dashboard: 600px + 480px (header, cards, tabs)
- folk-group-buy-page: already had good breakpoints, added centering
- cart.css: remove justify-content:center (bad for long pages),
add horizontal padding for mobile
- Fix share-input overflow with min-width:0 + text-overflow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add margin: 0 auto to center the page instead of left-aligning
- Add overflow-wrap/word-break on wallet addresses, tx hashes, URLs
- Add min-width: 0 + text-overflow on share input to prevent flex overflow
- Comprehensive mobile breakpoints at 600px and 380px for all sections
(staging banner, recipient info, header, amount, tabs, footer)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add comprehensive responsive breakpoints at 600px and 380px:
- Stack step card, form field rows, share rows vertically
- Scale down typography (title, amount, hints)
- Reduce padding and QR code size for narrow screens
- Make toggle buttons and method toggles compact
- Full-width action buttons on mobile
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Recurring Executor (new module):
- Server-managed relayer keypair derived deterministically via HKDF
- Checks on-chain ERC-20 allowance before pulling funds
- Executes transferFrom when subscriptions are due
- Supports Base, Base Sepolia, and Ethereum mainnet
New API Endpoints:
- GET /api/payments/:id/subscription-info — returns relayer address and
approve calldata for the client to authorize recurring pulls
- POST /api/payments/:id/subscribe — registers a subscription after
payer approves on-chain allowance, verifies allowance exists
Scheduler Upgrade:
- Attempts automated pull first for subscriptions with approved allowance
- Falls back to email reminder if auto-pull fails or is not configured
- Sends branded receipt email after successful automated payments
- Extracted email templates into reusable helper functions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Layer 1 — Schema & History:
- Added PaymentRecord type for individual payment tracking
- Added interval (weekly/biweekly/monthly/quarterly/yearly), nextDueAt,
subscriberEmail, and paymentHistory[] to PaymentRequestMeta
- Payment history records txHash, method, amount, paidAt for each payment
Layer 2 — Server-Side Scheduler:
- Hourly subscription reminder scheduler sends email notifications
when recurring payments are due (based on nextDueAt)
- nextDueAt auto-computed after each successful subscription payment
- Grace period prevents duplicate reminders
- Branded HTML reminder emails with "Pay Now" button
UI Updates:
- Billing interval selector (weekly through yearly) shown for
subscription and payer_choice payment types
- Payment page shows subscription badge with interval and history count
- Next due date displayed for active subscriptions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace parseFloat * 10^decimals with string-based decimal parsing to
avoid precision loss for 18-decimal tokens (ETH). Affects both MetaMask
and EncryptID payment paths.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Payment schema now includes creatorUsername, displayed alongside the
truncated wallet address on the payer-facing payment page
- New "Share by email" feature on the payment request page: enter
comma-separated emails to send branded payment links via email
- New POST /api/payments/:id/share-email endpoint with HTML email template
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add intermediate breakpoints (960px, 1024px, 900px, 640px, 600px) for tablets and fold
devices across all 12 rApp components. Add touch-action: manipulation and
-webkit-tap-highlight-color to eliminate 300ms tap delay. Fix undersized tap targets
(<36px) in rtasks, rfiles, rinbox, and rcart. Replace HTML5 drag API with pointer events
in rtasks kanban and rchoices ranking for touch/pen/mouse parity. Replace mouseenter/
mouseleave with pointerenter/pointerleave in rchoices spider chart with click toggle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add intermediate breakpoints (960px, 1024px, 900px, 640px, 600px) for tablets and fold
devices across all 12 rApp components. Add touch-action: manipulation and
-webkit-tap-highlight-color to eliminate 300ms tap delay. Fix undersized tap targets
(<36px) in rtasks, rfiles, rinbox, and rcart. Replace HTML5 drag API with pointer events
in rtasks kanban and rchoices ranking for touch/pen/mouse parity. Replace mouseenter/
mouseleave with pointerenter/pointerleave in rchoices spider chart with click toggle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Payment page now shows recipient info and available payment methods
- Testnet chains show staging environment disclaimer
- Transak widget receives effective amount for editable-amount payments
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
WebAuthn PRF extension is unsupported on most mobile browsers, causing
"Could not derive wallet address" error. Added 3-layer fallback:
1. Client-side PRF derivation (desktop)
2. Server-side wallet lookup via session API
3. DID-based deterministic address provisioning
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>