Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
233 commits
Select commit Hold shift + click to select a range
e6adcde
frontend(feat): add fumadocs blog with two launch posts
Ducksss Jun 19, 2026
3bea9a2
build(chore): bump dependency maintenance updates (#146)
Ducksss Jun 19, 2026
a2b282d
components(feat): add FAQ family (6 tailark-derived blocks) (#148)
Ducksss Jun 19, 2026
aff401d
docs(chore): remove alpha messaging
Ducksss Jun 19, 2026
8145330
docs(chore): merge alpha messaging cleanup into dev
Ducksss Jun 19, 2026
2646d4d
registry(feat): prep registry for shadcn directory submission (#150)
Ducksss Jun 19, 2026
5d546bc
docs(docs): polish README for community launch
Ducksss Jun 19, 2026
a06fbe4
fullstack(fix): clear release gate review findings
Ducksss Jun 19, 2026
62377c3
tests(fix): refresh linux mobile landing baseline
Ducksss Jun 19, 2026
7a85d5b
repo(chore): close CI visual-regression gap and clear review bloat/dr…
Ducksss Jun 19, 2026
58d40aa
cli(fix): unify fragment writer/verifier dedup matchers (#157)
Ducksss Jun 19, 2026
d7bffd8
cli(refactor): drop the redundant installedFiles install-state field …
Ducksss Jun 19, 2026
584e3f8
components(feat): add Comparator family (3 tailark-derived blocks) (#…
Ducksss Jun 19, 2026
8db410a
fix(comparator): canonical install URLs, icon a11y labels, and block …
Ducksss Jun 22, 2026
43394dd
repo(chore): review follow-ups — a11y gate, CLI hardening, CI trims (…
Ducksss Jun 22, 2026
33333a9
components(feat): add testimonials family (6 tailark-derived blocks) …
Ducksss Jun 22, 2026
65f6b4b
chore(seo): add Google Search Console verification file (#180)
Ducksss Jun 23, 2026
a6dc54c
catalog(chore): reorder /components to showcase best components first…
Ducksss Jun 23, 2026
b8b1027
repo(deps): bump actions/checkout to v7 and cross-env to v10 (#183)
Ducksss Jun 23, 2026
6f8a3d4
repo(deps): bump undici to 7.28.0 to clear 6 security advisories (#184)
Ducksss Jun 23, 2026
c637972
docs: add security reporting contact link to issue chooser (#185)
Ducksss Jun 23, 2026
7bbe19f
cli(feat): harden partial install recovery (#188)
Ducksss Jun 23, 2026
7d03f32
docs: clarify payload-components init behavior (#187)
Ducksss Jun 23, 2026
2dba313
test(chore): mint Linux visual baselines (components-visual) (#186)
Ducksss Jun 23, 2026
8b1d06c
frontend(feat): redesign logo as terminal prompt + block-cursor mark …
Ducksss Jun 23, 2026
08bdf1d
components(feat): add pricing family (5 tailark-derived blocks) (#191)
Ducksss Jun 23, 2026
fe8ee1d
test(chore): mint Linux visual baselines (components-visual frontend)…
github-actions[bot] Jun 23, 2026
d077d82
fix(pricing): review-nit polish — link validation, decorative icons, …
Ducksss Jun 23, 2026
2880f8e
PinZheng(config): harden sitemap crawling (#198)
Ducksss Jun 23, 2026
8e895db
docs(roadmap): correct catalog counts and drop dead link (#196)
highoncomputers Jun 23, 2026
e9b164f
docs(operations): replace stale kit language in runbook (#197)
highoncomputers Jun 23, 2026
4ae78ed
frontend(feat): graphics-forward landing redesign — node maps, merged…
Ducksss Jun 24, 2026
ed84fcf
test(chore): mint Linux visual baselines (frontend) (#210)
github-actions[bot] Jun 24, 2026
baf46a1
docs(roadmap): link the live issue queue and mark exploratory items (…
Ducksss Jun 24, 2026
bad62e1
frontend(feat): landing motion — auto-replaying hero + hover-lift mic…
Ducksss Jun 24, 2026
d159b3b
frontend(feat): scroll parallax on decorative layers (#212)
Ducksss Jun 24, 2026
e1924ae
feat(about): explain what Payload Components is, the extension, and h…
Ducksss Jun 25, 2026
7056d5f
seo: improve homepage search snippets (#204)
tin-computer[bot] Jun 25, 2026
c32afa2
analytics: send product events to managed posthog (#203)
tin-computer[bot] Jun 29, 2026
502d8f0
build(deps): bump semver from 7.7.4 to 7.8.5 (#225)
dependabot[bot] Jun 29, 2026
3b5dbaf
build(deps-dev): bump tailwind-merge from 3.5.0 to 3.6.0 (#224)
dependabot[bot] Jun 29, 2026
d5469b9
build(deps-dev): bump @axe-core/playwright from 4.11.3 to 4.12.1 (#223)
dependabot[bot] Jun 29, 2026
2fa97a0
build(deps-dev): bump the next-react group with 3 updates (#221)
dependabot[bot] Jun 29, 2026
ff32e44
docs: canonicalize component install URLs (#220)
tin-computer[bot] Jun 29, 2026
b0b8b9b
analytics: gate posthog capture on env key and prod host (#226)
Ducksss Jun 29, 2026
884e6a7
docs(feat): add "Use your first block" walkthrough (#151)
Ducksss Jun 29, 2026
a8fa774
site: carry catalog contribution fixes (#202)
tin-computer[bot] Jun 30, 2026
c8d9965
feat(site): interactive React Flow wiring diagram on the install boun…
Ducksss Jul 1, 2026
5e71bf0
analytics: dedupe page views and persist the distinct id (#231)
Ducksss Jul 1, 2026
495d153
test(e2e): stop the route-walk crashing dev by blocking preview ifram…
Ducksss Jul 8, 2026
e181bf2
docs(provenance): attribute tailark/blocks-derived blocks + add prove…
Ducksss Jul 8, 2026
6041a0b
feat(hero): add shine + star-twinkle effect to the GitHub CTA (#250)
Ducksss Jul 8, 2026
857ca9c
fullstack(fix): harden dev release path (#255)
Ducksss Jul 11, 2026
abc64e8
frontend(fix): tokenize hero CTA effect colors (#262)
Ducksss Jul 13, 2026
1df070b
fullstack(fix): clear promotion review findings (#264)
Ducksss Jul 13, 2026
f9d09be
fullstack(fix): harden promotion release contracts (#266)
Ducksss Jul 13, 2026
29b3f1d
fullstack(fix): resolve definitive promotion review (#268)
Ducksss Jul 13, 2026
3f739e1
fullstack(fix): close final production review gaps (#270)
Ducksss Jul 13, 2026
6e84171
docs(fix): document complete PR gate (#272)
Ducksss Jul 13, 2026
9801d8e
docs(chore): clarify focused validation commands (#240)
tin-computer[bot] Jul 14, 2026
ad928fb
build(chore): refresh development dependencies (#251)
Ducksss Jul 14, 2026
db45eed
docs(docs): define landing hero compression
Ducksss Jul 13, 2026
07c0462
docs(docs): plan landing hero compression
Ducksss Jul 13, 2026
ab79327
frontend(refactor): focus landing hero actions
Ducksss Jul 13, 2026
cfb425a
frontend(style): compress landing hero composition
Ducksss Jul 13, 2026
db421cc
frontend(fix): keep replay control inside proof frame
Ducksss Jul 13, 2026
2357d61
tests(style): refresh compressed landing hero baselines
Ducksss Jul 13, 2026
7565600
PinZheng(frontend): focus install CTA and clarify audience (#275)
tin-computer[bot] Jul 16, 2026
d89f01a
docs: improve canonical shadcn comparison (#280)
tin-computer[bot] Jul 19, 2026
dbca3b7
frontend(content): link setup FAQs to canonical guides
tin-computer[bot] Jul 19, 2026
f42874c
fullstack(feat): add curated Tailark block collection
Ducksss Jul 19, 2026
33cd2d5
docs(docs): add a Payload block troubleshooting guide
tin-computer[bot] Jul 19, 2026
88f2485
build(chore): optimize tracked image assets
imgbot[bot] Jul 19, 2026
f8ce974
build(deps-dev): bump lucide-react to 1.24.0
dependabot[bot] Jul 19, 2026
1dea6c8
frontend(fix): stop registry JSON route prefetch
Ducksss Jul 19, 2026
1a63928
fullstack(fix): resolve promotion review findings (#286)
Ducksss Jul 19, 2026
ee5e2b2
docs: strengthen installation guide search fit (#294)
tin-computer[bot] Jul 20, 2026
c32c48b
build(deps): refresh weekly tooling dependencies (#290)
dependabot[bot] Jul 20, 2026
0d14f52
docs: add Payload 3 generated-types error guide (#293)
tin-computer[bot] Jul 20, 2026
9a62a3c
cli(feat): add crash-safe demo seeding (#147)
Ducksss Jul 20, 2026
8381ef7
seo: strengthen component catalog search fit (#295)
tin-computer[bot] Jul 20, 2026
d30a86e
templates(feat): full-site template showcases — concept preview phase…
Ducksss Jul 22, 2026
2c92805
seo: concentrate component searches on the catalog (#305)
tin-computer[bot] Jul 22, 2026
bdaae11
docs: add Payload blocks implementation guide (#302)
tin-computer[bot] Jul 22, 2026
f1b434f
build(deps): bump ajv from 8.18.0 to 8.20.0 (#299)
dependabot[bot] Jul 22, 2026
10789f9
build(deps-dev): bump @types/node from 22.19.9 to 26.1.1 (#298)
dependabot[bot] Jul 22, 2026
ad8b1d4
fix(site): update FAQ component count (#308)
Ducksss Jul 22, 2026
c5799b6
build(deps-dev): bump the documentation-tooling group across 1 direct…
dependabot[bot] Jul 22, 2026
9e3b6ec
templates(feat): motion showcase — hero-aurora + hero-kinetic, stunni…
Ducksss Jul 22, 2026
c1ac6b6
feat(cli): preview component installs with --dry-run (#313)
tin-computer[bot] Jul 23, 2026
71d0b9b
Target Payload CMS template searches (#312)
tin-computer[bot] Jul 23, 2026
f53a8ea
docs: publish anonymous analytics contract (#315)
tin-computer[bot] Jul 23, 2026
cd2bf11
docs: add component proposal issue form (#316)
tin-computer[bot] Jul 23, 2026
2239cf4
test(ci): cover every renderable registry block (#318)
Ducksss Jul 23, 2026
78488d9
chore(deps): bump fumadocs-core and fumadocs-ui to 16.12.0 (#320)
Ducksss Jul 23, 2026
8c92a6f
build(deps): patch brace-expansion DoS (GHSA-3jxr-9vmj-r5cp) (#322)
Ducksss Jul 23, 2026
c14a6f5
release: bump version to 1.2.0 (#328)
Ducksss Jul 24, 2026
c673c24
feat(analytics): track installation guide copies (#326)
tin-computer[bot] Jul 24, 2026
a98ad26
build(deps): bump next 16.2.10 → 16.2.11 (security) (#331)
Ducksss Jul 24, 2026
6462244
fullstack(feat): add AI discovery readiness (#304)
Ducksss Jul 24, 2026
3a4eaa1
frontend(feat): publish community field journal
Ducksss Jul 24, 2026
7d5e0db
PinZheng(release): synchronize main for promotion
Ducksss Jul 24, 2026
b24a373
seo: route Payload block intent to guide (#336)
tin-computer[bot] Jul 25, 2026
2e2138e
docs: sync component inventory with registry and document packed CLI …
Ducksss Jul 25, 2026
37ed728
seo: turn top component pages into attributed install entries (#338)
Ducksss Jul 25, 2026
8790418
templates(feat): expand the gallery to six concepts + category filter…
Ducksss Jul 25, 2026
33f1331
Link block articles to implementation guide (#347)
tin-computer[bot] Jul 27, 2026
4f6a5c8
analytics: stabilize core guide GitHub attribution (#343)
tin-computer[bot] Jul 27, 2026
423c149
docs: add dry-run proof to blocks guide (#345)
tin-computer[bot] Jul 27, 2026
c9cdcc8
Make the first-block guide installable (#339)
tin-computer[bot] Jul 27, 2026
35e92c6
blog: turn the index into a Payload guide gateway (#348)
Ducksss Jul 27, 2026
116d924
templates: add block install actions to template recipes (#349)
Ducksss Jul 27, 2026
9ed71ef
templates(feat): motion on the gallery surfaces + varied inner-page h…
Ducksss Jul 27, 2026
705712b
release: bump version to 1.2.1 (#356)
Ducksss Jul 27, 2026
8a68f07
deps: clear five stale security overrides (#357)
Ducksss Jul 27, 2026
49738d7
security(fix): PR-audit remediations — GHA input hardening, analytics…
Ducksss Jul 27, 2026
4665901
seo: drop the duplicate blog link from llms.txt primary links (#350)
Ducksss Jul 27, 2026
454322c
components(feat): give stats-proof and content-quote an optional logo…
Ducksss Jul 27, 2026
cb4acc6
test: fix and future-proof the darwin blog-index baselines (#363)
Ducksss Jul 27, 2026
e8c672f
docs(feat): announce the templates gallery (#374)
Ducksss Jul 27, 2026
4ab2971
privacy(feat): gate all third-party analytics behind explicit consent…
Ducksss Jul 27, 2026
d3c637e
build(deps-dev): bump the next-react group with 4 updates (#364)
dependabot[bot] Jul 27, 2026
62ceef6
security(deps): bump postcss to 8.5.18 on dev (#377)
Ducksss Jul 27, 2026
0aa3a08
test,docs: apply CodeRabbit findings from the promote review (#380)
Ducksss Jul 27, 2026
b8ef623
repo(chore): close remaining promotion-review findings (#378)
Ducksss Jul 27, 2026
aea78cc
feat(landing): component wall hero + motion.dev choreography (#370)
Ducksss Jul 27, 2026
b5e7196
templates(feat): four more verticals — nonprofit, education, healthca…
Ducksss Jul 27, 2026
d646903
security(fix): decode XML entities in a single pass (CodeQL js/double…
Ducksss Jul 27, 2026
ab7280b
fix(landing): stop the wall guillotining blocks on small screens (#392)
Ducksss Jul 27, 2026
3c8c770
test(templates): axe every concept, and measure gradient plates in pi…
Ducksss Jul 27, 2026
d5f9918
fix(templates): keep the preview-exit pill out of the mobile content …
Ducksss Jul 28, 2026
5f1376f
fix(landing): close the wall's tablet overflow, and assert the fit (#…
Ducksss Jul 28, 2026
5d45658
privacy(feat): split the consent gate by what each provider stores (#…
Ducksss Jul 28, 2026
0cab419
fix(templates): reserve a strip so the exit pill never covers a conce…
Ducksss Jul 28, 2026
5329f70
test(a11y): wait for the consent banner so axe actually checks it (#405)
Ducksss Jul 28, 2026
354ac46
build(chore): give the repo a prettier config that matches its own st…
Ducksss Jul 29, 2026
566d4cd
style(repo): format the tree with prettier and gate it (#408)
Ducksss Jul 29, 2026
0d236eb
build(deps-dev): bump lucide-react from 1.25.0 to 1.27.0 (#367)
dependabot[bot] Jul 29, 2026
84c2589
build(deps-dev): bump the documentation-tooling group across 1 direct…
dependabot[bot] Jul 29, 2026
e385318
build(tsconfig): drop the redundant react types path that blocks vite…
Ducksss Jul 29, 2026
b830c00
build(deps-dev): bump the test-tooling group across 1 directory with …
dependabot[bot] Jul 29, 2026
aa3b6a9
deps: bump shadcn to 4.15.0 and single-source the CLI pin (#401)
Ducksss Jul 29, 2026
c09c66c
fix(deps): unstick the brace-expansion override off a now-vulnerable …
Ducksss Jul 29, 2026
e294799
privacy(fix): delete GA's cookies when consent is withdrawn (#415)
Ducksss Jul 29, 2026
402a6c3
test,docs: close the still-open CodeRabbit findings from the last fiv…
Ducksss Jul 29, 2026
60939c7
test(landing,int): tighten the wall ceiling and stop pinning prettier…
Ducksss Jul 30, 2026
2b386a9
privacy(fix): stop the consent banner overstating what declining does…
Ducksss Jul 30, 2026
1fb8e6e
brand(feat): replace the logomark with two keyed blocks (#420)
Ducksss Jul 31, 2026
3bffaec
fix(privacy,test): expire every parent cookie domain, correct two sta…
Ducksss Aug 2, 2026
e16fd6e
docs(readme): add a community examples showcase section (#419)
Ducksss Aug 2, 2026
e04d513
feat(analytics): measure organic visitors (#406)
tin-computer[bot] Aug 2, 2026
ac20166
docs(seo): answer Payload CMS blocks directly (#395)
tin-computer[bot] Aug 2, 2026
1fb89d1
repo(chore): scope ImgBot away from hand-authored art and visual base…
Ducksss Aug 3, 2026
becbed8
fix(landing): stop WebKit inflating the wall's type into overlapping …
Ducksss Aug 4, 2026
1cd66f7
docs(seo): add Payload import-map reference (#427)
tin-computer[bot] Aug 4, 2026
856bd8e
docs: link technical articles to installation (#429)
tin-computer[bot] Aug 4, 2026
9607856
feat(analytics): mark controlled action events (#428)
tin-computer[bot] Aug 4, 2026
706712a
build(deps-dev): bump @types/react-dom from 19.2.3 to 19.2.4 (#435)
dependabot[bot] Aug 4, 2026
e385919
build(deps-dev): bump motion from 12.42.2 to 12.43.0 (#434)
dependabot[bot] Aug 4, 2026
a159f13
build(deps-dev): bump shadcn from 4.15.0 to 4.16.0 (#433)
dependabot[bot] Aug 4, 2026
09d54d9
build(deps-dev): bump the test-tooling group across 1 directory with …
dependabot[bot] Aug 4, 2026
af72137
build(deps-dev): bump the documentation-tooling group across 1 direct…
dependabot[bot] Aug 4, 2026
d717a25
seo(catalog): answer the Payload Components query (#422)
tin-computer[bot] Aug 6, 2026
b6ceb5d
docs(seo): add safe Payload CMS seed guide (#438)
tin-computer[bot] Aug 6, 2026
0ff2c62
docs(seo): answer Payload CMS CLI searches (#440)
tin-computer[bot] Aug 6, 2026
b8b1209
security(deps): unstick the fast-uri override off a now-vulnerable pi…
Ducksss Aug 6, 2026
2f80da7
feat(cli): install lifecycle, templates, localization, MCP, and a cat…
Ducksss Aug 9, 2026
19bcbb4
feat(cli): doctor --json, changelogs, a scaffolder, third-party regis…
Ducksss Aug 9, 2026
20d59ba
feat(cli): ship a starter base for bare Payload apps (#448)
Ducksss Aug 9, 2026
63a195f
chore(release): 1.3.0 (#449)
Ducksss Aug 9, 2026
79255f9
test(e2e): catch WebKit-only type inflation in the component wall (#436)
Ducksss Aug 9, 2026
77f28ea
security(deps): unstick the js-yaml and postcss overrides off vulnera…
Ducksss Aug 9, 2026
4c33aec
fix(cli): make the starter base actually compile, and prove it with a…
Ducksss Aug 9, 2026
ededcde
chore(release): 1.3.1 (#459)
Ducksss Aug 9, 2026
487d90b
test(cli): compile-check the shipped target source in the fast gate (…
Ducksss Aug 9, 2026
7138a07
docs: record the shadcn directory listing as landed, not pending (#462)
Ducksss Aug 9, 2026
7bda120
feat(components): add the Footer family and three Stats variants (#452)
Ducksss Aug 13, 2026
cd28b43
fix(cli): make fragment anchor failures carry the repair (#457)
Ducksss Aug 13, 2026
69dafe4
tests: split the route overflow e2e matrix to avoid suite-level t... …
Ducksss Aug 13, 2026
104b823
docs: give new contributors a first-issue path and focused checks (#453)
Ducksss Aug 13, 2026
d4f2096
seo(home): name the brand in the homepage title (#439)
tin-computer[bot] Aug 13, 2026
eaaecf5
build(deps-dev): bump the next-react group with 2 updates (#465)
dependabot[bot] Aug 13, 2026
6c20a8f
build(deps-dev): bump dev tooling in one lockfile pass (#471)
Ducksss Aug 13, 2026
1de9cbf
chore(release): 1.4.0 (#472)
Ducksss Aug 13, 2026
84eadc6
docs(agents): put closing keywords in the promote PR body (#475)
Ducksss Aug 15, 2026
093eb59
fix(cli): harden install lifecycle ownership (#491)
Ducksss Aug 17, 2026
b8836c7
feat(templates): three new concepts — restaurant, real estate, and mu…
Ducksss Aug 27, 2026
3ed06db
feat(templates): two new concepts — B2B marketplace and civic council…
Ducksss Aug 27, 2026
b5b516b
feat(cli): add payload-components localize for Payload internationali…
Ducksss Aug 28, 2026
c4ad2d8
docs(rfc): installable templates — seed the curated concept content (…
Ducksss Aug 28, 2026
355f9e7
build(deps): next 16.3.0 -> 16.3.3 — fixes the turbopack shared-runti…
Ducksss Aug 28, 2026
fd20fae
seo: link entry pages to Payload blocks guide (#490)
tin-computer[bot] Aug 29, 2026
45600ee
analytics: preserve organic entry on actions (#492)
tin-computer[bot] Aug 29, 2026
c844bda
build(deps-dev): bump shadcn from 4.16.2 to 4.18.0 (#486)
dependabot[bot] Aug 29, 2026
947fed3
Trim blog index density (#495)
tin-computer[bot] Aug 29, 2026
4d7628c
build(deps-dev): bump @xyflow/react from 12.11.2 to 12.11.3 (#487)
dependabot[bot] Aug 29, 2026
068231e
feat(cli): localize a whole template, and stop format:check failing o…
Ducksss Aug 29, 2026
ac0e733
ci: require closing keywords in a promote PR body (#500)
Ducksss Aug 30, 2026
0419d71
docs: answer Payload CMS CLI searches (#493)
tin-computer[bot] Aug 30, 2026
d15af85
build(deps-dev): bump lucide-react from 1.27.0 to 1.31.0 (#485)
dependabot[bot] Aug 30, 2026
0bd5c21
docs: add Payload CMS npm setup guide (#488)
tin-computer[bot] Aug 30, 2026
83a0341
Trim templates gallery density (#494)
tin-computer[bot] Aug 30, 2026
31d7ec0
feat: catalog brand/radius preview control + three new components (#481)
Ducksss Aug 30, 2026
33dbc25
docs: add Payload configuration guide (#489)
tin-computer[bot] Aug 30, 2026
a705b32
feat(registry): add hero-split page block (#506)
Ducksss Aug 30, 2026
e789a80
docs: fix stale comments left by #481 (#515)
Ducksss Aug 30, 2026
e6c7acf
docs: install cross-env before the scripts that use it (#514)
Ducksss Aug 31, 2026
cb1758d
feat(blocks): make the shipped blocks mirror under dir="rtl" (#513)
Ducksss Aug 31, 2026
1104cd4
cli(fix): harden localization lifecycle
Ducksss Aug 31, 2026
6fd8206
test(e2e): sweep the whole catalog for RTL layout breakage (#516)
Ducksss Aug 31, 2026
cb9f9e0
test(e2e): replace the RTL sweep that cannot fail (#519)
Ducksss Sep 1, 2026
281f1a2
fix: deep-review batch — stale override, focus visibility, AI-surface…
Ducksss Sep 1, 2026
6c85282
test(e2e): drop the dead slug reader left by #519 (#527)
Ducksss Sep 1, 2026
7734ea5
release: 1.5.0 (#530)
Ducksss Sep 1, 2026
97e5b45
test(e2e): make the horizontal-overflow assertions able to fail (#531)
Ducksss Sep 1, 2026
3d2a9fd
fix(site): keep .container on one grid across both Tailwind builds (#…
Ducksss Sep 1, 2026
b2988c6
feat(site): add English and Chinese internationalization (#529)
Ducksss Sep 1, 2026
60efacd
fix(i18n): localize the mobile GitHub link's accessible name (#535)
Ducksss Sep 1, 2026
1538eef
ci(security): pin publish setup action (#545)
Ducksss Sep 1, 2026
0ba8247
test(e2e): cover Chinese mobile GitHub accessible name (#548)
Ducksss Sep 1, 2026
3be5a40
fix: address repository audit findings (#549)
Ducksss Sep 2, 2026
464f036
Harden component lifecycle and architecture boundaries
Ducksss Sep 3, 2026
8dc23df
Localize the public site across 22 locales
Ducksss Sep 3, 2026
a4e3d00
Replace premium teasers with a public editorial roadmap
Ducksss Sep 3, 2026
aced6d3
chore: re-anchor dev to main promotion history
Ducksss Sep 3, 2026
7b82a55
fix(i18n): preserve fallback content semantics
Ducksss Sep 3, 2026
96c3d02
docs: add Payload CMS UI components guide (#551)
tin-computer[bot] Sep 5, 2026
a7a9d0c
Integrate release fixes, new components, and English-only docs (#558)
Ducksss Sep 6, 2026
6acbfef
release: prepare CLI 1.6.0 and verify new packaged installs (#568)
Ducksss Sep 7, 2026
eaa9281
test: stabilize release readiness checks (#566)
tin-computer[bot] Sep 7, 2026
c53d598
seo: derive sitemap dates from source history (#565)
tin-computer[bot] Sep 7, 2026
07259cd
cli(fix): harden installer recovery and enforce source versions (#570)
Ducksss Sep 7, 2026
08fc9c6
components(feat): add newsletter callout (#564)
shashank-sn Sep 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
102 changes: 102 additions & 0 deletions .github/workflows/crowdin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: Crowdin translations

on:
# Paused until a no-cost automated translation workflow is verified.
# Source edits must not create a manual translation maintenance queue.
workflow_dispatch:
inputs:
import_existing:
description: 'One-time import of existing repository translations as unapproved suggestions'
type: boolean
default: false

permissions:
contents: write
pull-requests: write
actions: write

concurrency:
group: crowdin-translations
cancel-in-progress: false

jobs:
synchronize:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
with:
version: 10.24.0

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 22
cache: pnpm

- run: pnpm install --frozen-lockfile

- name: Validate and preserve current translations
run: |
pnpm i18n:check
mkdir -p "$RUNNER_TEMP/crowdin-baseline"
cp -R messages "$RUNNER_TEMP/crowdin-baseline/messages"

- name: Upload English source and optionally bootstrap existing translations
uses: crowdin/github-action@8f01d54f70f1713ee3f09d82c2bbb2daeac28689 # v2
with:
user: auto
upload_sources: true
upload_translations: ${{ inputs.import_existing || false }}
auto_approve_imported: false
import_eq_suggestions: false
download_translations: false
push_translations: false
create_pull_request: false
env:
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}

- name: Download translated strings only
uses: crowdin/github-action@8f01d54f70f1713ee3f09d82c2bbb2daeac28689 # v2
with:
user: auto
upload_sources: false
upload_translations: false
download_translations: true
skip_untranslated_strings: true
push_translations: false
create_pull_request: false
env:
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}

- name: Preserve absent translations and reject invalid exports
run: |
pnpm exec tsx tools/i18n/sync-crowdin.ts "$RUNNER_TEMP/crowdin-baseline"
pnpm exec prettier --write messages/locales
pnpm i18n:check

- name: Save validated export for inspection
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: crowdin-validated-export
path: messages/locales/*.json
retention-days: 7

- name: Open a reviewable translation PR
if: github.ref == 'refs/heads/dev'
id: pr
env:
GH_TOKEN: ${{ github.token }}
run: bash tools/i18n/publish-crowdin.sh

# GITHUB_TOKEN-created PRs do not emit another pull_request workflow run.
# Dispatch the real release and smoke gates on the translation branch.
- name: Run all PR gates on the translation commit
if: steps.pr.outputs.pr_number
env:
GH_TOKEN: ${{ github.token }}
run: gh workflow run registry-verification.yml --ref codex/crowdin-translations
12 changes: 8 additions & 4 deletions .github/workflows/package-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,28 @@ jobs:
steps:
# The publish job holds NPM_TOKEN, so third-party actions are pinned to a
# reviewed commit and admitted by that exact ref in the Actions allowlist.
- uses: actions/checkout@v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
persist-credentials: false
ref: main

- name: Fetch candidate release tag
env:
GH_TOKEN: ${{ github.token }}
RELEASE_TAG: ${{ github.event.release.tag_name }}
run: |
git fetch --force --no-tags origin \
git -c credential.helper= \
-c credential.helper="!f() { echo username=x-access-token; echo \"password=\$GH_TOKEN\"; }; f" \
fetch --force --no-tags origin \
main:refs/remotes/origin/main \
"refs/tags/${RELEASE_TAG}:refs/tags/${RELEASE_TAG}"

- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
with:
version: 10.24.0

- uses: actions/setup-node@v7
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 22
cache: pnpm
Expand Down Expand Up @@ -94,7 +98,7 @@ jobs:
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

- uses: actions/setup-node@v7
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 22
registry-url: https://npm.pkg.github.com
Expand Down
112 changes: 83 additions & 29 deletions .github/workflows/registry-verification.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,50 @@ on:

env:
NEXT_TELEMETRY_DISABLED: '1'
I18N_BASE_REF: ${{ github.event.pull_request.base.sha || '' }}

concurrency:
group: registry-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

permissions:
contents: read

jobs:
changes:
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
consumer: ${{ steps.classify.outputs.consumer || 'true' }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Classify pull request changes
id: classify
if: github.event_name == 'pull_request'
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
git fetch --no-tags --depth=1 origin "$BASE_SHA" "$HEAD_SHA"
node tools/ci/classify-changes.mjs

release-gate:
if: github.event_name == 'pull_request' || github.event_name == 'push'
if: github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
fetch-depth: 0

- uses: pnpm/action-setup@v6
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
with:
version: 10.24.0

- uses: actions/setup-node@v7
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 22
cache: pnpm
Expand All @@ -54,11 +81,11 @@ jobs:
shell: bash
run: |
set -o pipefail
pnpm test:release 2>&1 | tee payload-components-release.log
pnpm test:ci 2>&1 | tee payload-components-release.log

- name: Upload failure artifacts
if: failure()
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: release-gate-artifacts
path: |
Expand All @@ -68,17 +95,21 @@ jobs:
if-no-files-found: ignore

node-20-compat:
if: github.event_name == 'pull_request' || github.event_name == 'push'
needs: changes
if: needs.changes.outputs.consumer == 'true' && (github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'workflow_dispatch')
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
fetch-depth: 0

- uses: pnpm/action-setup@v6
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
with:
version: 10.24.0

- uses: actions/setup-node@v7
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 20.19.0
cache: pnpm
Expand All @@ -100,17 +131,20 @@ jobs:
quick-checks:
# Fast-fail lint + type-check so common errors surface in ~2 min instead of
# waiting on the full release gate (which first installs a browser for e2e).
if: github.event_name == 'pull_request' || github.event_name == 'push'
if: github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
fetch-depth: 0

- uses: pnpm/action-setup@v6
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
with:
version: 10.24.0

- uses: actions/setup-node@v7
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 22
cache: pnpm
Expand All @@ -126,10 +160,11 @@ jobs:
pnpm exec tsc --noEmit

pr-gate:
if: ${{ always() && (github.event_name == 'pull_request' || github.event_name == 'push') }}
if: ${{ always() && (github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'workflow_dispatch') }}
runs-on: ubuntu-latest
timeout-minutes: 5
needs:
- changes
- quick-checks
- release-gate
- node-20-compat
Expand All @@ -138,22 +173,35 @@ jobs:
- name: Require every release and smoke gate
shell: bash
run: |
if [[ "${{ needs.quick-checks.result }}" != "success" || \
"${{ needs.release-gate.result }}" != "success" || \
"${{ needs.node-20-compat.result }}" != "success" || \
"${{ needs.fresh-payload-smoke.result }}" != "success" ]]; then
echo "One or more required release gates failed or were skipped."
if [[ "${{ needs.changes.result }}" != "success" ||
"${{ needs.quick-checks.result }}" != "success" ||
"${{ needs.release-gate.result }}" != "success" ]]; then
echo "Required checks failed, were cancelled, or were skipped."
exit 1
fi
echo "All release gates and fresh-consumer shards passed."
expected=success
if [[ "${{ needs.changes.outputs.consumer }}" == "false" ]]; then expected=skipped; fi
if [[ "${{ needs.node-20-compat.result }}" != "$expected" ||
"${{ needs.fresh-payload-smoke.result }}" != "$expected" ]]; then
echo "Consumer checks did not reach the expected result: $expected"
exit 1
fi
echo "All required checks passed."

fresh-payload-smoke:
needs: changes
if: needs.changes.outputs.consumer == 'true'
runs-on: ubuntu-latest
timeout-minutes: 90
strategy:
fail-fast: false
matrix:
shard-index: [0, 1, 2, 3]
include:
- { scenario: bare, shard-index: 0 }
- { scenario: website, shard-index: 0 }
- { scenario: website, shard-index: 1 }
- { scenario: website, shard-index: 2 }
- { scenario: website, shard-index: 3 }
services:
postgres:
image: postgres:16
Expand All @@ -169,6 +217,7 @@ jobs:
--health-timeout 5s
--health-retries 5
env:
SMOKE_PAYLOAD_VERSION: ${{ github.event_name == 'schedule' && 'latest' || '3.88.0' }}
CRON_SECRET: ci-cron-secret
DATABASE_URL: postgresql://postgres:postgres@127.0.0.1:5432/payload_components
NEXT_PUBLIC_SERVER_URL: http://localhost:3000
Expand All @@ -177,13 +226,16 @@ jobs:
PREVIEW_SECRET: ci-preview-secret
SMOKE_REGISTRY_URL: ${{ github.event.inputs.registry_url || '' }}
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
fetch-depth: 0

- uses: pnpm/action-setup@v6
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
with:
version: 10.24.0

- uses: actions/setup-node@v7
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 22
cache: pnpm
Expand All @@ -197,16 +249,18 @@ jobs:
run: |
set -o pipefail
if [ -n "$SMOKE_REGISTRY_URL" ]; then
pnpm test:fresh -- --registry-url "$SMOKE_REGISTRY_URL" --shard-index "${{ matrix.shard-index }}" --keep-temp 2>&1 | tee payload-components-fresh.log
pnpm test:fresh -- --scenario "${{ matrix.scenario }}" --registry-url "$SMOKE_REGISTRY_URL" --shard-index "${{ matrix.shard-index }}" --keep-temp 2>&1 | tee payload-components-fresh.log
elif [ "${{ github.event_name }}" = "schedule" ]; then
pnpm test:fresh -- --scenario "${{ matrix.scenario }}" --registry-url 'https://www.payload-components.xyz/r/{name}.json' --shard-index "${{ matrix.shard-index }}" --keep-temp 2>&1 | tee payload-components-fresh.log
else
pnpm test:fresh -- --shard-index "${{ matrix.shard-index }}" --keep-temp 2>&1 | tee payload-components-fresh.log
pnpm test:fresh -- --scenario "${{ matrix.scenario }}" --shard-index "${{ matrix.shard-index }}" --keep-temp 2>&1 | tee payload-components-fresh.log
fi

- name: Upload failure artifacts
if: failure()
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: fresh-payload-artifacts-${{ matrix.shard-index }}
name: fresh-payload-artifacts-${{ matrix.scenario }}-${{ matrix.shard-index }}
path: |
payload-components-fresh.log
playwright-report
Expand Down
Loading
Loading