Every component, and where it runs

EU-hosted on Hetzner VM in Germany, behind Cloudflare. The whole system fits in one view — and the only sub-processors are Cloudflare, Paddle, and SMTP2GO.

Clients

Browser

steadycron.com

Landing & docs

Browser

app.steadycron.com

Dashboard UI

CLI / scripts

api.steadycron.com

REST + manifests

Your cron

ping.steadycron.com

Heartbeat pings

Cloudflare

DNS · TLS · WAF · CDN

Edge proxy, firewall, and rate limiting in front of everything.

Cloudflare Pages

Astro · static

This landing site, served at the edge — never touches the VM.

Caddy

reverse proxy

On the VM: automatic TLS, routes app. / api. / ping. to containers.

Hetzner VM · Germany · Docker Compose

Dashboard

steadycron-dashboard

Next.js. Authenticated UI; calls the API over the internal network.

API + Ping

steadycron-api · .NET

REST · ping ingest · cron preview · template vars · activity · admin.

steadycron-scheduler · Quartz.NET clustered

HTTP executor

Polly · SSRF guard

Makes the scheduled HTTPS calls — retries, timeouts, redirect re-checks.

Heartbeat watcher

30s tick

Flags missed and stuck runs against each grace period.

Alert dispatcher

outbox · NOTIFY

Drains the outbox; shapes, delivers, and retries alerts.

Background workers

×4 services

Delivery flush, anomaly detection, retention prune, Paddle reconcile.

PostgreSQL 17

app · Quartz · outbox

One instance for everything. LISTEN/NOTIFY replaces a broker — no Redis.

Backups

nightly · encrypted

Encrypted pg_dump shipped offsite; quarterly restore drills.

External services & your systems

Your endpoints

the jobs we call

Your HTTPS handlers, called on schedule.

Alert channels

Slack · Discord · …

Telegram, webhook, email — outbound only.

Paddle

billing · MoR

Merchant of Record — handles tax. No card data here.

SMTP2GO

email

Verification, password reset, and email alerts.

Observability · OpenTelemetry → self-hosted Grafana Infra-as-code · Terraform (Cloudflare + Hetzner) Scheduling · Quartz.NET clustered (AdoJobStore)