Hi @cjd9s,
I had missed that you were using the proxy in your dapp (sorry, I am not a front end developer).
I would still encourage you to use OpenZeppelin Upgrades Plugins for deploying and testing upgradeable contracts.
I don't know why this is. I would change your app to use the implementation directly to see if you get the same result, to rule out the proxy.
In case there is different behavior between ganache and a public testnet.
It is easier to manage versions of tools per project. I tend to only have ganache-cli
installed globally.
Installing packages locally rather than globally (npx)
If you are using gasless meta transactions, I recommend watching and playing with the workshop code: