Overview
MeetWith started because I got tired of paying for Calendly and wanted something that did exactly what I needed. I built it as a personal scheduling tool, then realized it could be useful to others, so I cleaned it up and open-sourced it.
The core idea is simple: connect your Google Calendar, define your available hours and event types, share your booking link, and let people schedule time with you. But the implementation has a lot of depth: timezone handling, multi-calendar merging, buffer times, booking limits, email confirmations, and AI-assisted content generation.
Core Features
Calendar Integration
MeetWith connects to Google Calendar using OAuth. It reads your existing events to calculate real availability, writes new bookings directly to your calendar, and respects all-day events and busy blocks. You can connect multiple calendars and the system merges them intelligently.
Availability Engine
The availability calculation is the heart of the product. It takes your configured hours, subtracts existing calendar events, applies buffer times between meetings, respects minimum booking notice, and handles timezone conversions throughout. I spent a lot of time getting edge cases right: daylight saving transitions, midnight crossings, partial-day availability.
Event Types
You can create multiple event types with different durations, descriptions, and availability windows. Each event type gets its own booking link. This lets you offer different meeting formats (30-min intro, 60-min deep dive, etc.) without exposing your full calendar.
Booking Flow
The public booking page shows available slots for the selected event type. Visitors pick a time, enter their info, and confirm. MeetWith creates the calendar event, sends confirmation emails to both parties, and generates calendar invites with video call links if configured.
AI Features
I added OpenAI integration for two features: generating event descriptions from a short prompt, and drafting follow-up emails after meetings. Both are optional and designed to save time on repetitive writing tasks.
Technical Architecture
Frontend
Next.js 16 with React 19 and Tailwind CSS. The booking page is optimized for mobile since most people schedule from their phones. I used Framer Motion for subtle animations that make the interface feel polished.
Backend
Supabase handles authentication (NextAuth adapter), database (Postgres), and row-level security. The API routes handle calendar sync, availability calculation, booking creation, and email sending via Resend.
Calendar Sync
Google Calendar integration uses the official API with proper OAuth scopes. Events are fetched on-demand when calculating availability, and new bookings are created with appropriate metadata. I handle API rate limits and token refresh automatically.
What I Learned
- Timezone handling is harder than it looks. I use date-fns-tz everywhere and test extensively across DST boundaries.
- Calendar APIs have surprising edge cases: recurring events, tentative RSVPs, all-day events that span timezones.
- Email deliverability matters. I spent time on proper SPF/DKIM setup and templating that looks good in all clients.
- OAuth flows need careful error handling and token refresh logic.
- Building for yourself first leads to better products. I use MeetWith daily, so I feel every rough edge.
Open Source
MeetWith is open source on GitHub. The codebase is clean enough that others have forked it and self-hosted. I wrote documentation for local development, environment setup, and deployment to Vercel. It is a good example of a full-stack Next.js app with real-world integrations.