Can AI build a free booking page instead of a scheduling app?

Half. AI can build a page that lists your hours and collects requests, but real-time calendar sync, reminders and double-booking protection take more work than a simple build. Free tiers of scheduling tools may be the better deal.

Verdict: Half-bot · AI helps, you finish✓ Tested 2 times in Llama 3.3 70B · Oct 24, 2026Written for ChatGPT, Claude or Gemini

Jump to the prompt ↓

Half-bot

01Why half-bot

  • A request form plus manual confirmation is easy to build.
  • Live calendar sync needs integrations and maintenance.
  • Missed or double bookings cost real money.
Sponsor slot · openFeatured tool for this task. A labeled card for one relevant tool.
Book this spot →

02The prompt

Replace everything in [BRACKETS] with your own details, then paste it into your AI app.

prompt.txt
You are a web developer. Build a simple appointment request page.

My business: [NAME, SERVICE]
Hours and appointment lengths: [DETAILS]
What I need from clients: [NAME, EMAIL, PHONE, PREFERRED TIMES]
Where requests should go: [EMAIL OR SPREADSHEET VIA A FREE FORM SERVICE]

Requirements:
- MUST be a single HTML file, mobile-first.
- MUST clearly say requests are confirmed by email, not instantly booked.
- NEVER collect payment or sensitive information.
- Don't add features I didn't list.

Then explain the setup steps and what this version can't do compared with a scheduling app.

03Steps

  1. Decide how you'll confirm requests.
  2. Run the prompt in an AI coding tool.
  3. Test it by booking yourself.

04What can go wrong

  • Respond quickly or clients will book elsewhere.
  • Protect client contact info.

05What to use

Claude, ChatGPT, Lovable or Replit.

06Our test runs

2 runs, each with a different made-up sample. 0 of 2 passed every check.

Run 1 · Llama 3.3 70B · graded by GPT-OSS 120BOct 3, 2026Passed with a catch

The made-up sample:

  • [NAME, SERVICE]SunnySide Dental – Routine Cleanings & Checkups
  • [DETAILS]Open Mon‑Fri 9 am‑5 pm, Sat 9 am‑1 pm. Cleanings are 30 minutes, exams are 45 minutes. No appointments longer than 1 hour on weekends.
  • [NAME, EMAIL, PHONE, PREFERRED TIMES]Client Name, Email Address, Phone Number, Preferred Date & Time (up to three options).
  • [EMAIL OR SPREADSHEET VIA A FREE FORM SERVICE]Requests are sent to appointments@sunnydental.com via a Google Form that automatically records each submission in a linked Google Sheet.
  • Single HTML file, mobile‑first
  • Clearly say requests confirmed by email, not instantly booked
  • Never collect payment or sensitive information
  • No extra features beyond listed requirements
  • Made up details we never gave it

Details it made up: “entry.123456789”, “entry.987654321”, “entry.555555555”, “entry.111111111”

What came back (excerpt):

DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.
Read the full answer
```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>SunnySide Dental Appointment Request</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
            padding: 0;
        }
        form {
            max-width: 500px;
            margin: 0 auto;
            padding: 20px;
            background-color: #f9f9f9;
            border: 1px solid #ccc;
            border-radius: 10px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }
        label {
            display: block;
            margin-bottom: 10px;
        }
        input, select {
            width: 100%;
            height: 40px;
            margin-bottom: 20px;
            padding: 10px;
            border: 1px solid #ccc;
        }
        textarea {
            width: 100%;
            height: 100px;
            margin-bottom: 20px;
            padding: 10px;
            border: 1px solid #ccc;
        }
        button {
            width: 100%;
            height: 40px;
            background-color: #4CAF50;
            color: #fff;
            padding: 10px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
        }
        button:hover {
            background-color: #3e8e41;
        }
        @media only screen and (min-width: 768px) {
            form {
                margin: 40px auto;
            }
        }
    </style>
</head>
<body>
    <h1>SunnySide Dental Appointment Request</h1>
    <p>Please note that appointment requests are confirmed by email and not instantly booked.</p>
    <form action="https://docs.google.com/forms/d/your-form-id/formResponse" method="post" target="_self">
        <label for="name">Client Name:</label>
        <input type="text" id="name" name="entry.123456789" required>
        <label for="email">Email Address:</label>
        <input type="email" id="email" name="entry.987654321" required>
        <label for="phone">Phone Number:</label>
        <input type="tel" id="phone" name="entry.555555555" required>
        <label for="date-time">Preferred Date & Time (up to three options):</label>
        <textarea id="date-time" name="entry.111111111" required></textarea>
        <button type="submit">Submit Request</button>
    </form>
    <p>We will contact you to confirm your appointment. Thank you for choosing SunnySide Dental!</p>
</body>
</html>
```

### Setup Steps:

1. **Create a Google Form**:
   - Go to Google Forms and create a new form.
   - Add fields for Client Name, Email Address, Phone Number, and Preferred Date & Time.
   - Set the form to record responses in a Google Sheet.
   - Get the form ID from the form URL (e.g., `https://docs.google.com/forms/d/your-form-id/edit`).

2. **Replace the form ID in the HTML code**:
   - In the `form` tag, replace `your-form-id` with your actual form ID.
   - Also, replace the `entry.123456789`, `entry.987654321`, `entry.555555555`, and `entry.111111111` with the actual entry IDs from your Google Form.

3. **Upload the HTML file**:
   - Upload the HTML file to your website or server.
   - Make sure the file is accessible via a URL.

### Limitations Compared to a Scheduling App:

This simple appointment request page has several limitations compared to a full-fledged scheduling app:

* **No real-time availability**: The form does not check for real-time availability, so clients may request a time that is already booked.
* **No automated scheduling**: Appointments are not instantly booked; instead, requests are sent to the dental office for manual confirmation.
* **No payment processing**: The form does not collect payment or sensitive information, so clients will need to pay separately.
* **No reminders or notifications**: The form does not send reminders or notifications to clients or the dental office.
* **Limited customization**: The form has limited customization options and may not fit the specific needs of the dental office.
* **No integration with calendar systems**: The form does not integrate with calendar systems like Google Calendar or Apple Calendar, so appointments will need to be manually added to the calendar.

Overall, this simple appointment request page is a basic solution that can be used as a starting point, but it may not be suitable for larger or more complex businesses that require more advanced scheduling features.

Replace the placeholder form and entry IDs with your actual Google Form IDs.

Run 2 · Llama 3.3 70B · graded by GPT-OSS 120BOct 24, 2026Passed with a catch

The made-up sample (a messier one):

  • [NAME, SERVICE]GreenLeaf Landscaping – Residential Lawn Care & Garden Maintenance
  • [DETAILS]Open Mon‑Fri 8:00 am‑6:00 pm, Sat 9:00 am‑2:00 pm. Appointment slots: 30‑minute site walk‑through, 1‑hour regular service, 2‑hour deep clean. Minimum 30 min, max 3 hrs per day.
  • [NAME, EMAIL, PHONE, PREFERRED TIMES]Full Name, Email Address, Phone Number, Preferred Date(s) & Time(s) (up to three options).
  • [EMAIL OR SPREADSHEET VIA A FREE FORM SERVICE]Requests emailed to appointments@greenleaf.com and also logged to a Google Sheet via Zapier’s free webhook integration.
  • Must be a single HTML file
  • Must be mobile‑first
  • Must clearly say requests are confirmed by email, not instantly booked
  • Never collect payment or sensitive information
  • Made up details we never gave it

Details it made up: “`https://your-webhook-url.com`”, “Set up email forwarding from `appointments@greenleaf.com` to your desired email address.”

What came back (excerpt):

DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.
Read the full answer
```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>GreenLeaf Landscaping Appointment Request</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
            padding: 0;
        }
        form {
            max-width: 500px;
            margin: 0 auto;
        }
        label {
            display: block;
            margin-bottom: 10px;
        }
        input, select {
            width: 100%;
            height: 40px;
            margin-bottom: 20px;
            padding: 10px;
            box-sizing: border-box;
        }
        button {
            width: 100%;
            height: 40px;
            background-color: #4CAF50;
            color: #fff;
            padding: 10px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
        }
        button:hover {
            background-color: #3e8e41;
        }
        @media only screen and (min-width: 768px) {
            form {
                margin: 0 auto;
                padding: 20px;
                border: 1px solid #ddd;
                border-radius: 10px;
                box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
            }
        }
    </style>
</head>
<body>
    <h1>GreenLeaf Landscaping Appointment Request</h1>
    <p>Please note that appointment requests are confirmed by email, not instantly booked.</p>
    <form id="appointment-form">
        <label for="full-name">Full Name:</label>
        <input type="text" id="full-name" name="full-name" required>

        <label for="email">Email Address:</label>
        <input type="email" id="email" name="email" required>

        <label for="phone">Phone Number:</label>
        <input type="tel" id="phone" name="phone" required>

        <label for="preferred-date">Preferred Date(s) and Time(s):</label>
        <input type="text" id="preferred-date" name="preferred-date" placeholder="Up to three options, e.g., Mon 8:00 am, Tue 2:00 pm" required>

        <label for="appointment-length">Appointment Length:</label>
        <select id="appointment-length" name="appointment-length">
            <option value="30-minute site walk-through">30-minute site walk-through</option>
            <option value="1-hour regular service">1-hour regular service</option>
            <option value="2-hour deep clean">2-hour deep clean</option>
        </select>

        <button type="submit">Submit Request</button>
    </form>

    <script>
        const form = document.getElementById('appointment-form');
        form.addEventListener('submit', (e) => {
            e.preventDefault();
            const formData = new FormData(form);
            fetch('https://your-webhook-url.com', {
                method: 'POST',
                body: formData,
            })
            .then((response) => response.json())
            .then((data) => console.log(data))
            .catch((error) => console.error(error));
            form.reset();
            alert('Request submitted successfully!');
        });
    </script>
</body>
</html>
```

### Setup Steps:

1. **Create a Google Sheet**: Set up a Google Sheet to store appointment requests.
2. **Set up Zapier Webhook**: Create a Zapier account and set up a webhook integration with your Google Sheet. This will provide you with a unique webhook URL.
3. **Replace Webhook URL**: In the HTML code, replace `https://your-webhook-url.com` with your actual Zapier webhook URL.
4. **Set up Email Forwarding**: Set up email forwarding from `appointments@greenleaf.com` to your desired email address.
5. **Upload HTML File**: Upload the HTML file to your website or hosting platform.

### Limitations Compared to a Scheduling App:

* **No Real-Time Availability**: This simple appointment request page does not provide real-time availability or instant booking. Clients will need to wait for a confirmation email.
* **No Automated Reminders**: There are no automated reminders or notifications for upcoming appointments.
* **No Payment Processing**: This page does not collect payment or sensitive information, which may limit its functionality for businesses that require payment upfront.
* **No Customizable Scheduling Rules**: The appointment length options are fixed and cannot be customized based on specific business rules or availability.
* **No Integration with Calendar Systems**: This page does not integrate with calendar systems like Google Calendar or iCal, which may make it difficult to manage appointments and availability.
* **No Reporting or Analytics**: There are no built-in reporting or analytics tools to help businesses track appointment requests, cancellations, or no-shows.

Overall, this simple appointment request page is best suited for small businesses or individuals who want a basic way to collect appointment requests and do not require advanced scheduling features. For more complex scheduling needs, a dedicated scheduling app or software may be necessary.

Replace the placeholder webhook URL with your actual Zapier URL.

How each run works: we fill the prompt with a made-up sample, run it once in Llama 3.3 70B, and GPT-OSS 120B grades the answer against the prompt's own rules. Word limits are counted by code, and every quote flagged as made up is checked against the full answer. Your results can differ. How we test.

Prompt packReplace Paid Apps 10 step-by-step prompts that go further than this one, $19.
See what’s inside →