In February 2025, I decided to create the website questplushistory.com after noticing that no one was tracking the changes in the Meta Quest+ subscription.
Tracking
More specifically, this is the information I track:
- Monthly games. The two monthly games that remain associated with your account.
- Catalog. A continuously rotating catalog of games, so I track which ones are added and which ones are removed.
- Offers. Those offers announced by Meta that apply significant discounts.
Frontend Creation
At the beginning of my journey with WordPress (back in 2017), I used to rely on theme customization tools to style my website. Later, I switched to tools like Elementor, which are great. However, I decided to give the new (and apparently quite hated) block editor Gutenberg a try to build the site, and I really liked it.
Therefore, I’d like to stand up for it, as I think the hate it gets is partly (and only partly) unjustified. I believe much of it comes from resistance to change, which I didn’t feel since I wasn’t very used to the classic editor.
Manual Work
At the start of the project, I underestimated the amount of manual work required to maintain the site. I thought that using Gutenberg’s features, such as copying and pasting blocks, would make entering information easy.
Too Much Content on a Single Page
One thing I didn’t foresee was that the page editor (Gutenberg) would slow down after reaching 30 games:
- Slow operations. Each small action, like copying and pasting elements, went from being instant to taking several seconds, making the process of adding and changing content frustrating.
- Bugs. Context menus often got stuck and “duplicated”, stacking on top of each other and blocking the screen, forcing me to reload the page.
Visual Changes
I did anticipate making large-scale visual changes to all elements. I assumed that I wouldn’t need to make many adjustments once the creative process was complete. I wasn’t wrong, since I’ve kept the same style (CSS) ever since.
However, lacking flexibility in this regard, meaning that even a small change has to be replicated individually on every element, is a big risk.
Fun Facts
I thought it would be interesting to add a “Fun Facts” section, as I noticed some games not only appeared in the catalog but had also been part of the monthly games lineup.
Doing it once is easy, but maintaining it manually adds a lot of work since I have to check for overlaps every time the monthly or catalog lists change.
Automation
Because of everything explained in the previous section (“Manual Work”), I decided to correct my mistake and start the automation process that I should have implemented from the beginning.
Shortcode: From JSON to HTML
My initial idea was to create a shortcode that would use the WordPress database to store and retrieve information (monthly games/catalog and offers). However, after asking ChatGPT for advice, it suggested replacing the database with JSON files for more efficient querying, so I followed that advice.
On top of that, I asked it to generate the base code for the shortcode based on the HTML I had previously created manually. The result was very satisfying: the code was simple and integrated the original HTML well. Visually, it looked off because it needed adjustments, but it was an excellent starting point.
I then added logic to generate different code depending on whether the page was for monthly games, catalog, or offers. I also implemented logic to automatically detect overlaps (“Fun Facts”) between monthly games and catalog games.
If you’re curious about the code, the JSON files are always accessible from Quest+ History, and I created a gist with the shortcode.
Security
Following the advice from a WordPress course by Raiola Networks I recently took and ChatGPT, I implemented the following security measures:
Limit Login Attempts
I installed the Limit Login Attempts Reloaded plugin and, if its stats are accurate, there were thousands of failed login attempts on this site (my portfolio). This wasn’t happening on the Quest+ History site, but better safe than sorry.
Change the wp-admin URL
Using the WPS Hide Login plugin, I was able to set a custom login URL, reducing failed login attempts across all my websites to almost zero.
Deny Access to Logs
I discovered that, from a browser, you can access WordPress logs (if debug mode is enabled). While I don’t consider my logs to contain sensitive data, it’s always better to be cautious.
So, I edited the .htaccess file to block access to logs.
Other Adjustments
Custom Plugin
At first, I placed the shortcode code directly in functions.php, but I quickly created a custom plugin to isolate the code and prevent issues caused by updates.
Avoiding translations
I believe that some text on the page, such as game titles, should not be translated by browsers. Therefore, I wanted users to be able to click on “translate this page” and have the entire page translated except for that text.
It turned out to be quite simple, as just the HTML5 attribute translate=”no” was enough to tell my browsers not to translate it. However, I also applied the legacy solution just in case: using the notranslate class.