# Agency work: Client sites with an admin you can hand over.

Build each client site as its own Next.js app, with its own Nextly and its own database.

After a developer sets up and deploys Nextly, editors manage content and pages in the admin.

[Start building](https://nextlyhq.com/docs/getting-started/quick-start.md) · [Read the docs](https://nextlyhq.com/docs/admin/branding.md)

```bash
npx create-nextly-app@alpha my-app
```

## The short answer: Can I build client sites with Nextly?

Yes. Build each client site as its own Next.js app, with its own Nextly and its own database. Put your client’s logo, favicon and colours on the admin with `admin.branding`. Role-based permissions for each collection and action, plus field-level read and write rules in code, on a collection’s or single’s fields, fields inside field groups included.

## How it fits together: What you write, what Nextly runs, and who it is for

Each numbered part is explained under the drawing, with its limit where it has one.

| # | In your code | Nextly, inside your Next.js app | Who it is for |
| --- | --- | --- | --- |
| 1 | `nextly.config.ts`: Your client’s logo and colours | **The admin**: At /admin | Your client’s editors |
| 2 | Set in the admin | **Roles and permissions**: Per collection and action | Each person on your client’s team |
| 3 | Twenty core blocks | **Visual Page Builder**: `@nextlyhq/plugin-page-builder` | Your client builds pages |
| 4 | `collections/*.ts`: The content model, in code | **Visual Schema Builder**: Off in production by default | You, in development |

Your own PostgreSQL or MySQL database, or SQLite for local work

### 1. The admin

Put your client’s logo, favicon and colours on the admin with `admin.branding`.

Sign-in for your team: email and password, sessions and API keys, stored in your own database.

[CMS for Next.js](https://nextlyhq.com/nextjs-cms)

### 2. Roles and permissions

Role-based permissions for each collection and action, plus field-level read and write rules in code, on a collection’s or single’s fields, fields inside field groups included.

[CMS for Next.js](https://nextlyhq.com/nextjs-cms)

### 3. Visual Page Builder

The Visual Page Builder ships with 20 core blocks, from sections and columns to forms, galleries and embeds.

A block’s `supports` decides which style controls the Visual Page Builder offers for it.

[Visual Page Builder](https://nextlyhq.com/page-builder)

### 4. Visual Schema Builder

Model content visually on your development instance with the Visual Schema Builder.

In production the Visual Schema Builder is off unless you turn it on with `admin.branding.showBuilder`.

[Visual Schema Builder](https://nextlyhq.com/nextjs-cms#model)

## Who does what

### Your agency

1. **Create the project.** One command creates a project with the admin and a database: `npx create-nextly-app@alpha my-app`.
2. **Brand the admin.** Put your client’s logo, favicon and colours on the admin with `admin.branding`.
3. **Create the first admin.** In production, the web setup asks for a one-time setup token, printed in the server log, before it creates the first admin.

   ![The Nextly admin dashboard: what needs attention, buttons to create a post or a page, and the Content card counting the entries in each collection and listing the singles.](https://nextlyhq.com/captures/dashboard-light.png)
   The dashboard, with its collection counts and create buttons. (Nextly admin · 0.0.2-alpha.69)


**Handover:** After a developer sets up and deploys Nextly, editors manage content and pages in the admin.

### Your client

4. **Build pages.** The Visual Page Builder ships with 20 core blocks, from sections and columns to forms, galleries and embeds.

   ![The Visual Page Builder with the hero's launch image selected: its block toolbar above it, and the Content tab showing the image's name, source, alt text, loading and caption.](https://nextlyhq.com/captures/builder-image-block-light.png)
   An image block selected, with its Content tab open. (Nextly admin · 0.0.2-alpha.69)

5. **Restore an earlier version.** Compare two versions of the same language and restore an earlier one from the admin; restoring saves the current state first.

   ![Two versions of a post compared side by side, showing only the three fields that changed: the excerpt, an added paragraph and the release version.](https://nextlyhq.com/captures/version-compare-light.png)
   Two versions of a post compared side by side. (Nextly admin · 0.0.2-alpha.69)

6. **See who changed what.** An activity feed of who created, changed or deleted entries, and a security audit trail.

   ![The dashboard's Recent activity card: who created or updated which post or page, how long ago, and how many times.](https://nextlyhq.com/captures/dashboard-activity-light.png)
   The recent activity feed on the dashboard. (Nextly admin · 0.0.2-alpha.69)


## In your code: The code you write

`nextly.config.ts`

```ts
// Single logo for both modes
admin: {
  branding: {
    logoUrl: "/logo.svg",
    logoText: "Acme CMS",
  },
},
```

From `docs/admin/branding.mdx` at v0.0.2-alpha.72.

`collections/posts.ts`

```ts
import { defineCollection, relationship, text } from "nextly/config";

export const Posts = defineCollection({
  slug: "posts",
  fields: [
    text({ name: "title" }),
    relationship({ name: "author", relationTo: "users" }),
  ],
  access: {
    read: true,
    // Narrowed: the role's update-posts, and not while a content freeze is on.
    update: () => process.env.CONTENT_FREEZE !== "on",
  },
});
```

From `docs/permissions/index.mdx` at v0.0.2-alpha.72.

[Try the tour](https://nextlyhq.com/use-cases/agency-work#tour)

A short tour, in your browser, and nothing is saved. Every control it draws is one Nextly 0.0.2-alpha.72 has; a dashed button is a tour shortcut.

## What ships today: in 0.0.2-alpha.72

- **Packages:** `nextly`, `@nextlyhq/plugin-page-builder`
- **Release:** `0.0.2-alpha.72` · 27 Oct 2026
- **Licence:** MIT
- **Core blocks:** 20 core blocks
- **Databases:** PostgreSQL 15+, MySQL 8+, SQLite 3.38+ for local work
- **Requires:** Node.js 22.12+ or 24+; Next.js 16 with the App Router; React 19

## Before you start

Nextly fits if you want:

- Keep the site inside your own Next.js app, on your own database.
- Access rules in code that apply over REST and in the admin.

Look elsewhere if you need:

- One admin serving many clients from one database.
- A review-and-approve step before publishing.
- A hosted service. Nextly is self-hosted.

- **One client, one app:** One admin does not keep several clients’ content apart: access rules have no per-row filtering, so give each client their own app and database. [Docs](https://nextlyhq.com/docs/permissions.md)
- **The first admin:** In production, the web setup asks for a one-time setup token, printed in the server log, before it creates the first admin. [Docs](https://nextlyhq.com/docs/guides/authentication.md#the-first-administrator)
- **The schema in production:** In production the Visual Schema Builder is off unless you turn it on with `admin.branding.showBuilder`. [Docs](https://nextlyhq.com/docs/admin/branding.md)

Nextly is in alpha. APIs may change before 1.0. Pin exact versions in production.

## Short answers

### Can each client have their own database?

Build each client site as its own Next.js app, with its own Nextly and its own database. Runs inside your own Next.js app, on your own PostgreSQL or MySQL database, or SQLite for local work.

### Can one Nextly admin serve several clients?

No. One admin does not keep several clients’ content apart: access rules have no per-row filtering, so give each client their own app and database.

### Can I put my client’s logo on the admin?

Put your client’s logo, favicon and colours on the admin with `admin.branding`.

### Can my client change the content model?

In production the Visual Schema Builder is off unless you turn it on with `admin.branding.showBuilder`. Model content visually on your development instance with the Visual Schema Builder.

### Can my client undo a change?

Working drafts with autosave, and a side-by-side comparison of two versions of the same language. Compare two versions of the same language and restore an earlier one from the admin; restoring saves the current state first.

### Which plugins can I add?

The established official plugins: Visual Page Builder, SEO and Form Builder. Build forms and capture submissions with the official Form Builder plugin.

### Is Nextly free?

Nextly is MIT licensed and self-hosted. MIT today, and no decision yet about paid offerings.

## The parts of Nextly this uses

- [CMS for Next.js](https://nextlyhq.com/nextjs-cms): Runs inside your own Next.js app, on your own PostgreSQL or MySQL database.
- [Visual Page Builder](https://nextlyhq.com/page-builder): The Visual Page Builder ships with 20 core blocks, from sections and columns to forms, galleries and embeds.
- [Visual Schema Builder](https://nextlyhq.com/nextjs-cms#model): Model content visually on your development instance.

- [Next.js apps](https://nextlyhq.com/use-cases/nextjs-apps.md): Use Nextly as the content and admin layer inside your Next.js app.
- [Marketing websites](https://nextlyhq.com/use-cases/marketing-site.md): After a developer sets up and deploys Nextly, editors manage content and pages in the admin.
- [Headless CMS](https://nextlyhq.com/use-cases/headless-cms.md): Read content straight from your database in your page code (the Direct API), or over REST.
