Commit Graph

1695 Commits

Author SHA1 Message Date
Jeff Emmett 75fef85df8 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m40s Details
2026-04-08 22:27:23 -04:00
Jeff Emmett a711af055a fix(encryptid): remove all remaining authenticatorAttachment: 'platform' hardcodes
Three client-side registration flows still had authenticatorAttachment: 'platform'
hardcoded, blocking Samsung Passkey and Linux users:
- lib/rspace-header.ts (main site header registration)
- shared/components/rstack-identity.ts (2 occurrences)

Also added server-side validation for missing userId in register/complete
to return 400 instead of crashing with TypeError.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 22:27:16 -04:00
Jeff Emmett d69dfa4618 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m24s Details
2026-04-08 19:30:48 -04:00
Jeff Emmett b2d443421e fix(encryptid): allow cross-platform authenticators on Linux
Registration was hardcoded to authenticatorAttachment: 'platform',
which rejects devices without a platform authenticator (common on
Linux desktops). Now only forces platform when available, otherwise
lets browser offer cross-platform options (security keys, phone as
authenticator). Also relaxed isEncryptIDAvailable() to only require
WebAuthn support, not platform auth specifically.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 19:30:41 -04:00
Jeff Emmett f051a5a644 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m9s Details
2026-04-08 19:25:58 -04:00
Jeff Emmett ca45eb43d2 fix(encryptid): handle non-JSON error responses in auth flow
When EncryptID server returns plain text errors (e.g. "Internal Server
Error"), the client's .json() calls threw SyntaxError which surfaced
as an ugly parse error to users. Add .catch() to all unsafe .json()
calls in session.ts, login-button.ts, and recovery.ts so auth
gracefully falls back to unsigned tokens instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 19:25:51 -04:00
Jeff Emmett 282e6a62c6 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m4s Details
2026-04-08 13:28:15 -04:00
Jeff Emmett 65b72ed7ac feat(rcal): map shows routes with booking status, calendar keeps semantic zoom
Map always shows individual event markers (no clustering). Transit
lines now colored by booking status: green solid = booked, red dashed
= not yet booked. New bookingStatus field on CalendarEvent as
placeholder for the forthcoming booking pipeline. Calendar views
retain semantic zoom (country/city chips at year/season/month levels).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:28:08 -04:00
Jeff Emmett 988b10fd65 fix(encryptid): use port 25 without auth for internal Mailcow SMTP
SMTP auth (port 587) credentials are stale, causing 535 auth failures
on startup. Detect internal mailcow/postfix hosts and connect on port
25 without auth, matching the pattern already used in server/spaces.ts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 23:01:07 -04:00
Jeff Emmett 1ac52e301f Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m36s Details
2026-04-07 22:32:27 -04:00
Jeff Emmett 883f4b5f2c feat(rtasks): assignee dropdown from space members + drag guard
- Load space members via /api/spaces/:slug/members for assignee dropdown
- Detail panel shows <select> with space members when available, falls
  back to text input when unauthenticated or no members loaded
- Assignee badge shown on task cards with resolved display names
- Assignee selectable on task creation form
- Server accepts assignee_id on POST /api/spaces/:slug/tasks
- Add _justDragged guard to prevent column click-to-create from
  firing after a drag operation ends (100ms debounce)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 22:32:20 -04:00
Jeff Emmett f111cb66ad Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m22s Details
2026-04-07 15:29:27 -04:00
Jeff Emmett 64ba4c1f1f feat(rmeets): enable shared video & music toolbar buttons
Add sharedvideo and sharedmusic to Jitsi toolbar config in both
the full-screen view and folk-jitsi-room component. Also set
disableThirdPartyRequests to false so the features aren't blocked.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 15:29:13 -04:00
Jeff Emmett e247befaae Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m6s Details
2026-04-07 14:55:17 -04:00
Jeff Emmett a4a800a498 fix(rmeets): remove loading spinner after Jitsi iframe injection
The "Connecting to meeting..." loading div remained visible on top of
the Jitsi iframe in the minimal view. The iframe is created by the
JitsiMeetExternalAPI constructor, so remove the spinner immediately after.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 14:55:11 -04:00
Jeff Emmett 280fb9426c Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m35s Details
2026-04-07 14:50:49 -04:00
Jeff Emmett a3ec58a4c5 fix(rmeets): correct Jitsi external API script path
The Jitsi server at jeffsi.localvibe.live serves the external API at
/libs/external_api.min.js, not /external_api.min.js (which returns HTML
due to SPA routing). Fixed in both the inline minimal view and the
folk-jitsi-room component's dynamic script loader.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 14:50:44 -04:00
Jeff Emmett bdd6ab35ec Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m19s Details
2026-04-06 21:26:25 -04:00
Jeff Emmett 4918787bb5 fix(rtasks): enable public writes + click-to-create in any column
- Add publicWrite to rtasks module so unauthenticated task creation works
  (was blocked by space auth middleware returning 403)
- Click empty column space or "+ Add task" to open create form in that column
- Tasks created in clicked column get that column's status automatically
- Show error message when task creation fails instead of silent failure

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 21:26:18 -04:00
Jeff Emmett 17a17103f4 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m55s Details
2026-04-06 20:27:56 -04:00
Jeff Emmett ab5129d7dc refactor(rtasks): remove workspace list, single board per space
Load kanban board directly on page load instead of showing a workspace
picker first. ClickUp connect button moved into board nav.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 20:27:44 -04:00
Jeff Emmett fc14513fd1 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m28s Details
2026-04-06 19:00:45 -04:00
Jeff Emmett ccaef33a20 fix(rtasks): exempt rtasks API from space auth middleware
The clf space is private, so all API calls were getting 401'd by the
space access middleware before reaching the rtasks routes. Add
/rtasks/api/ to the public endpoint exemption list (like rwallet,
rdesign, rvote already are).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 19:00:38 -04:00
Jeff Emmett 218ee73993 Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m22s Details
2026-04-06 18:31:15 -04:00
Jeff Emmett ac332468ba fix(rflows): mortgage simulator perf + basic/advanced toggle
Fix event listener accumulation (duplicate handlers on every render),
add partial DOM updates for playback/scrubbing/interactions, debounce
config slider recompute via rAF, and add Basic/Advanced mode toggle
that hides advanced controls (tranches, interest, terms, overpayment,
reinvestment) by default. Also fix pre-existing TS Map iteration errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 18:31:04 -04:00
Jeff Emmett 66f564eadb Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m15s Details
2026-04-06 18:05:43 -04:00
Jeff Emmett 1dc6de7759 fix(rtasks): make all endpoints auth-optional, handle stale tokens
- POST /api/spaces, POST /api/spaces/:slug/tasks, PATCH /api/spaces/:slug
  now work without auth (like PATCH /api/tasks/:id already does)
- Frontend retries without auth headers on 401 (stale token recovery)
- Bump JS cache to v6

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 18:05:34 -04:00
Jeff Emmett 8018acac2c Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m4s Details
2026-04-06 17:21:59 -04:00
Jeff Emmett c00221c1e5 fix(rtasks): replace browser prompt/confirm with inline forms
- Workspace creation uses inline text input instead of prompt()
- Task deletion uses inline confirmation bar instead of confirm()
- Better error display when workspace creation fails (shows server error)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 17:21:52 -04:00
Jeff Emmett e827f1a46f Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m27s Details
2026-04-06 14:53:31 -04:00
Jeff Emmett 4822f0858a fix(rtasks): bump JS cache version to v5 for new frontend features
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:53:25 -04:00
Jeff Emmett 4d15a352a6 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m20s Details
2026-04-06 14:50:10 -04:00
Jeff Emmett eeab84e588 feat(rtasks): add detail panel, column management, search/filter, drag polish
- Task detail slide-out panel with inline editing of all fields
- Column/status management via gear icon (add, remove, rename, reorder)
- Search & filter bar with text search, priority dropdown, label click filter
- Enhanced task cards with description preview, due date badge, delete hover
- Drag polish with rotation/scale transform on dragging cards
- Empty drop zones always visible with green highlight on drag-over
- Escape key closes detail panel and column editor
- Individual field saves on blur/change (no full re-render flicker)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:49:58 -04:00
Jeff Emmett a401faf19f Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m36s Details
2026-04-06 14:42:30 -04:00
Jeff Emmett c590bacc40 fix(rtasks): add auth headers to all API calls + canvas toolbar to bottom-right
rtasks fetch calls were missing Authorization Bearer headers, causing 401s
on private/permissioned spaces. Added authHeaders() helper using encryptid-token
from localStorage (matching pattern in folk-feed, folk-multisig-email, etc.).

Also includes: due date field, task detail panel, search/filter, column editor,
board PATCH endpoint, and canvas toolbar repositioned to bottom-right corner
(collapsed wrench icon on all screen sizes, panel opens leftward).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:42:16 -04:00
Jeff Emmett 0283d52989 Merge branch 'dev'
CI/CD / deploy (push) Has been cancelled Details
2026-04-06 14:40:19 -04:00
Jeff Emmett a76a6a9f6e feat(rcal): add semantic zoom for map and calendar views
Map markers now aggregate by continent/country/city based on spatial
zoom level instead of always showing individual dots. Calendar views
(year, season, multi-year, month) show zoom-aware spatial labels.
New geo-hierarchy.ts provides offline continent/country lookup from
coordinates with breadcrumb generation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:40:08 -04:00
Jeff Emmett 1d05e7b64f Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m32s Details
2026-04-06 14:24:25 -04:00
Jeff Emmett 75c230eabe fix(rmeets): correct Jitsi API config and auto-join room from URL slug
Fix configOverwrite/interfaceConfigOverwrite property names (were
configOverrides/interfaceConfigOverrides — silently ignored by Jitsi).
Disable pre-join lobby so rooms render immediately. Add error handling
for script load failures. Use external_api.min.js to match component.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:24:15 -04:00
Jeff Emmett 789dddde8a Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m29s Details
2026-04-06 14:11:17 -04:00
Jeff Emmett 13410dd3e7 fix(rmeets): default room view to clean full-screen Jitsi without shell
Swap default /:room route to serve minimal full-screen Jitsi (previously
required ?minimal=1). Shell mode now opt-in via ?shell=1 or director mode.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:11:05 -04:00
Jeff Emmett 391d3a0cb6 feat(rflows): port distributed mortgage simulator from rfunds-online
Replaces the simple lending pool dashboard at /mortgage with the full
rfunds-online mortgage simulator. Models community-funded mortgages with
80+ tranches, variable terms, reinvestment loops, secondary markets,
and 5 visualization modes (Network, Flow, Grid, Lender calc, Borrower calc).

New files:
- mortgage-types.ts & mortgage-engine.ts (pure TS, copied verbatim)
- folk-mortgage-simulator.ts (1639-line web component, all views)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:10:59 -04:00
Jeff Emmett cff10bee5d Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m24s Details
2026-04-06 14:05:44 -04:00
Jeff Emmett 8321a9015a revert: restore app switcher to left sidebar
Reverts 4420d9c — the FAB change was applied to the wrong component.
The intended target is the rSpace canvas toolbar, not the app switcher.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:05:38 -04:00
Jeff Emmett 8f017eb1f5 Merge branch 'dev'
CI/CD / deploy (push) Successful in 3m11s Details
2026-04-06 12:39:45 -04:00
Jeff Emmett f26f7e14bd fix(sw): bump cache version to v6 to flush stale cached 301 redirect
The old service worker cached the root URL (/) as a 301→/rcal during
the standaloneDomain misconfiguration. Bumping the SW cache version
forces a full cache purge on next activation, clearing the stale
redirect for all users.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 12:39:36 -04:00
Jeff Emmett 5af2eec04e Merge branch 'dev'
CI/CD / deploy (push) Failing after 2m20s Details
2026-04-06 12:28:01 -04:00
Jeff Emmett 6c1298b796 fix(routing): prevent cached 301 redirects on root and standalone domains
Root route now sends no-cache headers to bust stale 301s from the
rcal standaloneDomain mishap. Standalone domain redirects changed from
301 (permanent/browser-cached) to 302 (temporary) so misconfiguration
can never stick in user browsers again.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 12:27:53 -04:00
Jeff Emmett c037e13423 feat(rmeets): minimal mode for clean meeting links without rSpace shell
Add ?minimal=1 query param that renders a full-screen Jitsi meeting
page without the rSpace header, tab bar, or module chrome. Used by
scheduled meeting links so guests get a clean, direct video call
experience. Includes prejoin screen, all standard Jitsi controls,
and auto-closes the tab when the meeting ends.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 01:24:31 +00:00
Jeff Emmett 905481eb84 Merge branch 'dev'
CI/CD / deploy (push) Successful in 2m22s Details
2026-04-05 16:04:08 -04:00