Project: Reach Stats
Last week I blogged about Panda Love, a project that was still online that I started years and years ago. This time I wanted to blog about another project that was unfortunately shutdown a decade ago. So it was much more difficult to collect assets for this blog.
ReachStats was a plugin I built for the Invision Power Board (IPB) forum system for a site I launched called "reachstuff.com". This was my first attempt at using a framework (albeit a paid forum) to help launch a product.
This code looking back at it on GitHub is god-awful, but everyone starts somewhere and I was teaching myself how to program PHP.
This was a project I started after seeing the success of "halo2.junk.ws". A site that did the same thing for Halo 2 in 2004-2006. With a peek of the archive machine we can find the homepage and some snippet of signatures.
So then below I found a snippet of signature examples from the Halo 2 era. These are what I drew my inspiration from for my iteration 7 years later.
What I think I have to mention for those unaware is that these were dynamic images. Basically every x hours the image was regenerated with the stats, level and emblem.
So you could put these into your signature on forums and just hotlink to their images and have it update automatically. Now depending on how many users you have - this turns out to be quite a bandwidth sink. You aren't sending an image and having browsers cache it - you are basically remaking images daily so browsers have to continually redownload the newly updated image.
Lets stop there though talking about halo2.junk.ws - that was the inspiration for Reach Stats.
Since Reach Stats was built into the IPB framework, it hooked into the software at multiple points:
- [Admin] Reach API Key entry
- [Admin] Caching Settings
- [User] Adding Gamertag to system
- [User] Purchase faster upgrades
- [User] Preview all signature types
- [User] Settings for specific signatures
- [User] Leaderboards for stats collected
I used gd behind the scenes for image creation. It helped really push me to understand that making a wrapper/library for some PHP modules would be very handy. Nowadays when I'm looking to do image manipulation in PHP - its straight to Intervention I go.
I quickly realized that even building templates for these images was too difficult for me. Thankfully others in the scene lent a hand and provided many base templates that I could wire up with stats.
So with all the colorful base plates, I could ask members of ReachStuff to pick their preferred color.
These nameplates were pretty cool and entirely automated. They would combine a few things together to form an image.
- Selected background image color
- Emblem from game
- Highest rank from game
- Callsign
- Gamertag
- Watermark (if free)
The playtime image was a fan favorite to show off how much you played video games.
While the other signatures were just combinations of stats, design and even some included medal counts for selected medal types.
I quickly realized how important it was to have backups, which back then were files named like ".old1" and ".final2". Thankfully I learned about revision control by the next project, because the amount of times I broke this service was embarrassing due to stupid mistakes.
This also became my first project to register a specific Twitter account and tweet from it about all the downtime, releases and more.
Not only did I tweet about the shutdown, I built a pretty horrific design of a shutdown message.
From a personal perspective - this was my first project that I spat out money for a domain, purchased some hosting and launched a mini marketing campaign (Twitter). I failed miserably in the grand scheme of things only tracking 264 accounts before shutting down.
I've debated in my head taking another stab at this when Halo Infinite drops, but I struggle to figure out the use case for it anymore. Forums are dated, some forums even re-upload your assets anyway so the dynamic images couldn't update. Though it might be fun with all the enhancements to PHP and image manipulation to see what is feasible.