Use Cases / Documentation Site

Documentation Site.

Store your documentation alongside your application data. Sections, ordering, rich text, and a changelog collection, all managed through the same admin panel your team already uses. No separate static site generator or third-party docs platform required.

Key capabilities

  • Rich Text Editor — Full Lexical editor for doc pages: headings, code blocks, callouts, and embedded media. Writers get a proper editing experience.
  • Ordering Field — Use a number field for explicit ordering within each section. Render docs in the right sequence without relying on creation order.
  • Relationships — Docs belong to sections. Sections group related pages. Use relationship fields to model the hierarchy cleanly.
  • Changelog Collection — Version entries with a date, description, and type. Query the last 10 entries for a /changelog page in a single call.

Docs in Markdown files can't be updated by non-developers.

Static site generators and MDX work well for developer-maintained docs. But when a product manager or technical writer needs to update a page, they're filing a GitHub PR or waiting for someone who can. Hosted docs platforms solve the editing problem but add another service to your stack.

Nextly keeps docs in your database. Writers use the admin panel. Developers define the schema. The output is a Next.js page with zero extra infrastructure.

Docs schema: pages, sections, changelog

Docs collection

import {
  defineCollection, text, richText,
  relationship, number, select,
} from "nextly/config";

export default defineCollection({
  slug: "docs",
  fields: [
    text({ name: "title", required: true }),
    text({ name: "slug", unique: true }),
    richText({ name: "content" }),
    relationship({ name: "section", relationTo: "sections" }),
    number({ name: "order", min: 0 }),
  ],
  // Built-in Draft / Published lifecycle
  status: true,
});

Sections collection

import {
  defineCollection, text, number,
} from "nextly/config";

export default defineCollection({
  slug: "sections",
  fields: [
    text({ name: "title", required: true }),
    text({ name: "slug", unique: true }),
    number({ name: "order", min: 0 }),
  ],
});

Changelog collection

import {
  defineCollection, text, richText,
  date, select,
} from "nextly/config";

export default defineCollection({
  slug: "changelog",
  fields: [
    text({ name: "version", required: true }),
    date({ name: "releasedAt", required: true }),
    richText({ name: "description" }),
    select({
      name: "type",
      options: [
        { label: "Feature", value: "feature" },
        { label: "Bug Fix", value: "bugfix" },
        { label: "Breaking Change", value: "breaking" },
      ],
    }),
  ],
});

Start building with Nextly

Free, open source, and yours to own. No sign-up required.

Terminal