Professions.gg

Professions.gg is a web application that helps players of World of Warcraft: Classic level their profession skills more efficiently.

Date
Summer 2021
Type
Personal Project
Stack
Next.js (Pages Router)
Typescript
PostgreSQL
Tailwind
Prisma
Vercel
Apify
Professions.gg screenshot of a page for levelling a blacksmithing recipe, with success rates calculated.

Project Purpose and Goal

I wanted to create this project to help Classic WoW players more efficiently level their profession skills. There were no online resources to calculate the success rate of achieving a level-up, or the predicted cost of crafting different recipes. I wanted to bring together a couple of 3rd-party resources (game data from sites like Wowhead, and live auction house prices from NexusHub) to combine useful professions information into one place.

I also really wanted to ship a personal project that would be used and appreciated by people. At this point my projects tended to remain unfinished as I would get side-tracked by my job or move on to another shiny new technology. I chose to make a WoW fan site because I knew the content would keep me interested, I could launch the project to a supportive community, and importantly, the game had a release date and I had a fixed milestone to work towards to keep me motivated.

  • Next.js (Pages Router)
  • Typescript
  • PostgreSQL
  • Tailwind
  • Prisma
  • Vercel
  • Apify

Tech Stack and Explanation

I opted to use Next.js as I wanted to benefit from server-side rendering and improved SEO. This helped with performance and search engine discoverability. Using Next also meant I could have API routes as serverless functions within the same codebase. For styling I used Tailwind CSS, as the utility classes help me rapidly prototype.

As the front end is more my expertise, I wanted to keep the back end simple. I chose to stay within the Node/Typescript ecosystem and use Prisma ORM. Prisma plays nicely with Next, is type-safe, and is pretty simple for someone without much database experience. I use Vercel for deployment, which works seamlessly with Next and provides me with an edge network CDN.

Problems Encountered

Collecting the game data I required for each recipe from wiki sites such as Wowhead was challenging. I was scraping thousands of pages at a time using Puppeteer, and it would often fail as it struggled with cookie popups, race conditions and slow network requests. In the end, I found Apify SDK which batches requests into a queue and retries multiple times if they fail.

Launching on Reddit was much more successful than I anticipated (20,000 unique users in one day!). I had to tweak a few things to better handle the traffic and keep server execution down (my database was in a different region to my server...), but eventually 99% of content was served through the lightning fast cache. On launch I noticed that over half of my users were using the site on their phones, so I also spent some time to create a more tailored mobile view.

Professions.gg screenshot of a page for levelling a leatherworking recipe, with estimated gold costs calculated.

Lessons Learnt

Finding the time and motivation to work on a project in your evenings and weekends can be hard. I knew that I had to make decisions to give me the best chance of delivering something (and on time). I was very happy with how my stack reduced complexity and helped me move quickly enough to achieve my deadline. I was also particularly careful to limit the scope of the project to avoid unnecessary feature creep.

Overall, I was very happy with how well professions.gg was received, and proud that I now something of my own on the web that helps people daily.