Professional booking integration for websites with TypeScript support, modular architecture, and enhanced user experience.
Easily integrate meetergo scheduling into your website with iframes, booking buttons, sidebars, video embeds, and form integrations. Now featuring auto-resize iframes (no scrollbars!), improved video controls, and professional error handling.
- π― Auto-Resize Iframes: No more scrollbars! Iframes automatically adjust height for professional appearance
- π¬ Enhanced Video Controls: Working progress bar, mute button, and smooth interactions
- π§ TypeScript Support: Full type safety with comprehensive interfaces
- ποΈ Modular Architecture: Cleaner, more maintainable codebase
- π¨ Better Error Handling: User-visible notifications instead of console-only logging
- π§ Memory Management: Proper cleanup to prevent memory leaks
- β‘ Performance Optimized: DOM caching and efficient rendering
- π AWS CDN Ready: Production-ready deployment on CloudFront
Set meetergo settings and load the script:
<script>
window.meetergoSettings = {
company: "your-company",
enableAutoResize: true, // β¨ New: Enable auto-resize for iframes
iframeAlignment: "center", // β¨ New: Default iframe alignment (left, center, right)
floatingButton: {
position: "bottom-right",
link: "https://cal.meetergo.com/your-booking-link",
text: "Book Appointment",
animation: "pulse",
backgroundColor: "#0A64BC",
textColor: "#FFFFFF",
},
prefill: {
firstname: "John",
lastname: "Smith",
email: "[email protected]",
phone: "+1234567890",
},
// β¨ New: Enhanced callbacks
onSuccess: function (data) {
console.log("Booking successful!", data);
// Handle both legacy string and new object formats
if (typeof data === "string") {
// Legacy: data is appointment ID
console.log("Appointment ID:", data);
} else {
// New: data is BookingSuccessfulData object
console.log("Booking details:", data);
}
},
onEvent: function (event) {
console.log("meetergo event:", event);
},
};
</script>
<!-- Production CDN (Latest) -->
<script src="https://liv-showcase.s3.eu-central-1.amazonaws.com/browser-v3.js"></script>Add a booking iframe that automatically adjusts height (no scrollbars needed!):
<!-- β¨ Auto-resizing iframe (enabled by default) -->
<div
class="meetergo-iframe"
link="https://cal.meetergo.com/your-booking-link"
></div>
<!-- With custom alignment -->
<div
class="meetergo-iframe"
link="https://cal.meetergo.com/your-booking-link"
data-align="left"
></div>
<!-- Disable auto-resize if needed -->
<div
class="meetergo-iframe"
link="https://cal.meetergo.com/your-booking-link"
data-resize="false"
></div>Features:
- β No scrollbars: Automatic height adjustment (enabled by default)
- β
Custom alignment: Set
data-align="left|center|right"for iframe positioning - β Smooth transitions: Professional animations
- β Cross-origin support: Works with all meetergo domains
- β Fallback handling: Graceful degradation if auto-resize fails
- β
Optional disable: Set
data-resize="false"to disable auto-resize
Any element can open a booking modal:
<button
class="meetergo-modal-button"
link="https://cal.meetergo.com/your-booking-link"
>
Book Now
</button>
<!-- With automatic styling -->
<button
class="meetergo-styled-button meetergo-modal-button"
link="https://cal.meetergo.com/your-booking-link"
>
Book Appointment
</button>Customizable floating action button:
floatingButton: {
position: "bottom-right", // 9 positions available
link: "https://cal.meetergo.com/your-booking-link",
text: "Book Meeting",
animation: "pulse", // pulse, bounce, slide-in, none
backgroundColor: "#0A64BC",
textColor: "#FFFFFF"
}Professional sidebar with toggle button:
sidebar: {
position: "right", // left or right
width: "400px",
link: "https://cal.meetergo.com/your-booking-link",
buttonText: "Open Scheduler",
buttonIcon: "calendar", // Lucide icons
buttonPosition: "middle-right",
backgroundColor: "#0A64BC",
textColor: "#FFFFFF"
}Available icons: calendar, clock, user, mail, phone, message-square
Interactive video widget with improved controls:
videoEmbed: {
videoSrc: "https://video.meetergo.com/your-video.m3u8", // HLS or MP4
posterImage: "https://video.meetergo.com/your-poster.jpg",
bookingLink: "https://cal.meetergo.com/your-booking-link",
// β¨ Enhanced options
position: "bottom-left",
buttonColor: "#196EF5",
bookingCta: "Book Appointment π",
videoCta: "Click to watch!",
size: { width: "140px", height: "210px" },
isRound: false
}β¨ New Video Features:
- π― Working Progress Bar: Only shows when video is expanded and playing
- π Functional Mute Button: Click to toggle audio with visual feedback
- π¬ Smooth Controls: Responsive play/pause and progress tracking
- π± Click to Expand: Mini preview expands to full player
- π Auto-restart: Video loops seamlessly
- π HLS Support: Supports adaptive streaming
Trigger booking modals from form submissions:
formListeners: [
{
formId: "contact-form",
link: "https://cal.meetergo.com/your-booking-link",
},
];// β¨ New: Check if integration is ready
if (window.meetergo.isReady()) {
console.log("meetergo is ready!");
}
// β¨ New: Get system status
const status = window.meetergo.getStatus();
console.log("Status:", status);
// Set prefill data with TypeScript support
window.meetergo.setPrefill({
firstname: "John",
lastname: "Smith",
email: "[email protected]",
phone: "+1234567890",
company: "Acme Corp",
});
// Launch scheduler programmatically
window.meetergo.launchScheduler("https://cal.meetergo.com/your-link", {
firstname: "Jane",
email: "[email protected]",
});
// β¨ New: Clean up all components and event listeners
window.meetergo.destroy();// Open/close modal
window.meetergo.openModal();
window.meetergo.closeModal();
// Open with specific content
window.meetergo.openModalWithContent({
link: "https://cal.meetergo.com/your-link",
existingParams: { firstname: "John" },
});// Refresh components after DOM changes
window.meetergo.parseIframes();
window.meetergo.parseButtons();
// Bind/unbind elements
window.meetergo.bindElementToScheduler(element, link, options);
window.meetergo.unbindElementFromScheduler(element);window.meetergoSettings = {
// β¨ Supports both legacy and new formats
onSuccess: function (dataOrId) {
if (typeof dataOrId === "string") {
// Legacy format: appointment ID string
console.log("Appointment ID:", dataOrId);
window.location.href = `/thank-you?id=${dataOrId}`;
} else {
// New format: BookingSuccessfulData object
console.log("Booking data:", dataOrId);
if (dataOrId.appointmentId) {
window.location.href = `/thank-you?id=${dataOrId.appointmentId}`;
}
}
},
// β¨ New: General event handler
onEvent: function (event) {
switch (event.type) {
case "booking_completed":
console.log("Booking completed!");
break;
case "modal_opened":
console.log("Modal opened");
break;
case "video_expand":
console.log("Video expanded");
break;
}
},
};type BookingSuccessfulData = {
appointmentId?: string;
secret?: string;
attendeeEmail?: string;
bookingType?: "doubleOptIn" | "requireHostConfirmation";
provisionalBookingId?: string;
};
interface meetergoSettings {
company: string;
enableAutoResize?: boolean;
iframeAlignment?: "left" | "center" | "right";
floatingButton?: FloatingButtonConfig;
sidebar?: SidebarConfig;
videoEmbed?: VideoEmbedConfig;
prefill?: meetergoPrefill;
formListeners?: FormListener[];
onSuccess?: (dataOrId: BookingSuccessfulData | string) => void;
onEvent?: (event: meetergoEvent) => void;
}- Modal Manager: Handles popup windows and overlays
- Sidebar Manager: Manages collapsible sidebar functionality
- Video Embed Manager: Controls video playback and interactions
- DOM Cache: Optimizes element queries for better performance
- Error Handler: Provides user-friendly error notifications
- β Automatic Cleanup: Event listeners and timeouts are properly cleaned up
- β Memory Leak Prevention: Proper component lifecycle management
- β Performance Monitoring: Built-in performance tracking
- β Modern Browsers: Chrome, Firefox, Safari, Edge
- β Mobile Friendly: Responsive design for all devices
- β HLS Support: Adaptive video streaming
- β Fallback Handling: Graceful degradation for older browsers
<!-- Latest stable version -->
<script src="https://d3j7x8v9y2q4z8.cloudfront.net/browser-v3.js"></script>
<!-- Previous version (fallback) -->
<script src="https://liv-showcase.s3.eu-central-1.amazonaws.com/browser-v2.js"></script>npm install
npm run build
npm run esbuild-browser:ultra # Ultra-minified production buildUse dist/esbuild/browser-ultra.js for production deployment.
# Install dependencies
npm install
# Start development build
npm run esbuild-browser:dev
# Watch for changes
npm run esbuild-browser:watch
# Run tests
npm test
# Lint code
npm run lintindex.html- Local development testingindex-aws-test.html- Production CDN testing
No breaking changes! v3 is fully backward compatible.
New features to adopt:
// Enable auto-resize for better UX
window.meetergoSettings.enableAutoResize = true;
// Enhanced video embed controls
videoEmbed: {
// ... existing config
// Progress bar now works automatically
// Mute button is now functional
}
// New callback format (optional)
onSuccess: function(data) {
// Handle both old and new formats automatically
console.log('Booking result:', data);
}Old iframe embeds work unchanged, but for better UX:
<!-- Before (still works) -->
<iframe
src="https://cal.meetergo.com/your-link"
style="width:100%;height:600px;"
></iframe>
<!-- After (recommended) -->
<div class="meetergo-iframe" link="https://cal.meetergo.com/your-link"></div>- Documentation: docs.meetergo.com
- GitHub Issues: Report bugs or request features
- Email: [email protected]
Made with β€οΈ by the meetergo Team