Back to feed
Dean Mazlish

Build a Custom Outlook Booking Page with Claude Code

I was about to start paying for a scheduling tool when I realized I would still be stuck with someone else’s rules. Instead, I built my own booking page with Claude Code. It took two hours to go from starting the project to going live, and I use it every day now. It’s a Next.js app on Vercel with no database. Availability is read live from my Outlook calendar through Microsoft Graph, so there’s nothing to sync or keep updated. My working hours come from my Outlook settings, so when I change my hours there, the booking page follows. When someone books, it creates the calendar event and generates the meeting link. The guest chooses Zoom or Teams on the booking page, so they can use their preferred platform. The rules are the main reason I built it. Same-day bookings are not allowed, so the earliest anyone can book is my next working day. If someone visits the page after hours or on a weekend, the following working day is blocked too. The app also counts back-to-back meetings before offering a slot: if booking that time would give me a run of more than four meetings in a row, the slot does not appear. There’s also a group link that only shows times when both my business partner and I are available. I also avoided doing the setup manually. I had Claude control my Chrome browser and handle the Microsoft and Zoom developer-console work while I did something else. Step-by-step: 1. I described what I wanted to Claude Code, and it built the first working version in one shot. I then gave it my preferences to refine the app. 2. I had Claude use browser control to create a Microsoft Entra app registration, add the application permissions Calendars.ReadWrite, MailboxSettings.Read, User.Read.All, and Mail.Send, and grant admin consent. 3. I did the same for a Zoom Server-to-Server OAuth app with the meeting:write:meeting:admin scope. Teams meetings are available through Graph, so Zoom was the only additional setup. 4. The availability route pulls working hours from Graph mailboxSettings and free/busy data from calendar/getSchedule, then computes open slots across a 21-day window. Only busy and out-of-office events block a slot, so tentative invites do not reduce my availability. 5. The booking route rechecks that the slot is still free, creates the event with the guest attached, creates the Zoom or Teams meeting based on the guest’s selection, and sends me a heads-up email. 6. I deployed the app to Vercel and proxied it from my own domain so the link lives on my site with my branding.

Industry
#apiintegration#automation#scheduling

Tools used

0 comments

Read the Community guidelines

No comments yet. Be the first to weigh in.

Current rank #35 Upvotes 0