I thought I would share the tech stack for enamel, my side project.
I know that a tech stack doesn't really matter in the beginning, so I picked whatever I'm familiar with.
Hosted on Netlify
node.js, Apollo, graphql-yoga
Hosted on Heroku
- Landing Page
Hosted on Netlify
Hosted on MongoDB Atlas
I'm a big fan of Vue.js and I use it everyday at work, so I'm very productive with it. I also started using GraphQL and Apollo at work and I loved it. The way Apollo handles cache is very smart, and it blew my mind the first time I used it.
I'm a bit concerned about the cost of MongoDB. It might get expensive as I scale. But that would be a great problem to have, so I don't worry about that right now. SQL might be a better choice for this app, but development speed is faster when using MongoDB.
Frontend, backend, and LP are in separate repository. I chose this approach because it's easier to deploy. I initially put both frontend and backend in the same directory. The problem is that You want to deploy built version of vue app, which is located in dist/, and you want to gitignore dist/ because committing dist/ is messy. But heroku uses git for deployment, so it's difficult to deploy.
Netlify handles this very well. It allows you to run a command when deploying. Netlify also takes care of domain management and SSL.
I debated whether or not to separate frontend and LP. It would be nice if I can use the same repository, but SEO in LP is important and Vue(and SPA in general) is not a good choice for that. So I created a separate repository for LP. Frontend is located in app.enamel.tech and LP in https://www.enamel.tech.
Right now I only pay for Heroku since Netlify and MongoDB atlas have a free plan. Yes, Heroku does have a free plan, but it sleeps after 30 minutes of inactivity. Did I try to cheat it? Of course. But after a few attempts to prevent Heroku from sleeping, it seemed silly. Why am I spending my time on this? I've been a long time Heroku user, and yet I've never paid for it because none of my projects took off. Now that I have an actual customer, it's time to pay back.
All my code is public, so feel free to check it out.