Jeff Emmett
69ce497aa8
feat(rschedule): complete native port of schedule-jeffemmett
...
Phases D-H of the rSchedule booking module:
- **Google Calendar sync** (`lib/gcal-sync.ts`): reuses rspace OAuth, syncs busy
times into config doc, creates booking events, deletes on cancel.
- **Admin UI** (`components/folk-schedule-admin.ts`): 6-tab passkey-gated dashboard
(overview, availability rules + overrides, bookings, invitations, gcal, settings).
Timezone-shift banner when browser tz diverges from host tz.
- **Emails** (`lib/emails.ts`, `lib/calendar-links.ts`): confirmation with
Google/Outlook/Yahoo add-to-calendar buttons + .ics attachment; cancellation
with 3 suggested slots from availability engine; 24h reminder.
- **Cron** (`lib/cron.ts`): in-process 5-min reminder sweep + 10-min gcal sweep
per connected space, started from onInit.
- **Invitations + timezone shift** (mod.ts, admin UI): PATCH
/api/invitations/:id accept/decline; POST /api/admin/timezone/shift with
optional booking relabel; invitations tab shows cross-space invites.
Full public booking flow (`components/folk-schedule-booking.ts`): month calendar,
date → slot drill, booking form, confirmation view, timezone picker.
EncryptID passkey gates admin routes via resolveCallerRole ≥ moderator.
Per-entity model: each space (and user-space) hosts its own bookable page;
bookings mirror into invitee spaces' :invitations docs so cross-space visibility
works without cross-space reads.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-16 18:19:10 -04:00
Jeff Emmett
f45cb753e1
feat(rschedule,rtasks): wire Calendly-style rSchedule + rTasks canvas port
...
rSchedule (Calendly-style public booking module):
- modules/rschedule/mod.ts — routes, docSchemas (config/bookings/invitations),
standaloneDomain rschedule.online, landing, feeds, outputPaths
- components/folk-schedule-booking.ts — public booking page
- components/folk-schedule-admin.ts — admin availability/bookings/gcal
- components/folk-schedule-cancel.ts — guest self-cancel page
- booking.css, landing.ts (marketing)
- Registered via registerModule(scheduleModule) in server/index.ts
- Component bundles declared in vite.config.ts
rTasks canvas port (uses new shared folk-app-canvas/folk-widget):
- components/folk-tasks-canvas.ts, folk-tasks-activity.ts, folk-tasks-backlog.ts
- modules/rtasks/mod.ts now renders <folk-app-canvas app-id=rtasks> shell
Plus minor rnetwork delegation-manager / power-indices tweaks.
2026-04-16 17:29:42 -04:00