Rallly: Self-Hosted Scheduling Without Doodle's Data Harvesting

Find a date everyone can do, without feeding a SaaS your contacts

There is a special kind of dread that comes from trying to pin six people down to a single evening. Reply-all threads spiral, someone proposes a date three others have already vetoed, and eventually somebody mutters the word “Doodle”. And Doodle does work. It also works very hard at watching everyone who clicks your link, sprinkling ad-tech all over a page whose entire job is to collect your friends’ availability and, increasingly, their attention. I host my own instead. The tool is called Rallly, and it is one of the few self-hosted things I actually recommend without a long list of caveats.

Advertisement

Rallly is a group scheduling tool: the “when are you free?” grid, open-source, that you run yourself. You create a poll, give it a handful of date and time options, and share a single link. Participants open it, tick the slots that suit them, and you get the familiar grid showing which option has the most green ticks. You pick the winner. That is the whole loop. No accounts required for the people you invite, no app to install, no upsell.

The privacy angle is the reason it earns a place on my server. When you send a Doodle link, every participant is handed off to a third party that has commercial reasons to know who they are. With Rallly on your own box, the only party that sees the responses is you. There are no tracking pixels, no “improve our services” data sharing, no ad network learning that your book club meets on Tuesdays. For something as socially graphed as “who is free when”, that matters more than it first appears.

Rallly ships as a Docker image and wants a PostgreSQL database behind it. Here is a docker-compose.yml that gets you a working instance:

services:
  rallly:
    image: lukevella/rallly:latest
    depends_on:
      - db
    ports:
      - "3000:3000"
    environment:
      # openssl rand -hex 32 — used to encrypt sessions
      SECRET_PASSWORD: "replace-with-a-long-random-string"
      DATABASE_URL: "postgresql://rallly:changeme@db:5432/rallly"
      NEXT_PUBLIC_BASE_URL: "https://rallly.example.com"
      # SMTP — required for the verification and notification emails
      SMTP_HOST: "smtp.example.com"
      SMTP_PORT: "587"
      SMTP_SECURE: "false"
      SMTP_USER: "[email protected]"
      SMTP_PWD: "your-smtp-password"
      SUPPORT_EMAIL: "[email protected]"
    restart: unless-stopped

  db:
    image: postgres:14
    environment:
      POSTGRES_USER: "rallly"
      POSTGRES_PASSWORD: "changeme"
      POSTGRES_DB: "rallly"
    volumes:
      - ./data/db:/var/lib/postgresql/data
    restart: unless-stopped

Run openssl rand -hex 32 to generate the SECRET_PASSWORD, put a real reverse proxy in front of it so NEXT_PUBLIC_BASE_URL is served over HTTPS, and you are essentially done. The Postgres data lives in ./data/db, which is the one directory you must back up.

The bit people trip over is email. Rallly is not a fire-and-forget container; it genuinely needs working SMTP. Poll creation sends a verification mail, and the comment and notification flow relies on email too. If you skip the SMTP block, the app will look like it is broken when in fact it is just waiting on a message it can never send. Point it at a transactional provider or your own mail relay, send yourself a test poll, and confirm the mail actually lands before you share a link with anyone who matters. This is the single most common reason a fresh install feels half-functional.

It is worth saying plainly that Rallly is a focused, single-purpose tool. It schedules group meetings and it does nothing else. There is no calendar, no task list, no creeping ambition to become your whole productivity suite. I find that refreshing. It does one job and it does it cleanly, which also means it stays small, easy to update, and dull to operate — exactly what you want from something running unattended.

Honestly, sometimes it is overkill. If you organise one group event a year, the free hosted version of Rallly or even a Doodle link costs you nothing but a bit of dignity, and spinning up a Postgres database is effort out of all proportion to the payoff. Self-hosting earns its keep when scheduling is a regular fixture: a recurring committee, a band, a gaming group, a team that books things constantly, or anyone who simply objects on principle to routing their friends’ data through an ad business.

If you already run a small server with a reverse proxy and a mail relay, adding Rallly is twenty minutes of work and one more pleasantly boring container. If you do not, treat this as a gentle nudge to build that foundation, because Rallly is a lovely first tenant for it. Either way, the next time the reply-all thread starts spiralling, you will have a link to send that does not sell anyone out to find a free Thursday.

Advertisement

Related Content

Advertisement
Smarc
Written by Smarc

Founder and editor of vo.rs. A lifelong tinkerer who self-hosts far more than is sensible, hardens Linux boxes for fun, and prods the latest AI tools to see what they can really do. The how-to guides here are the notes Smarc wishes had existed the first time round.