Uups-upgradeable, the manual way


While I understand that the hardhat/truffle plugin are designed to secure an upgrade(prevent broken upgrade), are there any doc that describe the actual smart contracts(and source) of what is going on.

My understanding is that it would still in generally involve 3 contracts

proxyadmin - this would be sort of the governor/owner of the proxy(or external account)
proxy - the external facing contract own by the proxyadmin, upgrade would be initialize via this address
implementation - uups compatible one that is proxied by the proxy

the hardhat/truffle plugin would dynamically generated proxy.sol with the deployer as the owner(thus no proxy admin contract but can be changed later?)

is my understanding correct ?

really would like to see a live example of the contract source of it.