Inspiration
It was my birthday a couple weeks ago, and I hit the familiar roadblock of being unable to decide what to buy as a gift. After much thought, I decided I'd buy a video game--but as a long time enjoyer, I believe that buying video games at full price is nothing less than a sin. Unfortunately, there was no sale going on at the time, and I was stuck with birthday money in my hand, unable to spend it anywhere. I had no idea when my favorite games would actually go on sale and the uncertainty was killing me, so I decided to take matters in my own hands. I was going to predict the future(somewhat).
What it does
PricePuller gathers historical data for games listed on the Steam marketplace, runs it through a carefully tweaked statistical model, and presents a predicted time-interval during which the aforementioned games will likely go on sale. A confidence gauge measures the reliability of the prediction based on available data. The data itself comes from Steam's own running database and the website IsThereAnyDeal which keeps historical logs for video game prices. This website is intended for any gamer on a budget, and helps people plan purchases for their favorite video games.
How I built it
The website is hardcoded in fundamental typescript so there is not much need to go over the technical complexity. The real meat of the project is the pipeline that transforms data into comprehensive predictions. Game information(sale history, prices, etc.) comes from IsThereAnyDeals API and Steam's storefront public endpoint. This data is then fed through two separate statistical models: a seasonal model and an interval model. The former detects concurrence between game sales and Steam's storewide seasonal sales, while the latter detects steady time intervals between game sales. There is also a shrinkage mechanic where each model's role in the final prediction is weighted based on how reliable the data is. For instance, if there is no constant interval between game sales, the interval model is weighted less. Similarly, if the game doesn't match seasonal sale events often, the seasonal model is weighted less. Notwithstanding, the two models are blended appropriately to present the prediction to the user. The confidence gauge is determined through backtesting: the blended model is fed old data(e.g. a date 2 years ago) and blinded to future data(e.g. the game's sale data 1 year ago), after which it makes a prediction that is compared against the existing data. Error margins on that test prediction determine the confidence of the new prediction. The final layer is the AI-based explanation, which basically reads what the statistical models revealed and presents a concise explanation for the user to understand where the numbers come from. This mechanic was added using Google Ai Studio's free Gemini 3.6 Flash Model.
Challenges I ran into
The hardest part was creating the statistical model. My original idea was to implement an LLM at the very core of the prediction model that would shoot predictions out of its own reasoning. However, I quickly realized this would be very unreliable due to the sheer number of factors that influence game sales. Seasonal sales, intervals, discount strengths, etc. would confuse any LLM to the point of hallucination with little room for testing and tweaking. When I began creating my own statistical model, I realized that this would be a lot complicated than I expected. The conditions that would've confused the LLM forced me to write layers upon layers of nuanced statistical code to account for the enormous variety of games and the patterns they follow. It took hours of testing and iterations to finally reach a deliverable version of the statistical model.
Accomplishments that I'm proud of
I'm very proud of the clean pipeline I was able to create during the execution of this project. From data collection to delivering refined information to the user, I had a very good architecture set in place from the start which helped me focus on technical complexity and not worry about data logistics.
What we learned
I learned a lot about API usage as well as data management. Reading hundreds of JSON formatted files taught me how to debug/tweak and run iterations efficiently.
What's next for PricePuller
The next step is obviously to tinker with the core statistical model more in order to give more accurate predictions. I also plan to record the predictions I am receiving currently and log them against reality as time goes on. I have a good baseline project, so instead of adding new features I'll improve the one I already have.
Log in or sign up for Devpost to join the conversation.