Skip to content

[ImgBot] Optimize images#216

Open
imgbot[bot] wants to merge 8 commits into
devfrom
imgbot
Open

[ImgBot] Optimize images#216
imgbot[bot] wants to merge 8 commits into
devfrom
imgbot

Conversation

@imgbot

@imgbot imgbot Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Beep boop. Your images are optimized!

Your image file size has been reduced by 15% 🎉

Details
File Before After Percent reduction
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-embed-basic-chromium-linux.png 122.17kb 62.87kb 48.54%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-embed-basic-chromium-darwin.png 59.14kb 40.34kb 31.79%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-columns-chromium-linux.png 57.93kb 42.91kb 25.92%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-call-to-action-centered-chromium-linux.png 34.37kb 25.68kb 25.29%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-community-chromium-linux.png 34.62kb 25.99kb 24.92%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-quote-chromium-linux.png 37.58kb 28.49kb 24.20%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-hero-basic-chromium-linux.png 52.46kb 39.88kb 23.98%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-stats-chromium-linux.png 61.33kb 46.63kb 23.96%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-spotlight-chromium-linux.png 45.82kb 34.88kb 23.88%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-split-chromium-linux.png 69.79kb 53.19kb 23.79%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-list-chromium-linux.png 51.03kb 38.90kb 23.76%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-call-to-action-signup-chromium-linux.png 29.77kb 22.79kb 23.44%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-enterprise-chromium-linux.png 61.63kb 47.32kb 23.22%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-feature-media-chromium-linux.png 52.81kb 40.64kb 23.04%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-grid-basic-chromium-linux.png 54.07kb 41.66kb 22.95%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-list-columns-chromium-linux.png 37.29kb 28.83kb 22.69%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-icons-chromium-linux.png 74.71kb 57.88kb 22.52%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-grid-chromium-linux.png 20.83kb 16.15kb 22.44%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-accordion-chromium-linux.png 73.94kb 57.38kb 22.40%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-call-to-action-boxed-chromium-linux.png 34.67kb 26.91kb 22.37%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-split-chromium-linux.png 68.90kb 53.51kb 22.34%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-inline-wrap-chromium-linux.png 17.86kb 13.88kb 22.31%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-inline-chromium-linux.png 18.03kb 14.06kb 22.04%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-steps-chromium-linux.png 51.83kb 40.50kb 21.87%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-grid-chromium-linux.png 77.68kb 60.74kb 21.80%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-feature-split-chromium-linux.png 49.53kb 38.83kb 21.60%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-wall-chromium-linux.png 111.77kb 87.67kb 21.56%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-grouped-chromium-linux.png 86.07kb 67.77kb 21.26%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-card-chromium-linux.png 67.92kb 53.54kb 21.17%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-list-icons-chromium-linux.png 48.56kb 38.28kb 21.17%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-grid-chromium-linux.png 55.85kb 44.10kb 21.03%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-split-chromium-linux.png 65.37kb 51.67kb 20.95%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-bento-chromium-linux.png 69.37kb 54.98kb 20.74%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-hover-chromium-linux.png 23.46kb 18.61kb 20.69%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-quote-chromium-linux.png 48.37kb 38.48kb 20.44%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-bento-chromium-linux.png 81.77kb 65.13kb 20.36%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-comparator-stack-chromium-linux.png 72.95kb 58.21kb 20.20%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-cards-cta-chromium-linux.png 70.59kb 56.43kb 20.06%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-cards-chromium-linux.png 70.62kb 56.61kb 19.83%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-image-lead-chromium-linux.png 47.40kb 38.17kb 19.49%
/tests/e2e/frontend.e2e.spec.ts-snapshots/landing-home-mobile-chromium-linux.png 1,050.50kb 847.00kb 19.37%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-list-chromium-linux.png 66.77kb 53.91kb 19.26%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-showcase-chromium-linux.png 63.25kb 51.20kb 19.05%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-rows-chromium-linux.png 56.99kb 46.46kb 18.48%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-testimonial-chromium-linux.png 72.63kb 59.29kb 18.37%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-marquee-chromium-linux.png 17.28kb 14.14kb 18.16%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-split-rows-chromium-linux.png 57.11kb 46.74kb 18.15%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-rating-chromium-linux.png 47.64kb 39.14kb 17.84%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-comparator-table-chromium-linux.png 55.98kb 46.01kb 17.80%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-comparator-grid-chromium-linux.png 54.71kb 45.09kb 17.58%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-split-chromium-linux.png 40.80kb 33.83kb 17.09%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-team-roster-chromium-linux.png 44.04kb 36.64kb 16.81%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-grid-chromium-linux.png 57.01kb 47.56kb 16.57%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-cards-muted-chromium-linux.png 70.19kb 58.63kb 16.47%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-connect-chromium-linux.png 34.92kb 29.31kb 16.05%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-orbit-chromium-linux.png 42.69kb 35.98kb 15.72%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-inline-chromium-darwin.png 16.72kb 14.19kb 15.12%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-hover-chromium-darwin.png 21.70kb 18.48kb 14.81%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-inline-wrap-chromium-darwin.png 16.32kb 13.94kb 14.61%
/tests/e2e/frontend.e2e.spec.ts-snapshots/landing-home-desktop-chromium-linux.png 1,277.63kb 1,095.03kb 14.29%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-cluster-chromium-linux.png 38.41kb 33.25kb 13.45%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-spotlight-chromium-darwin.png 47.07kb 40.81kb 13.30%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-columns-chromium-darwin.png 56.37kb 49.10kb 12.91%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-grid-chromium-darwin.png 19.67kb 17.20kb 12.56%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-marquee-chromium-darwin.png 15.71kb 13.79kb 12.20%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-marquee-chromium-linux.png 64.10kb 56.46kb 11.93%
/tests/e2e/frontend.e2e.spec.ts-snapshots/landing-home-mobile-chromium-darwin.png 1,028.52kb 905.95kb 11.92%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-image-frame-chromium-linux.png 39.03kb 34.42kb 11.81%
/tests/e2e/frontend.e2e.spec.ts-snapshots/landing-home-desktop-chromium-darwin.png 1,239.93kb 1,093.50kb 11.81%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-call-to-action-signup-chromium-darwin.png 28.21kb 24.92kb 11.67%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-hero-basic-chromium-darwin.png 51.49kb 45.55kb 11.54%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-feature-media-chromium-darwin.png 50.79kb 45.22kb 10.96%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-community-chromium-darwin.png 32.88kb 29.28kb 10.96%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-call-to-action-centered-chromium-darwin.png 33.29kb 29.69kb 10.80%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-enterprise-chromium-darwin.png 61.93kb 55.31kb 10.69%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-orbit-chromium-darwin.png 38.79kb 34.70kb 10.55%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-split-chromium-darwin.png 69.13kb 62.08kb 10.20%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-feature-split-chromium-darwin.png 47.67kb 42.82kb 10.18%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-quote-chromium-darwin.png 38.09kb 34.31kb 9.93%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-split-chromium-darwin.png 35.85kb 32.50kb 9.34%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-grid-basic-chromium-darwin.png 53.15kb 48.19kb 9.33%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-stats-chromium-darwin.png 57.97kb 52.62kb 9.23%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-list-chromium-darwin.png 49.23kb 44.76kb 9.09%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-split-chromium-darwin.png 65.97kb 60.03kb 9.00%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-connect-chromium-darwin.png 31.42kb 28.60kb 8.97%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-quote-chromium-darwin.png 47.64kb 43.58kb 8.52%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-comparator-stack-chromium-darwin.png 73.02kb 66.87kb 8.43%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-marquee-chromium-darwin.png 56.77kb 52.06kb 8.29%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-image-lead-chromium-darwin.png 46.47kb 42.73kb 8.04%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-list-columns-chromium-darwin.png 35.61kb 32.81kb 7.85%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-split-chromium-darwin.png 67.52kb 62.24kb 7.82%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-call-to-action-boxed-chromium-darwin.png 33.42kb 30.81kb 7.80%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-steps-chromium-darwin.png 49.67kb 45.87kb 7.65%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-list-icons-chromium-darwin.png 46.15kb 42.72kb 7.43%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-cluster-chromium-darwin.png 35.02kb 32.45kb 7.34%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-wall-chromium-darwin.png 108.81kb 100.93kb 7.24%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-list-chromium-darwin.png 62.29kb 57.87kb 7.10%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-icons-chromium-darwin.png 72.42kb 67.43kb 6.89%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-cards-cta-chromium-darwin.png 71.09kb 66.20kb 6.88%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-cards-chromium-darwin.png 71.15kb 66.28kb 6.84%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-showcase-chromium-darwin.png 63.34kb 59.10kb 6.70%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-bento-chromium-darwin.png 67.65kb 63.14kb 6.68%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-team-roster-chromium-darwin.png 43.90kb 40.97kb 6.67%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-grid-chromium-darwin.png 75.87kb 70.88kb 6.57%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-testimonial-chromium-darwin.png 69.47kb 64.95kb 6.51%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-grouped-chromium-darwin.png 84.30kb 78.91kb 6.40%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-bento-chromium-darwin.png 84.15kb 78.87kb 6.27%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-cards-muted-chromium-darwin.png 70.96kb 66.59kb 6.15%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-comparator-grid-chromium-darwin.png 54.20kb 50.92kb 6.05%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-accordion-chromium-darwin.png 71.50kb 67.19kb 6.03%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-grid-chromium-darwin.png 54.20kb 51.05kb 5.81%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-card-chromium-darwin.png 66.56kb 62.77kb 5.69%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-rating-chromium-darwin.png 48.84kb 46.11kb 5.59%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-comparator-table-chromium-darwin.png 55.12kb 52.10kb 5.47%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-grid-chromium-darwin.png 54.75kb 52.01kb 5.00%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-rows-chromium-darwin.png 54.69kb 52.21kb 4.53%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-split-rows-chromium-darwin.png 54.79kb 52.36kb 4.43%
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-team-grid-chromium-linux.png 37.09kb 35.81kb 3.45%
/public/favicon.svg 0.34kb 0.33kb 2.01%
Total : 10,718.17kb 9,135.27kb 14.77%

📝 docs | :octocat: repo | 🙋🏾 issues | 🏪 marketplace

~Imgbot - Part of Optimole family

Ducksss and others added 8 commits June 19, 2026 23:48
* frontend(feat): add fumadocs blog with two launch posts

Adds a `blog` collection (defineCollections + author/date frontmatter) alongside
the existing docs collection, a flat `/blog/[slug]` post route and `/blog` index
card grid styled to the shadcn + emerald brand, RootProvider/SiteHeader layout,
and Blog nav links. Seeds two real posts bylined Ducksss: a friendly "Hello"
welcome and an "Anatomy of an install" deep-dive.

zod is promoted to a direct devDependency (4.4.3, the version fumadocs-core
already resolves) so the blog frontmatter schema can extend pageSchema. The blog
is independent of the docs llms.txt/geo contract.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* build(chore): bump dependency maintenance updates (#146)

Summary:
- Bump TypeScript from 5.7.3 to 5.9.3 and refresh pnpm lock.
- Bump registry verification failure artifact uploads to v7.

Rationale:
- Keep Dependabot maintenance updates on dev with a small scoped diff.
- Next is already at 16.2.6 on dev, so no package diff was needed.

Tests:
- pnpm install --frozen-lockfile
- pnpm build
- E2E_PORT=3100 pnpm test:release (fails locally: e2e route sweep
  timeout and Darwin homepage snapshot delta; lint, source build,
  typecheck, registry check, and integration tests passed before e2e)
- E2E_PORT=3100 pnpm exec cross-env NODE_OPTIONS="--no-deprecation
  --import=tsx/esm" playwright test --config=playwright.config.ts
  tests/e2e/frontend.e2e.spec.ts -g "landing page keeps its desktop
  and mobile visual contract" (fails locally: same Darwin snapshot delta)

* components(feat): add FAQ family (6 tailark-derived blocks) (#148)

Import the tailark "faqs" category as Payload Components, adapted to the
site's light/emerald token system. Ships 6 distinct structural variants —
faq-accordion, faq-split, faq-card, faq-icons, faq-grouped, faq-grid —
each with source config + Component, manifest, registry entry, docs page,
and demo twin. Shared family code: faqFields.ts and faqIcons.ts (icon-name
select → lucide map, mirroring the Content family's contentIcons pattern).

Activates the previously-empty `faq` catalog category, registers the FAQ
docs sidebar family, and bumps the page-block count 38 → 44 (copy + guard).
Adds `accordion` to the public shadcn dependency allowlist so the accordion
variants pass the registry import-derivation test.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs(chore): remove alpha messaging

Summary:
- Replace public alpha labels with neutral open-source and MIT copy.
- Rename the internal alpha component template to component-template.
- Refresh homepage screenshots for the visible copy changes.

Rationale:
- The site, CLI, docs, and package metadata should not present the
  project as alpha.
- The template rename prevents future component docs from reintroducing
  alpha language.

Tests:
- rg -n -i "\\balpha\\b|alpha-" --glob '!node_modules/**' --glob '!public/r/**' --glob '!.next/**' --glob '!test-results/**'
- git diff --check
- pnpm lint
- pnpm exec tsc --noEmit
- pnpm run test:int
- pnpm run test:e2e
- pnpm test:registry
- pnpm build

* registry(feat): prep registry for shadcn directory submission (#150)

Make the @payload-components registry submission-ready for the official shadcn
registry directory — all 44 items, including the FAQ family merged from dev.

- Replace the <your-domain> placeholder with https://www.payload-components.xyz
  across every item's docs URL; point registry.json homepage at the live site.
- Add a registry:validate gate (ajv + vendored shadcn draft-07 schemas) folded
  into test:registry, since shadcn@4.7.0 has no validate command.
- Document the @payload-components namespace install path in the install/registry
  docs and README.
- Stage the shadcn-ui/ui directory entry + submission steps in AGENTS.md.

Verified locally: registry reproducible + schema-valid (44 items), lint, tsc,
test:int (68 passed). Landed via admin merge (dev's review gate is
unsatisfiable for the sole owner; the Registry Verification workflow
startup-fails repo-wide and Vercel was rate-limited).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(docs): polish README for community launch

Summary:
- Rework the README around open-source SaaS-style positioning.
- Add the existing social card, contributor links, and community framing.
- Split consumer install guidance from local repository setup.

Rationale:
- The README is the front door for contributors and early adopters.
- Keeping the content MIT-first and community-first avoids stale commercial
  framing while making the install contract easier to scan.

Tests:
- pnpm lint
- git diff --check -- README.md
- curl -fsSI https://www.payload-components.xyz/opengraph-image
- rg stale commercial framing scan

* fullstack(fix): clear release gate review findings

Summary:
- Update FAQ registry, manifest, and installed Payload labels to use the
  proper acronym capitalization.
- Add the new FAQ slugs to CLI help and correct the blog component count.
- Clip page-level horizontal overflow and refresh the stale Linux landing
  desktop screenshot baseline.
- Document why TypeScript remains pinned to 5.x until the tsconfck peer
  range supports TypeScript 6.

Rationale:
- The PR was fast-forwardable but blocked by release-gate visual and
  overflow failures plus review metadata drift.
- Keeping TypeScript 5.x avoids shipping an unmet peer dependency from
  vite-tsconfig-paths through tsconfck.

Tests:
- pnpm test:release

* tests(fix): refresh linux mobile landing baseline

Summary:
- Replace the stale Linux mobile landing screenshot baseline with the
  release-gate actual image from PR #152.

Rationale:
- The Linux mobile baseline was still taller than the current rendered
  landing page, matching the same stale-baseline issue fixed for desktop.
- The actual image was stable across CI retries.

Tests:
- pnpm test:release
- verified CI artifact actual image was stable across retries

* repo(chore): close CI visual-regression gap and clear review bloat/drift (#153)

* repo(chore): close CI visual-regression gap and clear review bloat/drift

Repo review follow-ups (no behavior change to the shipped site or CLI):

- CI visual gap: the components-visual suite silently skipped on every CI
  run (only darwin baselines existed; CI is linux). Add a visual-baselines
  workflow_dispatch that mints per-platform baselines in the CI renderer and
  opens a PR, plus a coverage guard that fails loudly once a platform is
  minted but a component lacks a baseline (instead of silently skipping).
- Drop 3 dead pnpm.overrides (dompurify, drizzle-orm, uuid): Payload-runtime
  residue with no package in the lockfile.
- Remove the unreachable layout='stack' branch in ComponentFamilyHeader.
- Derive the not-found 'Known components' list from componentEntries.
- Guard componentFamilies.posts.countLabel (the one unguarded catalog count).
- Hoist the duplicated baseManifest into a dependency-free manifest-factory
  module (the two copies had drifted; import-light so it can't defeat the
  manifest spec's mock).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* ci(fix): restore actions/upload-artifact@v4 (v7 doesn't exist)

PR #146 bumped upload-artifact v4→v7, but that major doesn't exist. An
unresolvable action reference makes the workflow fail at startup
(startup_failure, 0s), which has blocked every dev push and PR gate since
that merge. Restore the known-good v4.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Revert "ci(fix): restore actions/upload-artifact@v4 (v7 doesn't exist)"

This reverts commit d1392ea.

* test(ci): refresh stale linux landing baseline (desktop)

The linux landing baselines went stale during the day the CI gate was down
(broken allowlist): the family-teaser landing change shrank the page, the
darwin baseline was refreshed but linux never was. This restores the desktop
linux baseline from the gate's own actual render; mobile follows.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): refresh stale linux landing baseline (mobile)

Companion to the desktop refresh: restores the mobile linux landing baseline
from the gate's own actual render (390x14444, matching the current darwin
baseline). Both linux landing baselines now reflect the family-teaser landing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
## Summary

Promote the `dev` integration branch to production. Highlights in this release:

- **registry(feat): shadcn submission prep (#150)** — all 44 registry items use the canonical `https://www.payload-components.xyz` URL (no `<your-domain>` placeholders); `registry.json` homepage points at the live site; new `registry:validate` ajv gate folded into `test:registry`; the `@payload-components` namespace install path is documented; the `shadcn-ui/ui` directory entry is staged in `AGENTS.md`.
- **components(feat): FAQ family — 6 blocks (#148)**
- **frontend(feat): Fumadocs blog with two launch posts**
- **build(chore): dependency maintenance bumps (#146)**
- Docs polish (README community launch, alpha-messaging cleanup), CI visual-regression gap closure, and release-gate review fixes.

Production registry after deploy: **44 items, `www` homepage, 0 placeholders.**

## Notes
- Production deploy is gated by Vercel's current ~24h build rate-limit; the live `/r/*.json` will refresh once that clears.
- The `shadcn-ui/ui` directory submission PR is the follow-up, to open after the live URL serves this content.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
* frontend(feat): add fumadocs blog with two launch posts

Adds a `blog` collection (defineCollections + author/date frontmatter) alongside
the existing docs collection, a flat `/blog/[slug]` post route and `/blog` index
card grid styled to the shadcn + emerald brand, RootProvider/SiteHeader layout,
and Blog nav links. Seeds two real posts bylined Ducksss: a friendly "Hello"
welcome and an "Anatomy of an install" deep-dive.

zod is promoted to a direct devDependency (4.4.3, the version fumadocs-core
already resolves) so the blog frontmatter schema can extend pageSchema. The blog
is independent of the docs llms.txt/geo contract.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* build(chore): bump dependency maintenance updates (#146)

Summary:
- Bump TypeScript from 5.7.3 to 5.9.3 and refresh pnpm lock.
- Bump registry verification failure artifact uploads to v7.

Rationale:
- Keep Dependabot maintenance updates on dev with a small scoped diff.
- Next is already at 16.2.6 on dev, so no package diff was needed.

Tests:
- pnpm install --frozen-lockfile
- pnpm build
- E2E_PORT=3100 pnpm test:release (fails locally: e2e route sweep
  timeout and Darwin homepage snapshot delta; lint, source build,
  typecheck, registry check, and integration tests passed before e2e)
- E2E_PORT=3100 pnpm exec cross-env NODE_OPTIONS="--no-deprecation
  --import=tsx/esm" playwright test --config=playwright.config.ts
  tests/e2e/frontend.e2e.spec.ts -g "landing page keeps its desktop
  and mobile visual contract" (fails locally: same Darwin snapshot delta)

* components(feat): add FAQ family (6 tailark-derived blocks) (#148)

Import the tailark "faqs" category as Payload Components, adapted to the
site's light/emerald token system. Ships 6 distinct structural variants —
faq-accordion, faq-split, faq-card, faq-icons, faq-grouped, faq-grid —
each with source config + Component, manifest, registry entry, docs page,
and demo twin. Shared family code: faqFields.ts and faqIcons.ts (icon-name
select → lucide map, mirroring the Content family's contentIcons pattern).

Activates the previously-empty `faq` catalog category, registers the FAQ
docs sidebar family, and bumps the page-block count 38 → 44 (copy + guard).
Adds `accordion` to the public shadcn dependency allowlist so the accordion
variants pass the registry import-derivation test.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs(chore): remove alpha messaging

Summary:
- Replace public alpha labels with neutral open-source and MIT copy.
- Rename the internal alpha component template to component-template.
- Refresh homepage screenshots for the visible copy changes.

Rationale:
- The site, CLI, docs, and package metadata should not present the
  project as alpha.
- The template rename prevents future component docs from reintroducing
  alpha language.

Tests:
- rg -n -i "\\balpha\\b|alpha-" --glob '!node_modules/**' --glob '!public/r/**' --glob '!.next/**' --glob '!test-results/**'
- git diff --check
- pnpm lint
- pnpm exec tsc --noEmit
- pnpm run test:int
- pnpm run test:e2e
- pnpm test:registry
- pnpm build

* registry(feat): prep registry for shadcn directory submission (#150)

Make the @payload-components registry submission-ready for the official shadcn
registry directory — all 44 items, including the FAQ family merged from dev.

- Replace the <your-domain> placeholder with https://www.payload-components.xyz
  across every item's docs URL; point registry.json homepage at the live site.
- Add a registry:validate gate (ajv + vendored shadcn draft-07 schemas) folded
  into test:registry, since shadcn@4.7.0 has no validate command.
- Document the @payload-components namespace install path in the install/registry
  docs and README.
- Stage the shadcn-ui/ui directory entry + submission steps in AGENTS.md.

Verified locally: registry reproducible + schema-valid (44 items), lint, tsc,
test:int (68 passed). Landed via admin merge (dev's review gate is
unsatisfiable for the sole owner; the Registry Verification workflow
startup-fails repo-wide and Vercel was rate-limited).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(docs): polish README for community launch

Summary:
- Rework the README around open-source SaaS-style positioning.
- Add the existing social card, contributor links, and community framing.
- Split consumer install guidance from local repository setup.

Rationale:
- The README is the front door for contributors and early adopters.
- Keeping the content MIT-first and community-first avoids stale commercial
  framing while making the install contract easier to scan.

Tests:
- pnpm lint
- git diff --check -- README.md
- curl -fsSI https://www.payload-components.xyz/opengraph-image
- rg stale commercial framing scan

* fullstack(fix): clear release gate review findings

Summary:
- Update FAQ registry, manifest, and installed Payload labels to use the
  proper acronym capitalization.
- Add the new FAQ slugs to CLI help and correct the blog component count.
- Clip page-level horizontal overflow and refresh the stale Linux landing
  desktop screenshot baseline.
- Document why TypeScript remains pinned to 5.x until the tsconfck peer
  range supports TypeScript 6.

Rationale:
- The PR was fast-forwardable but blocked by release-gate visual and
  overflow failures plus review metadata drift.
- Keeping TypeScript 5.x avoids shipping an unmet peer dependency from
  vite-tsconfig-paths through tsconfck.

Tests:
- pnpm test:release

* tests(fix): refresh linux mobile landing baseline

Summary:
- Replace the stale Linux mobile landing screenshot baseline with the
  release-gate actual image from PR #152.

Rationale:
- The Linux mobile baseline was still taller than the current rendered
  landing page, matching the same stale-baseline issue fixed for desktop.
- The actual image was stable across CI retries.

Tests:
- pnpm test:release
- verified CI artifact actual image was stable across retries

* repo(chore): close CI visual-regression gap and clear review bloat/drift (#153)

* repo(chore): close CI visual-regression gap and clear review bloat/drift

Repo review follow-ups (no behavior change to the shipped site or CLI):

- CI visual gap: the components-visual suite silently skipped on every CI
  run (only darwin baselines existed; CI is linux). Add a visual-baselines
  workflow_dispatch that mints per-platform baselines in the CI renderer and
  opens a PR, plus a coverage guard that fails loudly once a platform is
  minted but a component lacks a baseline (instead of silently skipping).
- Drop 3 dead pnpm.overrides (dompurify, drizzle-orm, uuid): Payload-runtime
  residue with no package in the lockfile.
- Remove the unreachable layout='stack' branch in ComponentFamilyHeader.
- Derive the not-found 'Known components' list from componentEntries.
- Guard componentFamilies.posts.countLabel (the one unguarded catalog count).
- Hoist the duplicated baseManifest into a dependency-free manifest-factory
  module (the two copies had drifted; import-light so it can't defeat the
  manifest spec's mock).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* ci(fix): restore actions/upload-artifact@v4 (v7 doesn't exist)

PR #146 bumped upload-artifact v4→v7, but that major doesn't exist. An
unresolvable action reference makes the workflow fail at startup
(startup_failure, 0s), which has blocked every dev push and PR gate since
that merge. Restore the known-good v4.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Revert "ci(fix): restore actions/upload-artifact@v4 (v7 doesn't exist)"

This reverts commit d1392ea.

* test(ci): refresh stale linux landing baseline (desktop)

The linux landing baselines went stale during the day the CI gate was down
(broken allowlist): the family-teaser landing change shrank the page, the
darwin baseline was refreshed but linux never was. This restores the desktop
linux baseline from the gate's own actual render; mobile follows.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): refresh stale linux landing baseline (mobile)

Companion to the desktop refresh: restores the mobile linux landing baseline
from the gate's own actual render (390x14444, matching the current darwin
baseline). Both linux landing baselines now reflect the family-teaser landing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* cli(fix): unify fragment writer/verifier dedup matchers (#157)

The renderBlocks/pagesLayout patcher deduped on exact full lines while the
verifier checked loose substrings, so the two could disagree. A consumer whose
anchor region was reformatted (Prettier reflow, hand-edit, double quotes, no
trailing comma) could slip past the writer's exact-line dedup — appending a
duplicate object key / import — while the verifier still reported it present,
so 'add' wrote a broken RenderBlocks.tsx and 'doctor' called it healthy.

Give apply (dedup) and verify one shared structural matcher per fragment
(tolerant of quote style, trailing semicolons, indentation, spacing) so they
can't disagree. Adds a regression test that pre-seeds a reformatted
registration and asserts apply doesn't duplicate it and verify reads it present.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* cli(refactor): drop the redundant installedFiles install-state field (#160)

installedFiles was recorded in .payload-components/state.json but never read
for any decision — add/doctor re-derive install validity from the manifest, so
the stored copy was just a duplicate of manifest.files that could only drift.
Remove it from the state entry type, the three record functions, the v1->v2
migration, normalizeState, and the install assertions/specs.

Backward-compatible: normalizeState no longer reads the field, so existing v2
state files that still carry it load fine (the dead field is ignored on read).
No state version bump.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* components(feat): add Comparator family (3 tailark-derived blocks) (#158)

Ports tailark's MIT comparator category as comparator-table, comparator-grid, and comparator-stack — new comparator page-family, page-block count 44 to 47.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(comparator): canonical install URLs, icon a11y labels, and block count (#172)

* registry(fix): use canonical www URL for comparator install commands

The Comparator family (#158) shipped its three registry-item docs with the
literal https://<your-domain>/r/comparator-*.json placeholder, and its three
MDX manual-install snippets used the bare apex https://payload-components.xyz
(no www). Every other one of the 44 published items uses the canonical
https://www.payload-components.xyz that #150/#155 standardized on; the
placeholder is a copy-pasteable-but-broken install command and the bare apex
is inconsistent.

Replace both with https://www.payload-components.xyz in the three comparator
entries of payload-components/registry.json and the three comparator docs
pages. Source-only change; public/r/*.json is gitignored and rebuilt from this
source by registry:build.

Found during the dev->main promote review (PR #162).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* a11y(comparator): label state icons + table headers, refresh blog count

- Add role="img" + aria-label ("Included"/"Not included") to the Check/Minus
  state icons in all three Comparator blocks so screen readers announce the
  yes/no meaning of each matrix cell (previously icon-only).
- Add scope="col" to the ComparatorTable plan header cells.
- Bump the (non-test-pinned) blog copy "About 44" -> "About 47" page blocks to
  match the count now installable after the Comparator family.

Attribute-only on the block source (no className change), so the demo-twin
class-mirror guard is unaffected and the visual baselines are unchanged; the
blog count is prose, not a pinned assertion.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* frontend(feat): add fumadocs blog with two launch posts

Adds a `blog` collection (defineCollections + author/date frontmatter) alongside
the existing docs collection, a flat `/blog/[slug]` post route and `/blog` index
card grid styled to the shadcn + emerald brand, RootProvider/SiteHeader layout,
and Blog nav links. Seeds two real posts bylined Ducksss: a friendly "Hello"
welcome and an "Anatomy of an install" deep-dive.

zod is promoted to a direct devDependency (4.4.3, the version fumadocs-core
already resolves) so the blog frontmatter schema can extend pageSchema. The blog
is independent of the docs llms.txt/geo contract.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* build(chore): bump dependency maintenance updates (#146)

Summary:
- Bump TypeScript from 5.7.3 to 5.9.3 and refresh pnpm lock.
- Bump registry verification failure artifact uploads to v7.

Rationale:
- Keep Dependabot maintenance updates on dev with a small scoped diff.
- Next is already at 16.2.6 on dev, so no package diff was needed.

Tests:
- pnpm install --frozen-lockfile
- pnpm build
- E2E_PORT=3100 pnpm test:release (fails locally: e2e route sweep
  timeout and Darwin homepage snapshot delta; lint, source build,
  typecheck, registry check, and integration tests passed before e2e)
- E2E_PORT=3100 pnpm exec cross-env NODE_OPTIONS="--no-deprecation
  --import=tsx/esm" playwright test --config=playwright.config.ts
  tests/e2e/frontend.e2e.spec.ts -g "landing page keeps its desktop
  and mobile visual contract" (fails locally: same Darwin snapshot delta)

* components(feat): add FAQ family (6 tailark-derived blocks) (#148)

Import the tailark "faqs" category as Payload Components, adapted to the
site's light/emerald token system. Ships 6 distinct structural variants —
faq-accordion, faq-split, faq-card, faq-icons, faq-grouped, faq-grid —
each with source config + Component, manifest, registry entry, docs page,
and demo twin. Shared family code: faqFields.ts and faqIcons.ts (icon-name
select → lucide map, mirroring the Content family's contentIcons pattern).

Activates the previously-empty `faq` catalog category, registers the FAQ
docs sidebar family, and bumps the page-block count 38 → 44 (copy + guard).
Adds `accordion` to the public shadcn dependency allowlist so the accordion
variants pass the registry import-derivation test.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs(chore): remove alpha messaging

Summary:
- Replace public alpha labels with neutral open-source and MIT copy.
- Rename the internal alpha component template to component-template.
- Refresh homepage screenshots for the visible copy changes.

Rationale:
- The site, CLI, docs, and package metadata should not present the
  project as alpha.
- The template rename prevents future component docs from reintroducing
  alpha language.

Tests:
- rg -n -i "\\balpha\\b|alpha-" --glob '!node_modules/**' --glob '!public/r/**' --glob '!.next/**' --glob '!test-results/**'
- git diff --check
- pnpm lint
- pnpm exec tsc --noEmit
- pnpm run test:int
- pnpm run test:e2e
- pnpm test:registry
- pnpm build

* registry(feat): prep registry for shadcn directory submission (#150)

Make the @payload-components registry submission-ready for the official shadcn
registry directory — all 44 items, including the FAQ family merged from dev.

- Replace the <your-domain> placeholder with https://www.payload-components.xyz
  across every item's docs URL; point registry.json homepage at the live site.
- Add a registry:validate gate (ajv + vendored shadcn draft-07 schemas) folded
  into test:registry, since shadcn@4.7.0 has no validate command.
- Document the @payload-components namespace install path in the install/registry
  docs and README.
- Stage the shadcn-ui/ui directory entry + submission steps in AGENTS.md.

Verified locally: registry reproducible + schema-valid (44 items), lint, tsc,
test:int (68 passed). Landed via admin merge (dev's review gate is
unsatisfiable for the sole owner; the Registry Verification workflow
startup-fails repo-wide and Vercel was rate-limited).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(docs): polish README for community launch

Summary:
- Rework the README around open-source SaaS-style positioning.
- Add the existing social card, contributor links, and community framing.
- Split consumer install guidance from local repository setup.

Rationale:
- The README is the front door for contributors and early adopters.
- Keeping the content MIT-first and community-first avoids stale commercial
  framing while making the install contract easier to scan.

Tests:
- pnpm lint
- git diff --check -- README.md
- curl -fsSI https://www.payload-components.xyz/opengraph-image
- rg stale commercial framing scan

* fullstack(fix): clear release gate review findings

Summary:
- Update FAQ registry, manifest, and installed Payload labels to use the
  proper acronym capitalization.
- Add the new FAQ slugs to CLI help and correct the blog component count.
- Clip page-level horizontal overflow and refresh the stale Linux landing
  desktop screenshot baseline.
- Document why TypeScript remains pinned to 5.x until the tsconfck peer
  range supports TypeScript 6.

Rationale:
- The PR was fast-forwardable but blocked by release-gate visual and
  overflow failures plus review metadata drift.
- Keeping TypeScript 5.x avoids shipping an unmet peer dependency from
  vite-tsconfig-paths through tsconfck.

Tests:
- pnpm test:release

* tests(fix): refresh linux mobile landing baseline

Summary:
- Replace the stale Linux mobile landing screenshot baseline with the
  release-gate actual image from PR #152.

Rationale:
- The Linux mobile baseline was still taller than the current rendered
  landing page, matching the same stale-baseline issue fixed for desktop.
- The actual image was stable across CI retries.

Tests:
- pnpm test:release
- verified CI artifact actual image was stable across retries

* repo(chore): close CI visual-regression gap and clear review bloat/drift (#153)

* repo(chore): close CI visual-regression gap and clear review bloat/drift

Repo review follow-ups (no behavior change to the shipped site or CLI):

- CI visual gap: the components-visual suite silently skipped on every CI
  run (only darwin baselines existed; CI is linux). Add a visual-baselines
  workflow_dispatch that mints per-platform baselines in the CI renderer and
  opens a PR, plus a coverage guard that fails loudly once a platform is
  minted but a component lacks a baseline (instead of silently skipping).
- Drop 3 dead pnpm.overrides (dompurify, drizzle-orm, uuid): Payload-runtime
  residue with no package in the lockfile.
- Remove the unreachable layout='stack' branch in ComponentFamilyHeader.
- Derive the not-found 'Known components' list from componentEntries.
- Guard componentFamilies.posts.countLabel (the one unguarded catalog count).
- Hoist the duplicated baseManifest into a dependency-free manifest-factory
  module (the two copies had drifted; import-light so it can't defeat the
  manifest spec's mock).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* ci(fix): restore actions/upload-artifact@v4 (v7 doesn't exist)

PR #146 bumped upload-artifact v4→v7, but that major doesn't exist. An
unresolvable action reference makes the workflow fail at startup
(startup_failure, 0s), which has blocked every dev push and PR gate since
that merge. Restore the known-good v4.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Revert "ci(fix): restore actions/upload-artifact@v4 (v7 doesn't exist)"

This reverts commit d1392ea.

* test(ci): refresh stale linux landing baseline (desktop)

The linux landing baselines went stale during the day the CI gate was down
(broken allowlist): the family-teaser landing change shrank the page, the
darwin baseline was refreshed but linux never was. This restores the desktop
linux baseline from the gate's own actual render; mobile follows.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): refresh stale linux landing baseline (mobile)

Companion to the desktop refresh: restores the mobile linux landing baseline
from the gate's own actual render (390x14444, matching the current darwin
baseline). Both linux landing baselines now reflect the family-teaser landing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* cli(fix): unify fragment writer/verifier dedup matchers (#157)

The renderBlocks/pagesLayout patcher deduped on exact full lines while the
verifier checked loose substrings, so the two could disagree. A consumer whose
anchor region was reformatted (Prettier reflow, hand-edit, double quotes, no
trailing comma) could slip past the writer's exact-line dedup — appending a
duplicate object key / import — while the verifier still reported it present,
so 'add' wrote a broken RenderBlocks.tsx and 'doctor' called it healthy.

Give apply (dedup) and verify one shared structural matcher per fragment
(tolerant of quote style, trailing semicolons, indentation, spacing) so they
can't disagree. Adds a regression test that pre-seeds a reformatted
registration and asserts apply doesn't duplicate it and verify reads it present.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* cli(refactor): drop the redundant installedFiles install-state field (#160)

installedFiles was recorded in .payload-components/state.json but never read
for any decision — add/doctor re-derive install validity from the manifest, so
the stored copy was just a duplicate of manifest.files that could only drift.
Remove it from the state entry type, the three record functions, the v1->v2
migration, normalizeState, and the install assertions/specs.

Backward-compatible: normalizeState no longer reads the field, so existing v2
state files that still carry it load fine (the dead field is ignored on read).
No state version bump.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* components(feat): add Comparator family (3 tailark-derived blocks) (#158)

Ports tailark's MIT comparator category as comparator-table, comparator-grid, and comparator-stack — new comparator page-family, page-block count 44 to 47.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(comparator): canonical install URLs, icon a11y labels, and block count (#172)

* registry(fix): use canonical www URL for comparator install commands

The Comparator family (#158) shipped its three registry-item docs with the
literal https://<your-domain>/r/comparator-*.json placeholder, and its three
MDX manual-install snippets used the bare apex https://payload-components.xyz
(no www). Every other one of the 44 published items uses the canonical
https://www.payload-components.xyz that #150/#155 standardized on; the
placeholder is a copy-pasteable-but-broken install command and the bare apex
is inconsistent.

Replace both with https://www.payload-components.xyz in the three comparator
entries of payload-components/registry.json and the three comparator docs
pages. Source-only change; public/r/*.json is gitignored and rebuilt from this
source by registry:build.

Found during the dev->main promote review (PR #162).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* a11y(comparator): label state icons + table headers, refresh blog count

- Add role="img" + aria-label ("Included"/"Not included") to the Check/Minus
  state icons in all three Comparator blocks so screen readers announce the
  yes/no meaning of each matrix cell (previously icon-only).
- Add scope="col" to the ComparatorTable plan header cells.
- Bump the (non-test-pinned) blog copy "About 44" -> "About 47" page blocks to
  match the count now installable after the Comparator family.

Attribute-only on the block source (no className change), so the demo-twin
class-mirror guard is unaffected and the visual baselines are unchanged; the
blog count is prose, not a pinned assertion.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* repo(chore): review follow-ups — a11y gate, CLI hardening, CI trims (#163)

Code-review remediation (P1 hardening + P2 trims + a11y gate):

- a11y: add tests/e2e/a11y.e2e.spec.ts (axe-core WCAG 2.1 A/AA over
  /, /docs, /components; serious+critical). Fixes it surfaced: darken
  --muted-foreground 50%->46% (was 4.41:1, sub-AA), text-brand-600 on
  light-emerald catalog pills, raise reduced-opacity small labels to full
  opacity, logo placeholders /55->/70, tabIndex on scrollable code blocks.
- cli: atomic state writes (temp+rename) + corrupt-state fallback in
  loadState; fix latent shared-defaultState mutation (createDefaultState
  factory). Add fragment-patching failure-mode tests.
- ci: unify GitHub Action versions across workflows; main-only push gate;
  add fast-fail quick-checks (lint+tsc) job.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* components(feat): add testimonials family (6 tailark-derived blocks) (#159)

* components(feat): add testimonials family (6 tailark-derived blocks)

Imports the distinct testimonial layouts from tailark/blocks (MIT),
re-implemented as wired Payload blocks in this repo's idiom (Media
avatars, editable fields, light tokens): testimonials-quote, -spotlight,
-grid, -rating, -bento, -wall. Full contract each — source, manifest,
registry entry, demo twin, docs — plus catalog, count (38->44),
family-teaser, and enumeration wiring.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): raise e2e dev-server heap to clear route-loop OOM

The frontend route-loop (frontend.e2e:159) visits every component doc
page against `next dev`; at 50 routes the dev server hit its memory
threshold and restarted mid-test (ERR_CONNECTION_RESET on the last
routes), failing the linux release gate even through retries:2. Bump
--max-old-space-size to 8192 for the dev server so it doesn't restart
while compiling all routes in one pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint darwin landing baseline for testimonials teaser

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): mint linux landing baseline for testimonials teaser

Rendered on the ubuntu gate via the visual-baselines workflow so the
landing visual test compares (not fails) on the linux release gate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): raise e2e dev-server heap to 12GB for the 53-route loop

8192MB held at 50 routes but the dev server still hit its memory
threshold and restarted at 53 (faq+comparator+testimonials), resetting
mid-route-loop. Give real headroom on the 16GB CI runner.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* chore(seo): add Google Search Console verification file (#180)

Serves /google44d8f9f26e2e2367.html for the new GSC property,
alongside the existing googleda94848bf7de62aa.html and BingSiteAuth.xml.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* catalog(chore): reorder /components to showcase best components first (#181)

* catalog(chore): reorder /components to showcase best components first

Lead the catalog with the most-wanted, most visually striking blocks.
Categories now rank landing-page essentials first: Hero, Features,
Comparator (pricing), Call to action, then social proof (Integration,
Logo cloud, Testimonials), then FAQ, then the deep Content set,
trailing Team and Embed. Within each category the showpiece variant
(per familyRepresentatives) leads.

Applied consistently across the wall + sidebar (componentEntries,
componentCategories) and the docs nav (FAMILIES); the landing teaser
inherits componentCategories order automatically. Pure data reorder of
all 53 page blocks — no schema/logic change. Fixes the prior
wall/sidebar disagreement, surfaces Comparator (was last) and
Testimonials, and de-emphasizes the single-purpose Embed (was 3rd).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (frontend)

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* repo(deps): bump actions/checkout to v7 and cross-env to v10 (#183)

Applies the genuinely-new increments from the four Dependabot PRs (#167-#170)
directly on dev, the integration branch, since merging them into main would be
reverted by the next dev->main promote.

- actions/checkout v6 -> v7 across all workflows (lockstep, allowlist admits v7)
- cross-env ^7.0.3 -> ^10.1.0 (minimal lockfile delta: +@epic-web/invariant)

setup-node@v6 and pnpm/action-setup@v6 (#168, #169) were already on dev, so
those PRs are redundant. Also points Dependabot at dev (target-branch) so future
bumps land on the integration branch instead of main.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* repo(deps): bump undici to 7.28.0 to clear 6 security advisories (#184)

Resolves all six open Dependabot security alerts (undici < 7.28.0):
- CVE-2026-6734, CVE-2026-9697 (high)
- CVE-2026-9679, CVE-2026-9678 (medium)
- CVE-2026-11525, CVE-2026-6733 (low)

undici is an optional transitive of the jsdom/test chain; the parent range
already admits 7.28.0, so a plain re-resolve picks it up (no override needed).
The sibling bumps are all within that same optional cluster.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs: add security reporting contact link to issue chooser (#185)

Lands @highoncomputers' #173 onto dev. Resolves #138.

Co-authored-by: highoncomputers <highoncomputers@users.noreply.github.com>

* cli(feat): harden partial install recovery (#188)

Print stage-specific recovery guidance when `payload-components add` fails
mid-install, a "retrying partial install" notice when re-running a partial
entry, and owned/patched file detail in `payload-components doctor`. Docs in
both READMEs cover fix-and-retry without deleting patched host files.

Rebuilds the intent of #94 on the current install-state model: owned files
come from `manifest.files` and patched files from the existing patchedFiles
var / `entry.patchedFiles` (the `installedFiles` field #94 relied on was
removed from the state model).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs: clarify payload-components init behavior (#187)

Clarify that `payload-components init` delegates to `shadcn init` to create the `components.json` baseline, and that `payload-components add` expects that baseline and does not run init automatically as a side effect.

Lands the docs fix from #165 with authorship preserved for @tysoul574-spec.

Closes #104

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (components-visual) (#186)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* frontend(feat): redesign logo as terminal prompt + block-cursor mark (#190)

* frontend(feat): redesign logo as terminal prompt + block-cursor mark

Replace the bare > glyph with a geometric prompt chevron + block cursor,
drawn as a real SVG so the header, favicon, and OG image share one mark.
Retires the Payload-CMS-style favicon.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (frontend.e2e) (#189)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: highoncomputers <highoncomputers@users.noreply.github.com>
* frontend(feat): add fumadocs blog with two launch posts

Adds a `blog` collection (defineCollections + author/date frontmatter) alongside
the existing docs collection, a flat `/blog/[slug]` post route and `/blog` index
card grid styled to the shadcn + emerald brand, RootProvider/SiteHeader layout,
and Blog nav links. Seeds two real posts bylined Ducksss: a friendly "Hello"
welcome and an "Anatomy of an install" deep-dive.

zod is promoted to a direct devDependency (4.4.3, the version fumadocs-core
already resolves) so the blog frontmatter schema can extend pageSchema. The blog
is independent of the docs llms.txt/geo contract.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* build(chore): bump dependency maintenance updates (#146)

Summary:
- Bump TypeScript from 5.7.3 to 5.9.3 and refresh pnpm lock.
- Bump registry verification failure artifact uploads to v7.

Rationale:
- Keep Dependabot maintenance updates on dev with a small scoped diff.
- Next is already at 16.2.6 on dev, so no package diff was needed.

Tests:
- pnpm install --frozen-lockfile
- pnpm build
- E2E_PORT=3100 pnpm test:release (fails locally: e2e route sweep
  timeout and Darwin homepage snapshot delta; lint, source build,
  typecheck, registry check, and integration tests passed before e2e)
- E2E_PORT=3100 pnpm exec cross-env NODE_OPTIONS="--no-deprecation
  --import=tsx/esm" playwright test --config=playwright.config.ts
  tests/e2e/frontend.e2e.spec.ts -g "landing page keeps its desktop
  and mobile visual contract" (fails locally: same Darwin snapshot delta)

* components(feat): add FAQ family (6 tailark-derived blocks) (#148)

Import the tailark "faqs" category as Payload Components, adapted to the
site's light/emerald token system. Ships 6 distinct structural variants —
faq-accordion, faq-split, faq-card, faq-icons, faq-grouped, faq-grid —
each with source config + Component, manifest, registry entry, docs page,
and demo twin. Shared family code: faqFields.ts and faqIcons.ts (icon-name
select → lucide map, mirroring the Content family's contentIcons pattern).

Activates the previously-empty `faq` catalog category, registers the FAQ
docs sidebar family, and bumps the page-block count 38 → 44 (copy + guard).
Adds `accordion` to the public shadcn dependency allowlist so the accordion
variants pass the registry import-derivation test.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs(chore): remove alpha messaging

Summary:
- Replace public alpha labels with neutral open-source and MIT copy.
- Rename the internal alpha component template to component-template.
- Refresh homepage screenshots for the visible copy changes.

Rationale:
- The site, CLI, docs, and package metadata should not present the
  project as alpha.
- The template rename prevents future component docs from reintroducing
  alpha language.

Tests:
- rg -n -i "\\balpha\\b|alpha-" --glob '!node_modules/**' --glob '!public/r/**' --glob '!.next/**' --glob '!test-results/**'
- git diff --check
- pnpm lint
- pnpm exec tsc --noEmit
- pnpm run test:int
- pnpm run test:e2e
- pnpm test:registry
- pnpm build

* registry(feat): prep registry for shadcn directory submission (#150)

Make the @payload-components registry submission-ready for the official shadcn
registry directory — all 44 items, including the FAQ family merged from dev.

- Replace the <your-domain> placeholder with https://www.payload-components.xyz
  across every item's docs URL; point registry.json homepage at the live site.
- Add a registry:validate gate (ajv + vendored shadcn draft-07 schemas) folded
  into test:registry, since shadcn@4.7.0 has no validate command.
- Document the @payload-components namespace install path in the install/registry
  docs and README.
- Stage the shadcn-ui/ui directory entry + submission steps in AGENTS.md.

Verified locally: registry reproducible + schema-valid (44 items), lint, tsc,
test:int (68 passed). Landed via admin merge (dev's review gate is
unsatisfiable for the sole owner; the Registry Verification workflow
startup-fails repo-wide and Vercel was rate-limited).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(docs): polish README for community launch

Summary:
- Rework the README around open-source SaaS-style positioning.
- Add the existing social card, contributor links, and community framing.
- Split consumer install guidance from local repository setup.

Rationale:
- The README is the front door for contributors and early adopters.
- Keeping the content MIT-first and community-first avoids stale commercial
  framing while making the install contract easier to scan.

Tests:
- pnpm lint
- git diff --check -- README.md
- curl -fsSI https://www.payload-components.xyz/opengraph-image
- rg stale commercial framing scan

* fullstack(fix): clear release gate review findings

Summary:
- Update FAQ registry, manifest, and installed Payload labels to use the
  proper acronym capitalization.
- Add the new FAQ slugs to CLI help and correct the blog component count.
- Clip page-level horizontal overflow and refresh the stale Linux landing
  desktop screenshot baseline.
- Document why TypeScript remains pinned to 5.x until the tsconfck peer
  range supports TypeScript 6.

Rationale:
- The PR was fast-forwardable but blocked by release-gate visual and
  overflow failures plus review metadata drift.
- Keeping TypeScript 5.x avoids shipping an unmet peer dependency from
  vite-tsconfig-paths through tsconfck.

Tests:
- pnpm test:release

* tests(fix): refresh linux mobile landing baseline

Summary:
- Replace the stale Linux mobile landing screenshot baseline with the
  release-gate actual image from PR #152.

Rationale:
- The Linux mobile baseline was still taller than the current rendered
  landing page, matching the same stale-baseline issue fixed for desktop.
- The actual image was stable across CI retries.

Tests:
- pnpm test:release
- verified CI artifact actual image was stable across retries

* repo(chore): close CI visual-regression gap and clear review bloat/drift (#153)

* repo(chore): close CI visual-regression gap and clear review bloat/drift

Repo review follow-ups (no behavior change to the shipped site or CLI):

- CI visual gap: the components-visual suite silently skipped on every CI
  run (only darwin baselines existed; CI is linux). Add a visual-baselines
  workflow_dispatch that mints per-platform baselines in the CI renderer and
  opens a PR, plus a coverage guard that fails loudly once a platform is
  minted but a component lacks a baseline (instead of silently skipping).
- Drop 3 dead pnpm.overrides (dompurify, drizzle-orm, uuid): Payload-runtime
  residue with no package in the lockfile.
- Remove the unreachable layout='stack' branch in ComponentFamilyHeader.
- Derive the not-found 'Known components' list from componentEntries.
- Guard componentFamilies.posts.countLabel (the one unguarded catalog count).
- Hoist the duplicated baseManifest into a dependency-free manifest-factory
  module (the two copies had drifted; import-light so it can't defeat the
  manifest spec's mock).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* ci(fix): restore actions/upload-artifact@v4 (v7 doesn't exist)

PR #146 bumped upload-artifact v4→v7, but that major doesn't exist. An
unresolvable action reference makes the workflow fail at startup
(startup_failure, 0s), which has blocked every dev push and PR gate since
that merge. Restore the known-good v4.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Revert "ci(fix): restore actions/upload-artifact@v4 (v7 doesn't exist)"

This reverts commit d1392ea.

* test(ci): refresh stale linux landing baseline (desktop)

The linux landing baselines went stale during the day the CI gate was down
(broken allowlist): the family-teaser landing change shrank the page, the
darwin baseline was refreshed but linux never was. This restores the desktop
linux baseline from the gate's own actual render; mobile follows.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): refresh stale linux landing baseline (mobile)

Companion to the desktop refresh: restores the mobile linux landing baseline
from the gate's own actual render (390x14444, matching the current darwin
baseline). Both linux landing baselines now reflect the family-teaser landing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* cli(fix): unify fragment writer/verifier dedup matchers (#157)

The renderBlocks/pagesLayout patcher deduped on exact full lines while the
verifier checked loose substrings, so the two could disagree. A consumer whose
anchor region was reformatted (Prettier reflow, hand-edit, double quotes, no
trailing comma) could slip past the writer's exact-line dedup — appending a
duplicate object key / import — while the verifier still reported it present,
so 'add' wrote a broken RenderBlocks.tsx and 'doctor' called it healthy.

Give apply (dedup) and verify one shared structural matcher per fragment
(tolerant of quote style, trailing semicolons, indentation, spacing) so they
can't disagree. Adds a regression test that pre-seeds a reformatted
registration and asserts apply doesn't duplicate it and verify reads it present.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* cli(refactor): drop the redundant installedFiles install-state field (#160)

installedFiles was recorded in .payload-components/state.json but never read
for any decision — add/doctor re-derive install validity from the manifest, so
the stored copy was just a duplicate of manifest.files that could only drift.
Remove it from the state entry type, the three record functions, the v1->v2
migration, normalizeState, and the install assertions/specs.

Backward-compatible: normalizeState no longer reads the field, so existing v2
state files that still carry it load fine (the dead field is ignored on read).
No state version bump.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* components(feat): add Comparator family (3 tailark-derived blocks) (#158)

Ports tailark's MIT comparator category as comparator-table, comparator-grid, and comparator-stack — new comparator page-family, page-block count 44 to 47.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(comparator): canonical install URLs, icon a11y labels, and block count (#172)

* registry(fix): use canonical www URL for comparator install commands

The Comparator family (#158) shipped its three registry-item docs with the
literal https://<your-domain>/r/comparator-*.json placeholder, and its three
MDX manual-install snippets used the bare apex https://payload-components.xyz
(no www). Every other one of the 44 published items uses the canonical
https://www.payload-components.xyz that #150/#155 standardized on; the
placeholder is a copy-pasteable-but-broken install command and the bare apex
is inconsistent.

Replace both with https://www.payload-components.xyz in the three comparator
entries of payload-components/registry.json and the three comparator docs
pages. Source-only change; public/r/*.json is gitignored and rebuilt from this
source by registry:build.

Found during the dev->main promote review (PR #162).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* a11y(comparator): label state icons + table headers, refresh blog count

- Add role="img" + aria-label ("Included"/"Not included") to the Check/Minus
  state icons in all three Comparator blocks so screen readers announce the
  yes/no meaning of each matrix cell (previously icon-only).
- Add scope="col" to the ComparatorTable plan header cells.
- Bump the (non-test-pinned) blog copy "About 44" -> "About 47" page blocks to
  match the count now installable after the Comparator family.

Attribute-only on the block source (no className change), so the demo-twin
class-mirror guard is unaffected and the visual baselines are unchanged; the
blog count is prose, not a pinned assertion.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* repo(chore): review follow-ups — a11y gate, CLI hardening, CI trims (#163)

Code-review remediation (P1 hardening + P2 trims + a11y gate):

- a11y: add tests/e2e/a11y.e2e.spec.ts (axe-core WCAG 2.1 A/AA over
  /, /docs, /components; serious+critical). Fixes it surfaced: darken
  --muted-foreground 50%->46% (was 4.41:1, sub-AA), text-brand-600 on
  light-emerald catalog pills, raise reduced-opacity small labels to full
  opacity, logo placeholders /55->/70, tabIndex on scrollable code blocks.
- cli: atomic state writes (temp+rename) + corrupt-state fallback in
  loadState; fix latent shared-defaultState mutation (createDefaultState
  factory). Add fragment-patching failure-mode tests.
- ci: unify GitHub Action versions across workflows; main-only push gate;
  add fast-fail quick-checks (lint+tsc) job.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* components(feat): add testimonials family (6 tailark-derived blocks) (#159)

* components(feat): add testimonials family (6 tailark-derived blocks)

Imports the distinct testimonial layouts from tailark/blocks (MIT),
re-implemented as wired Payload blocks in this repo's idiom (Media
avatars, editable fields, light tokens): testimonials-quote, -spotlight,
-grid, -rating, -bento, -wall. Full contract each — source, manifest,
registry entry, demo twin, docs — plus catalog, count (38->44),
family-teaser, and enumeration wiring.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): raise e2e dev-server heap to clear route-loop OOM

The frontend route-loop (frontend.e2e:159) visits every component doc
page against `next dev`; at 50 routes the dev server hit its memory
threshold and restarted mid-test (ERR_CONNECTION_RESET on the last
routes), failing the linux release gate even through retries:2. Bump
--max-old-space-size to 8192 for the dev server so it doesn't restart
while compiling all routes in one pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint darwin landing baseline for testimonials teaser

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): mint linux landing baseline for testimonials teaser

Rendered on the ubuntu gate via the visual-baselines workflow so the
landing visual test compares (not fails) on the linux release gate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): raise e2e dev-server heap to 12GB for the 53-route loop

8192MB held at 50 routes but the dev server still hit its memory
threshold and restarted at 53 (faq+comparator+testimonials), resetting
mid-route-loop. Give real headroom on the 16GB CI runner.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* chore(seo): add Google Search Console verification file (#180)

Serves /google44d8f9f26e2e2367.html for the new GSC property,
alongside the existing googleda94848bf7de62aa.html and BingSiteAuth.xml.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* catalog(chore): reorder /components to showcase best components first (#181)

* catalog(chore): reorder /components to showcase best components first

Lead the catalog with the most-wanted, most visually striking blocks.
Categories now rank landing-page essentials first: Hero, Features,
Comparator (pricing), Call to action, then social proof (Integration,
Logo cloud, Testimonials), then FAQ, then the deep Content set,
trailing Team and Embed. Within each category the showpiece variant
(per familyRepresentatives) leads.

Applied consistently across the wall + sidebar (componentEntries,
componentCategories) and the docs nav (FAMILIES); the landing teaser
inherits componentCategories order automatically. Pure data reorder of
all 53 page blocks — no schema/logic change. Fixes the prior
wall/sidebar disagreement, surfaces Comparator (was last) and
Testimonials, and de-emphasizes the single-purpose Embed (was 3rd).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (frontend)

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* repo(deps): bump actions/checkout to v7 and cross-env to v10 (#183)

Applies the genuinely-new increments from the four Dependabot PRs (#167-#170)
directly on dev, the integration branch, since merging them into main would be
reverted by the next dev->main promote.

- actions/checkout v6 -> v7 across all workflows (lockstep, allowlist admits v7)
- cross-env ^7.0.3 -> ^10.1.0 (minimal lockfile delta: +@epic-web/invariant)

setup-node@v6 and pnpm/action-setup@v6 (#168, #169) were already on dev, so
those PRs are redundant. Also points Dependabot at dev (target-branch) so future
bumps land on the integration branch instead of main.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* repo(deps): bump undici to 7.28.0 to clear 6 security advisories (#184)

Resolves all six open Dependabot security alerts (undici < 7.28.0):
- CVE-2026-6734, CVE-2026-9697 (high)
- CVE-2026-9679, CVE-2026-9678 (medium)
- CVE-2026-11525, CVE-2026-6733 (low)

undici is an optional transitive of the jsdom/test chain; the parent range
already admits 7.28.0, so a plain re-resolve picks it up (no override needed).
The sibling bumps are all within that same optional cluster.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs: add security reporting contact link to issue chooser (#185)

Lands @highoncomputers' #173 onto dev. Resolves #138.

Co-authored-by: highoncomputers <highoncomputers@users.noreply.github.com>

* cli(feat): harden partial install recovery (#188)

Print stage-specific recovery guidance when `payload-components add` fails
mid-install, a "retrying partial install" notice when re-running a partial
entry, and owned/patched file detail in `payload-components doctor`. Docs in
both READMEs cover fix-and-retry without deleting patched host files.

Rebuilds the intent of #94 on the current install-state model: owned files
come from `manifest.files` and patched files from the existing patchedFiles
var / `entry.patchedFiles` (the `installedFiles` field #94 relied on was
removed from the state model).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs: clarify payload-components init behavior (#187)

Clarify that `payload-components init` delegates to `shadcn init` to create the `components.json` baseline, and that `payload-components add` expects that baseline and does not run init automatically as a side effect.

Lands the docs fix from #165 with authorship preserved for @tysoul574-spec.

Closes #104

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (components-visual) (#186)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* frontend(feat): redesign logo as terminal prompt + block-cursor mark (#190)

* frontend(feat): redesign logo as terminal prompt + block-cursor mark

Replace the bare > glyph with a geometric prompt chevron + block cursor,
drawn as a real SVG so the header, favicon, and OG image share one mark.
Retires the Payload-CMS-style favicon.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (frontend.e2e) (#189)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* components(feat): add pricing family (5 tailark-derived blocks) (#191)

Fills the previously-empty Pricing catalog family with five field-driven
Payload blocks, retokenized from tailark/blocks (MIT) onto the light
monochrome + emerald system: pricing-cards (showpiece), pricing-cards-muted,
pricing-cards-cta, pricing-split, and pricing-enterprise (editable Media
logo wall). Shared pricingFields/planFields keep the family from drifting.

Wires the full add-a-family contract against current dev (58 page blocks):
5 block sources + shared fields, 5 manifests, 5 registry.json items
(registryDeps matched to imports), 5 class-mirrored demo twins + demo
content, catalog entries inserted at the curated rank (after Comparator),
FAMILIES docs-nav entry, count pins (53->58) across site.ts/about/tests,
cli + smoke lists, and 5 docs pages with tailark MIT attribution.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (components-visual frontend) (#193)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(pricing): review-nit polish — link validation, decorative icons, split highlight (#194)

Three polish fixes from the pricing-family code review. All visually neutral,
so the just-minted (#193) Linux baselines stay valid.

- PricingEnterprise: validate the logo `href` so non-http(s) values (e.g. a
  `javascript:` payload) are rejected. Inlined rather than reusing
  shared/safeUrls — the embed/form validators there would wrongly reject
  arbitrary customer URLs.
- Mark the decorative feature-list `<Check>` icons aria-hidden across all five
  variants so screen readers don't announce them.
- PricingSplit: derive the highlighted (right) plan from the `featured` flag
  instead of hard-coding plans[1], so marking either plan featured works.
  Mirrored in the PricingSplitDemo twin.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: highoncomputers <highoncomputers@users.noreply.github.com>
* frontend(feat): add fumadocs blog with two launch posts

Adds a `blog` collection (defineCollections + author/date frontmatter) alongside
the existing docs collection, a flat `/blog/[slug]` post route and `/blog` index
card grid styled to the shadcn + emerald brand, RootProvider/SiteHeader layout,
and Blog nav links. Seeds two real posts bylined Ducksss: a friendly "Hello"
welcome and an "Anatomy of an install" deep-dive.

zod is promoted to a direct devDependency (4.4.3, the version fumadocs-core
already resolves) so the blog frontmatter schema can extend pageSchema. The blog
is independent of the docs llms.txt/geo contract.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* build(chore): bump dependency maintenance updates (#146)

Summary:
- Bump TypeScript from 5.7.3 to 5.9.3 and refresh pnpm lock.
- Bump registry verification failure artifact uploads to v7.

Rationale:
- Keep Dependabot maintenance updates on dev with a small scoped diff.
- Next is already at 16.2.6 on dev, so no package diff was needed.

Tests:
- pnpm install --frozen-lockfile
- pnpm build
- E2E_PORT=3100 pnpm test:release (fails locally: e2e route sweep
  timeout and Darwin homepage snapshot delta; lint, source build,
  typecheck, registry check, and integration tests passed before e2e)
- E2E_PORT=3100 pnpm exec cross-env NODE_OPTIONS="--no-deprecation
  --import=tsx/esm" playwright test --config=playwright.config.ts
  tests/e2e/frontend.e2e.spec.ts -g "landing page keeps its desktop
  and mobile visual contract" (fails locally: same Darwin snapshot delta)

* components(feat): add FAQ family (6 tailark-derived blocks) (#148)

Import the tailark "faqs" category as Payload Components, adapted to the
site's light/emerald token system. Ships 6 distinct structural variants —
faq-accordion, faq-split, faq-card, faq-icons, faq-grouped, faq-grid —
each with source config + Component, manifest, registry entry, docs page,
and demo twin. Shared family code: faqFields.ts and faqIcons.ts (icon-name
select → lucide map, mirroring the Content family's contentIcons pattern).

Activates the previously-empty `faq` catalog category, registers the FAQ
docs sidebar family, and bumps the page-block count 38 → 44 (copy + guard).
Adds `accordion` to the public shadcn dependency allowlist so the accordion
variants pass the registry import-derivation test.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs(chore): remove alpha messaging

Summary:
- Replace public alpha labels with neutral open-source and MIT copy.
- Rename the internal alpha component template to component-template.
- Refresh homepage screenshots for the visible copy changes.

Rationale:
- The site, CLI, docs, and package metadata should not present the
  project as alpha.
- The template rename prevents future component docs from reintroducing
  alpha language.

Tests:
- rg -n -i "\\balpha\\b|alpha-" --glob '!node_modules/**' --glob '!public/r/**' --glob '!.next/**' --glob '!test-results/**'
- git diff --check
- pnpm lint
- pnpm exec tsc --noEmit
- pnpm run test:int
- pnpm run test:e2e
- pnpm test:registry
- pnpm build

* registry(feat): prep registry for shadcn directory submission (#150)

Make the @payload-components registry submission-ready for the official shadcn
registry directory — all 44 items, including the FAQ family merged from dev.

- Replace the <your-domain> placeholder with https://www.payload-components.xyz
  across every item's docs URL; point registry.json homepage at the live site.
- Add a registry:validate gate (ajv + vendored shadcn draft-07 schemas) folded
  into test:registry, since shadcn@4.7.0 has no validate command.
- Document the @payload-components namespace install path in the install/registry
  docs and README.
- Stage the shadcn-ui/ui directory entry + submission steps in AGENTS.md.

Verified locally: registry reproducible + schema-valid (44 items), lint, tsc,
test:int (68 passed). Landed via admin merge (dev's review gate is
unsatisfiable for the sole owner; the Registry Verification workflow
startup-fails repo-wide and Vercel was rate-limited).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(docs): polish README for community launch

Summary:
- Rework the README around open-source SaaS-style positioning.
- Add the existing social card, contributor links, and community framing.
- Split consumer install guidance from local repository setup.

Rationale:
- The README is the front door for contributors and early adopters.
- Keeping the content MIT-first and community-first avoids stale commercial
  framing while making the install contract easier to scan.

Tests:
- pnpm lint
- git diff --check -- README.md
- curl -fsSI https://www.payload-components.xyz/opengraph-image
- rg stale commercial framing scan

* fullstack(fix): clear release gate review findings

Summary:
- Update FAQ registry, manifest, and installed Payload labels to use the
  proper acronym capitalization.
- Add the new FAQ slugs to CLI help and correct the blog component count.
- Clip page-level horizontal overflow and refresh the stale Linux landing
  desktop screenshot baseline.
- Document why TypeScript remains pinned to 5.x until the tsconfck peer
  range supports TypeScript 6.

Rationale:
- The PR was fast-forwardable but blocked by release-gate visual and
  overflow failures plus review metadata drift.
- Keeping TypeScript 5.x avoids shipping an unmet peer dependency from
  vite-tsconfig-paths through tsconfck.

Tests:
- pnpm test:release

* tests(fix): refresh linux mobile landing baseline

Summary:
- Replace the stale Linux mobile landing screenshot baseline with the
  release-gate actual image from PR #152.

Rationale:
- The Linux mobile baseline was still taller than the current rendered
  landing page, matching the same stale-baseline issue fixed for desktop.
- The actual image was stable across CI retries.

Tests:
- pnpm test:release
- verified CI artifact actual image was stable across retries

* repo(chore): close CI visual-regression gap and clear review bloat/drift (#153)

* repo(chore): close CI visual-regression gap and clear review bloat/drift

Repo review follow-ups (no behavior change to the shipped site or CLI):

- CI visual gap: the components-visual suite silently skipped on every CI
  run (only darwin baselines existed; CI is linux). Add a visual-baselines
  workflow_dispatch that mints per-platform baselines in the CI renderer and
  opens a PR, plus a coverage guard that fails loudly once a platform is
  minted but a component lacks a baseline (instead of silently skipping).
- Drop 3 dead pnpm.overrides (dompurify, drizzle-orm, uuid): Payload-runtime
  residue with no package in the lockfile.
- Remove the unreachable layout='stack' branch in ComponentFamilyHeader.
- Derive the not-found 'Known components' list from componentEntries.
- Guard componentFamilies.posts.countLabel (the one unguarded catalog count).
- Hoist the duplicated baseManifest into a dependency-free manifest-factory
  module (the two copies had drifted; import-light so it can't defeat the
  manifest spec's mock).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* ci(fix): restore actions/upload-artifact@v4 (v7 doesn't exist)

PR #146 bumped upload-artifact v4→v7, but that major doesn't exist. An
unresolvable action reference makes the workflow fail at startup
(startup_failure, 0s), which has blocked every dev push and PR gate since
that merge. Restore the known-good v4.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Revert "ci(fix): restore actions/upload-artifact@v4 (v7 doesn't exist)"

This reverts commit d1392ea.

* test(ci): refresh stale linux landing baseline (desktop)

The linux landing baselines went stale during the day the CI gate was down
(broken allowlist): the family-teaser landing change shrank the page, the
darwin baseline was refreshed but linux never was. This restores the desktop
linux baseline from the gate's own actual render; mobile follows.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): refresh stale linux landing baseline (mobile)

Companion to the desktop refresh: restores the mobile linux landing baseline
from the gate's own actual render (390x14444, matching the current darwin
baseline). Both linux landing baselines now reflect the family-teaser landing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* cli(fix): unify fragment writer/verifier dedup matchers (#157)

The renderBlocks/pagesLayout patcher deduped on exact full lines while the
verifier checked loose substrings, so the two could disagree. A consumer whose
anchor region was reformatted (Prettier reflow, hand-edit, double quotes, no
trailing comma) could slip past the writer's exact-line dedup — appending a
duplicate object key / import — while the verifier still reported it present,
so 'add' wrote a broken RenderBlocks.tsx and 'doctor' called it healthy.

Give apply (dedup) and verify one shared structural matcher per fragment
(tolerant of quote style, trailing semicolons, indentation, spacing) so they
can't disagree. Adds a regression test that pre-seeds a reformatted
registration and asserts apply doesn't duplicate it and verify reads it present.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* cli(refactor): drop the redundant installedFiles install-state field (#160)

installedFiles was recorded in .payload-components/state.json but never read
for any decision — add/doctor re-derive install validity from the manifest, so
the stored copy was just a duplicate of manifest.files that could only drift.
Remove it from the state entry type, the three record functions, the v1->v2
migration, normalizeState, and the install assertions/specs.

Backward-compatible: normalizeState no longer reads the field, so existing v2
state files that still carry it load fine (the dead field is ignored on read).
No state version bump.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* components(feat): add Comparator family (3 tailark-derived blocks) (#158)

Ports tailark's MIT comparator category as comparator-table, comparator-grid, and comparator-stack — new comparator page-family, page-block count 44 to 47.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(comparator): canonical install URLs, icon a11y labels, and block count (#172)

* registry(fix): use canonical www URL for comparator install commands

The Comparator family (#158) shipped its three registry-item docs with the
literal https://<your-domain>/r/comparator-*.json placeholder, and its three
MDX manual-install snippets used the bare apex https://payload-components.xyz
(no www). Every other one of the 44 published items uses the canonical
https://www.payload-components.xyz that #150/#155 standardized on; the
placeholder is a copy-pasteable-but-broken install command and the bare apex
is inconsistent.

Replace both with https://www.payload-components.xyz in the three comparator
entries of payload-components/registry.json and the three comparator docs
pages. Source-only change; public/r/*.json is gitignored and rebuilt from this
source by registry:build.

Found during the dev->main promote review (PR #162).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* a11y(comparator): label state icons + table headers, refresh blog count

- Add role="img" + aria-label ("Included"/"Not included") to the Check/Minus
  state icons in all three Comparator blocks so screen readers announce the
  yes/no meaning of each matrix cell (previously icon-only).
- Add scope="col" to the ComparatorTable plan header cells.
- Bump the (non-test-pinned) blog copy "About 44" -> "About 47" page blocks to
  match the count now installable after the Comparator family.

Attribute-only on the block source (no className change), so the demo-twin
class-mirror guard is unaffected and the visual baselines are unchanged; the
blog count is prose, not a pinned assertion.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* repo(chore): review follow-ups — a11y gate, CLI hardening, CI trims (#163)

Code-review remediation (P1 hardening + P2 trims + a11y gate):

- a11y: add tests/e2e/a11y.e2e.spec.ts (axe-core WCAG 2.1 A/AA over
  /, /docs, /components; serious+critical). Fixes it surfaced: darken
  --muted-foreground 50%->46% (was 4.41:1, sub-AA), text-brand-600 on
  light-emerald catalog pills, raise reduced-opacity small labels to full
  opacity, logo placeholders /55->/70, tabIndex on scrollable code blocks.
- cli: atomic state writes (temp+rename) + corrupt-state fallback in
  loadState; fix latent shared-defaultState mutation (createDefaultState
  factory). Add fragment-patching failure-mode tests.
- ci: unify GitHub Action versions across workflows; main-only push gate;
  add fast-fail quick-checks (lint+tsc) job.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* components(feat): add testimonials family (6 tailark-derived blocks) (#159)

* components(feat): add testimonials family (6 tailark-derived blocks)

Imports the distinct testimonial layouts from tailark/blocks (MIT),
re-implemented as wired Payload blocks in this repo's idiom (Media
avatars, editable fields, light tokens): testimonials-quote, -spotlight,
-grid, -rating, -bento, -wall. Full contract each — source, manifest,
registry entry, demo twin, docs — plus catalog, count (38->44),
family-teaser, and enumeration wiring.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): raise e2e dev-server heap to clear route-loop OOM

The frontend route-loop (frontend.e2e:159) visits every component doc
page against `next dev`; at 50 routes the dev server hit its memory
threshold and restarted mid-test (ERR_CONNECTION_RESET on the last
routes), failing the linux release gate even through retries:2. Bump
--max-old-space-size to 8192 for the dev server so it doesn't restart
while compiling all routes in one pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint darwin landing baseline for testimonials teaser

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): mint linux landing baseline for testimonials teaser

Rendered on the ubuntu gate via the visual-baselines workflow so the
landing visual test compares (not fails) on the linux release gate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): raise e2e dev-server heap to 12GB for the 53-route loop

8192MB held at 50 routes but the dev server still hit its memory
threshold and restarted at 53 (faq+comparator+testimonials), resetting
mid-route-loop. Give real headroom on the 16GB CI runner.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* chore(seo): add Google Search Console verification file (#180)

Serves /google44d8f9f26e2e2367.html for the new GSC property,
alongside the existing googleda94848bf7de62aa.html and BingSiteAuth.xml.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* catalog(chore): reorder /components to showcase best components first (#181)

* catalog(chore): reorder /components to showcase best components first

Lead the catalog with the most-wanted, most visually striking blocks.
Categories now rank landing-page essentials first: Hero, Features,
Comparator (pricing), Call to action, then social proof (Integration,
Logo cloud, Testimonials), then FAQ, then the deep Content set,
trailing Team and Embed. Within each category the showpiece variant
(per familyRepresentatives) leads.

Applied consistently across the wall + sidebar (componentEntries,
componentCategories) and the docs nav (FAMILIES); the landing teaser
inherits componentCategories order automatically. Pure data reorder of
all 53 page blocks — no schema/logic change. Fixes the prior
wall/sidebar disagreement, surfaces Comparator (was last) and
Testimonials, and de-emphasizes the single-purpose Embed (was 3rd).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (frontend)

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* repo(deps): bump actions/checkout to v7 and cross-env to v10 (#183)

Applies the genuinely-new increments from the four Dependabot PRs (#167-#170)
directly on dev, the integration branch, since merging them into main would be
reverted by the next dev->main promote.

- actions/checkout v6 -> v7 across all workflows (lockstep, allowlist admits v7)
- cross-env ^7.0.3 -> ^10.1.0 (minimal lockfile delta: +@epic-web/invariant)

setup-node@v6 and pnpm/action-setup@v6 (#168, #169) were already on dev, so
those PRs are redundant. Also points Dependabot at dev (target-branch) so future
bumps land on the integration branch instead of main.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* repo(deps): bump undici to 7.28.0 to clear 6 security advisories (#184)

Resolves all six open Dependabot security alerts (undici < 7.28.0):
- CVE-2026-6734, CVE-2026-9697 (high)
- CVE-2026-9679, CVE-2026-9678 (medium)
- CVE-2026-11525, CVE-2026-6733 (low)

undici is an optional transitive of the jsdom/test chain; the parent range
already admits 7.28.0, so a plain re-resolve picks it up (no override needed).
The sibling bumps are all within that same optional cluster.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs: add security reporting contact link to issue chooser (#185)

Lands @highoncomputers' #173 onto dev. Resolves #138.

Co-authored-by: highoncomputers <highoncomputers@users.noreply.github.com>

* cli(feat): harden partial install recovery (#188)

Print stage-specific recovery guidance when `payload-components add` fails
mid-install, a "retrying partial install" notice when re-running a partial
entry, and owned/patched file detail in `payload-components doctor`. Docs in
both READMEs cover fix-and-retry without deleting patched host files.

Rebuilds the intent of #94 on the current install-state model: owned files
come from `manifest.files` and patched files from the existing patchedFiles
var / `entry.patchedFiles` (the `installedFiles` field #94 relied on was
removed from the state model).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs: clarify payload-components init behavior (#187)

Clarify that `payload-components init` delegates to `shadcn init` to create the `components.json` baseline, and that `payload-components add` expects that baseline and does not run init automatically as a side effect.

Lands the docs fix from #165 with authorship preserved for @tysoul574-spec.

Closes #104

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (components-visual) (#186)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* frontend(feat): redesign logo as terminal prompt + block-cursor mark (#190)

* frontend(feat): redesign logo as terminal prompt + block-cursor mark

Replace the bare > glyph with a geometric prompt chevron + block cursor,
drawn as a real SVG so the header, favicon, and OG image share one mark.
Retires the Payload-CMS-style favicon.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (frontend.e2e) (#189)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* components(feat): add pricing family (5 tailark-derived blocks) (#191)

Fills the previously-empty Pricing catalog family with five field-driven
Payload blocks, retokenized from tailark/blocks (MIT) onto the light
monochrome + emerald system: pricing-cards (showpiece), pricing-cards-muted,
pricing-cards-cta, pricing-split, and pricing-enterprise (editable Media
logo wall). Shared pricingFields/planFields keep the family from drifting.

Wires the full add-a-family contract against current dev (58 page blocks):
5 block sources + shared fields, 5 manifests, 5 registry.json items
(registryDeps matched to imports), 5 class-mirrored demo twins + demo
content, catalog entries inserted at the curated rank (after Comparator),
FAMILIES docs-nav entry, count pins (53->58) across site.ts/about/tests,
cli + smoke lists, and 5 docs pages with tailark MIT attribution.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (components-visual frontend) (#193)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(pricing): review-nit polish — link validation, decorative icons, split highlight (#194)

Three polish fixes from the pricing-family code review. All visually neutral,
so the just-minted (#193) Linux baselines stay valid.

- PricingEnterprise: validate the logo `href` so non-http(s) values (e.g. a
  `javascript:` payload) are rejected. Inlined rather than reusing
  shared/safeUrls — the embed/form validators there would wrongly reject
  arbitrary customer URLs.
- Mark the decorative feature-list `<Check>` icons aria-hidden across all five
  variants so screen readers don't announce them.
- PricingSplit: derive the highlighted (right) plan from the `featured` flag
  instead of hard-coding plans[1], so marking either plan featured works.
  Mirrored in the PricingSplitDemo twin.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* PinZheng(config): harden sitemap crawling (#198)

Add stable edge cache headers for crawl metadata and tighten sitemap coverage.

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: highoncomputers <highoncomputers@users.noreply.github.com>
* frontend(feat): add fumadocs blog with two launch posts

Adds a `blog` collection (defineCollections + author/date frontmatter) alongside
the existing docs collection, a flat `/blog/[slug]` post route and `/blog` index
card grid styled to the shadcn + emerald brand, RootProvider/SiteHeader layout,
and Blog nav links. Seeds two real posts bylined Ducksss: a friendly "Hello"
welcome and an "Anatomy of an install" deep-dive.

zod is promoted to a direct devDependency (4.4.3, the version fumadocs-core
already resolves) so the blog frontmatter schema can extend pageSchema. The blog
is independent of the docs llms.txt/geo contract.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* build(chore): bump dependency maintenance updates (#146)

Summary:
- Bump TypeScript from 5.7.3 to 5.9.3 and refresh pnpm lock.
- Bump registry verification failure artifact uploads to v7.

Rationale:
- Keep Dependabot maintenance updates on dev with a small scoped diff.
- Next is already at 16.2.6 on dev, so no package diff was needed.

Tests:
- pnpm install --frozen-lockfile
- pnpm build
- E2E_PORT=3100 pnpm test:release (fails locally: e2e route sweep
  timeout and Darwin homepage snapshot delta; lint, source build,
  typecheck, registry check, and integration tests passed before e2e)
- E2E_PORT=3100 pnpm exec cross-env NODE_OPTIONS="--no-deprecation
  --import=tsx/esm" playwright test --config=playwright.config.ts
  tests/e2e/frontend.e2e.spec.ts -g "landing page keeps its desktop
  and mobile visual contract" (fails locally: same Darwin snapshot delta)

* components(feat): add FAQ family (6 tailark-derived blocks) (#148)

Import the tailark "faqs" category as Payload Components, adapted to the
site's light/emerald token system. Ships 6 distinct structural variants —
faq-accordion, faq-split, faq-card, faq-icons, faq-grouped, faq-grid —
each with source config + Component, manifest, registry entry, docs page,
and demo twin. Shared family code: faqFields.ts and faqIcons.ts (icon-name
select → lucide map, mirroring the Content family's contentIcons pattern).

Activates the previously-empty `faq` catalog category, registers the FAQ
docs sidebar family, and bumps the page-block count 38 → 44 (copy + guard).
Adds `accordion` to the public shadcn dependency allowlist so the accordion
variants pass the registry import-derivation test.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs(chore): remove alpha messaging

Summary:
- Replace public alpha labels with neutral open-source and MIT copy.
- Rename the internal alpha component template to component-template.
- Refresh homepage screenshots for the visible copy changes.

Rationale:
- The site, CLI, docs, and package metadata should not present the
  project as alpha.
- The template rename prevents future component docs from reintroducing
  alpha language.

Tests:
- rg -n -i "\\balpha\\b|alpha-" --glob '!node_modules/**' --glob '!public/r/**' --glob '!.next/**' --glob '!test-results/**'
- git diff --check
- pnpm lint
- pnpm exec tsc --noEmit
- pnpm run test:int
- pnpm run test:e2e
- pnpm test:registry
- pnpm build

* registry(feat): prep registry for shadcn directory submission (#150)

Make the @payload-components registry submission-ready for the official shadcn
registry directory — all 44 items, including the FAQ family merged from dev.

- Replace the <your-domain> placeholder with https://www.payload-components.xyz
  across every item's docs URL; point registry.json homepage at the live site.
- Add a registry:validate gate (ajv + vendored shadcn draft-07 schemas) folded
  into test:registry, since shadcn@4.7.0 has no validate command.
- Document the @payload-components namespace install path in the install/registry
  docs and README.
- Stage the shadcn-ui/ui directory entry + submission steps in AGENTS.md.

Verified locally: registry reproducible + schema-valid (44 items), lint, tsc,
test:int (68 passed). Landed via admin merge (dev's review gate is
unsatisfiable for the sole owner; the Registry Verification workflow
startup-fails repo-wide and Vercel was rate-limited).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(docs): polish README for community launch

Summary:
- Rework the README around open-source SaaS-style positioning.
- Add the existing social card, contributor links, and community framing.
- Split consumer install guidance from local repository setup.

Rationale:
- The README is the front door for contributors and early adopters.
- Keeping the content MIT-first and community-first avoids stale commercial
  framing while making the install contract easier to scan.

Tests:
- pnpm lint
- git diff --check -- README.md
- curl -fsSI https://www.payload-components.xyz/opengraph-image
- rg stale commercial framing scan

* fullstack(fix): clear release gate review findings

Summary:
- Update FAQ registry, manifest, and installed Payload labels to use the
  proper acronym capitalization.
- Add the new FAQ slugs to CLI help and correct the blog component count.
- Clip page-level horizontal overflow and refresh the stale Linux landing
  desktop screenshot baseline.
- Document why TypeScript remains pinned to 5.x until the tsconfck peer
  range supports TypeScript 6.

Rationale:
- The PR was fast-forwardable but blocked by release-gate visual and
  overflow failures plus review metadata drift.
- Keeping TypeScript 5.x avoids shipping an unmet peer dependency from
  vite-tsconfig-paths through tsconfck.

Tests:
- pnpm test:release

* tests(fix): refresh linux mobile landing baseline

Summary:
- Replace the stale Linux mobile landing screenshot baseline with the
  release-gate actual image from PR #152.

Rationale:
- The Linux mobile baseline was still taller than the current rendered
  landing page, matching the same stale-baseline issue fixed for desktop.
- The actual image was stable across CI retries.

Tests:
- pnpm test:release
- verified CI artifact actual image was stable across retries

* repo(chore): close CI visual-regression gap and clear review bloat/drift (#153)

* repo(chore): close CI visual-regression gap and clear review bloat/drift

Repo review follow-ups (no behavior change to the shipped site or CLI):

- CI visual gap: the components-visual suite silently skipped on every CI
  run (only darwin baselines existed; CI is linux). Add a visual-baselines
  workflow_dispatch that mints per-platform baselines in the CI renderer and
  opens a PR, plus a coverage guard that fails loudly once a platform is
  minted but a component lacks a baseline (instead of silently skipping).
- Drop 3 dead pnpm.overrides (dompurify, drizzle-orm, uuid): Payload-runtime
  residue with no package in the lockfile.
- Remove the unreachable layout='stack' branch in ComponentFamilyHeader.
- Derive the not-found 'Known components' list from componentEntries.
- Guard componentFamilies.posts.countLabel (the one unguarded catalog count).
- Hoist the duplicated baseManifest into a dependency-free manifest-factory
  module (the two copies had drifted; import-light so it can't defeat the
  manifest spec's mock).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* ci(fix): restore actions/upload-artifact@v4 (v7 doesn't exist)

PR #146 bumped upload-artifact v4→v7, but that major doesn't exist. An
unresolvable action reference makes the workflow fail at startup
(startup_failure, 0s), which has blocked every dev push and PR gate since
that merge. Restore the known-good v4.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Revert "ci(fix): restore actions/upload-artifact@v4 (v7 doesn't exist)"

This reverts commit d1392ea.

* test(ci): refresh stale linux landing baseline (desktop)

The linux landing baselines went stale during the day the CI gate was down
(broken allowlist): the family-teaser landing change shrank the page, the
darwin baseline was refreshed but linux never was. This restores the desktop
linux baseline from the gate's own actual render; mobile follows.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): refresh stale linux landing baseline (mobile)

Companion to the desktop refresh: restores the mobile linux landing baseline
from the gate's own actual render (390x14444, matching the current darwin
baseline). Both linux landing baselines now reflect the family-teaser landing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* cli(fix): unify fragment writer/verifier dedup matchers (#157)

The renderBlocks/pagesLayout patcher deduped on exact full lines while the
verifier checked loose substrings, so the two could disagree. A consumer whose
anchor region was reformatted (Prettier reflow, hand-edit, double quotes, no
trailing comma) could slip past the writer's exact-line dedup — appending a
duplicate object key / import — while the verifier still reported it present,
so 'add' wrote a broken RenderBlocks.tsx and 'doctor' called it healthy.

Give apply (dedup) and verify one shared structural matcher per fragment
(tolerant of quote style, trailing semicolons, indentation, spacing) so they
can't disagree. Adds a regression test that pre-seeds a reformatted
registration and asserts apply doesn't duplicate it and verify reads it present.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* cli(refactor): drop the redundant installedFiles install-state field (#160)

installedFiles was recorded in .payload-components/state.json but never read
for any decision — add/doctor re-derive install validity from the manifest, so
the stored copy was just a duplicate of manifest.files that could only drift.
Remove it from the state entry type, the three record functions, the v1->v2
migration, normalizeState, and the install assertions/specs.

Backward-compatible: normalizeState no longer reads the field, so existing v2
state files that still carry it load fine (the dead field is ignored on read).
No state version bump.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* components(feat): add Comparator family (3 tailark-derived blocks) (#158)

Ports tailark's MIT comparator category as comparator-table, comparator-grid, and comparator-stack — new comparator page-family, page-block count 44 to 47.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(comparator): canonical install URLs, icon a11y labels, and block count (#172)

* registry(fix): use canonical www URL for comparator install commands

The Comparator family (#158) shipped its three registry-item docs with the
literal https://<your-domain>/r/comparator-*.json placeholder, and its three
MDX manual-install snippets used the bare apex https://payload-components.xyz
(no www). Every other one of the 44 published items uses the canonical
https://www.payload-components.xyz that #150/#155 standardized on; the
placeholder is a copy-pasteable-but-broken install command and the bare apex
is inconsistent.

Replace both with https://www.payload-components.xyz in the three comparator
entries of payload-components/registry.json and the three comparator docs
pages. Source-only change; public/r/*.json is gitignored and rebuilt from this
source by registry:build.

Found during the dev->main promote review (PR #162).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* a11y(comparator): label state icons + table headers, refresh blog count

- Add role="img" + aria-label ("Included"/"Not included") to the Check/Minus
  state icons in all three Comparator blocks so screen readers announce the
  yes/no meaning of each matrix cell (previously icon-only).
- Add scope="col" to the ComparatorTable plan header cells.
- Bump the (non-test-pinned) blog copy "About 44" -> "About 47" page blocks to
  match the count now installable after the Comparator family.

Attribute-only on the block source (no className change), so the demo-twin
class-mirror guard is unaffected and the visual baselines are unchanged; the
blog count is prose, not a pinned assertion.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* repo(chore): review follow-ups — a11y gate, CLI hardening, CI trims (#163)

Code-review remediation (P1 hardening + P2 trims + a11y gate):

- a11y: add tests/e2e/a11y.e2e.spec.ts (axe-core WCAG 2.1 A/AA over
  /, /docs, /components; serious+critical). Fixes it surfaced: darken
  --muted-foreground 50%->46% (was 4.41:1, sub-AA), text-brand-600 on
  light-emerald catalog pills, raise reduced-opacity small labels to full
  opacity, logo placeholders /55->/70, tabIndex on scrollable code blocks.
- cli: atomic state writes (temp+rename) + corrupt-state fallback in
  loadState; fix latent shared-defaultState mutation (createDefaultState
  factory). Add fragment-patching failure-mode tests.
- ci: unify GitHub Action versions across workflows; main-only push gate;
  add fast-fail quick-checks (lint+tsc) job.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* components(feat): add testimonials family (6 tailark-derived blocks) (#159)

* components(feat): add testimonials family (6 tailark-derived blocks)

Imports the distinct testimonial layouts from tailark/blocks (MIT),
re-implemented as wired Payload blocks in this repo's idiom (Media
avatars, editable fields, light tokens): testimonials-quote, -spotlight,
-grid, -rating, -bento, -wall. Full contract each — source, manifest,
registry entry, demo twin, docs — plus catalog, count (38->44),
family-teaser, and enumeration wiring.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): raise e2e dev-server heap to clear route-loop OOM

The frontend route-loop (frontend.e2e:159) visits every component doc
page against `next dev`; at 50 routes the dev server hit its memory
threshold and restarted mid-test (ERR_CONNECTION_RESET on the last
routes), failing the linux release gate even through retries:2. Bump
--max-old-space-size to 8192 for the dev server so it doesn't restart
while compiling all routes in one pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint darwin landing baseline for testimonials teaser

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): mint linux landing baseline for testimonials teaser

Rendered on the ubuntu gate via the visual-baselines workflow so the
landing visual test compares (not fails) on the linux release gate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(ci): raise e2e dev-server heap to 12GB for the 53-route loop

8192MB held at 50 routes but the dev server still hit its memory
threshold and restarted at 53 (faq+comparator+testimonials), resetting
mid-route-loop. Give real headroom on the 16GB CI runner.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* chore(seo): add Google Search Console verification file (#180)

Serves /google44d8f9f26e2e2367.html for the new GSC property,
alongside the existing googleda94848bf7de62aa.html and BingSiteAuth.xml.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* catalog(chore): reorder /components to showcase best components first (#181)

* catalog(chore): reorder /components to showcase best components first

Lead the catalog with the most-wanted, most visually striking blocks.
Categories now rank landing-page essentials first: Hero, Features,
Comparator (pricing), Call to action, then social proof (Integration,
Logo cloud, Testimonials), then FAQ, then the deep Content set,
trailing Team and Embed. Within each category the showpiece variant
(per familyRepresentatives) leads.

Applied consistently across the wall + sidebar (componentEntries,
componentCategories) and the docs nav (FAMILIES); the landing teaser
inherits componentCategories order automatically. Pure data reorder of
all 53 page blocks — no schema/logic change. Fixes the prior
wall/sidebar disagreement, surfaces Comparator (was last) and
Testimonials, and de-emphasizes the single-purpose Embed (was 3rd).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (frontend)

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* repo(deps): bump actions/checkout to v7 and cross-env to v10 (#183)

Applies the genuinely-new increments from the four Dependabot PRs (#167-#170)
directly on dev, the integration branch, since merging them into main would be
reverted by the next dev->main promote.

- actions/checkout v6 -> v7 across all workflows (lockstep, allowlist admits v7)
- cross-env ^7.0.3 -> ^10.1.0 (minimal lockfile delta: +@epic-web/invariant)

setup-node@v6 and pnpm/action-setup@v6 (#168, #169) were already on dev, so
those PRs are redundant. Also points Dependabot at dev (target-branch) so future
bumps land on the integration branch instead of main.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* repo(deps): bump undici to 7.28.0 to clear 6 security advisories (#184)

Resolves all six open Dependabot security alerts (undici < 7.28.0):
- CVE-2026-6734, CVE-2026-9697 (high)
- CVE-2026-9679, CVE-2026-9678 (medium)
- CVE-2026-11525, CVE-2026-6733 (low)

undici is an optional transitive of the jsdom/test chain; the parent range
already admits 7.28.0, so a plain re-resolve picks it up (no override needed).
The sibling bumps are all within that same optional cluster.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs: add security reporting contact link to issue chooser (#185)

Lands @highoncomputers' #173 onto dev. Resolves #138.

Co-authored-by: highoncomputers <highoncomputers@users.noreply.github.com>

* cli(feat): harden partial install recovery (#188)

Print stage-specific recovery guidance when `payload-components add` fails
mid-install, a "retrying partial install" notice when re-running a partial
entry, and owned/patched file detail in `payload-components doctor`. Docs in
both READMEs cover fix-and-retry without deleting patched host files.

Rebuilds the intent of #94 on the current install-state model: owned files
come from `manifest.files` and patched files from the existing patchedFiles
var / `entry.patchedFiles` (the `installedFiles` field #94 relied on was
removed from the state model).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs: clarify payload-components init behavior (#187)

Clarify that `payload-components init` delegates to `shadcn init` to create the `components.json` baseline, and that `payload-components add` expects that baseline and does not run init automatically as a side effect.

Lands the docs fix from #165 with authorship preserved for @tysoul574-spec.

Closes #104

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (components-visual) (#186)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* frontend(feat): redesign logo as terminal prompt + block-cursor mark (#190)

* frontend(feat): redesign logo as terminal prompt + block-cursor mark

Replace the bare > glyph with a geometric prompt chevron + block cursor,
drawn as a real SVG so the header, favicon, and OG image share one mark.
Retires the Payload-CMS-style favicon.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (frontend.e2e) (#189)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* components(feat): add pricing family (5 tailark-derived blocks) (#191)

Fills the previously-empty Pricing catalog family with five field-driven
Payload blocks, retokenized from tailark/blocks (MIT) onto the light
monochrome + emerald system: pricing-cards (showpiece), pricing-cards-muted,
pricing-cards-cta, pricing-split, and pricing-enterprise (editable Media
logo wall). Shared pricingFields/planFields keep the family from drifting.

Wires the full add-a-family contract against current dev (58 page blocks):
5 block sources + shared fields, 5 manifests, 5 registry.json items
(registryDeps matched to imports), 5 class-mirrored demo twins + demo
content, catalog entries inserted at the curated rank (after Comparator),
FAMILIES docs-nav entry, count pins (53->58) across site.ts/about/tests,
cli + smoke lists, and 5 docs pages with tailark MIT attribution.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (components-visual frontend) (#193)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(pricing): review-nit polish — link validation, decorative icons, split highlight (#194)

Three polish fixes from the pricing-family code review. All visually neutral,
so the just-minted (#193) Linux baselines stay valid.

- PricingEnterprise: validate the logo `href` so non-http(s) values (e.g. a
  `javascript:` payload) are rejected. Inlined rather than reusing
  shared/safeUrls — the embed/form validators there would wrongly reject
  arbitrary customer URLs.
- Mark the decorative feature-list `<Check>` icons aria-hidden across all five
  variants so screen readers don't announce them.
- PricingSplit: derive the highlighted (right) plan from the `featured` flag
  instead of hard-coding plans[1], so marking either plan featured works.
  Mirrored in the PricingSplitDemo twin.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* PinZheng(config): harden sitemap crawling (#198)

Add stable edge cache headers for crawl metadata and tighten sitemap coverage.

* docs(roadmap): correct catalog counts and drop dead link (#196)

* docs: refresh ROADMAP.md to match current catalog count and remove stale references (#128)

Updates the stale '38 installable page blocks' count to '53 page blocks
across 11 families, with 8 post components in development'. Removes the
'waitlist funnel' reference from the Not Planned section since the waitlist
was removed. Adds a note about analytics collection.

Closes #128

* docs(roadmap): fix stale counts and broken analytics link

- 53 -> 58 installable page blocks (registry.json ships 58; matches site copy)
- 11 -> 12 families (pricing family already shipped via #191)
- drop link to non-existent content/docs/analytics.mdx
- restore "waitlist funnel" to Not Planned (still a documented non-goal)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: highoncomputers <highoncomputers@users.noreply.github.com>
Co-authored-by: Chai Pin Zheng <chaipinzheng@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* docs(operations): replace stale kit language in runbook (#197)

* docs: replace stale 'kit' language in operations runbook (#129)

Replaces 'blog card kit' and 'Kit request' with 'blog card component' and
'Component request' to match the current project naming. The project was
renamed from Payload Kits to Payload Components but the operations runbook
still had one stale phrase in the feedback routing table.

Closes #129

* docs(operations): realign feedback-routing table row

Trim 2 spaces so the edited row's pipes match the rest of the table.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: highoncomputers <highoncomputers@users.noreply.github.com>
Co-authored-by: Chai Pin Zheng <chaipinzheng@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* frontend(feat): graphics-forward landing redesign — node maps, merged install-boundary section, full-width FAQ (#207)

* frontend(feat): graphics-forward landing redesign — node maps, merged install-boundary section, full-width FAQ

Replace the word-heavy landing with a graphics-led narrative:
- New graphics/ primitives: WiringNodeMap (unwired/wired/boundary states,
  reads wiringLedger.rows) and PreviewSurface (framed live demo-twin).
- Merge the duplicate Tax + Wiring beats into one "install boundary" section
  ("A block isn't live until it's wired.") with a single boundary node map +
  the shadcn-vs-payload-components ledger; delete TaxSection.
- Clarify the hero install replay: clean terminal copy, relabeled output
  ("The block, rendered" / "Files the install wrote"), remove arbitrary traces.
- StackBand → support-matrix pill row; Workflow → vertical timeline + live
  feature-split preview; FAQ → full width with readable answer measure +
  dogfood caption; Community decluttered (releases moved to footer).
- Cut word-heavy copy in site.ts; add .wire-draw-scroll util (reduced-motion
  safe). Regenerate darwin landing baselines (linux via CI visual-baselines).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint darwin landing baselines for the redesign

The landing layout changed (merged install-boundary section, full-width FAQ,
workflow timeline). Regenerate the darwin landing-home snapshots so local macOS
runs compare cleanly; linux baselines are minted by the visual-baselines CI
workflow.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* test(chore): mint Linux visual baselines (frontend) (#210)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* docs(roadmap): link the live issue queue and mark exploratory items (#209)

Completes the remaining acceptance items on #128 (count/link/waitlist were #196):
- point the roadmap at the live GitHub issue queue + label filters
- attach representative scoped issues to each priority (no bullets dropped)
- add an 'Exploring (not committed)' section for speculative items (#15, #16)

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* frontend(feat): landing motion — auto-replaying hero + hover-lift micro-interactions (#211)

- HeroInstallReplay: auto-replay the install choreography when the frame
  re-enters the viewport (IntersectionObserver). Plays once on load, replays
  on a fresh re-entry, idle while sitting still or off-screen, and disabled
  under prefers-reduced-motion — a perf-safe "product loop", not an always-on
  hero animation.
- Add a .hover-lift utility (transform + shadow, transition only) and apply it
  to the framed preview surface and the maintainer-note card for tactile
  micro-interactions.

Layers on top of the existing scroll-reveal + wire-draw scroll animations.
No visual-baseline change: every effect is hover-only or reduced-motion-off,
so the reduced-motion snapshots are untouched.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* frontend(feat): scroll parallax on decorative layers (#212)

Add a lightweight ParallaxController (one passive, rAF-throttled scroll
handler) that drifts decorative layers — the hero bloom and the community
dot field — by a clamped fraction of their distance from the viewport
centre. CSS view() timelines can't drive these (they sit inside
overflow-hidden sections that become degenerate scroll containers), so a
minimal JS handler does it: transform-only via translate3d, coalesced to one
rAF per frame, idle when not scrolling, guarded against a zero viewport, and
disabled entirely under prefers-reduced-motion.

Verified the transform varies across a real wheel scroll; reduced-motion
snapshots are unchanged (effect is RM-off), so no baseline regeneration.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: highoncomputers <highoncomputers@users.noreply.github.com>
Co-authored-by: highoncomputers <manuelxmarandi@gmail.com>
*Total -- 10,718.17kb -> 9,135.27kb (14.77%)

/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-embed-basic-chromium-linux.png -- 122.17kb -> 62.87kb (48.54%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-embed-basic-chromium-darwin.png -- 59.14kb -> 40.34kb (31.79%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-columns-chromium-linux.png -- 57.93kb -> 42.91kb (25.92%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-call-to-action-centered-chromium-linux.png -- 34.37kb -> 25.68kb (25.29%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-community-chromium-linux.png -- 34.62kb -> 25.99kb (24.92%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-quote-chromium-linux.png -- 37.58kb -> 28.49kb (24.2%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-hero-basic-chromium-linux.png -- 52.46kb -> 39.88kb (23.98%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-stats-chromium-linux.png -- 61.33kb -> 46.63kb (23.96%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-spotlight-chromium-linux.png -- 45.82kb -> 34.88kb (23.88%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-split-chromium-linux.png -- 69.79kb -> 53.19kb (23.79%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-list-chromium-linux.png -- 51.03kb -> 38.90kb (23.76%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-call-to-action-signup-chromium-linux.png -- 29.77kb -> 22.79kb (23.44%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-enterprise-chromium-linux.png -- 61.63kb -> 47.32kb (23.22%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-feature-media-chromium-linux.png -- 52.81kb -> 40.64kb (23.04%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-grid-basic-chromium-linux.png -- 54.07kb -> 41.66kb (22.95%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-list-columns-chromium-linux.png -- 37.29kb -> 28.83kb (22.69%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-icons-chromium-linux.png -- 74.71kb -> 57.88kb (22.52%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-grid-chromium-linux.png -- 20.83kb -> 16.15kb (22.44%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-accordion-chromium-linux.png -- 73.94kb -> 57.38kb (22.4%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-call-to-action-boxed-chromium-linux.png -- 34.67kb -> 26.91kb (22.37%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-split-chromium-linux.png -- 68.90kb -> 53.51kb (22.34%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-inline-wrap-chromium-linux.png -- 17.86kb -> 13.88kb (22.31%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-inline-chromium-linux.png -- 18.03kb -> 14.06kb (22.04%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-steps-chromium-linux.png -- 51.83kb -> 40.50kb (21.87%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-grid-chromium-linux.png -- 77.68kb -> 60.74kb (21.8%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-feature-split-chromium-linux.png -- 49.53kb -> 38.83kb (21.6%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-wall-chromium-linux.png -- 111.77kb -> 87.67kb (21.56%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-grouped-chromium-linux.png -- 86.07kb -> 67.77kb (21.26%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-card-chromium-linux.png -- 67.92kb -> 53.54kb (21.17%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-list-icons-chromium-linux.png -- 48.56kb -> 38.28kb (21.17%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-grid-chromium-linux.png -- 55.85kb -> 44.10kb (21.03%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-split-chromium-linux.png -- 65.37kb -> 51.67kb (20.95%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-bento-chromium-linux.png -- 69.37kb -> 54.98kb (20.74%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-hover-chromium-linux.png -- 23.46kb -> 18.61kb (20.69%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-quote-chromium-linux.png -- 48.37kb -> 38.48kb (20.44%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-bento-chromium-linux.png -- 81.77kb -> 65.13kb (20.36%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-comparator-stack-chromium-linux.png -- 72.95kb -> 58.21kb (20.2%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-cards-cta-chromium-linux.png -- 70.59kb -> 56.43kb (20.06%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-cards-chromium-linux.png -- 70.62kb -> 56.61kb (19.83%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-image-lead-chromium-linux.png -- 47.40kb -> 38.17kb (19.49%)
/tests/e2e/frontend.e2e.spec.ts-snapshots/landing-home-mobile-chromium-linux.png -- 1,050.50kb -> 847.00kb (19.37%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-list-chromium-linux.png -- 66.77kb -> 53.91kb (19.26%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-showcase-chromium-linux.png -- 63.25kb -> 51.20kb (19.05%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-rows-chromium-linux.png -- 56.99kb -> 46.46kb (18.48%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-testimonial-chromium-linux.png -- 72.63kb -> 59.29kb (18.37%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-marquee-chromium-linux.png -- 17.28kb -> 14.14kb (18.16%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-split-rows-chromium-linux.png -- 57.11kb -> 46.74kb (18.15%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-rating-chromium-linux.png -- 47.64kb -> 39.14kb (17.84%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-comparator-table-chromium-linux.png -- 55.98kb -> 46.01kb (17.8%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-comparator-grid-chromium-linux.png -- 54.71kb -> 45.09kb (17.58%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-split-chromium-linux.png -- 40.80kb -> 33.83kb (17.09%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-team-roster-chromium-linux.png -- 44.04kb -> 36.64kb (16.81%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-grid-chromium-linux.png -- 57.01kb -> 47.56kb (16.57%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-cards-muted-chromium-linux.png -- 70.19kb -> 58.63kb (16.47%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-connect-chromium-linux.png -- 34.92kb -> 29.31kb (16.05%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-orbit-chromium-linux.png -- 42.69kb -> 35.98kb (15.72%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-inline-chromium-darwin.png -- 16.72kb -> 14.19kb (15.12%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-hover-chromium-darwin.png -- 21.70kb -> 18.48kb (14.81%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-inline-wrap-chromium-darwin.png -- 16.32kb -> 13.94kb (14.61%)
/tests/e2e/frontend.e2e.spec.ts-snapshots/landing-home-desktop-chromium-linux.png -- 1,277.63kb -> 1,095.03kb (14.29%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-cluster-chromium-linux.png -- 38.41kb -> 33.25kb (13.45%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-spotlight-chromium-darwin.png -- 47.07kb -> 40.81kb (13.3%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-columns-chromium-darwin.png -- 56.37kb -> 49.10kb (12.91%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-grid-chromium-darwin.png -- 19.67kb -> 17.20kb (12.56%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-logo-cloud-marquee-chromium-darwin.png -- 15.71kb -> 13.79kb (12.2%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-marquee-chromium-linux.png -- 64.10kb -> 56.46kb (11.93%)
/tests/e2e/frontend.e2e.spec.ts-snapshots/landing-home-mobile-chromium-darwin.png -- 1,028.52kb -> 905.95kb (11.92%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-image-frame-chromium-linux.png -- 39.03kb -> 34.42kb (11.81%)
/tests/e2e/frontend.e2e.spec.ts-snapshots/landing-home-desktop-chromium-darwin.png -- 1,239.93kb -> 1,093.50kb (11.81%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-call-to-action-signup-chromium-darwin.png -- 28.21kb -> 24.92kb (11.67%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-hero-basic-chromium-darwin.png -- 51.49kb -> 45.55kb (11.54%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-feature-media-chromium-darwin.png -- 50.79kb -> 45.22kb (10.96%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-community-chromium-darwin.png -- 32.88kb -> 29.28kb (10.96%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-call-to-action-centered-chromium-darwin.png -- 33.29kb -> 29.69kb (10.8%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-enterprise-chromium-darwin.png -- 61.93kb -> 55.31kb (10.69%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-orbit-chromium-darwin.png -- 38.79kb -> 34.70kb (10.55%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-split-chromium-darwin.png -- 69.13kb -> 62.08kb (10.2%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-feature-split-chromium-darwin.png -- 47.67kb -> 42.82kb (10.18%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-quote-chromium-darwin.png -- 38.09kb -> 34.31kb (9.93%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-split-chromium-darwin.png -- 35.85kb -> 32.50kb (9.34%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-grid-basic-chromium-darwin.png -- 53.15kb -> 48.19kb (9.33%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-stats-chromium-darwin.png -- 57.97kb -> 52.62kb (9.23%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-list-chromium-darwin.png -- 49.23kb -> 44.76kb (9.09%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-split-chromium-darwin.png -- 65.97kb -> 60.03kb (9%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-connect-chromium-darwin.png -- 31.42kb -> 28.60kb (8.97%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-quote-chromium-darwin.png -- 47.64kb -> 43.58kb (8.52%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-comparator-stack-chromium-darwin.png -- 73.02kb -> 66.87kb (8.43%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-marquee-chromium-darwin.png -- 56.77kb -> 52.06kb (8.29%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-image-lead-chromium-darwin.png -- 46.47kb -> 42.73kb (8.04%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-list-columns-chromium-darwin.png -- 35.61kb -> 32.81kb (7.85%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-split-chromium-darwin.png -- 67.52kb -> 62.24kb (7.82%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-call-to-action-boxed-chromium-darwin.png -- 33.42kb -> 30.81kb (7.8%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-steps-chromium-darwin.png -- 49.67kb -> 45.87kb (7.65%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-list-icons-chromium-darwin.png -- 46.15kb -> 42.72kb (7.43%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-cluster-chromium-darwin.png -- 35.02kb -> 32.45kb (7.34%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-wall-chromium-darwin.png -- 108.81kb -> 100.93kb (7.24%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-list-chromium-darwin.png -- 62.29kb -> 57.87kb (7.1%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-icons-chromium-darwin.png -- 72.42kb -> 67.43kb (6.89%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-cards-cta-chromium-darwin.png -- 71.09kb -> 66.20kb (6.88%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-cards-chromium-darwin.png -- 71.15kb -> 66.28kb (6.84%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-showcase-chromium-darwin.png -- 63.34kb -> 59.10kb (6.7%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-feature-bento-chromium-darwin.png -- 67.65kb -> 63.14kb (6.68%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-team-roster-chromium-darwin.png -- 43.90kb -> 40.97kb (6.67%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-grid-chromium-darwin.png -- 75.87kb -> 70.88kb (6.57%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-testimonial-chromium-darwin.png -- 69.47kb -> 64.95kb (6.51%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-grouped-chromium-darwin.png -- 84.30kb -> 78.91kb (6.4%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-bento-chromium-darwin.png -- 84.15kb -> 78.87kb (6.27%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-pricing-cards-muted-chromium-darwin.png -- 70.96kb -> 66.59kb (6.15%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-comparator-grid-chromium-darwin.png -- 54.20kb -> 50.92kb (6.05%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-accordion-chromium-darwin.png -- 71.50kb -> 67.19kb (6.03%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-integration-grid-chromium-darwin.png -- 54.20kb -> 51.05kb (5.81%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-faq-card-chromium-darwin.png -- 66.56kb -> 62.77kb (5.69%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-rating-chromium-darwin.png -- 48.84kb -> 46.11kb (5.59%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-comparator-table-chromium-darwin.png -- 55.12kb -> 52.10kb (5.47%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-testimonials-grid-chromium-darwin.png -- 54.75kb -> 52.01kb (5%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-rows-chromium-darwin.png -- 54.69kb -> 52.21kb (4.53%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-content-split-rows-chromium-darwin.png -- 54.79kb -> 52.36kb (4.43%)
/tests/e2e/components-visual.e2e.spec.ts-snapshots/component-team-grid-chromium-linux.png -- 37.09kb -> 35.81kb (3.45%)
/public/favicon.svg -- 0.34kb -> 0.33kb (2.01%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
@imgbot imgbot Bot requested a review from Ducksss as a code owner June 25, 2026 05:01
@vercel

vercel Bot commented Jun 25, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/ducksss-projects?upgradeToPro=build-rate-limit

@Ducksss Ducksss changed the base branch from main to dev June 25, 2026 05:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants