<?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: Futbolle</title>
    <description>The latest articles on DEV Community by Futbolle (@futbolle_a0483c636fd9581a).</description>
    <link>https://dev.to/futbolle_a0483c636fd9581a</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%2F4059365%2Ffd087a55-fec1-41bd-a481-3a30543fe036.png</url>
      <title>DEV Community: Futbolle</title>
      <link>https://dev.to/futbolle_a0483c636fd9581a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/futbolle_a0483c636fd9581a"/>
    <language>en</language>
    <item>
      <title>How I handle 80,000+ data records without a Database in my Next.js Game</title>
      <dc:creator>Futbolle</dc:creator>
      <pubDate>Sun, 02 Aug 2026 16:57:55 +0000</pubDate>
      <link>https://dev.to/futbolle_a0483c636fd9581a/how-i-handle-80000-data-records-without-a-database-in-my-nextjs-game-1lcl</link>
      <guid>https://dev.to/futbolle_a0483c636fd9581a/how-i-handle-80000-data-records-without-a-database-in-my-nextjs-game-1lcl</guid>
      <description>&lt;p&gt;As a developer and a huge football fan, I wanted to build a daily puzzle hub. I created &lt;a href="https://futbolle.com" rel="noopener noreferrer"&gt;Futbolle&lt;/a&gt; — a platform with 12 different daily football puzzles (like Wordle, Immaculate Grid, Missing XI, etc.) all in one place.&lt;/p&gt;

&lt;p&gt;But I faced a huge technical challenge right at the beginning: &lt;strong&gt;The Player Database.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To make the games work, I needed a dataset of over 80,000 football players (active, retired, and legends). &lt;br&gt;
My goals were simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep the hosting costs at $0.&lt;/li&gt;
&lt;li&gt;Make the site blazing fast.&lt;/li&gt;
&lt;li&gt;Avoid database connection pool issues if traffic spikes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is how I solved this using Next.js App Router without paying a single cent for a database.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Static JSON &amp;amp; React Server Components ⚡
&lt;/h3&gt;

&lt;p&gt;Instead of setting up PostgreSQL or MongoDB, I decided to keep all the 80,000 players in optimized &lt;code&gt;.json&lt;/code&gt; files. &lt;/p&gt;

&lt;p&gt;If I sent this JSON to the client, the browser would instantly crash. Instead, I heavily utilized &lt;strong&gt;React Server Components (RSC)&lt;/strong&gt;. When a user visits a game, the server reads the JSON, filters the players based on today's puzzle rules, and sends &lt;em&gt;only&lt;/em&gt; the required small chunk of HTML to the client. &lt;/p&gt;

&lt;p&gt;Zero client-side processing, zero database queries. The page loads instantly.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The "Daily" Logic without Cron Jobs ⏱️
&lt;/h3&gt;

&lt;p&gt;I didn't want to run a server cron job every midnight to update the games. &lt;br&gt;
Instead, the "seed" (the logic that determines today's mystery player) is calculated purely based on &lt;code&gt;new Date()&lt;/code&gt;. This means the game naturally refreshes itself at midnight. It's completely stateless.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. SEO Trick for Daily Content 🔍
&lt;/h3&gt;

&lt;p&gt;Since the content changes every day, I had to ensure Google knows about it. In my &lt;code&gt;sitemap.ts&lt;/code&gt;, I dynamically generate the &lt;code&gt;lastModified&lt;/code&gt; tag specifically for the games that update daily. This forces search engine bots to recrawl those specific pages every 24 hours.&lt;/p&gt;

&lt;p&gt;Building &lt;a href="https://futbolle.com" rel="noopener noreferrer"&gt;Futbolle&lt;/a&gt; taught me that you don't always need a complex cloud database architecture for a heavy-data app. Sometimes, a well-structured JSON file and Server Components are all you need.&lt;/p&gt;

&lt;p&gt;If you want to test the performance (or just play some football puzzles), check it out here: &lt;strong&gt;&lt;a href="https://futbolle.com" rel="noopener noreferrer"&gt;futbolle.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;How do you handle heavy static data in your Next.js projects? Let me know in the comments!&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>performance</category>
      <category>react</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
