36 lines
2.9 KiB
Markdown
36 lines
2.9 KiB
Markdown
# Production Readiness Notes
|
|
|
|
This project is being tightened toward launch as a CMS-first Eversolo brand site. The operating rule is that real CMS content should win, while seed or fallback content is only allowed when a record is missing entirely or when a legacy migration is explicitly being reviewed.
|
|
|
|
## Current Guardrails
|
|
|
|
- Media URL paste uploads allow legacy Eversolo image hosts through Payload's server-side paste URL allow list, avoiding browser-side CORS failures.
|
|
- Product, download, news, dealer, support, about, contact, and home pages use short revalidation windows, and the admin cache action revalidates primary list pages plus dynamic product/news/download detail route patterns.
|
|
- Homepage awards and media quotes are no longer silently backfilled from hard-coded recognition defaults. If the CMS data is empty, the section can remain empty.
|
|
- Dealer records are split into `dealer` and `experienceStore` types. The public dealer page renders dealer records as a regional network with a world-map overview and experience stores as image-led location cards.
|
|
- Product mega-menu links close the menu on click, including document-navigation product pages.
|
|
|
|
## CMS Versus Seed Boundary
|
|
|
|
- CMS document exists: preserve empty strings and missing optional sections as editorial intent.
|
|
- CMS document missing: seed or legacy fallback can still render a temporary page so old URLs and early QA do not break.
|
|
- Seed scripts should avoid overwriting manually entered CMS content unless a script is explicitly named as a destructive re-import.
|
|
- Any new frontend fallback copy should be documented in the owning page/global and removed once the CMS field exists.
|
|
|
|
## Launch Checklist Focus
|
|
|
|
- Keep Payload globals and collections broad enough for editors, but avoid showing implementation-only legacy fields in admin.
|
|
- Prefer compact admin groups, list-style arrays, and explicit per-locale documents for user-facing content.
|
|
- Re-run `npm run generate:types`, `npm run build`, and the smoke check after schema or cache changes.
|
|
- After restarting a local preview, check both `/en` and `/zh` for homepage, product detail, downloads, news, where-to-buy, support, and admin access.
|
|
|
|
## Deployment Discipline
|
|
|
|
- Production uses migrations only. `PAYLOAD_DB_PUSH` must be `false`.
|
|
- Production startup does not auto-run migrations by default. Run `npm run payload:migrate` as an explicit release step.
|
|
- The local release database must not contain Payload's `dev` migration marker (`batch = -1`) before it is exported.
|
|
- Local database exports must be paired with the same `media/` and `files/` directories.
|
|
- Backfill scripts are manual release tools. They should be run before export, verified, and then treated as data already present in the production dump.
|
|
- Production startup should fail fast if required secrets are missing instead of booting with development defaults.
|
|
- `/api/health` should return `200` before traffic is switched to the deployment.
|