DEV Community

CallmeMiho
CallmeMiho

Posted on

How I built a 140-page, 0ms latency web-app in Next.js 15 (Without a single database query)

Everyone seems to be obsessed with heavy Server Actions, complex ORMs, and edge databases right now. But I wanted to see how far I could push the absolute raw performance of Next.js 15 using only functional programming and pure Static Site Generation (SSG).

My goal was to build a massive suite of developer utilities (formatters, converters, regex testers) that loaded instantly and respected user privacy by never sending data to a backend.

Here is how I architected DevFormat to generate over 140 localized, high-performance routes without a single database call.

1. The Programmatic SEO "Factory" Pattern

Instead of writing 100 individual page components for things like "JSON to Go" or "cURL to Python", I built a centralized routing engine using the [locale]/[slug]/page.tsx convention.

I defined a strict TypeScript configuration map of target languages and regex patterns. At build time, generateStaticParams iterates over this map, cross-references my i18n locales (English and French), and statically pre-renders every single combination.

The result? The server does the heavy lifting once during the Vercel build, and the user gets a pure HTML/JS file delivered from the Edge CDN in under 50ms.

2. Offloading Compute to the Client (Privacy by Design)

The biggest issue with existing dev tools is data leakage. Pasting a production JWT or a proprietary JSON schema into a server-rendered tool is a massive security risk.

To solve this, I completely disabled SSR for the actual tool logic using next/dynamic with ssr: false.

All parsing—whether it's quicktype-core for generating Rust structs or crypto-js for SHA-256 hashing—runs strictly inside the browser memory.

  • The UX benefit: Zero network latency when a user clicks "Format".
  • The Security benefit: You can literally turn off your Wi-Fi, and the tools still work perfectly.

3. The "Suspense" Gotcha in Next 15

One massive headache I ran into was implementing analytics. In Next 15, reading useSearchParams() for my PostHog proxy caused the static build to throw a Missing Suspense with CSR Bailout error.

If you are building SSG pages in Next 15, you must wrap any component reading search params in a <Suspense> boundary, or the compiler panics and bails out of static generation.

The Final Result

The platform is live, totally free, and currently houses 25+ tools (from UUID v7 generation to Regex debugging).

If you want to poke around and test the 0ms routing speed, or if you just need a secure place to format some JSON without leaking your API keys, you can check it out here:

👉 DevFormat: The Local-Only Developer Workbench

(I highly recommend checking out the JSON to Rust Converter to see the client-side parsing in action).

I’d love to hear your thoughts on this architecture. Are you guys still leveraging heavy SSG, or has everyone moved to SSR/PPR for side projects?

Top comments (0)