Most side projects die from neglect. Mine almost died from the opposite problem: the data changes every single day.

I run CodesHub (https://getrobloxcodes.com/), a site that tracks working codes for more than 2,600 Roblox games. A code is a small string a game developer releases — for an update, an event, a milestone — that players redeem for in-game items. Codes expire fast, sometimes within days. A page that was correct on Monday can be lying by Friday.

So the real product is not the website. It's the checking routine. Here's how the whole thing is put together, in case it's useful for anyone building a "freshness-first" content site.

The stack is boring on purpose

The site is fully static. One Python script (build_site.py) holds the data and templates and generates every page: 2,600+ game pages, category pages, guides, author pages, even a Spanish edition for the top 50 games. The output is plain HTML files deployed to Cloudflare Pages.

No database. No CMS. No server to babysit.

Why static? Because the hard problem here is data accuracy, not rendering. Static files are fast (the homepage loads in under a second), free to host, and impossible to "hack the database" of. When something is wrong, I fix the data, rebuild, and redeploy the whole site in minutes. The rebuild is the feature.

The rule that runs everything: two sources or it doesn't ship

Early on I learned the same lesson every codes site learns the hard way: if you copy one tracker's list, you copy their mistakes too — including codes that died weeks ago.

So the rule is mechanical: a code is only marked working when at least two independent trackers agree it's alive. If they disagree, the code goes in a visible "worth trying" note, not the working list. And when a code dies, it isn't deleted — it's moved to an expired section on the same page, with the date it was checked.

That "Checked via" line under each code looks like a tiny UI detail. It's actually the whole business model: trust.

Automation does the boring parts

A daily job runs the routine in the morning:

  1. Check the most-voted games first (there's a public vote page, and the winners get checked first — users literally set the priority queue)
  2. Then the top 10 games, then a rotating batch of the rest
  3. Refresh a "New Codes Today" page from that morning's actual findings only — if nothing changed, the page honestly says so
  4. Rebuild and redeploy only if something changed
  5. Make one short video and a few Pinterest pins for the featured game, from the same verified data

The interesting part isn't any single step. It's that one verified dataset feeds the website, the video, and the pins, so they can never disagree with each other.

The trade calculator was a different kind of problem

Blox Fruits players don't just redeem codes — they trade fruits, and fruit values move. So I built a trade calculator (https://getrobloxcodes.com/blox-fruits-trade-calculator) in plain JavaScript: you add the fruits on each side of a trade, it sums the values, and gives a Win / Fair / Lose verdict — Fair means within about 5%.

The values themselves are cross-checked across four value lists. Where the sources disagreed, I went with the consensus and marked the disagreement with an asterisk instead of pretending it didn't exist. Same rule as the codes: show your sources, admit uncertainty.

It later grew into 43 individual value pages (Kitsune, West Dragon, Dough and the rest), each generated from the same dataset. One dataset, many surfaces. That pattern keeps repeating.

What I'd tell anyone building something similar

Freshness beats breadth. I spent the first phase adding more and more game pages. Growth only started mattering when I stopped, and put the effort into checking, guides, and a few genuinely useful tools instead. 2,600 fresh pages beat 5,000 stale ones.

Honesty is a feature users can see. No "free Robux" bait (no such thing exists — those are scams), no invented codes on slow days, expired lists kept visible. Players notice. They come back.

Generate, don't administer. If your content is structured data, a generator script plus a daily routine will beat a CMS you'll slowly stop updating.

The site is live here if you want to look at the output rather than the code: https://getrobloxcodes.com/ — and the most-checked page on it, by a wide margin, is the Blox Fruits list: https://getrobloxcodes.com/blox-fruits-codes

Happy to answer questions about the build, the checking routine, or the calculator math in the comments.

— akbargul