{
  "id": 10639537,
  "title": "Building qurandaily.org: 37,000 pages statically prerendered with Next.js 15 + next-intl",
  "url": "https://urgent.news/2026/09/29/building-qurandaily-org-37-000-pages-statically-prerendered-with-next",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-29T07:36:10.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/shahrukh_10/building-qurandailyorg-37000-pages-statically-prerendered-with-nextjs-15--2pc"
  },
  "original_language": "en",
  "account": "Last week, I launched qurandaily.org, an ad-free website featuring the Quran, hadiths, and duas in six different languages: English, Indonesian, Arabic, Urdu, Turkish, and French. Every one of its approximately 37,000 pages is fully prerendered during the build process, eliminating the need for server-side rendering (SSR) or database calls during user interaction.\n\nThe article dives into three key decisions made during the development process, along with the corresponding code and configuration for each. These decisions apply to any large multi-locale content site.\n\n1. Generating static parameters for 6,236 records across 6 locales using generateStaticParams:\nThe canonical content consists of 6,236 verses (ayat). Each verse is rendered as a separate URL, scoped by locale and surah. The directory structure in the app router follows this pattern: app/[locale]/quran/[surahSlug]/[verse]/page.tsx. Within this file, two functions are exported to assist Next.js in generating the required routes at build time:\n\n- dynamicParams: Set to false to ensure any route not prebuilt returns a 404, maintaining the integrity of the canonical corpus.\n- dynamic: Set to force-static to indicate that these routes are prebuilt.\n\nThe generateStaticParams function performs the following tasks:\n\n- Retrieves an array of surahs from the Quran data source.\n- Iterates through each locale (6 in total) and each surah.\n- For each surah, generates a route for every verse (1-6,236) by pushing an object containing the locale, surah slug, and verse number into a params array.\n- Returns the params array, which Next.js uses to emit the corresponding static routes.\n\nThis process results in a total of 6 × 6,236 = 37,416 static routes for the Quran alone. Additionally, other content like hadiths, duas, 99 Names, prayer-time city pages, and learning pages are included, bringing the total emitted HTML files to just under 40,000.",
  "summary": "Last week I shipped qurandaily.org , an ad-free Quran + hadith + duas site with content in six languages (English, Indonesian, Arabic, Urdu, Turkish, French). Every one of its ~37,000 pages is fully prerendered at build time. No SSR on the hot path. No database call between the reader and an ayah. In this post I want to walk through three decisions I had to make and the exact code / config for…",
  "key_points": [
    "Qurandaily.org launched with 37,000 static pages in six languages",
    "generateStaticParams generates 37,416 static routes for Quran content",
    "Next.js 15 and next-intl used for multi-locale prerendering"
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}