Back to Home

Today I Learned

A collection of short notes from my cross-disciplinary studies, shared as I learn in public.

status: In Progress

Status Indicator

The status indicator reflects the current state of the work: - Abandoned: Work that has been discontinued - Notes: Initial collections of thoughts and references - Draft: Early structured version with a central thesis - In Progress: Well-developed work actively being refined - Finished: Completed work with no planned major changes This helps readers understand the maturity and completeness of the content.

·
certainty: certain

Confidence Rating

The confidence tag expresses how well-supported the content is, or how likely its overall ideas are right. This uses a scale from "impossible" to "certain", based on the Kesselman List of Estimative Words: 1. "certain" 2. "highly likely" 3. "likely" 4. "possible" 5. "unlikely" 6. "highly unlikely" 7. "remote" 8. "impossible" Even ideas that seem unlikely may be worth exploring if their potential impact is significant enough.

·
importance: 7/10

Importance Rating

The importance rating distinguishes between trivial topics and those which might change your life. Using a scale from 0-10, content is ranked based on its potential impact on: - the reader - the intended audience - the world at large For example, topics about fundamental research or transformative technologies would rank 9-10, while personal reflections or minor experiments might rank 0-1.

Topics
Showing single entry
March 2026
posted on 03.29.2026

Next.js dynamicParams and NoFallbackError

In Next.js, setting dynamicParams = false on a page with generateStaticParams() tells the framework to return a hard error for any path not pre-generated at build time. This is not a 404. It is an unhandled NoFallbackError that spams server logs.

// This CRASHES on unknown slugs — even from bots/crawlers
export const dynamicParams = false
 
export async function generateStaticParams() {
  return posts.map(p => ({ slug: p.slug }))
}
// This gracefully falls through to notFound()
export const dynamicParams = true
 
export default async function Page({ params }) {
  const post = posts.find(p => p.slug === params.slug)
  if (!post) notFound() // proper 404
}

With dynamicParams = false, every crawler hitting /blog/nonexistent-slug throws NoFallbackError in the server logs. In production with Docker Swarm, this can make the service appear unhealthy if the error rate is high enough.

The fix is dynamicParams = true combined with explicit notFound() calls in the page component. You still get static generation for known slugs via generateStaticParams(), but unknown slugs get a clean 404 instead of a crash.

No reactions yet

in Naperville, IL
Last visitor from Mitaka, Japan