<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: akbargul</title>
    <description>The latest articles on DEV Community by akbargul (@akbargul).</description>
    <link>https://dev.to/akbargul</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4224639%2F9c862237-2543-4f83-9ec2-29a424d8a91a.png</url>
      <title>DEV Community: akbargul</title>
      <link>https://dev.to/akbargul</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akbargul"/>
    <language>en</language>
    <item>
      <title>I Built a Static Site That Re-Checks 2,600+ Roblox Code Lists Every Day</title>
      <dc:creator>akbargul</dc:creator>
      <pubDate>Tue, 03 Nov 2026 16:14:19 +0000</pubDate>
      <link>https://dev.to/akbargul/i-built-a-static-site-that-re-checks-2600-roblox-code-lists-every-day-15l9</link>
      <guid>https://dev.to/akbargul/i-built-a-static-site-that-re-checks-2600-roblox-code-lists-every-day-15l9</guid>
      <description>&lt;p&gt;Most side projects die from neglect. Mine almost died from the opposite problem: the data changes every single day.&lt;/p&gt;

&lt;p&gt;I run CodesHub (&lt;a href="https://getrobloxcodes.com/" rel="noopener noreferrer"&gt;https://getrobloxcodes.com/&lt;/a&gt;), 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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack is boring on purpose
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;No database. No CMS. No server to babysit.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule that runs everything: two sources or it doesn't ship
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Automation does the boring parts
&lt;/h2&gt;

&lt;p&gt;A daily job runs the routine in the morning:&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trade calculator was a different kind of problem
&lt;/h2&gt;

&lt;p&gt;Blox Fruits players don't just redeem codes — they trade fruits, and fruit values move. So I built a trade calculator (&lt;a href="https://getrobloxcodes.com/blox-fruits-trade-calculator" rel="noopener noreferrer"&gt;https://getrobloxcodes.com/blox-fruits-trade-calculator&lt;/a&gt;) 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%.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd tell anyone building something similar
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Freshness beats breadth.&lt;/strong&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honesty is a feature users can see.&lt;/strong&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generate, don't administer.&lt;/strong&gt; If your content is structured data, a generator script plus a daily routine will beat a CMS you'll slowly stop updating.&lt;/p&gt;

&lt;p&gt;The site is live here if you want to look at the output rather than the code: &lt;a href="https://getrobloxcodes.com/" rel="noopener noreferrer"&gt;https://getrobloxcodes.com/&lt;/a&gt; — and the most-checked page on it, by a wide margin, is the Blox Fruits list: &lt;a href="https://getrobloxcodes.com/blox-fruits-codes" rel="noopener noreferrer"&gt;https://getrobloxcodes.com/blox-fruits-codes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy to answer questions about the build, the checking routine, or the calculator math in the comments.&lt;/p&gt;

&lt;p&gt;— akbargul&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>python</category>
      <category>gamedev</category>
    </item>
  </channel>
</rss>
