I finally finished building website where I sell my courses. This is why I want to share with you why I stopped using Teachable and wrote my own website, what technologies I used there any why.
So here is how my website is looking like. The main point is that I didn't program this project from the start, I used a web service which is called Teachable. It's a most popular platform to create and sell courses. And a lot of people are using this platform to sell their courses. And it is all fine until you check their pricing.
As you can see here we have different tiers. And if you want to have your own custom domain you need to pay at least for basic tier $39. And this is actually not bad because you get a website where you can upload your courses and everything is working out of the box. But also in this pricing you need to pay 5% per transaction. Which means on one selling of the course you need to pay 5%.
I successfully used Teachable more than a year and it was really nice because you don't care about code, about supporting your project because you get it out of the box and if it doesn't work it's not your problem. Guys in Teachable will fix it. The question is why I migrated to my own website.
Why own solution?
And first of all is of course the price. When you multiply 39 by 12 it's almost $500 per year. Also you must pay for transactions. And actually when you implement your own solution normally it will be cheaper but of course you must support it on your own. If your website is broken you must fix it. If you didn't implement something or your comments are not working you must fix it.
Another problem that I didn't like about Teachable is that it's one solution for everybody. Which means it's not customized for me. For example they have custom templates to create pages. And this is really nice for everybody but you need to write this block again and again for every new page.
Also you get much more control of the project when you implement it on your own. Because you implemented specifically what you need to. And also important point if you want to jump to next tier in teachable or you simply need some feature which is available in the next tier you don't have other solution but to pay for it $119. And actually this price was much lower but they increased it really significantly. Which means you can't be sure that price won't be increased again in the future.
So let's look on the website that I implemented and it's tech stack. And you probably think "Okay, he used for sure some new hyped technologies." and it is totally wrong. I didn't even bother here with using some frontend framework like Angular or React and I didn't implement it in NodeJS. What I used here is Ruby with Ruby on Rails.
Why is that? Because this is my favorite language and framework. It is simply because with Ruby on Rails I'm getting so much features out of the box and I don't need to implement and support them on my own. For example things like working with database, authentication, emails, ORM and much much more are just coming out of the box. This is exactly why I implemented this project so fast.
One more important point why I choose Rails is because it is much easier to implement project just by using backend. Because with backend you simply render html page and you have a full page reload when you change the page. When you build a single page application you need to implement much more. You must implement API, you must fetch your data, you must build your frontend, you have frontend state and you need to manage it across pages. So you need to remember when to clean it and so on and so on. With backend you don't need anything. With every click your page is fully reloaded. Which means you don't have an old state, you simply generate a new page and you render this page.
But obviously it depends on your project. But I highly recommend you to always implement your project just with backend if it is possible. Because single page applications are really nice for huge business applications where you have a lot of changes on frontend but not every project needs them.
So here is a full list of technologies that I used:
- Ruby on Rails
- Stripe (for payments)
- Mailgun (for sending emails)
- Docker (to isolate everything inside container)
- TailwindCSS (for markup without CSS)
How long did it take?
Now the most interesting question. How long did it take to implement it? And actually I did it in the evening normally 1-2 hours per day. It took me near 2 weeks to implement the whole business logic without any markup or CSS.
After this it took 2 more weeks to implement markup with TailwindCSS and at the end I spend 1 week for deployment and fixing all possible bugs.
And now I want to compare how much time it would take for me if I do it in NodeJS with Express. And I think it would take probably 2 or 3 months just because I need to implement all this features on my own. And yes sure there are some popular package inside NodeJS for common things like PassportJS for authentication but actually they are really low level. In Ruby on Rails I spend 15 minutes to get full authentication out of the box with registration, authentication, recovering password and email confirmation. The main point is that all this templates and forms I've got from this package. In PassportJS you must implement all this forms on your own. This is why I highly recommend you to always take frameworks where you get lots of features out of the box and you should not implement them on your own.
Now let's compare my costs. Own website vs Teachable. As I said in Teachable I paid $39 per month + 5% per transaction. Now for my custom website I pay $2 for hosting, $5 for CDN to store videos, I also use free tier of Mailgun and Stripe for payments where I pay 1% per transaction.
So here is my conclusion of this story. First of all it is always cheaper to implement something on your own but you must have enough experience to do that and you must support it on your own. This is why always when possible I will prefer a paid solution just because I don't need to fix it on weekends.
Also if you are interested how I built the same project in all frontend frameworks make sure to check this post.