<?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: NextBlock™ CMS</title>
    <description>The latest articles on DEV Community by NextBlock™ CMS (@nextblockcms).</description>
    <link>https://dev.to/nextblockcms</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%2F3247636%2F3d6c7b06-15b7-4a8b-ba49-faae566c6228.jpg</url>
      <title>DEV Community: NextBlock™ CMS</title>
      <link>https://dev.to/nextblockcms</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nextblockcms"/>
    <language>en</language>
    <item>
      <title>Engineering a 4-Tier Onboarding Architecture for a Modern Next.js Framework</title>
      <dc:creator>NextBlock™ CMS</dc:creator>
      <pubDate>Tue, 07 Jul 2026 17:56:49 +0000</pubDate>
      <link>https://dev.to/nextblockcms/engineering-a-4-tier-onboarding-architecture-for-a-modern-nextjs-framework-36hl</link>
      <guid>https://dev.to/nextblockcms/engineering-a-4-tier-onboarding-architecture-for-a-modern-nextjs-framework-36hl</guid>
      <description>&lt;p&gt;The contemporary web engine landscape forces a hard compromise: you either choose heavy, abstracted graphical page builders with severe runtime performance penalties, or decoupled headless frameworks that fracture your development cycle across multiple code repositories and API endpoints.&lt;/p&gt;

&lt;p&gt;When setting up NextBlock CMS—our AI-native full-stack alternative to WordPress built with React Server Components, Supabase, and Tailwind CSS—our engineering milestone was to offer a frictionless setup matrix that honors every developer's staging preference.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bypassing the Configuration Tax
&lt;/h3&gt;

&lt;p&gt;Traditional headless stacks rely on manual setup scripts or strict environment tables before the initial build can even compile. NextBlock completely flips this paradigm. We shifted configuration checks directly into an application-level Browser Setup Wizard. &lt;/p&gt;

&lt;p&gt;Whether the database parameters are auto-injected by orchestration webhooks at the server tier (Vercel) or written dynamically to a local drive via Node's native file system (fs/promises) during a local command boot, the framework handles the schema delivery automatically on boot.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 4 Installation Spectra Explained
&lt;/h3&gt;

&lt;p&gt;We have just published our optimized onboarding guide outlining the exact mechanics of our 4 tracks:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcqwmejyd941ajbjpxw10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcqwmejyd941ajbjpxw10.png" alt=" " width="799" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One-Click Vercel Production: Completely serverless, edge-cached layout running safely on free tiers with auto-applied migrations.&lt;/li&gt;
&lt;li&gt;CLI ➔ Docker Local Sandbox: &lt;code&gt;npm create nextblock@latest my-site&lt;/code&gt; running on an isolated Docker Desktop volume layout with zero cloud overhead.&lt;/li&gt;
&lt;li&gt;CLI ➔ Custom Managed Cloud: Scaffolding a lightweight project pointed directly at your production Supabase database and Cloudflare R2 storage assets.&lt;/li&gt;
&lt;li&gt;Raw Nx Monorepo Clone: Advanced git clone architecture running on port 4200 for internal engine customization.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🔗 Read the full blueprint: &lt;a href="https://nextblock.dev/article/how-to-setup-nextblock" rel="noopener noreferrer"&gt;https://nextblock.dev/article/how-to-setup-nextblock&lt;/a&gt;&lt;br&gt;
🔗 Star our repository: github.com/nextblock-cms/nextblock&lt;/p&gt;

&lt;p&gt;What does your favorite local staging stack look like? Let’s talk architecture in the comments below! 👇&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>docker</category>
      <category>opensource</category>
      <category>supabase</category>
    </item>
    <item>
      <title>How We Built a Zero-Config, Auto-Updating Engine for a Serverless Next.js CMS</title>
      <dc:creator>NextBlock™ CMS</dc:creator>
      <pubDate>Thu, 02 Jul 2026 14:27:25 +0000</pubDate>
      <link>https://dev.to/nextblockcms/how-we-built-a-zero-config-auto-updating-engine-for-a-serverless-nextjs-cms-1dfd</link>
      <guid>https://dev.to/nextblockcms/how-we-built-a-zero-config-auto-updating-engine-for-a-serverless-nextjs-cms-1dfd</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi97o4fjck48httwsq674.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi97o4fjck48httwsq674.png" alt=" " width="799" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Upstream framework updates are notoriously tricky for open-source self-hosted tools. If a user modifies your base template code, a rogue git pull could easily wipe out their hard work or introduce breaking application bugs.&lt;/p&gt;

&lt;p&gt;When designing the update pipeline for NextBlock CMS, we established two strict architectural guidelines:&lt;/p&gt;

&lt;p&gt;The user must not need to configure complex GitHub OAuth apps or Personal Access Tokens.&lt;/p&gt;

&lt;p&gt;Live production pipelines must never compile code containing active merge conflicts.&lt;/p&gt;

&lt;p&gt;Here is the exact engineering blueprint we implemented to achieve an automated, non-destructive update cycle across Vercel and Supabase:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Decentralized Git Orchestration via GitHub Actions&lt;br&gt;
Instead of relying on heavy central authentication handshakes to modify files , we bundle a native workflow routine (.github/workflows/nextblock-sync.yml) straight into our repository template. Every day at midnight, a cron job executes using the built-in repository GITHUB_TOKEN.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Guarding Code Intersections with --no-commit --no-ff&lt;br&gt;
The action safely pulls updates from the core upstream NextBlock tracking branch using explicit restrictions:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git merge upstream/main --no-commit --no-ff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If histories are clean: The modifications merge smoothly and deploy to production.&lt;/p&gt;

&lt;p&gt;If lines overlap: Git halts immediately. Because the process fails right before finalizing the commit, Vercel never launches a broken build pipeline.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Webhook Failures Injected Natively to the CMS Layer
By leveraging a if: failure() pipeline condition block, the workflow intercepts the terminal conflict. It fires a direct curl transaction utilizing the project's existing database role credentials to update a persistent system_alerts table.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next time an admin accesses the dashboard, a React Server Component fetches the row and injects a clean, amber layout banner directing the operator directly to their GitHub interface to resolve line mismatches.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Opt-In Gated Schema Migrations
Code updates often include structural database changes. We integrated an automated migration evaluation directly into the production compilation hook. The engine reads pending incremental DDL files, wraps them in secure PostgreSQL transactions, and runs them safely against production while cleanly skipping local development hot-reloads and preview environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What strategies do you use to manage updates for distributed open-source codebases? Let's talk architecture below!&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>nextjs</category>
      <category>supabase</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How We Engineered the First Free, Zero-Config 1-Click CMS Deployment with Next.js 16 and Supabase</title>
      <dc:creator>NextBlock™ CMS</dc:creator>
      <pubDate>Fri, 26 Jun 2026 18:46:47 +0000</pubDate>
      <link>https://dev.to/nextblockcms/how-we-engineered-the-first-free-zero-config-1-click-cms-deployment-with-nextjs-16-and-supabase-4meg</link>
      <guid>https://dev.to/nextblockcms/how-we-engineered-the-first-free-zero-config-1-click-cms-deployment-with-nextjs-16-and-supabase-4meg</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7e6wxx6h5sewe3st6f5g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7e6wxx6h5sewe3st6f5g.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’ve spent any time setting up full-stack frameworks or content management systems over the last few years, you know the onboarding tax. You are given a beautiful repository layout, but you are left to handle the database layer, image bucket permissions, and API orchestration strings yourself.&lt;/p&gt;

&lt;p&gt;When we built NextBlock CMS—an open-core (AGPLv3) alternative to headless bloat built on Next.js 16 Server Components and strict PostgreSQL JSONB schemas—we vowed to fix the installation bottleneck.&lt;/p&gt;

&lt;p&gt;Today, we are announcing that our recent code commits have officially closed that gap. NextBlock now features a completely free, automated 1-Click Deploy on Vercel that builds your database and object storage natively through Supabase with zero manual environment token configurations required from the user.&lt;/p&gt;

&lt;p&gt;Solving the 4-Tier Deployment Spectrum&lt;br&gt;
Every engineering team has a different deployment philosophy. To ensure flexibility without introducing architectural clutter into our Nx Monorepo, we spent this week locking down 4 primary initialization vectors:&lt;/p&gt;

&lt;p&gt;The Frictionless Track (Vercel + Supabase Integration): Click a single button. Vercel sets up your edge endpoints and server components while the integrated Supabase webhook provisions your secure tables, auth middleware, and public assets bucket automatically on their free tier.&lt;/p&gt;

&lt;p&gt;The Scaffolder Track (npm create nextblock): A streamlined command-line interface that allows developers to interactive-select settings, spin up a local directory layout, and begin instantly via npm run dev.&lt;/p&gt;

&lt;p&gt;The Bare-Metal Monorepo Track (Git Clone): Designed for developers who want full control over our architectural engine core, custom Tiptap slash commands, and internal rendering pipelines.&lt;/p&gt;

&lt;p&gt;The Isolated Track (npm run docker:setup): A single multi-stage Docker environment that coordinates localized PostgreSQL instances, automatically processes database migrations hidden inside our libraries, and stands up the Next.js standalone container.&lt;/p&gt;

&lt;p&gt;The Road to Major Release v1.0.0&lt;br&gt;
We aren't standing still. Next week, our focus shifts entirely to rigorous continuous integration and "breaker testing." We are systematically validating every edge-cache invalidation matrix, layout component tree depth, and database routing rule across these 4 structures.&lt;/p&gt;

&lt;p&gt;This brings us to our absolute biggest milestone yet: The official v1.0.0 Major Release of NextBlock CMS is locked in to drop before the end of this summer!&lt;/p&gt;

&lt;p&gt;Check out our source code, star the repository, and try the 1-click installer here:&lt;br&gt;
🔗 GitHub Repository: &lt;a href="//github.com/nextblock-cms/nextblock"&gt;github.com/nextblock-cms/nextblock&lt;/a&gt;&lt;br&gt;
🔗 Live Sandbox: &lt;a href="//cms.nextblock.dev"&gt;cms.nextblock.dev&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>supabase</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Implementing Vercel Visual Editing on a Non-Headless Next.js 16 CMS</title>
      <dc:creator>NextBlock™ CMS</dc:creator>
      <pubDate>Thu, 28 May 2026 14:41:14 +0000</pubDate>
      <link>https://dev.to/nextblockcms/implementing-vercel-visual-editing-on-a-non-headless-nextjs-16-cms-3mle</link>
      <guid>https://dev.to/nextblockcms/implementing-vercel-visual-editing-on-a-non-headless-nextjs-16-cms-3mle</guid>
      <description>&lt;p&gt;Visual editing setups usually push you toward a few select headless vendors. But because Nextblock CMS is a full-stack system built natively with Next.js 16 Server Components , we wanted to prove that you can have real-time visual editing without sacrificing architecture or performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzgswn300ocyoq1c7854h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzgswn300ocyoq1c7854h.png" alt="Image Vercel Visual Editor with the Discard and Publish toolbar" width="798" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Mechanism: Strict JSONB &amp;amp; HTML Tracking&lt;/strong&gt;&lt;br&gt;
Vercel’s visual editing overlay is actually completely CMS-agnostic. It relies on specific data attributes embedded directly into your rendered DOM nodes to tell the Vercel Toolbar exactly where that content lives inside your administrative backend.&lt;/p&gt;

&lt;p&gt;Because Nextblock stores all document structures as strict Tiptap JSONB payloads , we updated our recursive React block rendering component. Now, when draft or preview mode is active, the system injects a dynamic data-vercel-edit-info attribute into the wrapper element of every block. This attribute feeds the exact targeting URL back to the Vercel overlay.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const renderedBlocks = await Promise.all(&lt;br&gt;
  blocks.map(async (block, blockIndex) =&amp;gt; ({&lt;br&gt;
    id: block.id,&lt;br&gt;
    node: await renderBlock({&lt;br&gt;
      block,&lt;br&gt;
      blockIndex,&lt;br&gt;
      languageId,&lt;br&gt;
      visualEditing,&lt;br&gt;
      // Build top-level metadata block attributes&lt;br&gt;
      visualEditAttributes: buildVisualEditAttributes(visualEditing, {&lt;br&gt;
        kind: "top-level",&lt;br&gt;
        blockId: block.id,&lt;br&gt;
        blockIndex,&lt;br&gt;
        blockType: block.block_type,&lt;br&gt;
      }),&lt;br&gt;
    }),&lt;br&gt;
  }))&lt;br&gt;
);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero Bundle Bloat&lt;/strong&gt;&lt;br&gt;
By conditionally rendering the @vercel/visual-editing package layout component only during draft sessions, production users never download a single extra byte of editing overhead. Your 100/100 Lighthouse score remains completely untouched.&lt;/p&gt;

&lt;p&gt;Read the updated /docs to see how to activate Live Draft Mode on your local sandbox environment today!&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>nextjs</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why Headless i18n is a Nightmare (And How to Fix It with Integrated Schema Mapping)</title>
      <dc:creator>NextBlock™ CMS</dc:creator>
      <pubDate>Tue, 19 May 2026 15:33:28 +0000</pubDate>
      <link>https://dev.to/nextblockcms/why-headless-i18n-is-a-nightmare-and-how-to-fix-it-with-integrated-schema-mapping-13c7</link>
      <guid>https://dev.to/nextblockcms/why-headless-i18n-is-a-nightmare-and-how-to-fix-it-with-integrated-schema-mapping-13c7</guid>
      <description>&lt;p&gt;Why Headless i18n is a Nightmare (And How to Fix It with Integrated Schema Mapping)&lt;br&gt;
If you have ever been tasked with implementing multi-language support (i18n) across a decoupled, headless CMS and a modern frontend like Next.js, you probably still have the scars to prove it.&lt;/p&gt;

&lt;p&gt;On paper, headless i18n sounds straightforward: toggle a button in an admin panel, pull localized text over a REST or GraphQL API, and render it.&lt;/p&gt;

&lt;p&gt;In reality? It is an architectural mess of duplicated routing configurations, massive bundle sizes, network waterfalls, and synchronization hell across mismatched systems.&lt;/p&gt;

&lt;p&gt;For Day 16 of building NextBlock CMS in public, let's break down exactly why decoupled headless internationalization is historically painful, and explore how an integrated, single-monorepo schema mapping approach solves it cleanly.&lt;/p&gt;

&lt;p&gt;The Headless i18n Tax: Why Decoupled Systems Fail&lt;br&gt;
When you decouple your content repository from your delivery framework, internationalization forces you to pay what we call the "Headless i18n Tax" across three core development bottlenecks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Async Fetch and Network Waterfall
In a classic headless setup, fetching localized data usually looks like this:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The frontend middleware or router detects the locale route (e.g., /fr/blog/post-1).&lt;/p&gt;

&lt;p&gt;The frontend triggers an asynchronous fetch request across the internet to the third-party CMS API.&lt;/p&gt;

&lt;p&gt;The CMS parses its database, maps the locale ID, and returns a localized JSON payload.&lt;/p&gt;

&lt;p&gt;The frontend unpacks the payload, checks for hydration mismatches, and finally paints the page.&lt;/p&gt;

&lt;p&gt;Every single language switch incurs a round-trip latency penalty. To circumvent this, developers often install massive, bloated third-party client libraries or store massive static localization dictionaries (en.json, fr.json, de.json) directly inside the frontend repository. You end up maintaining localizations in two separate places.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Schema Drift and Manual Synchronization&lt;br&gt;
When your schemas are split across two separate systems, maintaining content relationships is fragile. If a content block contains an embedded product component or a reference to another post, you must map that relationship distinctly for every single language node over the API. If your frontend components update their parameters, your CMS content schemas must be updated manually via a separate dashboard to match.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Client-Side Bundle Bloat&lt;br&gt;
Many third-party i18n frameworks tax the browser bundle aggressively. They introduce runtime provider wrappers, heavy client-side state parsers, and hydration scripts just to switch a sentence from English to Spanish. In an era dominated by React Server Components (RSC), sending 40KB+ of JavaScript to the client purely for static text translation feels ancient.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The NextBlock Approach: Native, Integrated Schema Mapping&lt;br&gt;
When we architected NextBlock, we discarded the assumption that the CMS backend and frontend delivery layer must live in isolation. Because NextBlock is a unified full-stack alternative built directly within a Next.js monorepo alongside PostgreSQL (via Supabase), we handle internationalization right at the source layer.&lt;/p&gt;

&lt;p&gt;Instead of treating locales as detached objects fetched over a third-party API grid, NextBlock utilizes an integrated JSONB schema mapping system that pairs natively with Next.js edge routing.&lt;/p&gt;

&lt;p&gt;The Under-the-Hood Data Structure&lt;br&gt;
Instead of making separate API requests or maintaining flat nested text files, localized content blocks reside cleanly inside structured PostgreSQL jsonb columns.&lt;/p&gt;

&lt;p&gt;Take a look at how a localized text layout is stored within NextBlock's database schema:&lt;/p&gt;

&lt;p&gt;JSON&lt;br&gt;
{&lt;br&gt;
  "block_id": "block_9081723",&lt;br&gt;
  "type": "hero_section",&lt;br&gt;
  "locales": {&lt;br&gt;
    "en": {&lt;br&gt;
      "title": "Build the future of the web",&lt;br&gt;
      "subtitle": "A high-performance CMS for Next.js"&lt;br&gt;
    },&lt;br&gt;
    "fr": {&lt;br&gt;
      "title": "Bâtissez l'avenir du web",&lt;br&gt;
      "subtitle": "Un CMS haute performance pour Next.js"&lt;br&gt;
    },&lt;br&gt;
    "de": {&lt;br&gt;
      "title": "Bauen Sie die Zukunft des Webs",&lt;br&gt;
      "subtitle": "Ein Hochleistungs-CMS für Next.js"&lt;br&gt;
    }&lt;br&gt;
  },&lt;br&gt;
  "components": [&lt;br&gt;
    {&lt;br&gt;
      "id": "cta_button_1",&lt;br&gt;
      "props": { "link": "/get-started" }&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;br&gt;
Why This Architecture Wins:&lt;br&gt;
Zero-Lag Request Routing: Because the content structure is unified, the requested language chunk is isolated right during the core database query layer. There are no secondary network requests to a detached headless server.&lt;/p&gt;

&lt;p&gt;Pure React Server Components (RSC): The resolved locale payload is processed completely on the server. Your client browser downloads exactly zero bytes of translation runtime scripts or unused dictionaries.&lt;/p&gt;

&lt;p&gt;No Synchronization Mismatches: Content blocks and their parent application logic always share the exact same structural boundary. If a layout changes, the relational nodes inside the JSONB structure apply across all language keys instantly.&lt;/p&gt;

&lt;p&gt;Edge Negotiation with Next.js 16&lt;br&gt;
To bridge the database schema seamlessly to the user, NextBlock handles language routing at the absolute nearest boundary line: the Vercel Edge runtime via custom middleware handling (proxy.ts).&lt;/p&gt;

&lt;p&gt;When a request arrives, the edge middleware intercepts it, evaluates cookie states or the browser's accept-language header, adjusts the routing parameters, and redirects the request cleanly down to the Server Component tree.&lt;/p&gt;

&lt;p&gt;TypeScript&lt;br&gt;
// proxy.ts (Next.js 16 Native Edge Route Resolution)&lt;br&gt;
import { NextRequest, NextResponse } from 'next/server'&lt;/p&gt;

&lt;p&gt;const SUPPORTED_LOCALES = ['en', 'fr', 'de']&lt;/p&gt;

&lt;p&gt;export function proxy(req: NextRequest) {&lt;br&gt;
  const { pathname } = req.nextUrl&lt;/p&gt;

&lt;p&gt;// 1. Skip if the path already includes a supported locale&lt;br&gt;
  const hasLocale = SUPPORTED_LOCALES.some(&lt;br&gt;
    (loc) =&amp;gt; pathname.startsWith(&lt;code&gt;/${loc}/&lt;/code&gt;) || pathname === &lt;code&gt;/${loc}&lt;/code&gt;&lt;br&gt;
  )&lt;br&gt;
  if (hasLocale) return&lt;/p&gt;

&lt;p&gt;// 2. Negotiate locale via incoming request headers&lt;br&gt;
  const acceptLang = req.headers.get('accept-language') || 'en'&lt;br&gt;
  const matchedLocale = SUPPORTED_LOCALES.find((l) =&amp;gt; acceptLang.startsWith(l)) || 'en'&lt;/p&gt;

&lt;p&gt;// 3. Rewrite internal pathname transparently to feed down into RSC&lt;br&gt;
  req.nextUrl.pathname = &lt;code&gt;/${matchedLocale}${pathname}&lt;/code&gt;&lt;br&gt;
  return NextResponse.redirect(req.nextUrl)&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;export const config = {&lt;br&gt;
  matcher: ['/((?!_next|api|assets).*)']&lt;br&gt;
}&lt;br&gt;
By resolving the user's intent at the Edge, the database query receives the correct locale context instantly. The app renders exactly what is needed without layout shifts, flash of untranslated content, or client-side overhead.&lt;/p&gt;

&lt;p&gt;Simpler DevX, Smarter Content&lt;br&gt;
Internationalization shouldn't feel like a patch that you bolt onto an application while crossing your fingers. By bringing your database schemas, server environments, and layout renderers under a unified monorepo framework, i18n shifts from an architectural headache to a core performance advantage.&lt;/p&gt;

&lt;p&gt;NextBlock is currently in open beta throughout the month of May, and our public sandbox has all premium packages completely unlocked for evaluation.&lt;/p&gt;

&lt;p&gt;If you are tired of building convoluted network chains for simple localized setups, check us out, test the sandbox, and inspect our full database migration layers.&lt;/p&gt;

&lt;p&gt;🛠️ GitHub: &lt;a href="https://nextblock-cms/nextblock" rel="noopener noreferrer"&gt;nextblock-cms/nextblock&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚡️ Sandbox Terminal: &lt;a href="https://cms.nextblock.dev" rel="noopener noreferrer"&gt;cms.nextblock.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What is your biggest pain point when managing translation pipelines in production? Let's discuss in the comments below! 👇&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>buildinpublic</category>
      <category>nextjs</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why We Chose JSONB for AI: How NextBlock CMS Bypassed the "HTML Wall" for Next.js 16</title>
      <dc:creator>NextBlock™ CMS</dc:creator>
      <pubDate>Fri, 01 May 2026 16:27:59 +0000</pubDate>
      <link>https://dev.to/nextblockcms/why-we-chose-jsonb-for-ai-how-nextblock-cms-bypassed-the-html-wall-for-nextjs-16-41go</link>
      <guid>https://dev.to/nextblockcms/why-we-chose-jsonb-for-ai-how-nextblock-cms-bypassed-the-html-wall-for-nextjs-16-41go</guid>
      <description>&lt;p&gt;If you’ve ever tried to pipe Generative AI directly into a production-grade CMS, you’ve likely hit the "HTML Wall."&lt;/p&gt;

&lt;p&gt;Traditional rich-text editors treat documents as unstructured strings. When you ask an LLM to generate a blog post, it usually hands back a blob of HTML. In a modern Next.js 16 environment, that blob is a performance ticking time bomb. You have to sanitize it, parse it, and hope it doesn't break your React Server Components (RSC) or trigger a massive re-render that tanks your Core Web Vitals.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4nwh7oecdvyv92jvkjv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4nwh7oecdvyv92jvkjv.png" alt=" " width="799" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we built NextBlock Cortex, we made a fundamental engineering decision: AI never touches raw HTML. We store everything as strict, node-based JSONB.&lt;/p&gt;

&lt;p&gt;Here is why that decision is the backbone of our performance.&lt;/p&gt;

&lt;p&gt;The Problem: The "Sanitization Tax"&lt;br&gt;
The "Old Way" of handling AI content looks like this:&lt;/p&gt;

&lt;p&gt;AI generates a string of HTML.&lt;/p&gt;

&lt;p&gt;Server receives the string and runs it through a heavy sanitizer like DOMPurify to prevent XSS.&lt;/p&gt;

&lt;p&gt;Database stores the string.&lt;/p&gt;

&lt;p&gt;Client fetches the string and has to parse it again to render it within a React tree.&lt;/p&gt;

&lt;p&gt;Every step in this process adds latency. Worse, if the AI generates an unsupported tag or a broken &lt;/p&gt;, your editor engine (like Tiptap or ProseMirror) will aggressively strip it out, leading to data loss and a disjointed user experience.

&lt;p&gt;The NextBlock Solution: The Zero-Validation Pipeline&lt;br&gt;
In NextBlock, we treat AI as a structured data constructor, not a writer. We use constrained decoding to force the LLM to output content that follows a strict Zod-backed JSON schema.&lt;/p&gt;

&lt;p&gt;By doing this, we create what we call the Zero-Validation Pipeline:&lt;/p&gt;

&lt;p&gt;Direct-to-DB: Because the AI's output is algorithmically guaranteed to be valid JSON that matches our database schema, we skip the parsing and cleaning phase entirely.&lt;/p&gt;

&lt;p&gt;Atomic Transactions: The JSONB payload is inserted directly into the PostgreSQL column. If a token doesn't fit the schema, the inference fails before it ever touches our disk.&lt;/p&gt;

&lt;p&gt;The Code: Mapping the Schema&lt;br&gt;
By defining our content as a tree of nodes rather than a string, we ensure 1:1 compatibility between the AI, the DB, and the Editor.&lt;/p&gt;

&lt;p&gt;TypeScript&lt;br&gt;
// A simplified look at our content schema&lt;br&gt;
const NextBlockNodeSchema = z.object({&lt;br&gt;
  type: z.enum(['heading', 'paragraph', 'image', 'codeBlock']),&lt;br&gt;
  attrs: z.record(z.any()).optional(),&lt;br&gt;
  content: z.array(z.lazy(() =&amp;gt; NextBlockNodeSchema)).optional(),&lt;br&gt;
  text: z.string().optional(),&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;type ContentBlock = z.infer;&lt;br&gt;
Why Next.js 16 Loves JSONB&lt;br&gt;
The move to JSONB wasn't just about data integrity; it was a pure performance play for the Next.js 16 ecosystem:&lt;/p&gt;

&lt;p&gt;Native RSC Rendering: Since the content is already a JSON object, we map it directly to React components. No dangerouslySetInnerHTML, no hydration mismatches, and no intermediate parsing overhead.&lt;/p&gt;

&lt;p&gt;Turbopack &amp;amp; use cache: Standardized JSON allows for highly predictable caching. Using the new Next.js 16 use cache directive, we can cache AI-generated blocks at the edge with surgical precision.&lt;/p&gt;

&lt;p&gt;Perfect Lighthouse Scores: By eliminating the "sanitization tax" and parsing lag, NextBlock maintains its 100/100 performance guarantee, even on pages heavily populated by AI-generated modules.&lt;/p&gt;

&lt;p&gt;Conclusion: The Schema is the Product&lt;br&gt;
In the era of AI-native applications, "the schema is the product." By moving away from legacy HTML and embracing strict JSONB, we’ve ensured that NextBlock isn't just faster—it’s smarter. Our data is readable by humans, renderable by React, and queryable by future AI agents without the mess of regex or tag-stripping.&lt;/p&gt;

&lt;p&gt;NextBlock is currently in early access. If you're tired of "Frankenstein" WordPress architectures and want a CMS built for the 2026 tech stack, &lt;a href="https://github.com/nextblock-cms/nextblock" rel="noopener noreferrer"&gt;check us out on GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>ai</category>
      <category>postgres</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Finally, a Modern CMS for Developers: Introducing NextBlock (Open Source)</title>
      <dc:creator>NextBlock™ CMS</dc:creator>
      <pubDate>Mon, 26 Jan 2026 20:51:07 +0000</pubDate>
      <link>https://dev.to/nextblockcms/finally-a-modern-cms-for-developers-introducing-nextblock-open-source-336</link>
      <guid>https://dev.to/nextblockcms/finally-a-modern-cms-for-developers-introducing-nextblock-open-source-336</guid>
      <description>&lt;h2&gt;
  
  
  How we are breaking the cycle of bloated legacy platforms and complex headless configs with Next.js 16 and Supabase.
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/WUNLtZWZGL8"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Every web developer knows the pain of choosing a Content Management System (CMS). It often feels like you are stuck between a rock and a hard place.&lt;/p&gt;

&lt;p&gt;On one side, you have the “old guard” (like WordPress). It’s familiar, sure. But it is often bloated, slow, and — thanks to a reliance on endless plugins — a potential security minefield. On the other side, you have modern headless systems. They offer raw speed, but they can be a headache to set up, a nightmare for content editors to use, and often bury you in configuration files.&lt;/p&gt;

&lt;h4&gt;
  
  
  We decided to break that cycle.
&lt;/h4&gt;

&lt;p&gt;Enter NextBlock, an open-source, developer-first CMS built to be the refreshing alternative we’ve been waiting for. In this article, I’m going to break down exactly what we’ve built so far, our tech stack, and our vision for a sustainable open-source ecosystem.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tech Stack
&lt;/h3&gt;

&lt;p&gt;At its core, NextBlock is built on a modern foundation designed for the future of the web:&lt;/p&gt;

&lt;p&gt;• Frontend: Next.js 16 for blazing-fast performance and Server Components.&lt;/p&gt;

&lt;p&gt;• Backend: Supabase for handling data, auth, and storage.&lt;/p&gt;

&lt;p&gt;• Styling: Tailwind CSS for a lean, utility-first design system.&lt;/p&gt;

&lt;p&gt;But the tech is just the vehicle. The mission of NextBlock boils down to three core pillars: Speed, Experience, and Extensibility.&lt;/p&gt;

&lt;p&gt;Pillar 1: Built for Speed&lt;/p&gt;

&lt;p&gt;When we say “built for speed,” we aren’t talking about vague marketing promises. We are talking about concrete engineering wins that are baked into the core platform.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Edge Caching &amp;amp; ISR: We’ve set up caching at the edge, utilizing Next.js Incremental Static Regeneration (ISR). This ensures your site feels instantaneous regardless of where your users are located.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Critical Code Loading: We are obsessive about shipping only the code that is absolutely necessary. This includes using Tailwind CSS to purge unused styles, making the final production build incredibly lean.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next-Gen Image Optimization: Images are usually the #1 culprit for slow websites. NextBlock solves this by baking in the Next.js  component, enabling modern formats like AVIF (which are significantly smaller than JPEGs), and using blur-up placeholders so pages feel snappy even while assets load.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Pillar 2: A Superior Experience (For Everyone)
&lt;/h3&gt;

&lt;p&gt;Speed matters, but what is the point of a fast site if it is a pain to manage? We focused heavily on the experience for both the Content Creator and the Developer.&lt;/p&gt;

&lt;p&gt;For the Content Creator: We wanted an editing experience that feels modern — not like a form from 2005.&lt;/p&gt;

&lt;p&gt;• Notion-Style Editor: We upgraded the block editor (powered by Tiptap) to be intuitive and drag-and-drop friendly.&lt;/p&gt;

&lt;p&gt;• Organized Media: No more chaotic file dumps. The media library supports folders and tagging.&lt;/p&gt;

&lt;p&gt;• Revision History: We added one-click revision history, a game-changer for content teams who need safety when editing live pages.&lt;/p&gt;

&lt;p&gt;For the Developer: We moved the project structure into an Nx Monorepo. This makes it significantly easier to manage dependencies and scale the codebase as you add new features. We also built a CLI tool (create-nextblock) that spins up a new project in seconds, and a documented Block SDK that allows you to build custom components—unlocking the real power of the platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s Next: Phase 3 and the “Open Core” Model
&lt;/h3&gt;

&lt;p&gt;We have built a fast, user-friendly foundation. Now, we are moving into Phase 3, where the vision expands from “just a tool” to a full ecosystem.&lt;/p&gt;

&lt;p&gt;The focus right now is the development of a Premium E-commerce Module. This will be a full-blown commerce solution built to plug directly into NextBlock.&lt;/p&gt;

&lt;p&gt;“Wait, premium? I thought this was Open Source?” This is a critical part of our vision for sustainability. We are adopting an Open Core model:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The Core CMS: Always free, always open-source (AGPL license). This is the foundation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Premium Modules: High-value, complex features (like E-commerce or Enterprise SSO) will be offered as paid add-ons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Marketplace: This fuels a future community marketplace where developers can share and sell their own blocks and themes.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Join the Ecosystem
&lt;/h2&gt;

&lt;p&gt;As we say on our site: “More than a CMS, an ecosystem”. The goal isn’t just to ship code; it’s to build a platform where we can create amazing web experiences together.&lt;/p&gt;

&lt;p&gt;NextBlock is being built in the open. If the idea of a faster, better, developer-first CMS sounds exciting to you, we want you involved.&lt;/p&gt;

&lt;p&gt;• Star the Repo: [&lt;a href="https://github.com/nextblock-cms/nextblock" rel="noopener noreferrer"&gt;https://github.com/nextblock-cms/nextblock&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;• Join the Community: [&lt;a href="https://github.com/nextblock-cms/nextblock/discussions" rel="noopener noreferrer"&gt;https://github.com/nextblock-cms/nextblock/discussions&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;The question isn’t just what’s next for the web — it’s whether you are ready to help build it.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>cms</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Architecting Open-Core: How We Use Nx to Split Free vs. Premium Code</title>
      <dc:creator>NextBlock™ CMS</dc:creator>
      <pubDate>Mon, 19 Jan 2026 14:19:00 +0000</pubDate>
      <link>https://dev.to/nextblockcms/architecting-open-core-how-we-use-nx-to-split-free-vs-premium-code-1epg</link>
      <guid>https://dev.to/nextblockcms/architecting-open-core-how-we-use-nx-to-split-free-vs-premium-code-1epg</guid>
      <description>&lt;p&gt;The "WordPress Killer" needs a business model. When building NextBlock CMS, I knew I wanted the core to be free and open-source forever. But I also plan to offer premium capabilities—starting with our upcoming E-commerce library—to sustain the project. This presents a technical challenge: How do you manage open-source code and closed-source premium modules in the same ecosystem?&lt;/p&gt;

&lt;p&gt;The Nx Solution This is why we spent Phase 2 migrating to an Nx Monorepo. It allows us to keep distinct boundaries between our core libraries and our future premium libraries.&lt;/p&gt;

&lt;p&gt;The "Empty Package" Strategy We are taking a unique approach to distribution.&lt;/p&gt;

&lt;p&gt;NPM Placeholders: We will publish "empty" or "shell" packages to the public NPM registry for our premium libraries. This reserves the namespace and prevents confusion.&lt;/p&gt;

&lt;p&gt;Private Registry via GitHub: The actual source code for the Premium E-commerce library will live in a private GitHub repository.&lt;/p&gt;

&lt;p&gt;The Handshake: Once a user purchases a license, they are invited to the private repo. Their package.json will point to the private instance, seamlessly pulling the premium code into their monorepo workflow.&lt;/p&gt;

&lt;p&gt;Why this matters This setup ensures that we can maintain a single, cohesive developer experience. You don't have to hack together two different CMS versions. You simply "unlock" the premium libs when you're ready.&lt;/p&gt;

&lt;p&gt;Phase 3 is all about executing this vision. The E-commerce library is coming, and it’s going to be fast.&lt;/p&gt;

</description>
      <category>monorepo</category>
      <category>nextjs</category>
      <category>webdev</category>
      <category>ecommerce</category>
    </item>
    <item>
      <title>NextBlock CMS: The Great Migration &amp; The Road to E-commerce (Phase 3)</title>
      <dc:creator>NextBlock™ CMS</dc:creator>
      <pubDate>Wed, 14 Jan 2026 20:16:04 +0000</pubDate>
      <link>https://dev.to/nextblockcms/nextblock-cms-the-great-migration-the-road-to-e-commerce-phase-3-3c39</link>
      <guid>https://dev.to/nextblockcms/nextblock-cms-the-great-migration-the-road-to-e-commerce-phase-3-3c39</guid>
      <description>&lt;p&gt;I’m Back. It’s been quiet on the social front since New Year's, but the code commits have been loud. I am thrilled to announce that we have officially completed the groundwork for NextBlock CMS. Phase 1 (Performance) and Phase 2 (Architecture) are done.&lt;/p&gt;

&lt;p&gt;We Moved! First things first: update your remotes. The project has been transferred to its permanent home: &lt;a href="https://github.com/nextblock-cms/nextblock" rel="noopener noreferrer"&gt;https://github.com/nextblock-cms/nextblock&lt;/a&gt;. Unfortunately, we lost our old discussions in the move, so I’ve created 6 new discussion types (Announcements, Ideas, Q&amp;amp;A, etc.). I invite you all to jump back in and repopulate the board!&lt;/p&gt;

&lt;p&gt;Why the Silence? The Monorepo Split. We didn't just move files; we completely restructured the application using Nx. We successfully split the codebase into apps (the core CMS) and libs (reusable packages). This was a massive undertaking, but it was necessary for what comes next.&lt;/p&gt;

&lt;p&gt;Phase 3: The E-commerce Library We are now entering Phase 3. Our goal is ambitious: to create the best-performing E-commerce library in the world. We are targeting big corporations and solving the performance bottlenecks that have plagued standard CMS e-commerce plugins for years.&lt;/p&gt;

&lt;p&gt;The foundation is set. The repo is ready. Let’s build.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>discuss</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>NextBlock 2026: The Year of the Ecosystem (Phase 3 Roadmap)</title>
      <dc:creator>NextBlock™ CMS</dc:creator>
      <pubDate>Thu, 01 Jan 2026 14:00:00 +0000</pubDate>
      <link>https://dev.to/nextblockcms/nextblock-2026-the-year-of-the-ecosystem-phase-3-roadmap-mid</link>
      <guid>https://dev.to/nextblockcms/nextblock-2026-the-year-of-the-ecosystem-phase-3-roadmap-mid</guid>
      <description>&lt;p&gt;&lt;em&gt;Moving from "Building a CMS" to "Building a Community".&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Happy New Year! 🎆&lt;/p&gt;

&lt;p&gt;2025 was the year of the Core. We built a Type-Safe, Next.js 15 powered, Supabase-backed CMS that smokes WordPress in performance benchmarks (100/100 Lighthouse).&lt;/p&gt;

&lt;p&gt;2026 is the year of the Ecosystem.&lt;/p&gt;

&lt;p&gt;We are entering Phase 3 of our roadmap. Here is what we are building this year:&lt;/p&gt;

&lt;p&gt;🛍️ The E-commerce Module: A lightweight, headless commerce engine. No bloat, just products and checkout.&lt;/p&gt;

&lt;p&gt;🧩 The Marketplace: A space for developers to share (and eventually sell) their custom Blocks and Themes.&lt;/p&gt;

&lt;p&gt;🤝 Community: We are moving development discussions to the open.&lt;/p&gt;

&lt;p&gt;This is an open-source project. No venture capital, no walled gardens. Just developers building the tools we actually want to use.&lt;/p&gt;

&lt;p&gt;If you're tired of fighting with legacy PHP platforms, come help us build the future.&lt;/p&gt;

&lt;p&gt;Star the repo to follow the journey: &lt;a href="https://github.com/Webman-Dev/nextblock-monorepo" rel="noopener noreferrer"&gt;https://github.com/Webman-Dev/nextblock-monorepo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgotxn9ux899tsfr7bz9z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgotxn9ux899tsfr7bz9z.png" alt=" " width="800" height="813"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>community</category>
      <category>typescript</category>
      <category>nextjs</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Documentation is a Feature: Why I’m Obsessing Over "Time-to-Hello-World"</title>
      <dc:creator>NextBlock™ CMS</dc:creator>
      <pubDate>Sun, 28 Dec 2025 14:00:00 +0000</pubDate>
      <link>https://dev.to/nextblockcms/documentation-is-a-feature-why-im-obsessing-over-time-to-hello-world-26h8</link>
      <guid>https://dev.to/nextblockcms/documentation-is-a-feature-why-im-obsessing-over-time-to-hello-world-26h8</guid>
      <description>&lt;p&gt;&lt;em&gt;Great code with bad docs is just legacy code waiting to happen.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We just finished the "Holiday Sprint" for NextBlock, hitting 100% Lighthouse scores and shipping a robust Plugin SDK. But the code is only half the battle.&lt;/p&gt;

&lt;p&gt;I’m spending the days between Christmas and New Year's doing the unglamorous work: Writing Docs. ✍️&lt;/p&gt;

&lt;p&gt;My Goal for Jan 1st: A developer should be able to run npx create-nextblock-app and have a running, deployed CMS in under 5 minutes.&lt;/p&gt;

&lt;p&gt;If you have to read a 10-page manual to start a server, I’ve failed.&lt;/p&gt;

&lt;p&gt;I’m looking for beta testers to try the installation flow next week. If it takes you longer than 5 minutes, I want to hear about it.&lt;/p&gt;

&lt;p&gt;Who is up for the challenge?&lt;/p&gt;

&lt;p&gt;The read me in the repo: &lt;a href="https://github.com/Webman-Dev/nextblock-monorepo" rel="noopener noreferrer"&gt;https://github.com/Webman-Dev/nextblock-monorepo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyetarklo7hxhftqtw148.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyetarklo7hxhftqtw148.png" alt=" " width="800" height="812"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>documentation</category>
      <category>nextjs</category>
      <category>cms</category>
    </item>
    <item>
      <title>Building Git-like Version Control for a Headless CMS (Next.js + Supabase)</title>
      <dc:creator>NextBlock™ CMS</dc:creator>
      <pubDate>Tue, 23 Dec 2025 14:44:50 +0000</pubDate>
      <link>https://dev.to/nextblockcms/building-git-like-version-control-for-a-headless-cms-nextjs-supabase-3gdg</link>
      <guid>https://dev.to/nextblockcms/building-git-like-version-control-for-a-headless-cms-nextjs-supabase-3gdg</guid>
      <description>&lt;p&gt;How we implemented “Time Travel” for content editors without exploding our database.&lt;/p&gt;

&lt;p&gt;I just merged one of the most requested features for NextBlock: Content Revision History.&lt;/p&gt;

&lt;p&gt;We all know the pain of a client deleting a paragraph and then asking, “Can we get that back?” 😅&lt;/p&gt;

&lt;p&gt;The Challenge: Most CMS solutions either don’t track history or bloat the database by duplicating entire rows for every save. We wanted something faster and smarter.&lt;/p&gt;

&lt;p&gt;The Stack:&lt;/p&gt;

&lt;p&gt;Next.js 15: For the reactive admin UI.&lt;br&gt;
Supabase (PostgreSQL): Storing JSONB deltas.&lt;br&gt;
Zod: Validating the schema integrity of past versions (so restoring an old version doesn’t break the new UI).&lt;br&gt;
How it works: We are diffing the JSON content blocks and storing snapshots only when significant changes are detected. This keeps our storage footprint low while giving editors the confidence to “Save” without fear.&lt;/p&gt;

&lt;p&gt;It’s live in the repo now. Go break it and let me know what you think! 👇&lt;br&gt;
&lt;a href="https://github.com/Webman-Dev/nextblock-monorepo" rel="noopener noreferrer"&gt;https://github.com/Webman-Dev/nextblock-monorepo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sneak peak here: &lt;a href="https://x.com/NextBlockCMS/status/2003474634340290704?s=20" rel="noopener noreferrer"&gt;https://x.com/NextBlockCMS/status/2003474634340290704?s=20&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfqyajrm2azv67pswfj5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfqyajrm2azv67pswfj5.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>nextjs</category>
      <category>postgres</category>
    </item>
  </channel>
</rss>
