DEV Community

Jim L
Jim L

Posted on

How I Built a Roblox Codes Tracker on Next.js + Cloudflare Workers — Traffic Data After 3 Months

Last year I started an experiment: build niche guide sites for individual Roblox games and see what actually gets search traffic. 13 sites later, here's what I learned about the tech stack and what the traffic data shows.

Why Cloudflare Workers over Vercel

At 13 sites, Vercel's per-project pricing stacks up fast. I moved everything to Next.js 14 + opennextjs-cloudflare early on. The setup is slightly more complex than a standard Vercel deploy, but the cost difference at this scale is significant.

Key constraint: Roblox game codes expire constantly. You need database-backed content — not static MDX files. D1 (Cloudflare's SQLite) handles this cleanly. Each site gets its own D1 database, a Worker for the codes API, and R2 for images.

Build A Ring Farm as a case study

buildaringfarmcodes.com launched in June 2026. It's a farming game with ring types that yield different income per minute — players need tools to figure out which ring is worth upgrading, and they need current codes to maximize early-game progress.

The site structure is:

  • Homepage with active codes list (DB-driven)
  • Ring income calculator (input current ring, see projected earnings)
  • Tier list (ranking of ring types by ROI per upgrade cost)

The codes page updates daily. The calculator and tier list are stable content that ranks well because the in-game UI doesn't expose the underlying math.

The D1 codes pattern

The codes update problem is the main engineering challenge. The simplified version:

export const dynamic = 'force-dynamic';

export async function GET() {
  const { env } = getCloudflareContext();
  const result = await env.DB.prepare(
    'SELECT code, reward, expires_at FROM codes WHERE is_active = 1 ORDER BY created_at DESC'
  ).all();
  return Response.json(result.results);
}
Enter fullscreen mode Exit fullscreen mode

I update codes via a lightweight admin endpoint protected by a secret header. No CMS, no rebuild cycle — just a POST to the API and the page is live within seconds.

Traffic data reality

Realistic trajectory for a new game guide site in the first 60 days:

  • Weeks 1-2: ~0 organic traffic (Google hasn't indexed or assessed quality)
  • Weeks 3-4: First GSC impressions appear, usually for long-tail variations
  • Month 2: 50-200 organic sessions/day on a well-chosen game with decent content
  • Month 3+: Depends heavily on game lifecycle and content update frequency

Games that perform best have one property in common: players need information that isn't available in the game UI. Codes are table stakes. Calculators and tier lists are where you build an audience that returns.

What I'd do differently

Internal linking from day one. I spent the first two weeks building standalone pages with no site-wide navigation. Connecting codes to tier list to calculator to farming guide at launch would have improved dwell time during the initial Google assessment period.

Content before launch. Indexing a site with 2 pages is slower than one with 8. Front-loading content is better than incremental publishing in the first 30 days.


If you're building something similar or have questions about the Cloudflare Worker + D1 setup for content sites, happy to share more in the comments.

Top comments (0)