mirror of
https://github.com/logos-co/logos-web.git
synced 2026-08-27 12:11:14 +00:00
* docs: add page-copy single-source spec and implementation plan * feat(content): add typed home section schemas and migrate home copy into content Add 7 bespoke home* section schemas (+ techStack ctas) to the page section union and populate content/pages/en/home.json with home copy moved verbatim from messages. * refactor(web): source home page copy from @repo/content; drop home namespace from messages Feed every home section from content via findSection/data props (replacing next-intl getTranslations), remove the home namespace from messages/en.json, and add a regression guard plus content-based tests. Render output unchanged. * docs: add get-started/movement page-copy dedup spec and plan * feat(content): add get-started & movement section schemas and content docs Move get-started/movement page copy verbatim into content/pages so it is single-sourced in @repo/content. * refactor(web): source get-started/movement copy from content; drop those namespaces from messages Feed both pages from content via findSection/data props (replacing next-intl), switch them to content-based metadata, delete pages.getStarted/movement from messages, and add content-based tests + ownership guard. Render unchanged. * docs: add navbar-pages CMS copy spec and plan * feat(content): add navbar page section schemas + Pages docs (book, brand-kit, research, node-programme, lambda-prize, manifesto, media, podcast, broadcast, tech-stack explorer) * refactor(web): source navbar pages copy from content; drop those namespaces from messages Migrate book, brand-kit, research (incl. rich-text via a tagged-text renderer), node-programme, lambda-prize, manifesto, media, podcast, logos-broadcast-network, and the tech-stack explorer to read copy from content via findSection/data props and content-based metadata; remove the migrated pages.* namespaces from messages; update guards + contracts. Render output unchanged. * feat(web): source activist/coalition pages copy from content (CMS title/description) Migrate activistBuilder, activistLeaderSteward, and coalitionPartner page metadata from next-intl messages.pages.* into @repo/content PageCopy JSON, following the established bookCopy pattern. - Add activistBuilderCopySectionSchema, activistLeaderStewardCopySectionSchema, coalitionPartnerCopySectionSchema to packages/content/src/schemas/pages.ts and wire them into the pageSectionSchema discriminated union - Create content/pages/en/activist-builder.json, activist-leader-steward.json, coalition-partner.json with verbatim title/description/heading values from the old messages namespace - Switch all three route pages from createTranslatedPageMetadata to createPageMetadata(ROUTE), removing the NAMESPACE constant - Remove activistBuilder, activistLeaderSteward, coalitionPartner from apps/web/messages/en.json pages object - Add schema parse tests, renderToStaticMarkup page tests, messages ownership guards, and content-route contract entries for all three pages * chore(web): remove dead faq (pages.faq + unused FaqSection components) * fix: remove stale faq links * fix: pass payload env through turbo build * fix: preserve lambda prize support labels * fix: preserve live copy after master rebase * fix: address page copy review feedback * refactor: move design guide copy to content * feat: add schemas for home and page copy sections - Introduced home section schemas including homeSocialProof, homeChoosePath, homeDecide, homeStartBuilding, homeAbout, homeUseCases, and homeBuilderPortal. - Added page copy section schemas such as getStartedCopy, movementCopy, bookCopy, designGuideCopy, activistBuilderCopy, activistLeaderStewardCopy, coalitionPartnerCopy, researchCopy, nodeProgrammeCopy, lambdaPrizeCopy, mediaCopy, podcastCopy, broadcastCopy, and manifestoCopy. - Created shared schema for section keys to maintain consistency across sections. * chore(web): remove dead pages.faq from messages * fix: resolve page copy migration conflicts * fix: source connect form page copy from content * fix: remove duplicated afform page copy exports * fix: stop generating afform page copy exports * fix(cms): require only server actions key * fix(cms): load env files before build validation * fix(cms): make env loader available during build * fix(cms): load next env via require * test(cms): isolate missing env validation * feat: add homepage testnet highlight * fix: restore lambda prize support links
77 lines
3.0 KiB
YAML
77 lines
3.0 KiB
YAML
# =============================================================================
|
|
# Production deployment for apps/cms with a self-hosted Postgres.
|
|
#
|
|
# Usage:
|
|
# 1. cp apps/cms/.env.docker.example .env.docker # then fill in real values
|
|
# 2. docker compose -f docker-compose.prod.yml --env-file .env.docker up -d --build
|
|
#
|
|
# The container entrypoint applies Payload SQL migrations before starting, so
|
|
# the schema is set up on first boot — no manual migration step is needed.
|
|
# (In production Payload never schema-pushes; PAYLOAD_DB_PUSH only affects dev.)
|
|
# =============================================================================
|
|
|
|
services:
|
|
postgres:
|
|
image: postgres:17-bookworm
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_USER: ${POSTGRES_USER}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
POSTGRES_DB: ${POSTGRES_DB}
|
|
volumes:
|
|
- pgdata:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 20s
|
|
# Not published to the host — only the cms service reaches it over the
|
|
# internal network. Uncomment to expose for external admin access.
|
|
# ports:
|
|
# - "5432:5432"
|
|
|
|
cms:
|
|
build:
|
|
context: .
|
|
dockerfile: apps/cms/Dockerfile
|
|
args:
|
|
# Baked into the production build — changing these requires a rebuild.
|
|
NEXT_SERVER_ACTIONS_ENCRYPTION_KEY: ${NEXT_SERVER_ACTIONS_ENCRYPTION_KEY}
|
|
NEXT_PUBLIC_SERVER_URL: ${NEXT_PUBLIC_SERVER_URL}
|
|
NEXT_PUBLIC_WEB_URL: ${NEXT_PUBLIC_WEB_URL}
|
|
restart: unless-stopped
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
environment:
|
|
NODE_ENV: production
|
|
PORT: 3000
|
|
# Connects to the self-hosted Postgres over the compose network.
|
|
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}
|
|
PAYLOAD_SECRET: ${PAYLOAD_SECRET}
|
|
NEXT_PUBLIC_SERVER_URL: ${NEXT_PUBLIC_SERVER_URL}
|
|
NEXT_PUBLIC_WEB_URL: ${NEXT_PUBLIC_WEB_URL}
|
|
PAYLOAD_DB_SCHEMA: ${PAYLOAD_DB_SCHEMA:-payload}
|
|
PAYLOAD_DB_PUSH: ${PAYLOAD_DB_PUSH:-true}
|
|
PAYLOAD_DB_POOL_MAX: ${PAYLOAD_DB_POOL_MAX:-10}
|
|
# Seed/refresh DB from git content/ on every boot. Set false to stop git
|
|
# content from overwriting Admin-managed data.
|
|
CMS_SYNC_ON_BOOT: ${CMS_SYNC_ON_BOOT:-true}
|
|
# GitHub "Create PR" workflow (optional — admin feature).
|
|
GITHUB_OWNER: ${GITHUB_OWNER:-}
|
|
GITHUB_REPO: ${GITHUB_REPO:-}
|
|
GITHUB_APP_ID: ${GITHUB_APP_ID:-}
|
|
GITHUB_APP_PRIVATE_KEY: ${GITHUB_APP_PRIVATE_KEY:-}
|
|
GITHUB_INSTALLATION_ID: ${GITHUB_INSTALLATION_ID:-}
|
|
GITHUB_PR_BASE_BRANCH: ${GITHUB_PR_BASE_BRANCH:-develop}
|
|
ports:
|
|
- "${CMS_PORT:-3001}:3000"
|
|
volumes:
|
|
# Persist uploaded media (Payload writes to apps/web/public/cms/uploads).
|
|
- cms_uploads:/app/apps/web/public/cms/uploads
|
|
|
|
volumes:
|
|
pgdata:
|
|
cms_uploads:
|