Using the CMS

The plain-language guide to writing and publishing content. No technical knowledge needed.

/admin — on this same domain

That address is the content management system (CMS). It only manages content — the public website is built separately and reads from it.

Logging in

Enter your email and password at /admin. Forgot your password? Click Forgot password? and you'll get a reset link by email.

Locked out? After 5 wrong attempts your account locks for 10 minutes. Wait it out, or ask an admin to unlock you.

Writing a blog post

  1. In the left sidebar, click Posts, then Create New.
  2. Give it a title. The slug — the post's web address, like /blog/my-post — fills in automatically from the title. Edit it if you want something shorter.
  3. Write in the Content area. The toolbar has headings, bold, lists, links, quotes, and images. The + button (or typing /) inserts blocks.
  4. Add a cover image, a short excerpt (shown in post listings), exactly one category, and one to three tags (primary tag first) — pick existing ones or create new ones right in the field. Tag guides with Guide. The limits are checked when you Publish, not on draft saves.
  5. Finish with one of two buttons:
    • Save Draft — saved, but invisible to the public.
    • Publish — live on the site. The publish date sets itself the first time; you can change or backdate it in the sidebar.

Want a post highlighted on the homepage or the top of listings? Tick Featured in the sidebar.

Blocks

The + button (or /) inserts: Code (choose the language, add a filename), Callout (info, tip, note, warning or danger), Video embed, Before / after, Link card, File download, FAQ, Related posts and Raw HTML. Images take a caption and a layout (content, wide or full). Each document keeps its last 5 saved versions.

The other content types

They all work like posts, with small differences:

TypeWhat it's for
ProjectsPortfolio items: role, live and source links, a case study (problem, approach, outcome, up to 3 KPIs), a downloadable file, one category and 1–3 tags.
ServicesService offerings.
ResourcesLinks or downloads (e.g. templates) — fill the external URL, attach a file, or both. Cover is usually a logo; one category, 1–3 tags.
ExperienceWork history. Plain items — the website decides the order.
CategoriesA section shared by Posts, Projects and Resources. Can be nested. Each item has exactly one; use tags for everything else.
TagsThe shared label list. Usually managed from inside a tag field, but here you can rename or delete tags — renames apply everywhere at once.

Images and files

All uploads live in Media. Anything you upload inside a post lands there too, and can be reused anywhere.

Images ask for alt text: a one-line description used by screen readers and search engines. Documents like PDFs don't need it.

Careful with delete. Removing a media item removes it everywhere it's used — the CMS warns you if something still references it.

Import and export

Every content list (Posts, Projects, Tags…) has an Export option in its list controls: choose CSV or JSON, pick which fields to include, and export everything or just your current filtered selection. Import brings documents in from a file the same way, reporting per-row results. The Limit and Fields boxes are prefilled from the list you are viewing — clear them to export everything. Download exports straight away — they aren't kept long-term, aren't a backup, and very large ones can crash the site (use the backup script below instead).

Your profile

Click Users → your account. Fill in your first and last name (your author byline on the site), a profile picture, an About the author bio, and your personal social links.

The small picture in the admin's top-right corner is separate — it comes from gravatar.com for your login email. Set a photo there if you want it.

Site-wide settings (admins only)

Under Settings in the sidebar:

  • Site Settings — site name, tagline, default description, logo, favicon, the default social-share image, footer copyright text, the site's own social links, analytics/tracking snippets, and the analytics dashboard link (embedded at /analytics for logged-in users).
  • Permalinks — the URL prefix for each content type (e.g. posts under /blog); new content types appear here automatically. Changing these changes the public addresses of existing content, so edit with care.

Roles

RoleCan do
AdminEverything: manage users, change settings, edit all content.
EditorManage content and their own profile. Can't see other accounts, change settings, or change roles.

The CMS protects itself from lock-outs: the first account ever created is an admin, and the last remaining admin can't be deleted or demoted.

Publishing and the live site

Publishing, editing published content, or deleting something triggers a site rebuild automatically (when the deploy hook is configured) — changes appear live within a few minutes. Saving drafts never triggers a rebuild.

Backups and server maintenance (admins only)

These are run on the VPS itself, not inside the CMS. In Coolify open Servers → localhost → Terminal (or SSH in). Do not use the Payload service's own terminal — it has no Docker. Paste one line at a time.

Golden rules. Take a backup before any bulk change or deletion. If you just pushed code, wait for the Coolify deployment to finish before running any of these.

Back up everything

cd /rootcurl -fsSLO https://raw.githubusercontent.com/farhanmunim/payload-cms/main/scripts/vps-backup.shbash vps-backup.sh

The first run takes a few minutes while it builds a helper image. It writes /root/payload-backups/payload-backup-<time>.tar.gz — all content, globals, uploaded files and a snapshot of the configuration. Passwords and API keys are never included, and neither is version history. The file contains the deploy hook URL, so keep it private.

Restore a backup

curl -fsSLO https://raw.githubusercontent.com/farhanmunim/payload-cms/main/scripts/vps-restore.shbash vps-restore.sh /root/payload-backups/payload-backup-<time>.tar.gz

This deletes all current content and media first (users are kept). It asks you to type RESTORE to continue. Restored documents get new IDs, and missing users get a random password (use Forgot password).

Retire old categories

Old saved versions of posts and projects can still point at a category you stopped using, and the CMS then refuses to delete it (“Something went wrong”). This removes those old versions (never the current one) and then the category. It is a dry run by default — read what it reports, then add --apply. Back up first.

curl -fsSLO https://raw.githubusercontent.com/farhanmunim/payload-cms/main/scripts/vps-prune-categories.shbash vps-prune-categories.shbash vps-prune-categories.sh --apply

It handles technical, guides, modelling and open-source by default. For other categories, set the list first, e.g. PRUNE_SLUGS=some-slug bash vps-prune-categories.sh. A category that any current post or project still uses is skipped.

Check and trim storage

curl -fsSLO https://raw.githubusercontent.com/farhanmunim/payload-cms/main/scripts/vps-audit.shbash vps-audit.sh

Read-only report: database size, orphaned rows, unused media files and Docker disk use. Add --fix to delete orphan files, compact the database and prune Docker leftovers. Content is never touched.

Wipe and re-import from WordPress

vps-reseed.sh (same curl pattern) deletes all content and re-imports it from the WordPress site, so every document gets a new ID. Only use it when you really mean to start over, and take a backup first.

This guide ships with the CMS blueprint — the same text lives in the project as EDITORS.md.