We Replaced Calendly With a Custom Booking Page in 2 Hours

The Problem

Calendly costs $8 to $12 per user per month. For a small team with two or three people who just need a simple way to let clients book a call, that is $300 or more per year for a tool that mostly sends you an email saying someone booked a slot. We asked: how hard is it to build that ourselves?

What We Built

A lightweight booking page using Python, Flask, and SQLite. It displays available time slots, lets a visitor pick one, and sends a confirmation email to both parties. No third-party calendar sync — just a simple HTML form backed by a database and an SMTP send.

How We Did It

Stack: Python, Flask, SQLite, SMTP, HTML/CSS

Estimated time: 120 minutes

Build Steps

  • [done] Step 1: Scaffold Flask app with SQLite database for slots and bookings (Python, Flask, SQLite) – 20min
  • [done] Step 2: Build slot seeding script — populate available times for the next 14 days (Python, SQLite) – 15min
  • [done] Step 3: Build booking page — list available slots, form submission, slot reservation with row lock (Python, Flask, HTML) – 25min
  • [done] Step 4: Confirmation email on booking — send to visitor and host via SMTP (Python, SMTP) – 20min
  • [done] Step 5: Conflict prevention — mark slot as taken on first submission, reject duplicates (Python, SQLite) – 15min
  • [done] Step 6: Deploy to local server, test full booking flow end to end (Flask, SMTP) – 25min

Results

  • Steps completed: 6/6
  • Total build time: 120 minutes
  • Completion: 100%
  • Verdict: COMPLETE

Build vs Buy

Buy (Calendly) Build (Custom)
Cost $8-12/user/month Time investment only
Stack Managed SaaS Python, Flask, SQLite
Setup Time Minutes 120 minutes
Ongoing Cost $8-12/user/month $0 (self-hosted)

Limitations of the Rebuild

  • No Google Calendar or Outlook sync — slots are managed manually in the database
  • No timezone detection — host must configure slots in the visitor's expected timezone
  • No rescheduling UI — rebooking requires manual slot reset
  • No video conferencing link injection — Zoom/Meet links must be added manually to confirmation email

Verdict

The rebuild is complete. A functional booking page that prevents double-booking and sends confirmation emails took 120 minutes to build using Python, Flask, and SQLite. The ongoing cost is $0.

For a team that books a handful of external calls per week, this covers the full use case.


Want us to build this for you?

We help small teams replace expensive SaaS tools with AI-assisted custom builds. If you are paying for a tool you barely use, we can probably rebuild it for less.

Get a free rebuild assessment

Free giveaway: Every month we give away one free rebuild to a qualifying team. Reply to this post or DM us to enter.


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *