Skip to main content
Photo of Anton ShubinAnton ShubinContact

mig tiny self-hosted meeting scheduler In use

One owner, one link, no database.

A visitor picks a free slot, and you both get an email with a calendar invite and a cancel link. That's the whole product.

49 s, with captions and music: a guest picks a day and a time shown in their own time zone, types a name and an email, books with one click, and you both get an email with the meeting link, a cancel link and a calendar invite.

Run it with Docker Compose

# compose.yml
services:
  mig:
    image: antonshubin/mig:v2.2.0
    restart: unless-stopped
    ports: ["8080:8080"]
    volumes: ["./data:/data:z"]
    env_file: .env

Try it here

This is my real booking page, the same one the Book buttons on this site open. Book only if you want to talk.

Why mig

Nothing to operate

One small container, bookings in one JSON file you can cat and back up. No database, no accounts, no admin UI.

Config is code

Working hours, days off, slot length and the meeting link are environment variables. Change them, restart, done.

Both clocks, everywhere

Guests see times in their own time zone. Your emails show your time and the guest's side by side.

Invite and cancel built in

Every confirmation carries an .ics invite and a signed cancel link. Optional push notifications through NTFY.

The guest's confirmation email: subject "Booking confirmed", the meeting's date and time in Berlin time, the meeting link, a note about the attached calendar invite, and a cancel link.

No stranger's text in the guest's inbox

Anyone can type any address into the form, so mail to that address says only when the meeting is, with whom, where and how to cancel. The name, the notes and the cancel reason reach you alone.

Embeds anywhere

/embed drops the whole flow into an iframe on your site, resizes itself and takes your site's theme with ?theme=.

Embed it

<iframe src="https://meet.example.com/embed?theme=dark" title="Book a meeting"
  style="width:100%;max-width:36rem;border:0"></iframe>

The frame posts its height as its content changes and a message once when a visitor books, so the host page can resize the iframe and count booked calls.

What is not built yet is on the open issues.

Use it if

  • You want one booking link for yourself.

Skip it if

  • You need teams, payments, several event types, calendar sync or thousands of bookings a day.

The story behind it

Two ways to use it

Use it yourself

The code is on GitHub under the AGPL-3.0 licence.

docker pull antonshubin/mig:v2.2.0

From Docker Hub, pinned to v2.2.0.

View on GitHub

Have me build it

Need something like this for your team? That's my day job.

More tools

  • Zond

    internal health probe bridge for services behind SSO proxies.

    In use
  • caldav-mcp

    MCP server that lets AI assistants read and write CalDAV events and tasks.

    In use
  • rostok

    one-command scaffolder for a self-hosted homelab.

    In use

All tools