Hey Julian,
Thank you for supporting dashboard D2, the biggest competitor of UIBUILDER 
Well to be honest I didn't investigate this further. Because @joepavitt shared here that the ui example node had been generated using a template generator. I would expect that a template generator would generate the best optimal code, but I might have not interpreted this correctly.
I have quickly compared both solutions to provide unminified frontend code, and looks like you are right.
Option 1 - minify option
When using in my Vite config the minify option:
export default defineConfig({
...
build: {
...
minify: false
}
}
Then I get only 1 bundle file:

Which results in readable frontend code in my Chrome debugger, but stuff like comments are gone:
Option 2 - sourcemap option
When using in my Vite config the sourcemap option:
export default defineConfig({
...
build: {
...
sourcemap: true
}
}
Then I get an extra source map file, next to the bundle file:

Which results in readable frontend code in my Chrome debugger, identical to the one I have developed:
And I didn't have to tell my Chrome debugger to load the source map file. It all happened automatically in some or another way.
Conclusion
Based on the above comparision, I suggest to use (both in the ui example node and in the dashboard repos) the following build option:
export default defineConfig({
...
build: {
...
sourcemap: process.env.NODE_ENV === 'development'
}
}
Then we can easily activate the source maps via export NODE_ENV=development
.
If this is ok for you Joe, I will update my pull request.
Thanks @TotallyInformation for sharing your thoughts!!