Commit Graph

3 Commits

Author SHA1 Message Date
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 700e372260 fix(rschedule): add missing lib/availability + component updates
lib/availability.ts (getAvailableSlots) was imported by mod.ts but never
committed — caused module load to fail on server, leaving renderShell
callers with undefined 'modules' and producing 500s on every rschedule
route. Plus small updates to booking/admin/cancel components and mod.ts
wiring.
2026-04-16 17:35:05 -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