Trying to understand how 21.02 luci fits together

The gui itself is rendered using JS in the browser. I am trying to understand how it gets configuration/status information from the router, and how it updates configuration on the router. I have looked for a simple overview description but have not found it.

A lot of the documentation is writen in terms of lua, e.g. https://github.com/openwrt/luci/wiki/ModulesHowTo which I understood to be the old way. Where is lua still used?

Does all the configuration updating happen through JSON rpc?

Is there an self contained example of adding a new configuration file to /etc/config and then being able to edit it in luci?

For instance the dropbear configuration gui seems pretty straight forward. But is

Is there corresponding dropbear router side code, or is it all handled in a generic rpc handler for form.Map?