Posted Friday, May 28th, 2021 • Ongoing support
I built a tool in React to help promote the accessibility of the Steam user review system, so that developers can better perform research and action on feedback about their products.
There are now a huge number of user reviews in Steam, but the only place to view them is the store front, which is geared towards consumers. However, Steam's APIs can be used to access all reviews for a given product at once, and more. This tool provides a clean interface to this data set with a greater level of control.
It is intended to answer a number of interesting and useful questions such as:
A community manager may use it to find dedicated users worth helping and rewarding. A designer may use it to isolate high quality feedback. A product analyst may use it evaluate success (retention, sentiment) over time.
To this end, visualisations are provided to aid exploration, and the data itself can be exported.
The web requests are funnelled through a CORS proxy that I host on Heroku, and the data itself is stored in your browser's memory. This isn't terribly efficient, but it cuts costs and ensures that indies with < 50,000 reviews can access the most up-to-date information about their games. If it were to ever suffer from success in terms of performance or rate-limiting, I'd have to write some back-end services with extra caching and their own data stores.
I created a feedback form for the site and posted the link on Reddit, where it briefly hit the front-page. I've been overwhelmed with positive responses and useful suggestions as I continue to support the tool, and have implemented quality-of-life features such as a dark mode, more graceful error handling and further filtering options. My favourite so far has been a filter that uses some RegEx magic to find reviews that contain ASCII art.
I hope that it sits alongside its influences of SteamDB and SteamSpy as an alternative method of exploring data. Steam's API itself seems to be in a state of flux, and I will likely have to continue to program around certain obstacles like incorrectly labelled or missing data, and aberrant failing requests.