FolkJS collaborative canvas with subdomain routing for community spaces
Go to file
Jeff Emmett eed7b2f151 feat: unified module system — Phase 0 shell + Phase 1 canvas module
Implement the rSpace module architecture that enables all r-suite apps
to run as modules within a single-origin platform at rspace.online,
while each module can still deploy standalone at its own domain.

Phase 0 — Shell + Module System:
- RSpaceModule interface (shared/module.ts) with routes, metadata, hooks
- Shell HTML renderer (server/shell.ts) for wrapping module content
- Three header web components: rstack-app-switcher, rstack-space-switcher,
  rstack-identity (refactored from rspace-header.ts into Shadow DOM)
- Space registry API (server/spaces.ts) — /api/spaces CRUD
- Hono-based server (server/index.ts) replacing raw Bun.serve fetch handler
  while preserving all WebSocket, API, and subdomain backward compat
- Shared PostgreSQL with per-module schema isolation (rbooks, rcart, etc.)
- Vite multi-entry build: shell.js + shell.css built alongside existing entries
- Module info API: GET /api/modules returns registered module metadata

Phase 1 — Canvas Module:
- modules/canvas/mod.ts exports canvasModule as first RSpaceModule
- Canvas routes mounted at /:space/canvas with shell wrapper
- Fallback serves existing canvas.html for backward compatibility
- /:space redirects to /:space/canvas

URL structure: rspace.online/{space}/{module} (e.g. /demo/canvas)
All existing subdomain routing (*.rspace.online) preserved.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 21:54:15 +00:00
backlog backlog: add system clock heartbeat service task (TASK-47) 2026-02-18 14:19:42 -07:00
db feat: unified module system — Phase 0 shell + Phase 1 canvas module 2026-02-20 21:54:15 +00:00
docs feat: Add EncryptID unified identity system 2026-02-05 16:48:19 +00:00
lib fix: mobile input focus, toolbar UX, and viewport clipping 2026-02-20 19:55:43 +00:00
modules/canvas feat: unified module system — Phase 0 shell + Phase 1 canvas module 2026-02-20 21:54:15 +00:00
public/.well-known fix: change WebAuthn RP ID from jeffemmett.com to rspace.online 2026-02-18 14:32:57 -07:00
server feat: unified module system — Phase 0 shell + Phase 1 canvas module 2026-02-20 21:54:15 +00:00
shared feat: unified module system — Phase 0 shell + Phase 1 canvas module 2026-02-20 21:54:15 +00:00
src feat: unify EncryptID passkeys across all r*.online apps 2026-02-20 21:38:26 +00:00
website feat: unified module system — Phase 0 shell + Phase 1 canvas module 2026-02-20 21:54:15 +00:00
.dockerignore fix: make Docker build self-contained with local context 2026-02-16 18:51:24 -07:00
.gitignore Initial rspace-online: FolkJS collaborative canvas with subdomain routing 2026-01-01 16:27:07 +01:00
Dockerfile feat: unified module system — Phase 0 shell + Phase 1 canvas module 2026-02-20 21:54:15 +00:00
Dockerfile.encryptid Fix EncryptID Docker build to include encryptid-sdk dependency 2026-02-14 21:23:18 -07:00
MODULE_SPEC.md docs: add MODULE_SPEC.md with permission model and capabilities 2026-02-17 12:30:14 -07:00
bun.lock chore: update bun lockfile 2026-02-16 18:51:56 -07:00
docker-compose.encryptid.yml chore: migrate SMTP from mx.jeffemmett.com to mail.rmail.online 2026-02-20 20:14:58 +00:00
docker-compose.yml feat: unified module system — Phase 0 shell + Phase 1 canvas module 2026-02-20 21:54:15 +00:00
package.json feat: add email recovery with Mailcow SMTP and recovery page 2026-02-15 09:35:53 -07:00
tsconfig.json feat: unified module system — Phase 0 shell + Phase 1 canvas module 2026-02-20 21:54:15 +00:00
vite.config.ts feat: unified module system — Phase 0 shell + Phase 1 canvas module 2026-02-20 21:54:15 +00:00