diff --git a/README.md b/README.md index 2ebfe44..37061ed 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ Someday is a simple, open-source scheduling tool designed specifically for Gmail - **Multiple Event Types**: Create diverse meeting options like "Quick Chat" or "Deep Dive" with unique durations and availability settings. - **Team Scheduling**: Add multiple calendars including teammates' calendars (with read access) for collaborative scheduling. - **Flexible Scheduling Strategies**: Choose between "Collective" (all team members must be free) or "Round-Robin" (distribute bookings among available team members) scheduling modes. +- **Guest Permission Controls**: Fine-grained control over what guests can do with booked events (modify, invite others, see attendees) and calendar visibility (public, private, or default). - **Dynamic Configuration**: Adjust your timezone, working hours, available days, and monitored calendars globally or per event type directly through the integrated Settings screen. - **Owner-Only Access**: Secure access to configuration via the script owner's Google account session. - **Simple Booking Process**: Users can select a date and time slot, then fill out a straightforward form with their name, email, phone, and an optional note. @@ -55,6 +56,14 @@ Someday includes a built-in **Settings** screen for easy configuration. **Event Types**: - **Custom Meeting Types**: Create unlimited event types (e.g. "15 Min Discovery", "1 Hour Review"). - **Flexible Durations**: Set specific lengths for each meeting type (up to 24 hours). + - **Guest Permissions**: Control what guests can do with booked events: + - **Modify Event**: Allow/prevent guests from changing event details, time, or location + - **Invite Others**: Allow/prevent guests from adding additional attendees + - **See Other Guests**: Allow/prevent guests from viewing the attendee list + - **Calendar Visibility**: Choose how events appear in Google Calendar: + - **Default**: Uses your calendar's default visibility setting + - **Public**: Event details are publicly visible to everyone + - **Private**: Shows only as "Busy" without revealing event details - **Smart Overrides**: Override global Work Hours, Available Days, Monitored Calendars, and Scheduling Strategy for specific event types. - **Per-Event Strategies**: Set different scheduling strategies for different event types (e.g., Round-Robin for sales calls, Collective for team meetings). - **Direct Links**: Copy a unique booking URL for any event type to share directly. diff --git a/backend/package-lock.json b/backend/package-lock.json index 08827e3..4e43a16 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -7,7 +7,6 @@ "": { "name": "backend", "version": "1.0.0", - "license": "ISC", "dependencies": { "@types/google-apps-script": "^1.0.84", "typescript": "^5.6.3" diff --git a/backend/src/app.ts b/backend/src/app.ts index ce13f71..8480fdf 100644 --- a/backend/src/app.ts +++ b/backend/src/app.ts @@ -11,6 +11,12 @@ interface EventType { DAYS_IN_ADVANCE?: number; CALENDARS?: string[]; schedulingStrategy?: 'collective' | 'round_robin'; + // Guest permissions + guestsCanModify?: boolean; + guestsCanInviteOthers?: boolean; + guestsCanSeeOtherGuests?: boolean; + // Meeting visibility + visibility?: 'default' | 'public' | 'private'; } const CONFIG = { @@ -252,6 +258,19 @@ function bookTimeslot( status: "confirmed", } ); + + // Apply guest permissions (defaults: modify=false, invite=false, see=true) + event.setGuestsCanModify(eventType.guestsCanModify ?? false); + event.setGuestsCanInviteOthers(eventType.guestsCanInviteOthers ?? false); + event.setGuestsCanSeeGuests(eventType.guestsCanSeeOtherGuests ?? true); + + // Apply visibility setting + if (eventType.visibility === 'public') { + event.setVisibility(CalendarApp.Visibility.PUBLIC); + } else if (eventType.visibility === 'private') { + event.setVisibility(CalendarApp.Visibility.PRIVATE); + } + // 'default' visibility doesn't require explicit setting return `Timeslot booked successfully`; } catch (e) { const error = e as Error; diff --git a/frontend/src/components/ConfigScreen.tsx b/frontend/src/components/ConfigScreen.tsx index 27462fa..2580799 100644 --- a/frontend/src/components/ConfigScreen.tsx +++ b/frontend/src/components/ConfigScreen.tsx @@ -578,7 +578,7 @@ export function ConfigScreen({ onBack }: { onBack: () => void }) { minutes -
+ Control what guests can do with this event. +
++ How the event appears in Google Calendar. +
+