For Windows and Android you can write a JVM app and abstract the API/library that grants access to USB devices, with one implementation for Android and another for other platforms. For instance you can use a Java USB library to implement it on Windows (there are several). You can then use
Conveyor to ship an app that will start automatically at boot/login, and now you have a kiosk-like experience with auto-update. You can use Compose [for Desktop] to share the UI code between the two platforms if you wish (desktop/android), there are KMP examples from JetBrains showing how to structure such a project. You could then experiment with using Compose on the web too via Kotlin/JS, but that's more experimental. If you have a good desktop app and Android app you may not need a web version at all?