Run it on your own server.

SendTidings is being built as a hosted product first, because that is how the rough edges get found. The self-hostable, AGPL-3.0 build is the next step: the same code, the same repository, pointed at your own database on your own infrastructure.

It is not open yet. This page exists so that when it is, you already know whether it suits you.

Four things, and you can host all of them.

Worth knowing up front rather than three steps into a setup guide. Every one has a local option, and hosted alternatives if you would rather someone else ran it.

Database (Postgres, any flavour)

Neon, Supabase, RDS, a container, your own box. The driver is picked from the connection string, so all of them work. Compose brings its own if you would rather not think about it.

Email (SMTP or Resend)

Point it at your own mail server, any SMTP provider, or use Resend. The one thing only Resend does is delivery tracking, so on SMTP a report just never reports back as delivered.

Scheduler (Built in)

Something has to run the jobs that send the reports. There is a bundled scheduler, and Trigger.dev is there if you would rather have retries, run history and alerting.

Sign-in (Email, or OAuth)

Magic-link sign-in works off whatever is sending your email, so it needs nothing else. Google and GitHub are there if you would prefer them.

Which means an instance can run with no third-party account at all: your own Postgres, your own mail server, the bundled scheduler, and sign-in links that arrive through the same mail. The hosted service uses Neon, Resend and Trigger.dev because those are the right tools when someone else is carrying the pager, not because the code needs them.

Self-hosting is a trade, not an upgrade.

Both are the same software. The difference is entirely about whose problem it is when something breaks.

Hosted
  • Upgrades, migrations and security patches are mine
  • Deliverability, domain warm-up and bounce handling are mine
  • If a report fails at 9am, I find out, not you
  • Free for one client site, £29/month flat for twenty
See pricing →
Self-hosted
  • You own the data, end to end, on infrastructure you chose
  • You upgrade when you want to, or never
  • Plan limits are a config file you can edit
  • Everything above is now your job, including the 9am failure
Hear when it opens →

One email, on the day the repository opens.

No drip sequence and no newsletter by stealth. You get a link to the repository and the self-hosting guide, and that is the end of it.

Already on the waitlist from the homepage? You don’t need to sign up twice, it’s the same list.
~/sendtidings
# what setup looks like
$ git clone github.com/…/sendtidings
$ cp .env.docker.example .env
  # one key, one URL, and you’re set
$ docker compose up

→ postgres: ready
→ web: listening on :3000
→ worker: 7 jobs scheduled
AGPL-3.0
licence
One repo
same code as hosted
Zero
accounts required

The ones worth answering early.

Is it a cut-down version?
No. It is one repository and the same code the hosted service runs. There is no community edition holding features back, no licence key, and nothing phoning home. The plan limits exist in the code because they gate the hosted service, and on your own instance they are a file you edit.
Why AGPL and not MIT?
Use it, change it, run it for yourself and your clients: all fine, and none of that triggers anything. The AGPL only asks that if you run a modified version as a service for other people, you publish your modifications. It is a one-person product, and that is the bargain that lets the code be open and stay open.
Is there a Docker image?
Yes. One docker compose up brings up Postgres, the app and the scheduler together, and a mail catcher so you can read what it sends while you look around. Swap that for your own relay when it stops being a look around. It is also a stock Next.js app, so Vercel, Railway, Render, Fly or any Node host will run it just as happily.
What actually sends the reports?
A scheduled job, not the web app, and this is the thing that catches people out. Run the bundled scheduler or deploy the jobs to Trigger.dev; run neither and the app looks perfectly healthy while no report ever arrives. Run two and every client gets theirs twice.
Can I pay you to host it instead?
That is the hosted service, and it is the same software. If self-hosting turns out to be more evening than you wanted, moving across is not a migration so much as a signup.