@@ -490,7 +490,7 @@ export async function createGoogleCalendarBookingEvent(opts: {
490490 Boolean ( opts . isPreMeeting ) ||
491491 opts . track === "sponsor-kickoff" ||
492492 opts . durationMinutes === 15 ;
493- const durationMinutes = opts . durationMinutes ?? ( isPreMeeting ? 15 : 45 ) ;
493+ const durationMinutes = opts . durationMinutes ?? ( isPreMeeting ? 15 : 60 ) ;
494494 const isApprovedRecording =
495495 ! isPreMeeting && Boolean ( opts . autoApproveRecording ) ;
496496
@@ -501,26 +501,26 @@ export async function createGoogleCalendarBookingEvent(opts: {
501501 ? `[PRE-MEETING · 15m] ${ opts . company } × CodingCat.dev (${ opts . guestName } )`
502502 : isApprovedRecording
503503 ? `CodingCat.dev Podcast Recording: ${ opts . guestName } (${ opts . company } )`
504- : `[HOLD - PENDING APPROVAL ] CodingCat.dev Podcast: ${ opts . guestName } (${ opts . company } )` ;
504+ : `[HOLD] CodingCat.dev Podcast: ${ opts . guestName } (${ opts . company } )` ;
505505
506506 const descriptionLines = [
507- `CodingCat.dev Session (${ isPreMeeting ? "15m Pre-Meeting (Google Meet)" : `45m Podcast Recording (${ opts . track . toUpperCase ( ) } )` } )` ,
507+ `CodingCat.dev Session (${ isPreMeeting ? "15m Pre-Meeting (Google Meet)" : `${ durationMinutes } m Podcast Recording (${ opts . track . toUpperCase ( ) } )` } )` ,
508508 `Guest / Contact: ${ opts . guestName } <${ opts . guestEmail } >` ,
509509 `Company: ${ opts . company } ` ,
510510 `Topics / Goals: ${ opts . topics } ` ,
511511 isPreMeeting
512512 ? "Meeting Room: Google Meet (auto-attached to this calendar invite)"
513513 : isApprovedRecording
514514 ? `Recording Studio (StreamYard): ${ STREAMYARD_STUDIO_URL } `
515- : ` Status: Opaque Calendar Hold (Blocks FreeBusy). Approve in CodingCat Ops App to send StreamYard invite ( ${ STREAMYARD_STUDIO_URL } ) to guest.` ,
515+ : " Status: Calendar Hold Reserved. Once Alex confirms your session, this calendar invite will automatically update with your StreamYard studio link." ,
516516 ...( opts . portalUrl
517- ? [ `Deal Room & Sanity Media Vault: ${ opts . portalUrl } #vault` ]
517+ ? [ `Guest Portal & Sanity Media Vault: ${ opts . portalUrl } #vault` ]
518518 : [ ] ) ,
519519 ] ;
520520 const description = descriptionLines . join ( "\n" ) ;
521521
522522 const addToCalendarUrl = buildGoogleCalendarTemplateUrl ( {
523- title : summary . replace ( / ^ \[ H O L D - P E N D I N G A P P R O V A L \] \s * / , "" ) ,
523+ title : summary . replace ( / ^ \[ H O L D \] \s * / , "" ) ,
524524 startAt : start . toISOString ( ) ,
525525 durationMinutes,
526526 description : isPreMeeting
@@ -562,17 +562,14 @@ export async function createGoogleCalendarBookingEvent(opts: {
562562 }
563563 }
564564
565- // Pre-meetings and explicitly approved recordings invite the guest immediately;
566- // unapproved recording holds block Alex's calendars as CONFIRMED + OPAQUE (Busy)
567- // with sendUpdates=none until approved in the Ops App.
568- const inviteGuestNow = isPreMeeting || isApprovedRecording ;
569- const sendUpdates = inviteGuestNow ? "all" : "none" ;
565+ // Always invite the guest immediately (sendUpdates=all) so the event lands on their
566+ // Google Calendar right away. Unapproved recording holds withhold the StreamYard URL
567+ // until Alex clicks Approve in the Ops App.
568+ const sendUpdates = "all" ;
570569 const attendees = [
571570 { email : "alex.patterson@gmail.com" , responseStatus : "accepted" } ,
572571 { email : "alex@codingcat.dev" , responseStatus : "accepted" } ,
573- ...( inviteGuestNow
574- ? [ { email : opts . guestEmail , displayName : opts . guestName } ]
575- : [ ] ) ,
572+ { email : opts . guestEmail , displayName : opts . guestName } ,
576573 ] ;
577574
578575 const queryParams = new URLSearchParams ( { sendUpdates } ) ;
@@ -590,7 +587,9 @@ export async function createGoogleCalendarBookingEvent(opts: {
590587 ? "Google Meet"
591588 : isApprovedRecording
592589 ? STREAMYARD_STUDIO_URL
593- : "CodingCat.dev Studio Hold (Pending Approval)" ,
590+ : opts . portalUrl
591+ ? `${ opts . portalUrl } #vault`
592+ : "CodingCat.dev Studio (StreamYard link sent upon approval)" ,
594593 start : { dateTime : start . toISOString ( ) } ,
595594 end : { dateTime : end . toISOString ( ) } ,
596595 attendees,
@@ -681,7 +680,7 @@ export async function approveGoogleCalendarRecordingEvent(opts: {
681680 return { ok : false , recordingUrl : STREAMYARD_STUDIO_URL } ;
682681 }
683682
684- const durationMinutes = opts . durationMinutes ?? 45 ;
683+ const durationMinutes = opts . durationMinutes ?? 60 ;
685684 const start = new Date ( opts . startAt ) ;
686685 const end = new Date ( start . getTime ( ) + durationMinutes * 60_000 ) ;
687686 const summary = `CodingCat.dev Podcast Recording: ${ opts . guestName } (${ opts . company } )` ;
0 commit comments