DEV Community

Cover image for How to Self-Host a Headless CMS That Generates Flutter and Next.js Apps (in 5 Minutes)
UnderPeaks
UnderPeaks

Posted on

How to Self-Host a Headless CMS That Generates Flutter and Next.js Apps (in 5 Minutes)

If you've ever built the same app for web and mobile, you know the tax: two codebases, two sets of backend glue code, and one data model you keep in sync by hand. Change a field, update it in both places, miss one, ship a bug.

Underpeaks Core is an open-source, self-hosted headless CMS built to remove that tax. You define your data model once, and it gives you a backend, a content editor, a REST API — and, if you want it, a working Flutter app and Next.js app compiled from that same model. No AI involved: same model in, same code out, every time.

In this guide you'll go from zero to a running Core instance on your own machine.

What you'll need

  • Node.js and npm
  • Git
  • A database: Supabase, PostgreSQL, MySQL, MongoDB or Firebase — whichever you're most comfortable with. Have its connection details ready (host and credentials, or project URL and keys).

Step 1: Get a free license key

Core is free and open source (Apache 2.0), but it needs a license key — that's what lets the CLI generate code for your projects.

  1. Sign up for a free account at underpeaks.com
  2. Generate a license key from your dashboard
  3. Keep the tab open — you'll paste the key during setup

Step 2: Clone and install

git clone https://github.com/underpeaks/underpeaks-core.git
cd underpeaks-core
npm install
Enter fullscreen mode Exit fullscreen mode

Step 3: Start Core

npm run dev
Enter fullscreen mode Exit fullscreen mode

Open http://localhost:3000. On a fresh install, you're sent straight to the installer.

Step 4: Run the installer

There are no environment variables to write by hand — the installer does it for you:

  1. Choose your database — one of the five supported options
  2. Enter your connection details — the installer writes your .env configuration
  3. Connection test — confirms Core can reach your database
  4. Table creation — creates the system tables Core needs
  5. Demo content (optional) — seeds an example project so you have something to explore straight away
  6. Admin account — the email and password for your first user
  7. License key — paste the key from step 1

When it finishes, you're redirected to sign in.

Step 5: Take the tour

Sign in with your admin account and you'll land in the console:

Section What it does
Shared Models Define your data models — the schemas everything else is built on
Pages Build admin and client-facing pages from your models
Menu Control your sidebar navigation
Navigator Map how pages connect to each other
Theme Colours and branding
Storage Upload and manage media
Users Manage who can access your instance
Settings Project name, license key, SMTP, API keys

A good first exercise: create a model under Shared Models (say, Product with a title, price and image), then attach it to a page under Pages. The admin views for it appear instantly — no extra configuration.

Step 6: Generate your apps

Once a model is attached to a page, install the CLI and generate:

npm install -g underpeaks-nxf
nxf login
nxf generate flutter   # or: nxf generate nextjs
Enter fullscreen mode Exit fullscreen mode

nxf login opens your browser to connect the CLI to your account; after that, generate produces a real project you own — models, API client and auth flows included.

Troubleshooting

  • Installer can't connect: double-check your connection details, and make sure the database is reachable from where you're running Core (cloud databases often need your IP allowed).
  • Something looks off after setup: check that your .env.local values match your database exactly.

What's next

  • Full code generation guide: docs
  • Source code: GitHub

If you try it and something breaks or confuses you, I'd genuinely like to know — open an issue on GitHub or drop a comment below. Underpeaks is built by one developer, and feedback from real setups is the most useful thing I can get.

Top comments (0)