DominaresTools

All tools / Web & documents

vanityhost

Let customers bring their own domain.

Buy vanityhost for $99

One payment of $99, plus sales tax where it applies, and every future update. Delivered as a private GitHub repository you're invited to.

See it work

vanityhost 1.0.1demo mode
vanityhost demo
vanityhost demo: a simulated host and a simulated customer, nothing leaves this machine.

claim 'localhost'                  -> refused: local
claim '10.0.0.5'                   -> refused: ip_address
claim 'rival.myapp.example.net'    -> refused: platform_domain
claim '*.shop.example.com'         -> refused: invalid_characters

claim 'help.example.com' -> accepted [pending_dns]. Show the customer:
  TXT    _vanityhost-challenge.help.example.com  ->  55b37b31493047498afdb84fd484452b   (ownership_verification)
  CNAME  help.example.com  ->  edge.host.example.net   (routing)

polling every 30 seconds (simulated clock):
  t=   0s  pending_dns      waiting for the ownership TXT record
  t=  30s  pending_dns      waiting for the ownership TXT record
  t=  60s  dns_verified     ownership TXT found
  t=  60s  host_registered  registered with the host; waiting for DNS to point at it
  t=  60s  host_registered  waiting for DNS to point at the host (poll 1)
  t=  90s  cert_pending     DNS points at the host; certificate being issued
  t=  90s  active           certificate issued; serving traffic

final state: active
transitions: pending_dns -> dns_verified -> host_registered -> cert_pending -> active
Demo mode, not a live system: vanityhost 1.0.1, run on 2026-10-05. The tool's own offline demo on our test machine, with a simulated host and a simulated customer; no real host, DNS server or domain was contacted.

What it does

vanityhost runs bring-your-own-domain onboarding as one state machine: it refuses bad claims, shows the DNS records, verifies an HMAC ownership TXT, registers the domain with your host (Railway or Cloudflare for SaaS) and waits for the certificate.

Claim guards
Refuses your own domain and its subdomains, localhost, IP addresses, internal names, wildcards and malformed names, with a reason code for each.
Ownership proof
An HMAC token for each owner and domain, shown as a TXT record and checked as found, missing or mismatch. A resolver error counts as not yet, so a polling loop never crashes.
Two host adapters
Railway (GraphQL, with an account or project token) and Cloudflare for SaaS custom hostnames (REST), plus an in-memory simulated host. Both follow the vendors' documentation and are tested against stand-ins, not the live services, so try your credentials with a throwaway domain first.
Never stuck, by default
Every waiting stage has a timeout and registration has a retry limit, so with the default policy a record ends active, failed or disabled. A timeout set to None waits forever.
Drive it your way
From a cron job or a request handler. The clock, the sleep, the DNS lookup and the HTTP transport are arguments, so a whole onboarding runs in a test with no network.
No dependencies
Python standard library only: DNS-over-HTTPS TXT lookup, a JSON file store and a command line are included.

What you get

vanityhost 1.0.1: the Python package and the vanityhost command, the Railway, Cloudflare for SaaS and simulated host adapters, a JSON file store, a runnable example, and the full test suite, with 154 automated tests.

A commercial license. Use it and change it in your own projects and your clients' projects. Don't share or resell the source. Read the license.

Every update. New versions land in the same repository; git pull to get them.

Requirements

Python 3.10 or newer. Python 3.10 or newer. A Railway project or a Cloudflare for SaaS zone to go live with; none is needed for the demo and the tests.

How buying works

  1. Enter your GitHub username. You'll see the account before you pay, so you can check it's yours.
  2. Pay $99, plus any sales tax shown at checkout, on Stripe's checkout page.
  3. Accept the invitation GitHub emails you. Signed in as that account, you'll also find it at github.com/dominares-tools/vanityhost/invitations. Invitations expire after 7 days; you can get a new one any time.
  4. Clone and install:
    git clone https://github.com/dominares-tools/vanityhost.git

    Private repo: sign in to GitHub on this computer first. Run gh auth login and choose HTTPS, or give git a personal access token when it asks for a password. To use an SSH key instead, clone git@github.com:dominares-tools/vanityhost.git.

    python3 -m venv .venv && . .venv/bin/activate
    pip install ./vanityhost

Questions

Do I need GitHub?

Yes. Access is a read-only invitation to a private repository, sent to the GitHub account you choose.

Can I get a refund?

Yes, within 14 days, no questions asked. Access ends when the refund goes through. Refund policy.

Who takes the payment?

Payments are handled by Stripe, which works out sales tax. Your receipt and card statement show Link (LINK.COM*), Stripe's checkout service.

Something wrong?

Email support@dominares.org. Every buyer of a tool shares its repository, so support happens by email rather than in GitHub issues.