acme-website

Payload 3 starter with Better Auth, Postgres, S3 storage, a blog and composable layout and motion components

acme-website preview

Overview

Summary generated from the README

A Payload 3 and Next.js starter that wires up authentication through payload-auth and Better Auth, with a Postgres database and S3-compatible media storage. It includes Users, Blog, Media and Globals collections, SEO and import/export plugins, and custom content blocks. Styling uses Tailwind with layout and motion primitives. Requires PAYLOAD_SECRET and DATABASE_URI; email via Resend is optional, and a form builder plugin can be enabled.

Features

  • Better Auth integration through payload-auth with passkey support
  • Postgres database adapter and S3-compatible storage with a local SeaweedFS Compose stack
  • Content, media and gallery blocks plus a copyright inline block
  • Section, Container and MediaFrame layout primitives with motion components
  • SEO and import/export plugins and Lexical rich text with live preview
  • Optional form builder plugin with TanStack Form on the frontend

Good for

  • Starting a Payload website that needs user authentication and a blog
  • Building a branded marketing or content site with a custom admin and email templates

From the author

A blank template to get started with Payload 3.0

Get started

This repository is a GitHub template: create your own copy of it in one click.

Create a repository from this template

README

Payload v4 development has moved to fluid-design-io/payload-toolkit. Follow the new repository for current documentation, issues and contributions.

header

A production-ready PayloadCMS starter with payload-auth, modern UI components, and full-stack development tools. Visit Demo


Features · Quick Start · Branding Your Company · Custom UI Components · Custom Blocks · Form Plugin (Optional)

Features

Features
Custom Blocks
BlockDescription
Content BlockAllows you to create a content section with multiple columns that are mobile responsive.
Media BlockRefined version of Payload's default media block (added zoom functionality).
Gallery BlockA grid of zoomable images.
CopyRight Inline BlockAn inline block that adds © Copyright ${fromYear}~${currentYear}... so you don't have to manually change it every year.
Custom UI Components
ComponentDescription
SectionA compound section primitive with composable header, content, and media.
ContainerA focused horizontal width and gutter primitive.
MediaFrameA compound figure primitive with content, overlay, and caption slots.
VimeoEmbedAn accessible Vimeo embed for public and unlisted videos.
EntranceComposable viewport reveal, fade, and explicit stagger primitives.
TextEffectReduced-motion-aware animated text segmentation.
GlowEffectDecorative glow effects with static reduced-motion behavior.
Example usage
import { Container, MediaFrame, Section } from '@/components/layout'
import { Entrance } from '@/components/motion-primitives'

export default function Page() {
	return (
		<Section variant="muted" layout="full-width">
			<Container>
				<Section.Header>
					<Section.Eyebrow>Acme</Section.Eyebrow>
					<Section.Title>Features</Section.Title>
					<Section.Description>Composable layout and motion primitives.</Section.Description>
				</Section.Header>
			</Container>

			<Entrance.Stagger>
				<Entrance.Stagger.Item>
					<Section.Media>
						<MediaFrame>
							<MediaFrame.Content>
								<img src="/website-template-OG.png" alt="Feature preview" />
							</MediaFrame.Content>
							<MediaFrame.Caption>Feature preview</MediaFrame.Caption>
						</MediaFrame>
					</Section.Media>
				</Entrance.Stagger.Item>
			</Entrance.Stagger>
		</Section>
	)
}

Email UI

Email UIs

Quick Start

git clone https://github.com/fluid-design-io/payload-better-auth-starter.git
cd payload-better-auth-starter
bun install
cp .env.example .env   # edit with your values
bun run dev

Local S3 storage

The Compose stack uses SeaweedFS with the existing S3_* variables: S3 at http://localhost:9001 and Admin UI at http://localhost:9002. Both buckets are created at startup and remain private; Payload handles public media and authenticated file access.

Migrating from MinIO: Back up the old volume and copy objects via the S3 API; SeaweedFS uses a separate seaweedfs_data volume and does not migrate data automatically.

Branding Your Company

Replace Acme: logo in src/components/icons.tsx and admin-icon.tsx, favicon in public/favicon.ico, name in src/lib/constants.ts and src/lib/email/email-template.tsx, OG image public/website-template-OG.png.

Env (required): PAYLOAD_SECRET, DATABASE_URI. Optional: S3 vars, RESEND_API_KEY for email.

Stack

Collections: Users, Blog, Media, Globals. Plugins: Better Auth, SEO, Import/Export, S3, optional Form Builder. UI: coss, Motion, theme, responsive.

Form plugin (optional)

Payload form builder plugin with Tanstack form on the frontend

  1. Move extra/plugins/form-plugin to src/plugins/
  2. Move extra/blocks/form to src/blocks/form
  3. Move extra/components/form to src/components/form
  4. Move extra/fields/slug to src/fields/slug
  5. Install @payloadcms/plugin-form-builder country-data-list react-circle-flags
  6. Uncomment form plugin in src/plugins/index.ts
  7. Run bun run payload generate:importmap
  8. Restart development server 🥳

Structure

src/ → app/, collections/, components/ (ui, layout, payload), lib/, plugins/, blocks/

Deploy

Docker: docker-compose -f docker-compose.prod.yml up -d

License

MIT License - see LICENSE.md for details.


Need help? Check out the PayloadCMS docs or Better Auth docs.

More Starters & boilerplates templates

nextload screenshot

nextload

Next.js and Payload boilerplate with Better Auth, blog, cart, runtime theming and hybrid caching

1
v3
Next.js
Updated 2 weeks ago
payload-template-project screenshot

payload-template-project

Next.js 16 and Payload starter with Clerk auth, Postgres, S3 media storage and Resend email

0
v3
Next.js
Updated 3 weeks ago
payload-starter screenshot

payload-starter

Next.js 16 and Payload 3 starter with PostgreSQL, role-based admin access, shadcn/ui and SEO helpers

100
v3
Next.js
Updated 4 months ago