My first Mega Project: Chess Website
Tags: machinelearning, nextjs, python, fullstack
Published: 2024-04-21 14:00:00

Hello everyone! Today I'm excited to announce my very first series, where I share everything I learned from completing my very first mega project(yes, I made up that term just now): DeezChess.

DeezChess is a full stack web application where the core functionality is to enable user to build their own custom bot by uploading game files as input, and they can play against the bot as well as save and share the bot so that other people can play it too.

## Why 
I am the type of persons who love to get hands one when learning new skills. As I was thinking what project to do to familiarize myself more with machine learning, immediately I thought of chess.com's custom bots. There are bots of various strengths but strangely they only updated new bots anytime there's an event or a major update. In other words, it's not directly possible for user to create their own bots. So, I decided to take on this challenge.

## Project Description
My objective of this project is to create a chess website where players can either play chess like normal, or create their own custom bots by uploading necessary data to fine-tune a trained model on the cloud. I want to push this project to production(first time), and make sure the code is as maintainable and readable as possible. This is because I plan to make it open source once I'm satisfied with the main functionality as a way to give back to the community.

## My plan
I set up a due date for myself to complete this project , which is on the 31st of December 2024. I chose this date because by that time I would be entering my first year as an undergraduate(hopefully in my dream course and university), and I want to have something to talk about when finding like-minded friends there, while also equipped myself with enough skills to be considered as an intern. 

I know that sounds like a really ambitious plan as I literally only know how to use ReactJs barely, but hey if I don't challenge myself than who will right? However, I do realize that I won't be motivated the whole year so I want to aim to write blogpost of this series here whenever I have new findings or just general updates. I plan to update weekly though we'll see how that goes. 

## Technologies and tools I plan to use
Most of the things I list here I don't fully understand or haven't even touch yet but I know I need to pick up eventually so why not now right

## Front-end
- I want to use the latest NextJs app router framework for React as I already completed several projects using them(although it's not deployed) and I really like the way it handles routing, I mean the folder based routing is so easy to understand right? I also aim to fully utilize the server side rendering feature of NextJs since I didn't really care about it that much before but if I want to push it to production it better be optimized as much as possible.

## Back-end
- I want to use Firebase as the backend as the database because of it's ease to setup and use. I don't think this project will gain traffics that will exceed the free tier, so I guess I'll change the database if it's worth my time and effort.  I'm also using GraphQL to enable the web application to interact with the pretrained model on the cloud on a separate API.
 
## Machine Learning
-Since I know quite a lot of Python already, I decided to just use that but I also want to use PyTorch library whenever possible since I just learned it and want to practice with it more. I plan to put my pre-trained model on the cloud using providers like AWS ,Google Cloud or Microsoft Azure (haven't decided on which one yet. Any recommendation is appreciated!).

## Challenges
For me at least, my biggest concern is the budget needed for this to be able to run properly on the cloud. I'll try to be in the limit of free tiers during development, and maybe a couple of bucks a month won't break my bank after that. Maybe I'm just way too ambitious and optimistic about this but we'll see.

Of course I also need to address the technical challenges. Thankfully, I recently just learned about Github projects and issues to better keep track of my progress, so I'll meticulously plan every details and milestones of my project so that I always know what I need to do that session.

## Conclusion
I've never completed something of this scale before, while also learned so much new technology and tools to get it done within the due date. I'm not feeling overwhelmed yet though, but we'll see how my feelings develop over time. Any suggestions, advice or thoughts you have on this, feel free to comment and share this post! Until the next post, see you guys next time!