payload-contracts/CLAUDE.md
Martin Porwoll 774d7bc402 feat: initial payload-contracts package
Shared TypeScript types, API client, and block registry for
coordinated CMS-to-frontend development across all tenants.

- Type extraction script from payload-types.ts (12,782 lines)
- 39 frontend collection types, 42 block types
- createPayloadClient() with tenant isolation
- createBlockRenderer() for type-safe block mapping
- Media helpers (getImageUrl, getSrcSet)
- Work order system for cross-server coordination
- Block catalog documentation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 17:51:40 +00:00

2.9 KiB

payload-contracts

Shared TypeScript types, API client, and block registry for Payload CMS multi-tenant frontends.

Purpose

This package is the single source of truth for TypeScript types between the CMS (sv-payload) and all frontend sites (sv-frontend / Plesk production servers). It prevents type drift and provides a consistent API client across all frontends.

Architecture

CMS (payload-cms)                    Contracts (this repo)                Frontends
━━━━━━━━━━━━━━━━                    ━━━━━━━━━━━━━━━━━━━━                ━━━━━━━━━
payload-types.ts ──extract-types──→  src/types/payload-types.ts
                                     src/types/collections.ts    ←────  import { Page, Post }
                                     src/types/blocks.ts         ←────  import { Block, BlockByType }
                                     src/types/media.ts          ←────  import { getImageUrl }
                                     src/types/api.ts            ←────  import { PaginatedResponse }
                                     src/api-client/             ←────  import { createPayloadClient }
                                     src/blocks/registry.ts      ←────  import { createBlockRenderer }

Commands

pnpm install          # Install dependencies
pnpm build            # Compile TypeScript
pnpm typecheck        # Type-check without emitting
pnpm extract          # Re-extract types from CMS (run on sv-payload)

Updating Types

When CMS collections or blocks change:

  1. On sv-payload: cd ~/payload-cms && pnpm payload generate:types
  2. On sv-payload: cd ~/payload-contracts && pnpm extract
  3. Review changes, commit, push
  4. Write a work order in work-orders/ if frontends need updating

Key Files

File Purpose
src/types/payload-types.ts Full auto-generated types from CMS
src/types/collections.ts Curated frontend collection re-exports
src/types/blocks.ts Block union type + BlockByType helper
src/types/media.ts Media type + image URL helpers
src/types/api.ts PaginatedResponse, query params, error types
src/api-client/index.ts createPayloadClient() factory
src/blocks/registry.ts createBlockRenderer() factory
src/constants/tenants.ts Tenant IDs and slugs
scripts/extract-types.ts Type extraction from payload-types.ts

Tenants

ID Slug Site
1 porwoll porwoll.de
4 c2s complexcaresolutions.de
5 gunshin gunshin.de
9 blogwoman blogwoman.de

Work Orders

The work-orders/ directory contains coordination files for propagating CMS changes to frontends. See work-orders/_template.md for the format.

Git Workflow

  • main branch only — tag releases as v1.x.x
  • Frontends consume via Git dependency in package.json