Version 1 was written in Swift and ran on a Raspberry Pi. It worked but was kind of a waste of a whole Raspberry Pi.
Version 2 was written in MicroPython on a Wemos D1 Mini. It was flakey and required connecting to USB to update.
Version 3 still runs on a D1 but moves all automation logic to the server so updates are super easy.