Advice about making a custom UI

I’m brand new to all of this and looking for some high level guidance to get an idea of the forest before I dive into the trees.

Habpanel is what originally caught my eye about openHAB, but thinking more about it what I’d really like is for my wall tablet panel UI to be it’s own little art project for me to work on, with full arbitrary control rather than working through widgets in a responsive grid. That means making a controller from scratch and since I’m a c# desktop app dev by trade, I’d probably want to make something there where I’m most comfortable. So I’m looking to make basically an external remote control client, using openHAB as a device registration/communications broker.
The idea would be

  1. add an ACME smartbulb to my house
  2. add the smartbulb “Thing” with openHAB bindings/paperui
  3. use my UI app to show it’s state and send it commands.

Assuming this is doable, I’m wondering what the communication between my app and openHAB would look like. I’m guessing REST calls are my best bet (?) to send commands to Things, but what functionality should be used to keep the states of the items updated in an external contoller?
Is it necessary to continually poll the rest API from the controller looking for changes, or can openHAB somehow push state changes out to a controller if XYZ is in place?

Any other approaches or related concepts I should look into?

Yes REST would probably be the way to go.
As for updates Openhab supports Server Sent Events, See here:
https://community.openhab.org/t/sse-over-rest-api/19220
I have no idea though, how you would connect to that with .net. Alternatively you might consider using the mqtt persistence service and then subscribe to that from you application.

Totally doable.

Yes. All the existing UIs interact with OH through the REST API too so your app should be capable of anything that can be done from any of the built in UIs.

There are some third party apps that use MQTT which is another alternative. You would use the MQTT event bus in OH which will let you subscribe to all events on all Items and from your app you can publish commands to Items back on the MQTT bus ( the mqtt persistence would only allow one way communication).

As mentioned, I believe the REST API supports sockets which let you subscribe to events rather than requiring polling.