DApps have a huge UX barrier of getting a wallet and getting ether (Ethereum's native currency) from some exchange or some other place and then using the app. The idea is to let people interact with the dapp using any ERC20 token as gasFee instead of Ether and cutting a lot of trouble. We've used unleashed the supremacy of meta-transactions to do this.
Not everyone holds ERC20 tokens also so we've a pay via card option also such that whatever amount user deposits is mapped to their address on a contract and we use price feed API from Tellor to get exact value for USDtoETH, for each transaction they can be charged the same amount in USD instead of ETH or WEI.
Well the one of the major problem i faced was how to get latest price on contract and how to charge people in ERC20 tokens and do whatever user is trying to do with just one function call and decentralised oracles were the saviour.