← boes.dev
Zonekeeper logo

Zonekeeper

Laravel API + Nuxt SPA

Visit zonekeeper.app

Zonekeeper keeps a domain portfolio in one place: registrations, DNS zones, nameservers, expiry and pricing, aggregated from the registrars' own APIs. Here is how the machine behind it actually runs.

Nuxt SPAzonekeeper.appAPILaravel OctanePostgresthe portfolioRedis7 named queuesSchedulerdaily sync wavesHorizonqueue workers8 registrar APIsCloudflare, OVH, Porkbun, ...

Hover or tab through the boxes to see what each part does.

5 containers

Stack

7 named queues

Queues

8 registrar APIs

Providers

daily waves

Sync cadence

The daily sweep

Every night the scheduler kicks off sync waves, half an hour apart: reconcile domain lists per registrar account, refresh each domain's details, then pricing, then DNS zones, then every zone's records. Exchange rates land first so pricing converts correctly. By morning the whole portfolio is fresh without a single user-facing request having paid for it.

Fast lane, slow lane

The queues are split on purpose: user-triggered refreshes ride their own lanes (domain refresh, pricing, DNS records) so a nightly cron sweep can never make a button press feel slow. Horizon balances workers across all seven queues automatically.

Self-hosted, same front door

Zonekeeper can be self-hosted, with a twist: there is no separate frontend to deploy. Every install reuses the one SPA. You register your backend in the main app, point a CNAME at the SPA entry point, and the rest is automatic: verification, an on-demand certificate at the first TLS handshake, and backend auto-discovery by hostname. The SPA then negotiates with your backend directly, discovering its endpoints and feature set.

The edges

The frontend is a static Nuxt single-page app served from the edge; only API calls reach this server. The API itself runs on Laravel Octane, staying warm between requests instead of booting the framework each time.

One front door, any backend

Both journeys, end to end: the hosted app on the left, a self-hosted install on the right. Either way you enter through the same SPA, and the registry pairs your hostname to the right backend.

handshake: endpoints & featureszonekeeper.appthe hosted entryyour.domain.tldCNAME to the SPAThe one SPAevery install uses itHosted APIthe main appHost registrypairs host to backendYour backendself-hosted API

Hover or tab through the boxes to see what each part does.