DEV Community

Cover image for I added custom cron scheduling to my Hetzner backup SaaS (and why no competitor has it)
Dan Rovito
Dan Rovito

Posted on

I added custom cron scheduling to my Hetzner backup SaaS (and why no competitor has it)

I've been building HetGuard, a backup scheduling tool for Hetzner Cloud, and last week I shipped a feature I'm genuinely proud of: custom cron scheduling with a visual builder.

It sounds small. It isn't.

The gap I found

HetGuard lets you schedule automated backups of your Hetzner servers, volumes, and databases. When I was researching the space, I did a feature comparison against the main tools out there.

Every one of them offers the same preset intervals: hourly, daily, weekly, monthly. That's fine for most people. But developers often want something more specific. Run at 2am on weekdays only. Run every 4 hours during business hours. Run on the first of every month.

None of them supported that. Not a single Hetzner backup tool I could find.

Custom cron scheduling is table stakes for any serious scheduling tool. Somehow it had been skipped by everyone in this niche.

What I built

I added a "Custom" option to the existing schedule selector. When you pick it, a cron builder slides open with two panels that stay in sync at all times.

The visual builder has five rows, one per cron field: minute, hour, day of month, month, and day of week. Each field has three modes:

  • Every - wildcard, runs on every value
  • Specific - pick individual values from a list (days of week show names, months show abbreviations)
  • Interval - a stepper that produces /N syntax, like */6 for every 6 hours

Below both panels there is always a plain-English preview of the schedule. Type 0 9 * * 1-5 and it reads back "Every weekday at 9:00 AM UTC." Edit the visual builder and the raw cron string updates instantly. Edit the raw string and the visual builder reflects it.

If the expression is too complex for the visual builder to represent (like a range 1-5), the builder disables gracefully and shows the raw input in a warning state. It does not crash or lose the value.

How I built it

I gave Claude Code a detailed prompt and it built the whole thing in one pass. Here is roughly what the prompt covered:

  • Add a "Custom" button to the existing preset button group, matching the existing style exactly
  • Build a CronBuilderComponent implementing ControlValueAccessor so it drops into the existing reactive form cleanly
  • Bidirectional sync between the visual builder and raw input, with graceful degradation for complex expressions
  • A CronHumanReadablePipe for the plain-English preview, covering wildcards, specific values, intervals, day names, and month names, with no third-party library
  • Backend validation in Laravel: 5-part cron only, per-field range checks, clear error messages
  • A warning (not an error) if the expression runs more frequently than every 30 minutes, since that could hit Hetzner API rate limits

The trickiest part was the bidirectional sync. Keeping the visual builder and raw input in agreement without infinite update loops took some care, but Claude Code handled it cleanly. The human-readable parser was the other interesting piece: rather than pulling in a library like cronstrue for one feature, I specified it should be built from scratch covering the common patterns and fall back gracefully for edge cases.

The whole feature took about an hour from prompt to deployed.

Why this matters for SEO too

I realized after shipping it that "custom cron scheduling" is also a differentiator in search. Someone searching for "Hetzner backup custom schedule" or "Hetzner backup cron" now has a specific result to land on. No other tool in the niche has this feature.

A niche product living in a small market needs to own every possible search angle. Features and SEO are not separate concerns.

What's next

I am working on comparison landing pages targeting searches like "SnapShooter alternative Hetzner" and "best Hetzner backup tools" since those are the searches with the most commercial intent. The custom cron feature will be called out on those pages as a concrete differentiator.

If you are running on Hetzner Cloud and want automated backups without maintaining a cron script yourself, HetGuard has a free plan that covers one schedule. No credit card required.


Building something similar or have questions about the cron builder implementation? Happy to go deeper in the comments.

Top comments (0)