Creating a Windows service is a bit harder (as Windows actually uses a real API for services rather than just relying on process spawning and scripting around that), but with task scheduler you can schedule tasks to run once a month in all kinds of ways.

> a real API for services rather than just relying on process spawning and scripting around that

What's the difference? Aren't services always just spawned processes?

On Windows, services use this API: https://learn.microsoft.com/en-us/windows/win32/services/ser...

Services are executables, but they have dedicated entrypoints/"signals" for interaction with the service manager. That means you can't point a service at a batch file or powershell script, because those applications don't have the symbols to respond to the signalling from Windows.

I'm sure there is some perfectly valid reason for that in Windows-land but yet I prefer the launchd/systemd approach.

A Windows Service is something you (generally) want running 24x7. In fact I think a Windows Service seems very much like the wrong thing to do here. Services are not the only way to schedule things in Windows.

And you can "just" use nssm to wrap any arbitrary executable with what is needed to make it a windows service.

edit: Windows can use Node and Playwright just fine. I think the only thing this needs a Mac for is to schedule and send messages as an alert.