Moving mail
The new MX lands first. The old one goes only after Spaceship confirms it.
Every domain in your Spaceship account and every record in it, on one screen. Self-hosted, so the API key never leaves your server.
§ 01When it matters
The new MX lands first. The old one goes only after Spaceship confirms it.
Point the apex at the new server. One field, one TTL, done before standup.
Expired, in grace, or close with auto-renew off. Top of the list until it isn't.
oddjobs.dev · grace§ 02The portfolio
Expired and expiring domains with auto-renew off rise to the top. Drag the date and watch what falls due.
4 of 8 due by 1 Feb 2027. 4 won’t renew on their own.
§ 03Nameservers
Spaceship answers, so the records you edit here are the ones the world sees.
§ 04Records
Each type gets its own fields, checked before it leaves the page. Export the whole zone as a BIND file.
§ 05Safety
Accounts are created on the server, from the command line.
The Spaceship secret is encrypted at rest and never sent to a browser.
Repeated failures lock the door for a few minutes. Errors never confirm an email exists.
An edit writes the new record before deleting the old. No gap where the name answers nothing.
§ 06Self-host
One Compose file: the app, automatic HTTPS, health checks, and a monitor that emails you when it stops answering.
cp .env.example .env # domain, keys, alert emaildocker compose up -ddocker compose run --rm tools npx tsx scripts/create-user.ts you@example.comapp · proxy · monitor healthy