SEO Geo
ReScienceLab/opc-skills
SEO & GEO (Generative Engine Optimization) for websites. An agent skill from ReScienceLab/opc-skills.
Put a Payload CMS admin on a site built from this starter — every visible string and content photo editable, derived from the site's own content objects with the code's copy as the fallback, a…
$ npx skills add textura-agency/next16-claude-starter --skill payload-cms -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install textura-agency/next16-claude-starter payload-cms --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/textura-agency/next16-claude-starter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/payload-cms .claude/skills/payload-cms && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "payload-cms" agent skill from https://github.com/textura-agency/next16-claude-starter/tree/main/.claude/skills/payload-cms into .claude/skills/payload-cms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "payload-cms", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/textura-agency/next16-claude-starter/tree/main/.claude/skills/payload-cmsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add textura-agency/next16-claude-starter --skill payload-cms -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install textura-agency/next16-claude-starter payload-cms --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/textura-agency/next16-claude-starter.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/payload-cms .agents/skills/payload-cms && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "payload-cms" agent skill from https://github.com/textura-agency/next16-claude-starter/tree/main/.claude/skills/payload-cms into .agents/skills/payload-cms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "payload-cms", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add textura-agency/next16-claude-starter --skill payload-cms -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install textura-agency/next16-claude-starter payload-cms --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/textura-agency/next16-claude-starter.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/payload-cms .cursor/skills/payload-cms && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "payload-cms" agent skill from https://github.com/textura-agency/next16-claude-starter/tree/main/.claude/skills/payload-cms into .cursor/skills/payload-cms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "payload-cms", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/textura-agency/next16-claude-starter.git --path .claude/skills/payload-cms--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add textura-agency/next16-claude-starter --skill payload-cms -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install textura-agency/next16-claude-starter payload-cms --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/textura-agency/next16-claude-starter.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/payload-cms .gemini/skills/payload-cms && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "payload-cms" agent skill from https://github.com/textura-agency/next16-claude-starter/tree/main/.claude/skills/payload-cms into .gemini/skills/payload-cms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "payload-cms", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install textura-agency/next16-claude-starter payload-cmsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add textura-agency/next16-claude-starter --skill payload-cms -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/textura-agency/next16-claude-starter.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/payload-cms .github/skills/payload-cms && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "payload-cms" agent skill from https://github.com/textura-agency/next16-claude-starter/tree/main/.claude/skills/payload-cms into .github/skills/payload-cms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "payload-cms", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add textura-agency/next16-claude-starter --skill payload-cms -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install textura-agency/next16-claude-starter payload-cms --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/textura-agency/next16-claude-starter.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/payload-cms .opencode/skills/payload-cms && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "payload-cms" agent skill from https://github.com/textura-agency/next16-claude-starter/tree/main/.claude/skills/payload-cms into .opencode/skills/payload-cms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "payload-cms", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
payload-cmsPut a Payload CMS admin on a site built from this starter — every visible string and content photo editable, derived from the site's own content objects with the code's copy as the fallback, a…
Payload Cms is an agent skill from textura-agency/next16-claude-starter. Put a Payload CMS admin on a site built from this starter — every visible string and content photo editable, derived from the site's own content objects with the code's copy as the fallback, a per-page SEO global that drives <head/JSON-LD/sitemap/llms.txt, Supabase Postgres + Storage, migrations only, static routes revalidated on save. Ships copy-ready kits (core, admin skin, analytics, editor's guide, legal rich text) proven on a production site. Use when the user asks to "add a CMS / admin / Payload", "make the…
Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 91 other files, including reference files (for example `references/content-model.md`, `references/legal-rich-text.md` and `references/seo-global.md`).
It sits in Marketing & SEO, covering Copywriting, Schema markup and AI search optimization. It works with Payload CMS, Supabase and PostgreSQL. The repository describes itself as: AI-first Next.js 16 starter for animation-heavy sites, wired with an Obsidian vault & Claude Code hooks. The licence is Unlicense.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1170942. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Shell, from the files we listed), which the agent can run.
Shell commands in SKILL.md call:
yarnbashnodenpmgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use yarn, npm and git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Payload Cms loads about 3.7k tokens when it runs, and up to ~7.5k if it reads all its reference files. Until then it costs about 191 tokens; SKILL.md has 1,759 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
# bare migrate:create does not load .env.local- `.env.local` overrides `.env` — a `DATABASE_URL` left in both takes `.env.local`'s.Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from textura-agency/next16-claude-starter at commit 1170942, republished under its Unlicense licence (© textura-agency). 1,759 words, ~3,685 tokens.
.claude/skills/payload-cms/SKILL.md (or your agent's skills folder). This skill also uses 81 other files; get the full folder from GitHub.This is the flow a production site went through to get an admin its owner
called "great": every word on the site editable, grouped the way the site
reads, SEO per page with a live link preview, light consented analytics, the
site's own look, and a guide with screenshots inside the admin. It is written
down as kits (templates/) and decisions (below) so the next site gets there in
one pass instead of twenty requests.
Read first: obsidian/workflows/cms-admin.md (the flow at a glance) and
obsidian/backend/cms-payload.md (the architecture). Verified against
Payload 3.89 · Next 16.3 · Node 24 (2026-10).
Every one of these was a request or a defect on the reference site. Don't undo one without the reason in front of you.
| # | Decision | Why |
|---|---|---|
| D1 | Payload inside the app — app/(payload) + app/(site), one build, one deploy | The owner asked for one project. Local API reads in process — no HTTP hop, works at build time. |
| D2 | Fields are derived from the content objects (text-schema.ts walks src/data/mocks/*), not hand-written | Every string becomes a field defaulted to today's copy; a new line in code is a new field next deploy. Hand-written schemas drift and miss copy. |
| D3 | Reading is a merge: getText("hero") returns the code's HERO with the admin's strings laid over it — same type | Views and components stay untouched. A deliberate exception to "use the generated type in the view" (rule payload.md). |
| D4 | Blank / missing / DB down → the code's copy, error logged | The site never goes blank because the CMS did. A fresh database renders the full site. |
| D5 | Globals, not collections or blocks, for a marketing page's sections | Each section exists once; its order is choreographed with motion/scene, so it is not the editor's to reorder. Collections only for things that are many (posts, cases). Blocks only when the editor genuinely composes pages. |
| D6 | Wiring is skipped (SKIP: id, href, anchors, textures, scene data…); card lists have fixed rows matched by a hidden key | The editor rewrites a card but cannot break the layout, cross-wire a card to another's image, or add a 7th card to a 6-slot ring. |
| D7 | OPEN_LISTS with a floor/ceiling for lists the layout can resize; an added row must fill every line + photo | The client asked to change counts; the floor is what keeps a carousel from showing empty glass. |
| D8 | Photos are optional uploads beside their copy ("Replace photo"): blank → photo in code; upload → its URL, alt, a 512 px small size for textures, crop dropped | Same fallback rule as text. Only content photos — decorative art and the scene stay in code. |
| D9 | One SEO global, a tab per page + Site defaults; parity with everything <head>, JSON-LD and sitemap.xml emit; a link-preview card per tab | "SEO for each page, the same as the site has it." Titles are absolute (Brand | …, 50–60 chars) and written for search; the plugin's fields are placed by hand because routes are fixed. |
| D10 | Share image seeded into Media on onInit (idempotent, never throws) | The editor sees the real card in the admin and can replace it, instead of a hint about a file in the code. |
| D11 | Routes stay static; every global's afterChange → revalidatePath("/", "layout") | Hard rule #15 holds; saves still show at once. |
| D12 | Migrations only, push: false everywhere; yarn migrate:direct over the session pooler | The same steps on every machine and the host. push against a live DB is how schemas get rewritten. |
| D13 | Storage plugin always registered (enabled from env, alwaysInsertFields), files linked from the public bucket URL | The schema — and so the migrations — never depend on whether a laptop has S3 keys. next/image and WebGL loaders fetch from Supabase's CDN, not through /api/media/file. |
| D14 | English admin, labels in the editor's words, sidebar groups in reading order, row labels from the row's own copy | An admin that reads like the site is one an owner uses. |
| D15 | Every legal section is one rich-text field (bold, links, lists, h3; table/button as blocks) | Asked for after a block-per-paragraph model: an editor could not bold a word or link inside a sentence. Start with rich text. |
| D16 | /admin and /api/ disallowed in robots.ts; /llms.txt from the SEO global; sitemap lastmod = the globals' updatedAt | SEO audit findings: a login screen in the crawl budget, request-time lastmod (ignored), no llms.txt. |
bash .claude/skills/payload-cms/scaffold.sh <kit…> copies a kit into the
project (never overwrites without --force) and prints every file — that list
is your checklist. Then grep -rn 'TODO\|PROJECT CONFIG' src/cms src/app and
fill each one.
| Kit | Files | Skill |
|---|---|---|
core | payload.config.ts, (payload)/* plumbing, (site)/layout.tsx, global-not-found.tsx, layouts/site-document.tsx, cms/{text-schema,content,globals,seo,seo-pages,seed}.ts, collections users/media, admin/share-preview.tsx, llms.txt/route.ts, scripts/migrate-direct.mjs | this one |
admin | (payload)/custom.css (the skin), admin/{graphics,welcome,row-label}.tsx | payload-admin |
analytics | cms/analytics.ts, collections/page-views.ts, api/track/route.ts, analytics-beacon.tsx, admin/analytics-*.tsx, admin/format.ts | payload-analytics |
guide | admin/guide-{content,body,view,nav}.tsx (+ yarn qa:shots) | payload-admin |
legal | cms/legal*.ts, views/legal/legal-rich-text.tsx — adapt-kit (--force) | references/legal-rich-text.md |
core + admin is the minimum (the (payload) layout imports the skin).
payload.config.ts marks each kit's lines — delete the ones not installed.
.nvmrc. On Node 20.17 Payload's
CLI (generate:importmap, generate:types, migrate:*) exits 0 and does
nothing — no error, no file. node -v before every CLI call.npm view @payloadcms/next@<ver> peerDependencies
against package.json's next. Pin all @payloadcms/* and payload to the
same exact version (no caret).supabase-db first if
not. Details: references/supabase-wiring.md.src/data/mocks/. Derivation (D2) only
sees what is there. Sweep src/views and src/components for literal copy
(headings, buttons, form errors, cookie banner, menu, emails in lib/, 404,
legal labels) and move it into mocks before installing — this is the step
the reference site had to redo twice. aria-labels may stay in code.Home page → numbered sections in scroll order, Site → header/footer/forms/
emails/cookie banner/SEO, Pages & documents → 404 + legal, Settings),
what stays in code, which lists are open and why, which kits. Get a yes.yarn add payload@<v> @payloadcms/next@<v> @payloadcms/db-postgres@<v> \
@payloadcms/richtext-lexical@<v> @payloadcms/storage-s3@<v> \
@payloadcms/plugin-seo@<v> @payloadcms/translations@<v> graphql sharp
bash .claude/skills/payload-cms/scaffold.sh core adminpackage.json: "type": "module"; scripts payload, generate:types,
generate:importmap, migrate, migrate:create,
"migrate:direct": "node scripts/migrate-direct.mjs".tsconfig.json paths: "@payload-config": ["./src/payload.config.ts"].next.config.ts: export default withPayload(nextConfig),
experimental.globalNotFound: true, and images.remotePatterns for
*.supabase.co + *.storage.supabase.co at /storage/v1/object/public/**.src/env.ts + .env.example — references/supabase-wiring.md §Env (all
optional strings, empty = unset, so a laptop without a DB still builds).git mv src/app/{page.tsx, error.tsx,not-found.tsx,privacy-policy,robot-view,…} → src/app/(site)/;
move the body of the old app/layout.tsx into src/layouts/site-document.tsx
(the kit's copy is the starter's layout as shipped — merge, don't overwrite)
and delete app/layout.tsx. api/, robots.ts, sitemap.ts, manifest.ts,
globals.css stay at app/. Point global-not-found.tsx at the real 404 view.verify.sh already skips src/payload-types.ts and src/app/(payload)/.In text-schema.ts and globals.ts (references/content-model.md has the
rules and the edge cases):
TEXT_GLOBALS — one entry per content object, slug / numbered label /
group / base / a one-line note (what the screen is + any rule before
Save). Group order = sidebar order.SKIP — every wiring key the mocks use. Read each mock; anything a reader
never sees as words.OPEN_LISTS / FIXED_LISTS — with the reason in a comment, from the
component's real constraints (a ring's angle, a marquee's fill, a headline's
line count).LABELS — every key whose humanised name an editor wouldn't understand.content.ts: const hero = await getText("hero") in
the view (Server Component), passed down exactly as the mock was. Nothing
below the view changes. Shared chrome (header, footer, cookie banner) is read
once in SiteDocument / the layout and passed as props.getText("emails") in the route; placeholders
are named ({name}, {company}) and the editor's text is escaped.seo-pages.ts: one entry per route + the 404 — titles 50–60 chars,
absolute, opening on the brand; descriptions 100–150; written for search.page.tsx
imports only @/views): the view exports
export const getHomeMetadata = () => getPageMetadata("home") and the page
does export const generateMetadata = getHomeMetadata. (site)/layout.tsx
uses getSiteMetadata(); SiteDocument renders getStructuredData().sitemap.ts → getSitemapPages() (noindex pages dropped, lastmod from the
content). robots.ts → disallow /admin and /api/ (keep /robot-view)./llms.txt from the kit. Details: references/seo-global.md.node -v # ≥ 22 — see Phase 0
yarn generate:importmap # silent no-op? → node node_modules/payload/bin.js generate:importmap --force
yarn generate:types
yarn migrate:direct create init # bare migrate:create does not load .env.local
yarn migrate:direct # apply over the session pooler
yarn dev # /admin → create the first userCommit src/payload-types.ts, src/migrations/*, importMap.js. A rename the
drizzle prompt would ask about cannot be answered non-interactively — split it
into drop + add migrations, or hand-write it and patch the .json snapshot
(references/supabase-wiring.md §Migrations).
payload-admin skill (§Skin)payload-analytics skillpayload-admin skill (§Guide) — last, it documents the final adminDATABASE_URL, yarn build && yarn start — the full
site renders from code, errors logged once per global.sitemap.xml, robots.txt, /llms.txt.yarn verify · yarn lint · yarn build · Lighthouse unchanged (yarn qa:lh)
— the CMS must not cost the site a point.cms-payload.md (what this project's admin holds: groups, open lists, kits,
where data lives), tech-stack.md + changelog.md (deps), environment- variables.md, an ADR for any departure from D1–D16.
.env.local overrides .env — a DATABASE_URL left in both takes .env.local's.%/$ in the URL: % throws "URI malformed"; $ is expanded
by @next/env and silently shortens it. Percent-encode, or letters+digits.ENOTFOUND on IPv4; use the session
pooler (5432) for DATABASE_URL_DIRECT.revalidatePath throws outside a request (seed, script) — the kit catches it."use client" module's exports are client references — a server component
can't call a helper exported from one (why admin/format.ts exists).any — verify.sh skips payload-types.ts./admin and re-check the skin.© textura-agency, Unlicense. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 81 other files (references) in .claude/skills/payload-cms of textura-agency/next16-claude-starter.
Open the folder on GitHubat commit 1170942
Payload Cms next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Payload Cms this skilltextura-agency/next16-claude-starter | 135 | — | ~3.7k | Automated safety check: Notes | Unlicense | |
| SEO GeoReScienceLab/opc-skills | 1.8k | 4 repos | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| GEO-First SEO Audit Toolzubair-trabzada/geo-seo-claude | 11k | — | ~2.8k | Automated safety check: Notes | MIT | |
| Marketing OsYuzzyuk/marketing-os | 540 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Geoliangdabiao/GEO-Content-Optimizer-Skill | 205 | 1 repos | ~2.3k | Automated safety check: Notes | MIT | |
| SEO and GEO Auditdageno-agents/seo-geo-audit | 176 | — | ~2k | Automated safety check: Pass | MIT |
ReScienceLab/opc-skills
SEO & GEO (Generative Engine Optimization) for websites. An agent skill from ReScienceLab/opc-skills.
zubair-trabzada/geo-seo-claude
Audits a website for AI search visibility across ChatGPT, Claude, Perplexity and Google AI Overviews while checking traditional SEO, schema and E-E-A-T content quality.
Yuzzyuk/marketing-os
A complete marketing department in one skill. An agent skill from Yuzzyuk/marketing-os.
liangdabiao/GEO-Content-Optimizer-Skill
完整的 GEO(生成式引擎优化)服务流水线:给一个产品官网 URL 和介绍材料, 做站点诊断与 AI 答案采样、生成带验收标准的执行工单、产出可直接部署的资产 (llms.txt / JSON-LD / 定义块 / FAQ / 内容大纲与初稿)、自动验收工单是否闭环、 并打包成可直接发给客户的交付物。可按周期复跑,做长期 GEO 运营与月报。
dageno-agents/seo-geo-audit
Runs one prioritized audit that combines technical SEO, content quality, trust signals, entity clarity and AI search readiness for a page, site or domain.
liangdabiao/GEO-Content-Optimizer-Skill
GEO (Generative Engine Optimization) 全流程优化工具。帮助品牌内容被 ChatGPT、Perplexity、Gemini 等 AI 搜索引擎引用。
textura-agency/next16-claude-starter
Make a site behave on real phones — the defects no Lighthouse run or headless scroll test sees, learned from site owners reviewing production sites on an iPhone.
textura-agency/next16-claude-starter
Get a page into Lighthouse's green zone on desktop and mobile, for people AND for the robot form crawlers get — build it, audit all four categories (Performance, Accessibility, Best Practices, SEO)…
textura-agency/next16-claude-starter
Make a page in this starter actually smooth — build it, scroll it in real Chrome on PC and on an emulated phone, fix what the measurement blames, re-measure to prove it.
textura-agency/next16-claude-starter
Make a Payload admin feel like part of the site and explain itself — the skin re-tinted from the site's own tokens (calm, light, no added motion), the site's wordmark and favicon, a dashboard…
textura-agency/next16-claude-starter
Answer Engine Optimisation — make the site citable by ChatGPT, Claude, Perplexity, Gemini and AI Overviews.
textura-agency/next16-claude-starter
Turn a Figma frame or node into components in this starter — the MCP call order, recording node IDs so later passes can re-fetch, downloading and verifying assets, mapping design values onto the…
Works with
Categories
Put a Payload CMS admin on a site built from this starter — every visible string and content photo editable, derived from the site's own content objects with the code's copy as the fallback, a…. Payload Cms is an agent skill from textura-agency/next16-claude-starter.txt, Supabase Postgres + Storage, migrations only, static routes revalidated on save.
Payload Cms fits situations like: the user asks to add a CMS / admin / Payload; make the content editable; let the client edit the text; SEO in the admin.
Run `npx skills add textura-agency/next16-claude-starter --skill payload-cms -a claude-code`. Or copy the skill folder (.claude/skills/payload-cms in textura-agency/next16-claude-starter) into .claude/skills/payload-cms in your project. Claude Code loads it when a task matches its description.
Run `npx skills add textura-agency/next16-claude-starter --skill payload-cms -a codex`. Or copy the skill folder (.claude/skills/payload-cms in textura-agency/next16-claude-starter) into .agents/skills/payload-cms in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add textura-agency/next16-claude-starter --skill payload-cms -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/payload-cms, .gemini/skills/payload-cms, .github/skills/payload-cms and .opencode/skills/payload-cms in your project.
Going by SKILL.md and its folder, Payload Cms needs a shell for the scripts in its folder and the command-line tools its instructions call (yarn, bash, node, npm and git). Our summary lists: A Bash shell.
SKILL.md contains no URLs. Its commands use npm and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Payload Cms is published under the Unlicense licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.8k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Payload Cms: SEO Geo (ReScienceLab/opc-skills, 1.8k stars), GEO-First SEO Audit Tool (zubair-trabzada/geo-seo-claude, 11k stars), Marketing Os (Yuzzyuk/marketing-os, 540 stars) and Geo (liangdabiao/GEO-Content-Optimizer-Skill, 205 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
textura-agency (a GitHub organization) maintains it in textura-agency/next16-claude-starter, which has 135 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on October 10, 2026.
Source: textura-agency/next16-claude-starter on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.