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.

  • Frontend

Vue.js, Apollo
Hosted on Netlify

  • Backend

node.js, Apollo, graphql-yoga
Hosted on Heroku

  • Landing Page

Nuxt.js
Hosted on Netlify

  • Database

MongoDB
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've been using node.js and MongoDB for pretty much all my side projects, so it's my go-to choice. node.js(ECMAScript in general) got significantly better over the last 2 years. Async/await is one of the best things that happened to javascript .

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.
https://github.com/kenzotakahashi