Using the CMS
The plain-language guide to writing and publishing content. No technical knowledge needed.
/admin — on this same domainThat 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.
Writing a blog post
- In the left sidebar, click Posts, then Create New.
- 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. - Write in the Content area. The toolbar has headings, bold, lists, links, quotes, and images. The + button (or typing
/) inserts blocks. - 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. - 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:
| Type | What it's for |
|---|---|
| Projects | Portfolio 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. |
| Services | Service offerings. |
| Resources | Links or downloads (e.g. templates) — fill the external URL, attach a file, or both. Cover is usually a logo; one category, 1–3 tags. |
| Experience | Work history. Plain items — the website decides the order. |
| Categories | A section shared by Posts, Projects and Resources. Can be nested. Each item has exactly one; use tags for everything else. |
| Tags | The 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.
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
/analyticsfor 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
| Role | Can do |
|---|---|
| Admin | Everything: manage users, change settings, edit all content. |
| Editor | Manage 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.
Back up everything
cd /rootcurl -fsSLO https://raw.githubusercontent.com/farhanmunim/payload-cms/main/scripts/vps-backup.shbash vps-backup.shThe 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.gzThis 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.
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.shRead-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.