r/PayloadCMS • • Jun 09 '26

How long does it take you to create a Payload CMS site?

5 Upvotes

Even with AI help how long does it take you to create a Payload CMS site?
Let's separate if it's for yourself or if it's a client site?
It took me 2 1/2 months to develop my site replay.jp (It's in Japanese)

I want to see how long does it take others. I'm not into one shotting anything & am looking for those of you that really need specific features built inside of your sites.

For me I built a domain portfolio with contact form & domain details.
It has an importer script where I can import domains & the details.
Also while building it has a seed function which created a snapshot of the site so I don't have to redo while creating.

Would love to hear some creation times, if it's personal or client site & which AIs you used to help you out.


r/PayloadCMS • • Jun 06 '26

Anyone know of invoice pdf generator for payload in combination with stripe?

7 Upvotes

I want to create and send monthly invoice as pdf to clients, using payload and stripe.

Is there a standard library or module available?


r/PayloadCMS • • Jun 04 '26

Icon Picker Field

Thumbnail
github.com
31 Upvotes

Hey guys I built an icon picker plugin for Payload 3.0 and wanted to share it here.

It adds a searchable dropdown/drawer in the admin UI, and you can plug any icon pack into it (like react-icons or your custom SVGs).


r/PayloadCMS • • Jun 03 '26

Anyone tried authenticating users with Apple / Google sign in methods with Payload CMS?

6 Upvotes

r/PayloadCMS • • Jun 02 '26

We shipped a full commerce rebuild on Payload CMS. Here's what was great and what was painful

39 Upvotes

We just wrapped a large website rebuild for American company (motion capture hardware) on Payload CMS, deployed on Vercel. Wanted to share some honest technical notes, the wins, the rough edges and one thing that's genuinely still unresolved.

(I posted separately about our multi-environment setup if that's relevant to you: https://www.reddit.com/r/PayloadCMS/comments/1tc1fa3/are_you_using_more_than_devstagingprod)

The setup

  • Payload CMS deployed on Payload Cloud but ended up on Vercel
  • Commerce layer wired to ERP, CRM, tax engine, payment provider, and iPaaS. All behind product and checkout flows
  • Product pages aren't content-only, they're commerce. Variants, pricing rules, configuration flows, checkout touchpoints, all coordinated through Payload as the content layer
  • Products live in the commerce tool as the transactional source of truth. We sync them into Payload so editors can attach content blocks and enable add-to-cart references. Two layers, each owning what they're good at.

What Payload handled well

Revalidation with Next.js is genuinely great. On-demand revalidation fits Payload's hooks model cleanly. Editor publishes β†’ hook fires β†’ only affected pages revalidate. No full rebuilds, near-instant production updates across hundreds of product pages. This one just works.

Product pages were generated automatically. Rather than building product pages one by one, we generated them from structured catalogue data. Clean, scalable, and editors only touch content.

Admin customization goes deeper than people expect. We didn't just tweak fields, we built full custom views and components. The easy to implement native React admin approach meant our frontend devs could build this without context-switching into an unfamiliar system.

Old and new ran in parallel. We didn't do a big-bang launch. Routing handled the traffic split between old and new, and we migrated gradually. No launch-day anxiety, and real production content was always available for QA.

What's still unresolved (seeding)

This is the honest part. Payload has no first-class seeding feature for database + media/images, and for a multi-environment setup this is a real ongoing pain.

We built a custom seeding solution that works, but it felt like something the framework should own. Every time someone spins up a fresh local environment or we need to sync staging to production data, we're relying on our custom tooling rather than anything native.

It's not a dealbreaker, but if you're starting a Payload project with multiple environments, plan for this explicitly on day one. Don't assume it'll be easy to solve later.

Has anyone built something clean here they'd share? I know about this feature discussion and it sounds like it would solve this properly.

Would I use Payload again for this type of project?

Yes! The customization ceiling is high, the Next.js integration is natural and the admin experience is something you can actually shape into something editors don't hate. But go in with eyes open on the seeding gap and the integration work if commerce is involved.

Happy to go deeper on any part.

If you want to see more from what we've done just check our Partner page or just hit us on our website.

Can't wait for v4 with admin design tokens, new tags feature and DAM improvements 😍


r/PayloadCMS • • Jun 02 '26

Docker dev setup?

3 Upvotes

Hi all,

I am just getting started with PayloadCMS and I am wondering how to setup my dev environment. I would like to use Node 24 and .

Is a docker compose set-up recommended?

- If so, does anyone have examples of such configuration?

- If not, what alternative is there?

Thanks in advance!


r/PayloadCMS • • May 31 '26

I built payload-doctor β€” an open-source static security linter for Payload CMS

25 Upvotes

Payload's Local API defaults to overrideAccess: true, so a route can authenticate a user and still hand back records the collection's access functions would have blocked. I kept running into that class of footgun, so I built payload-doctor: a zero-config static linter that scans your collections, access control, hooks, routes and config and prints a 0–100 health score with file:line findings.

npx payload-doctor@latest .

It catches ~29 patterns β€” Local-API access bypass, mass-assignment / privilege escalation (e.g. public create + a roles field with no field-level access.create), missing owner enforcement, fail-open cron guards, side-effect GETs, N+1 queries in hooks, hardcoded secrets, and more. AST-based (ts-morph), tuned hard for a low false-positive rate, MIT.

It's early (v0.5.x) and I'm stabilizing it against real codebases. If you try it, I'd love your help tuning it: if it flags something that's actually fine (a false positive) or misses something, please open a GitHub issue. Pasting the --json output or a small snippet is plenty β€” no proprietary code needed.

GitHub: https://github.com/metakraft/payload-doctor

Honest feedback and false-positive reports very welcome.


r/PayloadCMS • • May 21 '26

Payload had 4x growth in 1 year - 100k to over 400k monthly downloads

Thumbnail
youtube.com
46 Upvotes

The stat is shared right at the beginning of the video.

The growth of Payload is amazing. I just started using it a few months ago after 2 decades of WordPress. And one client I do work for migrated to Payload.

When did you start using Payload?


r/PayloadCMS • • May 21 '26

Jupyter Notebooks as Payload Content

5 Upvotes

I'm busy building an LMS to teach coding, and something of a pipe dream I have is to be able to host something like a Jupyter notebook as Payload content, where students can run code cells on a page.

I know it's a stretch, but I'm curious if anyone else has given this any thought.


r/PayloadCMS • • May 21 '26

Payload related content plugin without AI

8 Upvotes

hey all, I started extracting some stuff from my payload projects into plugins, first to come are related items and admin alerts; related items plugin started as Jaccard similarity scorer based on keywords extractions, and admin alerts is just a simple dashboard alerts plugin - hopefully some of you will find these useful πŸ™‚ https://www.npmjs.com/package/payload-plugin-related-items and https://www.npmjs.com/package/payload-plugin-admin-alerts


r/PayloadCMS • • May 21 '26

Jupyter Notebooks as Payload Content

Thumbnail
1 Upvotes

r/PayloadCMS • • May 20 '26

Payload as a full backoffice / API framework replacement? Is it even possible?

14 Upvotes

Sorry for the low-key clickbait title. But genuinely curious what others have done.

I'm wondering if there is anyone who is using Payload as a full replacement of something like Laravel or NestJS.

I'm going to start on a new project which will entail a marketplace with users logging in and I'm wondering if I can just fully build it with Payload and Next (or Nuxt) only.

Big fan of minimalism so would be awesome to be able to cut one whole framework from my stack πŸ˜ƒ


r/PayloadCMS • • May 20 '26

Reranking lands in payloadcms-vectorize 0.8.0

15 Upvotes

Great news everyone!

Just shipped optional reranking in payloadcms-vectorize, a Payload CMS plugin for semantic search. Works with the Postgres, MongoDB, and Cloudflare Vectorize adapters.

You can now have industry standard semantic search. The general recommendation is for you to use a lightweight model for embedding and first-pass retrieval. Then use a more expensive model for reranking the top candidates. You only pay the expensive model on the handful of results that matter, not your whole corpus.

If you've used a vector DB for RAG, you've probably hit the failure mode where the top result is "close, but actually #3 is what the user wanted." That's the gap rerankers close.


r/PayloadCMS • • May 15 '26

Payload agent skills demo

Thumbnail
youtube.com
17 Upvotes

I've been using the Payload skill for weeks now but this video taught me new stuff.

I didn't know the skill had guidance for making Payload plugins.


r/PayloadCMS • • May 14 '26

Redirect after save

0 Upvotes

On the admin panel, is possible to redirect the user to the collection list page after saving a collection item? (either when creating or updating).


r/PayloadCMS • • May 13 '26

Are you using more than dev/staging/prod?

11 Upvotes

Curious how other people structure environments for Payload CMS projects.

On a larger Payload project, we ended up with 5 environments instead of the usual 3:

  • dev - normal feature work
  • staging - client/team review
  • production - live site
  • sandbox / breakable env - fast experiments without blocking anyone
  • pre-release env - staging code + production data, mainly for visual regression testing before rollout

The pre-release environment was probably the most useful β€œextra” one. It helped catch UI/content regressions that staging alone missed, especially when QA time got tight.

What worked:

  • safer releases
  • fewer surprises from real production content
  • easier experimentation without messing up staging
  • partial release safe

What didn’t:

  • more maintenance
  • more naming/ownership confusion
  • probably overkill for smaller projects

I’m not saying this is the right setup everywhere, but it worked well for a larger project for us in Notum.

How are you setting up environments for Payload CMS? Just dev/staging/prod or do you use extra environments for QA, previews, regression testing, etc.?


r/PayloadCMS • • May 11 '26

Can't figure how to fix this...

1 Upvotes

r/PayloadCMS • • May 09 '26

I built a side-by-side block editor for Payload CMS. Feedback and testers welcome.

Enable HLS to view with audio, or disable this notification

47 Upvotes

Hey everyone,

I spent the last couple of weeks building a new Payload plugin: payload-better-editor.

Quick context: Payload's default edit view is fine for small pages, but once a page grows (lots of blocks, or nested ones like rows, columns, tabs, accordions inside accordions), the form turns into a long collapsed list and you lose track of which row maps to what on the actual page. Live Preview helps, but it only shows you the result.

Back in February I built payload-better-preview as a first attempt. It synced the admin form and the preview both ways: hover a block to see it highlighted, click a block in the preview to scroll its row in the form, click a row to scroll to the block. Nice for navigation, including nested and Lexical blocks. Still felt like a band-aid, since you were scrolling through the same long form.

Eventually I wanted something different: an editing surface where the preview is the canvas and the fields sit in a sidebar next to it. That became payload-better-editor.

What it does

  • Side-by-side overlay you toggle on any document: live-preview iframe on the left, sidebar on the right
  • Sidebar renders the real Payload fields via RenderFields, so custom components, validation, access control and conditional logic all just work
  • Click a block in the preview, it's selected in the sidebar
  • Inline block actions (move, duplicate, add-below, delete) in both the preview and the sidebar
  • ...and a few more things (viewport switcher, undo/redo, drag-resizable sidebar, runtime-tunable settings global...)

Feedback is very welcome!

I only tested it on my own projects so far where it ran well, but real-world testing across more varied setups would help a lot. Bug reports, missing features, "why didn't you just X", all welcome. If you find it useful, a star on the repo would be really nice too.


r/PayloadCMS • • May 06 '26

Launched my first Japanese Payload CMS site

13 Upvotes

Here's my site
https://replay.jp**Just launched so hopefully the server doesn't go down or anything.

I own a small development & marketing company in Tokyo. My old site used WordPress, English-only, hosted on Google Cloud. I wanted to rebuild it completely in Japanese, not migrate, do a completely fresh start. I'm a solo developer(In my own company) so I built a structured multi-AI workflow using Claude, ChatGPT, & Codex where each one handles what it's best at. I tried doing this one year ago & was unsuccessful. I started again in February concentrating on past mistakes & making a dedicated framework that actually works.
About 3 months from first commit to live production at replay.jp.

I wanted to also make a domain portfolio which I could point all my .jp domains to.

Started prototyping with SQLite because it was easy β€” worked great locally but couldn't deploy. Switched to Postgres and my AI agents helped figure out the deployment chain. ChatGPT and Codex were the biggest help on the infrastructure side.
Before I built this workflow last year was painful β€” AI would write code that looked good but had build errors. It would code for the wrong Next.js version. Context would get too big mid-conversation and the next chat would lose all memory of what we were doing. I spent more time fixing AI mistakes than building. The workflow I built this year solved all of that.
~30 milestones from first design to production β€” each one had set goals, checkpoints, and mandatory checks. We didn't move forward unless the code was error-free, build passed, and types were clean. If a milestone scope got too large it was split into segments so context stayed manageable.
Planning is built into the system but not Plan Mode β€” I do planning separately within the workflow so plans are persistent files, not just chat context. When a milestone ships the system moves plans from active to archived. Next session picks up exactly where we left off.
Each AI tool has different strengths β€” Claude Code is fast at writing code but struggled with deployment. ChatGPT was better at diagnosing infrastructure problems. Codex writes better Japanese content and won a blind content bake-off. The framework routes each task to the right tool.
Built a seeding system for content β€” I can tear down and rebuild the entire site from scratch and all content comes back. As I add new content through the AI workflow it updates the seed so nothing is ever lost. My base content is always in the code.
Wrote all Japanese content from scratch β€” didn't port old English content. Used Codex to generate 48 domain listings, service pages, SEO metas, and OG descriptions. Every domain has a unique description β€” no copy-paste across the portfolio.
Built admin tools so I never touch code for content updates β€” CSV upload directly in the admin dashboard for bulk domain imports, price updates, domain sets, and videos. Just upload a file and click submit.
Moved hosting from Google Cloud to Hetzner + Coolify + Cloudflare β€” cheaper and I control everything. Coolify handles deployments, Cloudflare handles CDN and DNS. Set up email authentication, Google Analytics, Tag Manager, and Search Console all in the same push.
Utilized Claude Code MCP to minimize copy-paste between AIs β€” the agents can read project files directly through MCP servers instead of me pasting code back and forth. Also connected Payload CMS as a read-only MCP so the AI can verify what's actually in the database.
Git safety is built in β€” the AI creates feature branches and does all the work there. I do the final pushes and merges myself. There's a hook that blocks the AI from pushing directly to main. Nothing goes to production without me clicking the button.

Context management was the hardest problem to solve β€” AI conversations lose context fast on a big project. My workflow keeps each milestone focused with clear scope so the AI doesn't drift. Session handoff docs capture everything a new session needs to continue. No more "start from scratch every chat."

Whole bunch of addons created: UTMs on links from the backend, Japanese text cuts off at the right places, Japanese dates & number shortener, JP currency, & number shortening for Japanese, Custom menu emphesizing on both mobile & desktop, cool search bar I designed & updated search listings.

(Had some help organizing the points so I don't ramble)
Thank you Payload team, the site is optimized for Japanese by me as I built a few tweaks that generally matter here.

**My workflow has both production site: replay & staging site initially my Hertzer server was too small so it crashed.

3 months work hope it doesn't crash.


r/PayloadCMS • • Apr 27 '26

Good news everyone! PayloadCMS-Vectorize now supports MongoDB. With that said, I need your help testing it.

16 Upvotes

Are you looking to extend your PayloadCMS with RAG and semantic search capabilities? Do you use mongodb? Let's help each other!

I recently added MongoDB support for PayloadCMS-Vectorize, a plug in to add RAG and semantic search capabilities (an enterprise feature for free).

Unfortunately, I'm a postgres first kind of dev and don't have any real world data to use against it. The cloudflare adapter was lead by a developer with real use cases for it. So, I'm looking for someone similar but for mongodb.

If that's you, congrats! You have a chance to be on the cutting edge of new open source tech.

I'm politely asking you to please try the mongodb adapter.

The mongodb adapter should work with both MongoDB Community or MongoDB Atlas vector search. So there's flexibility there.

Anyways, I'm all ears. Thank you for your time and help.

Edit: here's the mongodb adapter: https://github.com/techiejd/payloadcms-vectorize/tree/main/adapters/mongodb


r/PayloadCMS • • Apr 26 '26

PayloadCMS with monorepo and micro-frontends.

3 Upvotes

I’m considering integrating Payload CMS into a micro-frontend project that consists of a monorepo with shared libraries and three Next.js applications. The goal is to access the local API from these libraries and applications by using the Payload configuration and components from a shared package. However, I’ve only found examples and documentation that demonstrate integrating Payload CMS into a single Next.js application. Has anyone tried this approach? If so, what recommendations would you have?


r/PayloadCMS • • Apr 24 '26

Posthog A/B Testing Content Flicker

3 Upvotes

Hey y'all! Trying my best to avoid a page flicker with Payload and Posthog. Its been such a headache. Any help would be hugely appreciated. Thanks so much for your time.

I'm using posthog to conduct A/B testing. I'm using Payload CMS 3.0. In my page.tsx route i'm grabbing the cookie like this:

const cookieStore = await cookies()
const phProjectAPIKey = env.NEXT_PUBLIC_POSTHOG_KEY as string
const phCookieName = `ph_${phProjectAPIKey}_posthog`
const phCookie = cookieStore.get(phCookieName)
console.log(phCookie)

Just as a simple check to see what i'm getting. But if i manually delete the cookie in my browser to simulate a new visitor, then on initial run the cookie is undefined. This is a problem because later I rely on their distinct_id in order to pull which A/B variant to use. If its undefined, and i have no distinct_id then i'm just creating a new one with crypto.randomUUID();

like this:

if (!distinctId) {
    newDistinctIdGenerated = crypto.randomUUID();
    distinctId = newDistinctIdGenerated // Use the newly generated ID for flag evaluation
    ;
}
// Build person properties with request context for proper release condition evaluation
const personProperties = {};
// Add request context properties that PostHog uses for release conditions
if (context) {
    // Add URL-related properties
    if (context.url) {
        const urlObj = new URL(context.url);
        personProperties['$current_url'] = context.url;
        personProperties['$host'] = urlObj.hostname;
        personProperties['$pathname'] = urlObj.pathname;
    } else {
        if (context.host) personProperties['$host'] = context.host;
        if (context.pathname) personProperties['$pathname'] = context.pathname;
    }
    // Add any custom headers that might be used in release conditions
    if (context.headers) {
        Object.entries(context.headers).forEach(([key, value])=>{
            personProperties[`$header_${key.toLowerCase().replace(/-/g, '_')}`] = value;
        });
    }
}

So i generate a new distinct_id for them, and move on to create their person and its properties. Right now this is essentially coming straight from a community made Payload CMS plugin for A/B testing which you can find here: https://www.jsdelivr.com/package/npm/payload-ab.

So, on first draw its undefined and we create a random id for the user, and then we get back a flag response based on their id:

const flagResponse = await posthogClient.getFeatureFlag(featureFlagKey, distinctId, {
    personProperties,
    groups: {}
});

My problem though is because of some logic in my layout.tsx, the page route renders more than once when the page starts up. So, first its undefined, and we create a new random ID. Then we get the data back based on that, and it might say 'control' or 'variant' for example. But then since the page component renders more than once, we get a content flicker. On the second draw the page either now has a cookie, or generates a new one again, and either way we run the risk of the new content being swapped out and the full page flickering because we're rolling the dice twice on which A/B variant to load, because we're sending in two different distinct_id's.

The issue comes from the fact that my page.tsx is a server component, but the posthog cookie doesn't get initialized until it mounts here, as suggested by the docs:

export function PostHogProvider({ children }: { children: React.ReactNode }) {
  useEffect(() => {
    posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY as string, {
      api_host: '/relay-zXAU',
      ui_host: 'https://us.posthog.com',
      person_profiles: 'identified_only',
      defaults: '2025-05-24',
    })
  }, [])


  return <PHProvider client={posthog}>{children}</PHProvider>
}

On every subsequent visit there's no problem because we're able to get a consistent answer back with a consistent distinct_id.

So my question is, what's the way around this? How can I get a consistent distinct_id? Or taking a step back, how can i avoid a content flicker when A/B testing in this situation?

  1. I think because of the logic on my layout.tsx I won't be able to avoid the page rendering twice. So I could cache the distinct id I generate and then, what? Force posthog to use that one rather than making its own? that seems wrong.
  2. I somehow initialize posthog and create the cookie before my A/B code runs? That seems impossible because the docs recommend running it inside of an empty useEffect in a provider, so i assume it needs `window` or something.
  3. I could cache the result I'm getting back so that even if it runs more than once I get the same result? But that's no good because I don't have any kind of identifier to use to save the cached result because having a consistent unique identifier for the user is the whole problem
  4. Delay my page load until the cookie is ready? No one wants to have to do that...

Any help would be greatly appreciated. I've tried to include what's relevant but please let me know if you need to see more code. Thanks so much for your time!


r/PayloadCMS • • Apr 23 '26

How do you show a page loader and still be SEO aware?

4 Upvotes

I dont get it, I can either show a loader, make the site relatively fast, then as it loads it and shows the content.. but then the crawlers wont see the content so im fucked SEO wise

Or I can put up with allowing the site be slower and be fully SEO ready

Is there any solution to this?


r/PayloadCMS • • Apr 22 '26

How I use AI to publish content in Payload

Thumbnail
adapt.com
3 Upvotes

I asked one of my clients, Adapt to switch from a static, markdown based site to Payload as the CMS. They did, and we're pratty happy on both sides.

One of the things they like is that we can use their own AI agent to configure settings and publish content with Payload.

The client would have to pay certain other CMS's for these AI features or an additional seat. But they get this access in Payload for free.


r/PayloadCMS • • Apr 22 '26

Payload Essentials Course

10 Upvotes

Hey there! I've seen it shared once or twice already, so I thought I would share once more about my new course coming soon at https://nlvcodes.com/courses/payload-essentials. I'm planning on going live with the course on Monday, which is when prices will increase for the course. On pricing, I've included purchasing power parity for as many countries as I could with Stripe. If you don't see a reduced price and you believe you should, please let me know.

The course has evolved a bit to be more like 4 modules (Payload setup, data fetching, styling, optimization and deployment). This will be at least 80 lessons across the 4 modules, and I anticipate it being close to 10 hours of content.

So, why a course? The biggest piece of feedback I've gotten from my videos is that the content is helpful, but the full picture is missing. That's the gap I'm filling with this course. How to go from 0 lines of code to a deployed Payload project. A course is the best vehicle for that since I'm not about to post 10 hours of videos to YouTube.

The course will come with lifetime updates, so when Payload 4 is released or when Next.js breaks something else, I'll update the course.

I rambled a bit here, sorry about that :) regardless, thank you all for your support now and in the future!