Commit Graph

254 Commits

Author SHA1 Message Date
Jeff Emmett f9a36b9d3e feat: add interactive demo modes to all 20 rApps + mobile responsive CSS
Each folk-* web component detects space === "demo" and renders a
self-contained interactive demo with hardcoded data — no API calls or
WebSocket connections. Accessible at demo.rspace.online/{rApp}.

Includes: spider charts, drag-to-rank, live voting sim, kanban board,
video library, calendar with lunar phases, forum provisioner, email
client, conviction voting, trip planner, book shelf, pub editor,
wallet viewer, world map, analytics dashboard, cart shop, file browser,
swag designer, photo gallery, graph viewer, social feed, and funds river.

Also adds @media responsive CSS for mobile rendering across all modules.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 05:48:35 +00:00
Jeff Emmett 5b7ee71eb9 fix: case-insensitive module routing for mixed-case URLs
rTrips, rFunds, rVote etc. now resolve correctly — normalizes module
ID to lowercase in subdomain routing, bare-domain routing, and 404
fallback checks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 04:38:42 +00:00
Jeff Emmett c20a79078a Merge branch 'dev': port 10 module landing pages from standalone sites 2026-02-28 04:09:27 +00:00
Jeff Emmett c3deb18df8 feat: port module landing pages from standalone Next.js sites
Replace template landing pages for 10 modules with unique designs ported
from their original standalone Next.js/Tailwind sites. Each page now has
distinctive visuals, SVG icons, and content matching the original:

- rfunds: funnel metaphor diagram, amber/emerald/blue theme
- rtube: video streaming workflow, red/pink/orange theme
- rtrips: travel planning with teal/cyan SVG icons
- rforum: Discourse pricing tiers, indigo/violet theme
- rcal: temporal zoom visualization, blue gradient bars
- rvote: quadratic voting calculator, indigo/purple theme
- rpubs: group buy tiers, cross-title batching diagram
- rchoices: spider plot SVG, ranking mockup, live voting bars
- rwork: kanban board workflow, blue/teal/green theme
- rinbox: encrypted chat features, blue/teal gradient

All pages use dark mode and the shared rl-* CSS utility classes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 04:09:23 +00:00
Jeff Emmett c59b7d85a1 feat: replace static landing page with server-rendered main landing
Replace the 177KB static Next.js landing with a server-rendered page using
the same shell, theme, and rl-* CSS utilities as all module landings. Fixes
the 354KB logo.png → 1.6KB favicon.png glitch across all pages. Dynamic
ecosystem grid is always in sync with registered modules.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 03:48:17 +00:00
Jeff Emmett 32ed06d43a feat: replace static landing page with server-rendered main landing
Replace the 177KB static Next.js landing with a server-rendered page using
the same shell, theme, and rl-* CSS utilities as all module landings. Fixes
the 354KB logo.png → 1.6KB favicon.png glitch across all pages. Dynamic
ecosystem grid is always in sync with registered modules.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 03:48:02 +00:00
Jeff Emmett 990704a57d Merge branch 'dev' 2026-02-27 18:13:43 -08:00
Jeff Emmett b0eebc4cbc chore: add backlog task files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 18:13:40 -08:00
Jeff Emmett 186a1695c1 Merge branch 'dev' 2026-02-27 18:10:29 -08:00
Jeff Emmett 042ae4e34d fix: dynamically position toolbar popout panel to avoid overlap
The panel had a hardcoded left offset (88px) that didn't account for
the toolbar's actual width, causing the submenu to overlap the toolbar.
Now uses getBoundingClientRect() to position 8px right of the toolbar
edge. Skipped on mobile where the panel uses its own bottom-sheet layout.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 18:10:26 -08:00
Jeff Emmett 4db56c1b81 Merge branch 'dev' 2026-02-27 18:06:44 -08:00
Jeff Emmett 39ca0ff9b7 feat: canvas dark mode toggle — persistent theme with dark toolbar, grid, and panels
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 18:06:35 -08:00
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