After fiddling around in LuCI (OpenWrt 23.05.0-rc3) I managed to get myself to the point where I would see the login screen but immediately after logging in, received this error:
Error Unhandled exception during request dispatching module 'luci.ucodebridge' not found: no field package.preload['luci.ucodebridge'] no file './luci/ucodebridge.lua' no file '/usr/share/lua/luci/ucodebridge.lua' no file '/usr/share/lua/luci/ucodebridge/init.lua' no file '/usr/lib/lua/luci/ucodebridge.lua' no file '/usr/lib/lua/luci/ucodebridge/init.lua' no file './luci/ucodebridge.so' no file '/usr/lib/lua/luci/ucodebridge.so' no file '/usr/lib/lua/loadall.so' no file './luci.so' no file '/usr/lib/lua/luci.so' no file '/usr/lib/lua/loadall.so' In [anonymous function](), file [C] In [anonymous function](), file /usr/share/ucode/luci/runtime.uc, line 133, byte 10: called from function [arrow function] (/usr/share/ucode/luci/runtime.uc:141:63) called from function render ([C]) called from function [anonymous function] (/usr/share/ucode/luci/runtime.uc:141:64) called from function run_action (/usr/share/ucode/luci/dispatcher.uc:778:34) called from function [anonymous function] (/usr/share/ucode/luci/dispatcher.uc:998:48) called from anonymous function (/www/cgi-bin/luci:39:12) die(ex); Near here --------^
I googled and searched this forum and found many many many people with the same or similar errors but the closest I found to a solution was (unhelpfully) "just factory reset".
Once I got it working again I thought it would be nice to post how I resolved it so that the next person hopefully finds something a bit more useful than "just factory reset" when they have the same problem. Good luck, unknown future person!
I fixed it by SSH-ing into the router and running
opkg install luci-app-uhttpd
I don't know why but it works now.