Two bugs compounded to render /admin/collections/products/create blank:
1. Dockerfile's STRIPE_SECRET_KEY build-time placeholder was too short
(11 chars) to pass the regex that gates Stripe plugin sync. Build
produced an importMap missing plugin-stripe components like LinkToDoc,
warning at runtime and failing to render.
2. With autosave enabled, Payload creates a blank draft on page load.
Plugin-stripe's beforeValidate hook fired against empty data, calling
Stripe products.create with no name, throwing a 500 that aborted the
page render.
Fix: use a 20+ char placeholder in the Dockerfile so the build-time
importMap mirrors runtime, and add a beforeValidate hook that sets
skipSync=true whenever productDisplayName is empty so Stripe sync
waits until the product has content.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Payload's postgresAdapter `push: true` only runs in dev. Prod needs
committed migrations; the container now runs `payload migrate` before
starting Next.js so the schema is created on first deploy.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>