How to update a 8yo project
Hey people,
I come to a point that things are going to be changed deeply. Few years ago when I was still in High School a classmate of mine (thanks to him) was running a 'debrideur'. Like him I was interested about programming and had only few knowledges, the basics HTML/CSS + PHP. At that time I wanted to dive into this and really master it but I have no concrete projects. I first start with few small websites that were doing automation for little games. Then my friend told me try the 'debrideur' niche it's interesting and promising.
Just to let you know 'debrideur' is a commonly called premium links generator. At the beginning it started like you had a premium account (its started with Megaupload first, RIP ) on a filehosting service generate it and give it to people. Lately filehosting started to block hotlinking (the fact of generating high speed links for others). After this 'debrideurs' started to act like a proxy and serve the content from a single source (IP) and the game started.
Basically, in December of 2009 I started this, and it has been a really long story since. I had barely no experience in web development out of the basics I told before. It started as free, generated revenues, became a business and still here now.
I started everything from scratch.
How I build it at the begining
What do I need first:
- A webserver to host the website
- A server to make the transit
- A premium account
So I bought a domain name, get a hosting for few euros per month. For the downloading server I started with cloud based server (few euros per months) and some megaupload's account.
After this obviously I started to code what I needed.
Auth System
I build from scratch without any framework at that time a register/login/lost password system. It was probably insecure but again I had almost no knowledges in web development and security matters anyway it was a start.
Register system was a form page with all common details this was stored into a MySQL database.
Login was a check from registered users pretty simple.
Lost password and recovery was tokenized password recovery while sending an email with a link, report it in database and update according to input. Do nothing if this was not initiated by the right person.
Link generator
This has been really simple at the beginning and become more complex later all along the years.
Its now integrate a rewriting feature to rewrite some links with the right (patterns/domain etc..). Once rewriting is done, you'll match the input and parse url so there is a huge parser to verify the link and make sure it's supported by the service. There is also a server assignation connected to attribute the right server for downloading. A user status check is also done to return the right output. It distinguish visitor, free user, premium users so it has to return the right data according to those users status.
APIs
It has not been made at the beginning but some APIs have been designed for externals downloader tool such as Jdownloader, Load! etc.. This allows developers to integrate my solution. I also designed a second api for Kodi.
Reseller program system
I build an integrated system to help people sell my products with a open price. So you can subscribe and you'll have a reseller dashboard to buy credit and generate voucher/coupons and sell them in your website.
Affiliation
The service integrates a afiliate system. It allows users to get affiliates and earn free days from this. Basically a link with a id reference is attached to your account and you are able to share it and get days if your affiliate turns into premium. This was integrated into the website and registration system.
Browser plugin
I build a Firefox plugin (deprecated) to help users select and generate links on my website easily. Because I did not have that much experience on building plugin at that time so I worked from an existing plugin and modified it in order to make it work as expected.
Multi-language system
I had no idea how to deal with this but I made this myself. PHP-based system, I turned all content into variables an assigned the right language depending on your settings (cookie/session based preferences). It's working well.
Multi-Billing system
I worked on various billing system integration. I worked with various type of monetization credit card/phone/sms/internet/prepaid card payments solutions. All of this is linked with IPN (Instant Payment Notification)
Fraud risk system
A fraud system is also built-in to filter and avoid payment fraud with credit card
Admin dashboard
A admin dashboard is also design to make common things such as updating user data, verify servers status and system etc..
Ok so for the website it's mainly this:
- Auth (registration/login/lost password)
- Link generator with its complexity in order to handle all kind of inputs
- 3 APIs in total 1 for external downloaders, 1 for Kodi another 1 for resellers to generate coupons/voucher on fly
- Reseller program
- Affiliation
- Firefox Plugin
- Multi-languages
- Multi sources billing system
- Anti-fraud integrated
- Admin dashboard
There is also script that has to do the job to download content and sent it back to the client. You can have info regarding this in this article Node.js streams and highWaterMark where I am talking about streams.
The architecture years after years improved but has also some failures. I now have a big challenge, I want to rebuild it again from scratch keeping all features and put new ones. I also want to keep all the data from the beginning meaning the new system should be backward compatibility.
In order to do this I decided to build a system which is API-centric, JavaScript fullstack if possible and using the new standards from web development.
I thought about:
- Meteor.js as main framework
- Vues.js 2.0 for component oriented front-end
- Webpack 3.0 for managing my resources
- Express for building the API coupled with GraphQL
- Bulma for CSS
I just only need:
I have all of this so just wait and see