Commit Graph

242 Commits

Author SHA1 Message Date
Jeff Emmett c4ebecf5df Merge branch 'dev' 2026-02-27 18:02:52 -08:00
Jeff Emmett eb05639608 fix: use rspaceNavUrl for (you)rSpace CTA redirect + pass onSuccess callback
The auto-provision redirect was hardcoding /${slug}/canvas which is a
404 (canvas module id is "rspace"). Now uses rspaceNavUrl() for correct
subdomain/path routing. Also passes onSuccess to showAuthModal so
auto-provision runs even when signing in from a non-demo space.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 18:02:22 -08:00
Jeff Emmett 6f4befdd19 Merge branch 'dev' 2026-02-27 17:52:07 -08:00
Jeff Emmett b32d752858 feat: redirect all r*.online domains to rspace.online/r*
Replace internal rewrites with 301 redirects for all standalone
domains. Handles bare domains, subdomains, paths, and query strings:
- rnotes.online/ → rspace.online/rnotes
- rnotes.online/alice/path → alice.rspace.online/rnotes/path
- alice.rnotes.online/path → alice.rspace.online/rnotes/path
- rnotes.online/api/... → rspace.online/rnotes/api/...

Traefik labels updated to also match *.r*.online subdomains.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:51:57 -08:00
Jeff Emmett c00379eee6 Merge branch 'dev' 2026-02-27 17:51:00 -08:00
Jeff Emmett 2ec5027285 feat: restyle rSpace.online about page to rApp theme + (you)rSpace CTA in space switcher
Restyled website/index.html to use the standard rl-* rich landing CSS
utilities matching all rApp module landing pages: rl-hero, rl-section,
rl-card, rl-grid-3, rl-icon-box, rl-cta-primary/secondary. All original
content preserved (EncryptID, Offline-First, Interoperable, Newsletter).

Added (you)rSpace CTA button in the space switcher dropdown — shows
"Sign in to create" or "Create (you)rSpace" when user has no owned space,
with auto-provision flow on click.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:50:30 -08:00
Jeff Emmett 54851861c0 Merge branch 'dev' 2026-02-27 17:35:35 -08:00
Jeff Emmett ab3132a5f0 feat: space cleanup + Edit Space modal (delete, update meta, manage members)
Backend: deleteCommunity(), updateSpaceMeta(), DELETE/PATCH space endpoints,
member CRUD, per-space access-requests GET. UI: gear icon on owned spaces,
3-tab Edit Space modal (Settings, Members, Invitations) in space switcher.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:35:24 -08:00
Jeff Emmett 7108bcb6ad Merge branch 'dev' 2026-02-27 17:20:20 -08:00
Jeff Emmett 01443d6974 fix: landing page header — inline header CSS to avoid shell.css global reset
Reverted shell.css import on landing.html (its global `*` reset destroys
Tailwind layout). Instead: shell.js for component registration + inline
rstack-header CSS only. The standard header with logo, app-switcher,
MI bar, identity, and Try Demo now renders without breaking the page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:20:12 -08:00
Jeff Emmett d64bedf647 Merge branch 'dev' 2026-02-27 17:16:40 -08:00
Jeff Emmett c54be8e043 feat: logo + standardized header across all rSpace pages
- Add logo.png to every rstack-header (landing, canvas, index, admin, create-space, renderShell, module landing)
- Landing page: replace Next.js nav with standard rstack-header (app-switcher, MI bar, identity, Try Demo)
- index.html, admin.html, create-space.html: add RStackMi import + define
- index.html: add auth-change listener for space switcher reload
- shell.css: add .rstack-header__logo style (28px rounded)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:16:29 -08:00
Jeff Emmett 6f80f7abeb Merge branch 'dev' 2026-02-27 17:09:39 -08:00
Jeff Emmett 6c225590d9 feat: standardize canvas header to match renderShell (MI bar, welcome, Try Demo)
Canvas.html now has full parity with the shell header used by all other rApps:
- Register RStackMi so the MI bar actually works on canvas
- Add "Try Demo" button, welcome overlay for first-time demo visitors
- Add iframe detection (rspace-embedded), auth-change listener, auto-space resolution

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:09:28 -08:00
Jeff Emmett 8a29c7bf8d Merge branch 'dev' 2026-02-27 17:05:57 -08:00
Jeff Emmett 7d9d4cbf8a feat: restore original rSpace-website landing page
Serve the original Next.js rSpace-website (MySpace / (ou)rSpace
messaging) as the landing page at rspace.online/. Static export
copied into website/public/ so Vite includes it in dist/. Server
updated to serve landing.html at root with index.html fallback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:05:43 -08:00
Jeff Emmett f03d92d9b3 Merge branch 'dev' 2026-02-27 16:53:40 -08:00
Jeff Emmett dfb0325147 feat: gradual zoom, toolbar reorg, pinch-to-zoom
- Zoom buttons 1.25x→1.1x, wheel 0.9/1.1→0.95/1.05
- Wheel + pinch zoom now center on cursor/pinch midpoint
- Rename "Create" → "Note", remove quick-add "+" button
- Redistribute 16 rApp embeds into thematic toolbar groups
- Remove standalone "rApps" dropdown
- Add pinch-to-zoom alongside two-finger pan on touch

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:53:30 -08:00
Jeff Emmett 1165a7fd5a Merge branch 'dev' 2026-02-27 16:49:00 -08:00
Jeff Emmett 9742bd1409 fix: zoom-aware drag, minimum-penetration collision, replace unicode escapes
- Shape drag now accounts for canvas CSS transform scale so elements
  track the cursor correctly at all zoom levels
- Collision resolution uses minimum penetration depth algorithm instead
  of movement-direction bias, preventing elements from flipping sides
- Replaced all \uD83D surrogate pair escapes and \u00D7/\u276E/\u276F/
  \u2022 escapes with actual Unicode characters across 60+ files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:48:50 -08:00
Jeff Emmett 6fe02697a0 chore: add backlog TASK-70 — selector tool with marquee multi-select (done)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:36:33 -08:00
Jeff Emmett 0ca41b1734 Merge branch 'dev' 2026-02-27 16:35:40 -08:00
Jeff Emmett 1d8fc2b23b feat: default selector tool with marquee multi-select, space+drag pan
Replace single-click-to-pan with selector as default tool. Left-click-drag
on canvas background draws a blue marquee rectangle to select multiple shapes.
Shift/Ctrl+click toggles additive selection. Panning now via Space+drag,
middle-click, or wheel/trackpad (unchanged). Delete/Backspace removes all
selected shapes. folk-shape highlighted state shows blue selection outline.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:35:31 -08:00
Jeff Emmett 3faf44865e chore: update backlog — TASK-39 done, TASK-65 AC checked, TASK-69 created+done
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:30:01 -08:00
Jeff Emmett 645f1fc015 feat: SVG drawing persistence, click-to-edit markdown, quick-add rApps, dblclick pencil
- SVG whiteboard drawings now persist via Automerge (addShapeData for
  DOM-less shapes, wb-svg type in newShapeElement, eraser deletes from doc)
- folk-markdown: click preview to edit, edit-enter/edit-exit events sync
  with folk-shape editing state, refactored into enter/exitMarkdownEdit
- Desktop quick-add (+) button opens rApps popout panel directly
- Double-click empty canvas background activates pencil draw mode
- Canvas background click exits editing mode on all shapes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:25:44 -08:00
Jeff Emmett 1cc18a06e5 Merge branch 'dev' 2026-02-27 16:20:44 -08:00
Jeff Emmett 9f3c9abf5b fix: canonicalize space URLs to subdomain pattern
rspace.online/{space}/{moduleId} now 301-redirects to
{space}.rspace.online/{moduleId} — spaces are subdomains,
not path segments. e.g. rspace.online/demo/rnotes →
demo.rspace.online/rnotes.

Landing pages (rspace.online/{moduleId}) unchanged.
API sub-path rewrite for demo "Try Demo" unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:20:36 -08:00
Jeff Emmett cce4e8d357 Merge branch 'dev' 2026-02-27 16:20:18 -08:00
Jeff Emmett eee9cbed69 fix: shape overlap push-aside, coordinate persistence, toolbar panel clipping
- Collision: shapes now slide-off in movement direction by minimum
  penetration depth instead of flipping to the opposite side
- Coordinates: use nullish coalescing (??) so x=0/y=0 are preserved
  on reload instead of being replaced by falsy-check defaults
- Toolbar: remove overflow:hidden from #toolbar-panel so submenus
  render fully visible instead of being clipped/scrolled

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:20:06 -08:00
Jeff Emmett 7ae105208e Merge branch 'dev' 2026-02-27 16:13:02 -08:00
Jeff Emmett 09d23f8fc1 fix: rApp shapes auto-derive space context and load as applets directly
- folk-rapp now auto-derives spaceSlug from the current URL path
  (/{space}/canvas → space) so embedded rApps always know their space
- Fixed race condition where createRenderRoot overwrote moduleId
  that was already set via JS property setter (showed picker instead
  of loading the module directly)
- newShapeElement always passes communitySlug as fallback spaceSlug
  when restoring folk-rapp shapes from sync

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:12:55 -08:00
Jeff Emmett 1d0c0013fd Merge branch 'dev' 2026-02-27 16:10:49 -08:00
Jeff Emmett 0c00a69d8a feat: flow colors green=economic, purple=delegation, blue=data
Align flow kind colors to intuitive scheme:
- Economic: green (#4ade80)
- Governance → Delegation: purple (#a78bfa)
- Data: blue (#60a5fa)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:10:40 -08:00
Jeff Emmett d850a7615e feat: MI canvas bridge, action executor, and enhanced context
- Add MiCanvasBridge for deep canvas state awareness (shapes, selection, viewport)
- Add MiActionExecutor to create/update/delete/move/connect shapes from MI responses
- Add MI action parsing (create-shape, connect, update-shape, delete-shape, move-shape, transform)
- Add selection transforms (align, distribute, arrange, match-size)
- Add tool suggestion schema for contextual MI hints
- Enhanced MI system prompt with action markers and transform commands
- Richer canvas context in /api/mi/ask (positions, connections, viewport, shape groups)
- Refactored tab-bar I/O chips for cleaner feed port rendering

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:08:20 -08:00
Jeff Emmett 0f5b747a30 Merge branch 'dev' 2026-02-27 16:05:37 -08:00
Jeff Emmett 32ee5a5ed0 feat: restructure all 22 landing pages with standardized template
- (You)r* becomes the h1 heading, old titles preserved as subtitles
- Standardized section order: Features → How It Works → Built on Open Source → Your Data Protected → CTA
- Each module lists its open source dependencies (Typst, Immich, MapLibre, Discourse, etc.)
- New "Your Data, Protected" section with E2E encryption + zero-knowledge (coming soon)
- Added .rl-subtitle CSS class for subtitle styling
- Module-specific sections preserved between How It Works and Built on Open Source

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:05:26 -08:00
Jeff Emmett ad5cfe4385 Merge branch 'dev' 2026-02-27 15:46:07 -08:00
Jeff Emmett bc5c9e608e feat: (You)r* hero branding, MI bar in landing headers, Try Demo repositioned
- Add (You)rModuleName tagline to all 22 module hero subtexts
- Move Try Demo button next to rApp dropdown in landing page header
- Add <rstack-mi> bar to landing page header center
- Create rNetwork landing page (was missing)
- Wire rNetwork landingPage into mod.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 15:45:57 -08:00
Jeff Emmett 18e19ddac8 Merge branch 'dev' 2026-02-27 15:37:01 -08:00
Jeff Emmett ed675d286d feat: embed rich landing pages for all 21 rSpace modules
Replace broken proxy-based landing pages with inline HTML for every
module. Each gets a landing.ts exporting renderLanding() with hero,
how-it-works, features, and CTA sections using shared .rl-* CSS.

12 ported from standalone repos (rPubs, rWork, rVote, rCal, rCart,
rTrips, rNotes, rMaps, rForum, rInbox, rSocials, rWallet) and 9 new
(rBooks, rChoices, rData, rFiles, rFunds, rPhotos, rSplat, rSwag, rTube).

Infrastructure: RICH_LANDING_CSS in shell.ts, landingPage field on
RSpaceModule, routing checks inline content before proxy fallback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 15:36:48 -08:00
Jeff Emmett cede058637 Merge branch 'dev' 2026-02-27 14:45:26 -08:00
Jeff Emmett 286f08fadb feat: space access request flow with notifications
Add "Request Access" flow for inaccessible spaces: authenticated users
see all spaces in the dropdown (categorized as Your/Public/Discover),
can request access to restricted spaces, and space owners get in-app
notification badges with inline approve/deny actions.

- API: GET /api/spaces returns accessible/relationship/pendingRequest fields
- API: POST/PATCH /api/spaces/:slug/access-requests + GET /notifications
- Space switcher: 3-section layout with Discover section + Request Access modal
- Identity: notification polling (30s), red badge on avatar, approve/deny in dropdown

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 14:45:15 -08:00
Jeff Emmett 2ef68e7217 Merge branch 'dev' 2026-02-27 14:37:04 -08:00
Jeff Emmett 9e4648be62 feat: feed-aware flow wiring + CSS 3D interactive layer view
Replace SVG stack view with CSS 3D perspective scene featuring
glassmorphism layer planes, animated flow particles, orbit controls,
and a time scrubber. Flow creation dialog now filters kind buttons
by source/target feed compatibility with count badges. Contained
feeds (no outgoing flow) shown with lock icons on layer planes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 14:36:51 -08:00
Jeff Emmett 76f7da8adf Merge branch 'dev' 2026-02-27 14:36:35 -08:00
Jeff Emmett 683df43b95 fix: move toolbar collapse toggle to bottom as subtle pill
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 14:36:27 -08:00
Jeff Emmett 59f2be356b Merge branch 'dev' 2026-02-27 14:30:12 -08:00
Jeff Emmett f8bd09dbac feat: vertical toolbar, whiteboard tools, zoom dropdown, context-aware MI bar
- Convert canvas toolbar from horizontal (top center) to vertical (left side)
  with dropdowns opening to the right
- Add whiteboard "Draw" toolbar group: pencil, sticky note, rectangle, circle,
  line, eraser — renders SVG strokes on canvas overlay
- Nest zoom controls (in/out/reset) under a "Zoom" dropdown group
- Enhance rstack-mi to gather page context (open shapes, active tab, page title)
  and send to /api/mi/ask for context-aware responses
- Move FeedDefinition to lib/layer-types.ts, add feeds/acceptsFeeds to modules
- Extend rstack-tab-bar with feed compatibility helpers and 3D scene state

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 14:29:24 -08:00
Jeff Emmett 4e8dd9e70b feat: add /about route to inbox module with use cases
Add an about page for the inbox module showcasing 6 multi-sig inbox
use cases: Governance, Escrow, Whistleblower, Social Key Recovery,
Audit Trails, and Treasury controls.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 23:20:16 +01:00
Jeff Emmett c8b1908b20 Merge branch 'dev' 2026-02-27 14:16:02 -08:00