Inspiration

PlayVessel was born out of my passion for video games but also because I found myself overwhelmed with the number of games in my backlog (with more getting released every year). I wanted to build a tool that would help those like me track the games their currently playing and what they want to play later. There are other websites like it, but I wanted to try and do something for myself. So I created PlayVessel in the summer of 2023.

What it does

PlayVessel allows users to manage their video game backlogs, and sort their games into lists such as "Playing, Play Next, Play Later, Beaten, Completed, etc". The platform integrates with the IGDB API uses websites to provide up to date game meta-data including genre, platforms, release dates, screenshots, artworks, and much more. Users can search for games to add to their account, and prioritize them based on what they are feeling at the time. There is also a very loose integration with Steam for tracking achievements.

How I built it

PlayVessel was original build using Client-Side react, using Webpack, but over the coming months I transitioned to client-side vite, and then eventually settled on using Remix.run, a server side framework for the frontend, and Express.js on the backend. I used PostgresSQL as the main database since the beginning and used Redis as a caching database for various tasks that required locking and such. I used the IGDB API for providing the nearly 300k game entries, requiring significant optimization over the year I worked on it. The app uses JWT access tokens for authentication. Users can sign up with a username and password, as well as the ability to enable 2FA in their settings.

Challenges I ran into

One the biggest overarching challenges over the course of the entire project was managing all the game entries in the database. The IGDB API imposes a limit of 4 requests/second which while generous, does not allow for many concurrent searches, so I quickly started to add all the games to my database (something recommended by IGDB themselves) and use webhooks to keep it updated. Some other challenges that had were also just general optimizations as well as issues with switching from Webpack to vite, and then from client-side to server-side with Remix. Both requiring fairly extensive rewrites or a full rewrite of the frontend in the case of Remix.

Accomplishments that I'm proud of

Overall, I'm proud that a made it, it's the first website that wasn't a portfolio website or something that I've made that I was actually proud that I had done it. PlayVessel doesn't feel like a novelty. The fact that it's just sitting there, available to anyone, crunching through literally hundreds of thousands of game entries, and handling game updates that come in on average about 1-2 updates per second, every single day is amazing to me. I'm proud of what I did, and while already I feel like I've outgrown it, it is why I've learned so much. No it didn't get a large user base, but I'm still proud that I built something that I at the very least found personally useful.

What I learned

I learned a great deal about handling third-party APIs and their rate limits. I had obviously used an API before, but never so centrally around an app. I deepened my understanding of almost every aspect of web development, from just general full stack development, to design, infrastructure, and performance optimization. I learned server-side rendering with Remix.run and used PlayVessel as the test bed. I learned to make more advanced SQL queries in PostgreSQL. More importantly I learned how hard it can be to market a product, and the importance of gauging user interest early on.

What's next for PlayVessel

For now, PlayVessel will remain online as a personal tool for myself and anyone else who wants to use it as well as just to say "Hey here's a website I run". However, I've shifting focus to other projects. I may revisit PlayVessel in the future if I come up with new features to make it more meaningful or see more interest from others. In the meantime, my new project is developing my new web management company Atomicity.

P.S.

If you wish to read more about PlayVessel, you can checkout it's dedicated page on my portfolio website. SyntaxisCS or check out PlayVessel itself PlayVessel

Thank you for reading!

  • Charley
Share this project:

Updates