$99 for your first mod, $75 for every mod after. Own production-ready source code forever—zero subscriptions, zero platform fees.
HelpfulMods

Service

Booking & Calendar

Appointment booking and Stripe deposits with built-in protection against double-bookings.

Put an end to checkout race conditions and scheduling collisions. Booking & Calendar locks appointment slots with atomic database holds while customers pay their Stripe deposit, automatically releases abandoned checkouts, syncs bookings with Google Calendar, and checks refreshed availability across timezones.

$99 first mod · $75 each additional mod · One-time license

See the included customer page

View full-size screenshot

The built-in customer page, shown with sample data.

Test-drive the live workspace with sample data. Nothing is charged or sent. Your sample workspace lasts up to 15 minutes.

Booking & Calendar customer page preview, version 1.1.4, using sample data.
Included in version 1.1.4 · Sample data

Example scenario

Book a consultation and secure the deposit

A customer chooses an available consultation time. The mod holds the slot while they pay a Stripe deposit, confirms the booking, updates Google Calendar, and keeps the appointment history when they later reschedule or cancel.

From setup to the result

  1. Set up your staff or rooms, working hours, and business timezone.
  2. Show available times and hold the customer's chosen slot.
  3. Confirm the appointment once any required Stripe deposit is verified.
  4. Update Google Calendar events and send automated customer reminders in the background.

What the package handles

What you can build with it

  • Working hours, appointment duration, buffers, advance notice, and booking limits for your staff or rooms.
  • Slot holds that prevent competing bookings in your app, with a saved history of reschedules and cancellations.
  • Google Calendar busy-time checks and event updates, verified Stripe deposits, and automated email reminders via Resend.

Included capabilities

  • Automatically detects the customer's timezone and converts appointment dates and times, with a manual timezone selector.
  • Google Calendar busy-time checks and booking event updates.
  • Fixed-amount deposits through Stripe Checkout.
  • Automated appointment reminders through Resend.
  • Saved deposit and calendar results help recover interrupted bookings. Unconfirmed external changes wait for review before another attempt.

Before you choose

Architecture & Runtime Specs

Who it is for

  • Consultants and appointment-based businesses.
  • Teams booking shared staff or rooms.
  • Businesses that need deposits and calendar events to stay in sync.

Hosting and connections

V1.1.4

Runs on Node.js 22.13+ and PostgreSQL 17, with a persistent service and background worker for queued work. Deploy on Railway, Render, Fly.io or a VPS configured for those processes.

Self-host on Node.js 22.13+ and PostgreSQL 17 with zero Helpful Mods platform or per-seat fees. Your customer data stays in your database.

Connects directly to your own Stripe, Resend, and Google Calendar accounts with zero middleman fees.

Show the integration

Your app backendBooking & CalendarGoogle Calendar / Stripe / Resend

Your app calls the mod on your server. The mod saves its records in your database and uses your own provider accounts for the features you enable.

Install the package, run its migrations, configure the mod and start its HTTP service as described in README.md. Set MOD_ORIGIN to the service’s origin. Keep its operator token, customer signing secret and provider keys in your server environment. Use the configured HTTPS service origin in production.

Connect a signed-in customer

Read this customer’s appointments and the configured calendar. Your backend verifies the person’s session and workspace membership, then chooses their actorId and tenantId from its own records. The helper signs a 60-second token limited to this mod and the customer role.

Customer request example

Save this helper beside the installed package’s package.json. Call customerRequest from your authenticated backend with that verified customer record. Set HM_AUTH_SECRET to the same private signing secret used by the mod. Do not construct verifiedCustomer from the browser’s request body.

import { signToken } from './dist/core/auth.js';

export async function customerRequest(verifiedCustomer) {
  const token = signToken({
    aud: 'helpfulmods', sub: verifiedCustomer.actorId,
    tenant: verifiedCustomer.tenantId, role: 'customer', mods: ['booking'],
    exp: Math.floor(Date.now() / 1000) + 60, external: false,
  }, process.env.HM_AUTH_SECRET);
  const response = await fetch(new URL('/api/booking/commands/customer_calendar', process.env.MOD_ORIGIN), {
    method: 'POST', redirect: 'error', credentials: 'omit',
    signal: AbortSignal.timeout(10000),
    headers: { Authorization: 'Bearer ' + token, 'Content-Type': 'application/json' },
    body: JSON.stringify({}),
  });
  if (!response.ok) throw new Error('Customer request failed: ' + response.status);
  const result = await response.json();
  return result;
}

Check the service from your private admin backend

Read the reservations saved in your booking workspace. This uses the installation’s operator credential for a private administration check. Your backend checks staff permissions before making this request.

Administration request example

Save this as integration-example.mjs and run node --env-file=.env integration-example.mjs. Set HM_API_TOKEN to the private operator token used by the service. These requests do not send email, take payment or call an AI model.

const origin = process.env.MOD_ORIGIN;
const token = process.env.HM_API_TOKEN;
if (!origin || !token) throw new Error('Set MOD_ORIGIN and HM_API_TOKEN');
const response = await fetch(new URL('/api/booking/commands/list', origin), {
  method: 'POST', redirect: 'error', credentials: 'omit',
  signal: AbortSignal.timeout(10000),
  headers: { Authorization: 'Bearer ' + token, 'Content-Type': 'application/json' },
  body: JSON.stringify({}),
});
if (!response.ok) throw new Error('Mod request failed: ' + response.status);
console.log(await response.json());

A useful handoff to your coding agent

How setup works

Point your coding agent at README.md and setup/SKILL.md. The zip includes architecture docs, an integration guide, an error reference, and automated checks so your agent can work directly from the source package. Live provider setup connects to your own accounts.

  1. Architecture scan. Your coding agent inspects your codebase, routes, database and authentication, then plans how to connect the mod.
  2. Answer a few quick questions. Your agent asks how you want the feature configured and connects your API keys in your private environment.
  3. Run the tests and go live. Your agent runs the included verification suite, checks the customer workflow and tests your connected services before launch.

What your agent will ask you during setup

  • What can customers book, for how long, and when is each staff member or room available?
  • Is a deposit required, and what amount and currency should it use?
  • Which Google calendar belongs to each staff member or room?
  • When should appointment reminders go out, and which sender email should they come from?

What your agent checks

  • Run simultaneous booking requests for the same available slot and confirm only one reservation succeeds.
  • Check automatic timezone detection, manual changes, closed days, daylight-saving transitions, buffers, rescheduling, and cancellation.
  • Confirm that a late deposit arriving after a hold expires gets flagged instead of double-booking a slot someone else took.

Focused Scope & Extensibility

Included scope, capacity and customization
  • Each reservation books one staff member or room for your configured appointment duration.
  • Transaction-protected slot holds coordinate competing bookings inside your app. Google Calendar availability checks also account for independent changes made directly in the calendar.
  • Collects fixed-amount Stripe deposits at booking; manage cancellation refunds and taxes in your Stripe Dashboard.
  • Your main app handles user login and passes the customer's account ID to the booking service.

Before you decide

Will this work with my existing app?

Yes. Each mod runs as a service alongside your existing app, whether you use Next.js, Rails, Django, Laravel, Go, Express, or another backend stack. Your backend makes HTTP requests and passes verified customer identities; your coding agent wires up the connection. This mod runs on Node.js 22.13+ and PostgreSQL 17 on a host that supports a persistent Node.js process.

What will my agent need from me?

Access to your codebase, your answers to the setup questions above, and API keys for any connected services. Store keys in your own private .env environment or secret manager.

What happens if setup fails?

The included setup/error-reference.json gives your coding agent error explanations and recovery steps. Every purchase includes 30 days of direct setup support and 12 months of bug and security updates. If a material defect cannot be fixed, our refund policy provides a full refund.

Is this a subscription?

No. You pay once ($99 for your first mod, $75 for each additional mod) and can use and modify the source code in your product forever. Includes 12 months of bug and security updates, with zero recurring Helpful Mods fees.

How do I buy this mod?

Add this mod to your cart and pay through Stripe Checkout. Instant delivery: Download your complete source zip, SQL migrations, and agent setup prompts the second Stripe confirms checkout.

SHIP IT TODAY

Save weeks of plumbing on Booking & Calendar.

Add Booking & Calendar to your cart for $99 ($75 if it is an additional mod), or ask Mallow a technical question before you buy.