Commit Graph

560 Commits

Author SHA1 Message Date
Jeff Emmett 93b9bc7722 fix: migrate campaign and social feed CSS to theme variables
Replaced remaining hardcoded dark colors in campaign page CSS and
rsocials social feed CSS with theme custom properties so they
respond to light/dark mode toggle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 10:35:54 -08:00
Jeff Emmett 5cf1f3a444 Merge branch 'dev' 2026-03-04 10:33:22 -08:00
Jeff Emmett 7b397b522c fix: [+] tab menu clipped by overflow — move outside scroll container
The add-menu dropdown was inside .tabs-scroll which has overflow-x: auto,
causing the browser to clip overflow-y as well (per CSS spec). Move the
.tab-add-wrap (button + menu) out of .tabs-scroll into .tab-bar directly
so the dropdown renders without clipping, beneath the [+] button.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 10:33:09 -08:00
Jeff Emmett ceff80a036 Merge branch 'dev' 2026-03-04 10:31:44 -08:00
Jeff Emmett f69ccf38d4 chore: additional theme variable migrations in rsocials
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 10:31:29 -08:00
Jeff Emmett 0359da3348 fix: migrate remaining hardcoded colors to CSS theme variables in rsocials
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 10:30:39 -08:00
Jeff Emmett abb3f57ca0 fix: space settings panel hidden behind canvas due to backdrop-filter containment
Move <rstack-space-settings> outside the header element so its position:fixed
is relative to the viewport instead of the 56px header (backdrop-filter creates
a containing block for fixed descendants). Bump panel z-index above all canvas
elements. Also migrate hardcoded colors to CSS theme variables across shell
components.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 10:30:20 -08:00
Jeff Emmett 4c088faaba Merge branch 'dev' 2026-03-04 10:12:50 -08:00
Jeff Emmett f5260e0817 feat: move dark/light mode toggle to user profile dropdown
Replaced the dark mode checkbox in the My Account modal with a
sun/moon toggle directly in the profile dropdown menu. Sun on the
left, moon on the right, with a colored slider (amber for light,
indigo for dark).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 10:12:42 -08:00
Jeff Emmett ed88103bbc Merge branch 'dev' 2026-03-04 10:03:52 -08:00
Jeff Emmett 7a11936483 fix: resolve mixed-content error in thread builder API calls
The bare-domain rewrite (rspace.online/rsocials/thread → /demo/rsocials/thread)
injected /demo/ into __BASE_PATH__, causing fetches to /demo/rsocials/api/threads
which triggered a 301 redirect to http://demo.rspace.online (mixed content blocked).
Now derives the base path from the actual browser URL. Also fixed layout so compose
input is on the left and thread preview is on the right.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 10:03:38 -08:00
Jeff Emmett adfd1a5697 Merge branch 'dev' 2026-03-04 09:58:09 -08:00
Jeff Emmett 495baa5935 fix: allow unauthenticated thread builder save/share operations
The space role middleware was blocking all POST/PUT requests from
unauthenticated users with a 403, preventing the thread builder's
save draft and share buttons from working. Added publicWrite module
flag to bypass the role check for modules with public API endpoints.
Also fixed saveDraft() to properly surface server errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 09:57:59 -08:00
Jeff Emmett f76615a890 Merge branch 'dev' 2026-03-03 21:05:33 -08:00
Jeff Emmett 676aaa7b3a feat: green flows, funnel coloring, full-page canvas, analytics popout
- All funding flow edges now use green shades (inflow/spending/overflow)
- Funnel nodes colored by 3-state support level: critical (red), sustained (amber), overflow (green)
- Removed tab system — canvas fills entire viewport with nav overlay
- Added left-side analytics popout panel (overview + transactions sub-tabs)
- Removed river tab code
- Updated legend to reflect new color scheme

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 21:05:23 -08:00
Jeff Emmett 829e3c722a Merge branch 'dev' 2026-03-03 20:13:49 -08:00
Jeff Emmett 098c3db04d feat: rFlows UX overhaul — funnel shapes, inline editing, side overflow ports
Replace rectangular funnel nodes with tapered SVG containers featuring
overflow lip notches on left/right sides and a narrow spending outflow
at the bottom. Funnels scale logarithmically by monthly funding rate.

Double-click enters inline edit mode with draggable threshold markers
(min/max/sufficient), editable labels via foreignObject, and a compact
toolbar (Done/Delete/... panel fallback). Single click now selects only.

Overflow edges route from side ports with horizontal bezier curves that
create a natural "spilling over" visual before curving to targets.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:13:40 -08:00
Jeff Emmett 3e4d236244 Merge branch 'dev' 2026-03-03 19:47:30 -08:00
Jeff Emmett aceeedb366 fix: resolve circular import crash in rnotes converters
Bun evaluates the converters Map after the circular import from obsidian.ts
triggers registerConverter(), causing "Cannot access before initialization".
Lazy-load converter modules via require() to break the cycle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 19:47:23 -08:00
Jeff Emmett 23a08bb6ed Merge branch 'dev' 2026-03-03 19:45:21 -08:00
Jeff Emmett 4822895ca4 fix: copy src/ directory into Docker image for notification module
The notification routes import from src/encryptid/db which was missing
from the production container, causing a crash loop on startup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 19:45:13 -08:00
Jeff Emmett 453fd7e6b4 Merge branch 'dev' 2026-03-03 19:13:27 -08:00
Jeff Emmett a6008a4f2d refactor: complete rfunds → rflows rename across configs and references
Update docker-compose, vite config, Traefik labels, module imports,
and all cross-module references to use the new rflows naming.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 19:13:14 -08:00
Jeff Emmett 91e9484219 Merge branch 'dev' 2026-03-03 19:12:32 -08:00
Jeff Emmett 20b75c999d feat: add photo upload for thread preview images
Allow users to upload their own image as a thread preview alongside the
existing AI generation option. Adds upload-image API endpoint with file
type/size validation and two side-by-side UI buttons.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 19:12:14 -08:00
Jeff Emmett cdfe8c5b78 feat: add unified notification system with real-time WS delivery
Persistent, PostgreSQL-backed notification system replacing the in-memory
access request polling. Notifications are created via notify(), persisted
to DB, and delivered in real-time over WebSocket with a 30s polling fallback.

Infrastructure:
- notifications + notification_preferences tables in EncryptID schema
- 10 CRUD functions in db.ts (create, list, count, read, dismiss, etc.)
- notification-service.ts: core notify(), WS registry, notifySpaceAdmins()
- notification-routes.ts: REST API at /api/notifications
- rstack-notification-bell.ts: bell icon component with dropdown panel

Module integration (11 hooks):
- spaces.ts: access_request, access_approved, access_denied, member_joined,
  member_left, role_changed
- index.ts WS handler: ping_user (24h expiry)
- encryptid/server.ts: guardian_accepted, recovery_initiated (owner + guardians),
  recovery_approved

Legacy cleanup:
- Removed access request polling, badge, and approve/deny UI from
  rstack-identity.ts (now handled by notification bell)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 18:59:09 -08:00
Jeff Emmett fbf3c02b98 Merge branch 'dev' 2026-03-03 18:20:46 -08:00
Jeff Emmett e838cb9a7e feat: add colorful, spatially-enriched calendar event rendering
Progressive spatial detail across all zoom levels: stacked source-color
bars in multi-year, multi-dot indicators in year views, city chips in
season, colored bg tints with location labels in month/week/day views,
description previews and virtual platform badges in day detail.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 18:20:14 -08:00
Jeff Emmett d4a20bf478 Merge branch 'dev' 2026-03-03 18:17:49 -08:00
Jeff Emmett 7e5499d087 feat: add multi-workspace Twenty CRM support & CRM view component
Enable multi-workspace mode in Twenty docker-compose with per-space API
token routing. Add folk-crm-view component with Pipeline, Contacts,
Companies, and Graph tabs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 18:17:09 -08:00
Jeff Emmett ec67bf46a5 Merge branch 'dev' 2026-03-03 17:43:17 -08:00
Jeff Emmett 5396c52c75 feat: add KOI-inspired knowledge provenance schema & calendar scheduling API
Add KnowledgeProvenance, ItemPreview, and ScheduledItemMetadata interfaces
to rcal schemas following BlockScience KOI's RID pattern. Extend POST
/api/events to accept scheduled knowledge items with provenance tracking,
add GET /api/events/scheduled endpoint with date/upcoming/pending filters,
and enable metadata patching on PATCH /api/events/:id for reminder status
updates.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 17:43:02 -08:00
Jeff Emmett b17f44a220 Merge branch 'dev' 2026-03-03 17:38:04 -08:00
Jeff Emmett bb052c49d3 feat: add universal reminders system with calendar integration & cross-module drag
Add a Reminders subsystem to rSchedule that lets users create date-based
reminders (free-form or linked to cross-module items), receive email
notifications via the existing tick loop, and sync bidirectionally with
rCal calendar events. Includes drag-and-drop from rWork task cards onto
calendar day cells to create reminders.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 17:37:54 -08:00
Jeff Emmett 7ec7a56cf2 Merge branch 'dev' 2026-03-03 17:11:29 -08:00
Jeff Emmett da2b21cd98 feat: add voice dictation to MI bar, markdown, chat & prompt inputs
Extract Web Speech API logic from folk-transcription into a reusable
SpeechDictation utility, then wire mic buttons into all 4 text input
surfaces. Dictation fills inputs in real-time without auto-submitting.
Hidden gracefully in unsupported browsers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 17:10:52 -08:00
Jeff Emmett e07f00109a Merge branch 'dev' 2026-03-03 16:30:35 -08:00
Jeff Emmett 997ccc0bef feat: add thread drafts, shareable permalinks & Twitter card previews
Thread builder now persists drafts to disk (JSON files in /data/files/threads/),
supports shareable permalink URLs with OG/Twitter meta tags, and generates
AI preview images via fal.ai for social card previews.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 16:29:52 -08:00
Jeff Emmett 4f49af905a Merge branch 'dev' 2026-03-03 16:28:13 -08:00
Jeff Emmett 763567baea feat: fix rApp canvas bugs + add widget data card mode
Fix zoom over iframes (transparent overlay captures wheel events),
eliminate black boxes (flex layout replaces calc height), and enable
resize handles (overlay lets pointerdown bubble to shape). Add widget
mode that fetches compact data from each module's API with 60s
auto-refresh, plus mode toggle button in header.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 16:26:33 -08:00
Jeff Emmett 82456933f1 Merge branch 'dev' 2026-03-03 16:06:18 -08:00
Jeff Emmett b6eeb41daf feat: add 3D stacked spider plot visualization component
Pure computation library (spider-3d.ts) with polar mesh generation,
overlap detection via point-in-polygon sampling, and membrane preset
mapping SpaceConnections to FlowKind axes. FolkShape component
(folk-spider-3d.ts) renders CSS 3D-transformed stacked SVG layers
with interactive orbit, dataset toggling, and demo data fallback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 16:05:46 -08:00
Jeff Emmett 455ad0b00a Merge branch 'dev' 2026-03-03 15:47:37 -08:00
Jeff Emmett 7db591da17 feat: add settings menus to all 4 decide/choice canvas elements
Each choice component now has a gear (⚙) settings panel for configuring
title, options, criteria, and tool-specific parameters inline on the canvas.

- folk-choice-vote: title, options (color+label), QV budget, reset votes
- folk-choice-conviction: title, options (color+label), reset stakes
- folk-choice-rank: title, options (label), reset rankings
- folk-choice-spider: title, options, criteria with weight sliders, reset scores

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 15:47:26 -08:00
Jeff Emmett c1bec9f9a9 Merge branch 'dev' 2026-03-03 15:18:02 -08:00
Jeff Emmett a5d4c22177 fix: rename schedule module ID to rschedule + update hero banner
Route is now /:space/rschedule (consistent with other rApp naming).
Hero: "Automate (you)rSpace, on (you)rSchedule."

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 15:16:45 -08:00
Jeff Emmett ea5336021d Merge branch 'dev' 2026-03-03 15:12:50 -08:00
Jeff Emmett 6ea4f1cf5a feat: add thread builder + /campaigns redirect + markdown import
- Add /thread route with two-column tweet thread composer and live preview
- Add /campaigns redirect to /campaign
- Add "Import from Markdown" modal to campaign page with platform select

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 15:12:20 -08:00
Jeff Emmett 73c0ea9292 Merge branch 'dev' 2026-03-03 15:11:14 -08:00
Jeff Emmett 92f75141eb fix: debounce synced event spam + fix rApp iframe 404s on subdomains
Synced event was firing 100+ times during initial Automerge sync negotiation.
Debounce with 300ms timer so it fires once after the burst settles.

folk-rapp iframes built URLs as /{space}/{moduleId} which on subdomain
URLs (jeff.rspace.online) got double-prefixed to /{space}/{space}/{moduleId}
causing 404s. Now detects subdomains and uses /{moduleId} directly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 15:10:51 -08:00