I have been doing some research on how to properly design and architect a dApp solution on Cardano and came across this nicely, written article (albeit on Ethereum) The Architecture of a Web3.0 Application. I was wondering if anyone could point me in the right direction for something similar on Cardano. How are mainstream dApps like Sundaeswap, etc. architecting their solutions? I think having such documents/diagrams/suggestions readily available in the Cardano community can be of great help! Possible design ideas are also welcome.
My self have been looking for something similar to the Web 3 stack on Ethereum. I think I found an example of a dApp which illustrates the integration between a web application and the Cardano blockchain through not just one but three wallets (Nami, CCVault, Flint).
Depending on how many features your dApp needs, most of it cannot be fully decentralized yet. The following is a non-exhaustive list of common components of an application, and how to decentralize them on Cardano:
Authentication - If you store additional data about a user - besides what can be determined from the contents of their wallet - you need a way to authenticate them with your backend. See the guide here.
One-time payments - You can use a wallet for payments to a smart contract or wallet. This can be accomplished by making the user send money themselves through their wallet app, or by using a wallet extension (which will only work on desktop currently, as mobile phones don't support browser extensions to my knowledge).
Recurring payments - I don't think this is possible in the traditional sense. You could allow users to send extra funds to give their account "credit", then subtract from this credit whenever your payment period starts. In the future, it would be cool if you could use a reputation system to create a "credit score" for a user, and allow users to build up debt if you trust that they will pay it.
Identity - The most well-known decentralized identity system being built on Cardano is Atala Prism. It's still in develop from what I understand, but you can join their pioneer program if you'd like to integrate it into your application. Identity will be the basis of reputation systems, as over time they can generate a web of trust.
Public time-series data - Public data from sensors, IoT devices, drones, price feeds, etc. will be best suited to store on oracles. There are many companies creating oracles on Cardano. You can find a list here. I don't believe any of these are fully working yet.
Random numbers - This is also a service handled by oracles. Here is how Chainlink does it.
Small, unchanging public data - Probably something that should be stored on-chain or on IPFS.
Large, unchanging public data - IPFS may be suitable for this, but I'm not sure.
Private data - This can be as simple as using the FileSystem API (which I believe only works on Chrome - not even Brave) to read/write data locally on the user's machine. You can also use a service like Storj for private cloud data. Ideally, there would be some program that users can run on their local machine that syncs data between their local file system, their backup drives, and the decentralized cloud so applications don't need to set up access to their cloud account directly. But such a service does not exist.
NoSQL database - I don't think any decentralized databases are stable enough for a production application yet, but you could look into OrbitDB.
SQL database - No decentralized SQL database architectures exist, unfortunately.
Hosting - The only decentralized hosting platform I know of being built on Cardano is NuNet. They are in private alpha, so you can't use it yet. Alternatively, you can host your application using Akash. The only downside is that this is on the Cosmos blockchain, so if you're hoping to pay for your website automatically from user payments in Ada, good luck.
Certificates - Likely every dApp is using Let's Encrypt, which is great because it's free, automated, and open-source (I think). But I don't believe it is decentralized.