* 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
logos-co
pnpm + Turborepo monorepo for the Logos website and its content CMS.
apps/web— public Next.js 16 site (Tailwind v4,next-intl, static export)apps/cms— Payload CMS 3.x admin (Postgres-backed; edits ship as GitHub PRs)packages/content— content schemas, loaders forcontent/**, GitHub mutation helperspackages/ui— shared React primitives and SVG icons (<LogosMark />, etc.)packages/tokens— design tokenspackages/types— shared types incl. Payload-generatedpackages/config— shared ESLint / TypeScript / Prettier configcontent/**— production source of truth (pages, press, circles, builders-hub, site)
Apps are entrypoints only. Shared logic lives in packages. The web app reads content/** at build time and never calls GitHub at request time.
Requirements
Node 24, pnpm 11.1.0.
Quick start
pnpm install
pnpm dev # web → http://localhost:3000, cms → http://localhost:3001
Payload Admin: http://localhost:3001/admin.
apps/cms requires PAYLOAD_SECRET and DATABASE_URL (Postgres). Copy apps/cms/.env.example to apps/cms/.env and fill it in. See docs/deployment.md for the full env matrix.
Workspace package builds
Apps consume internal packages (@acid-info/logos-ui, @acid-info/logos-content, etc.) through their compiled dist/ outputs declared in each package's exports map. Turborepo's dev task declares dependsOn: ["^build"], so pnpm dev builds upstream packages before starting the app servers.
If a dist/ directory goes missing (e.g. after git clean -fdx or manually removing node_modules) and an app is started directly without going through pnpm dev, you may see errors like:
Module not found: Can't resolve '@acid-info/logos-ui/client'
Rebuild the affected workspace package to fix it:
pnpm --filter @acid-info/logos-ui build
Or run pnpm build once at the repo root to compile every package.
Common scripts
pnpm build # web static export + cms build
pnpm test # vitest (apps/web)
pnpm lint # eslint --max-warnings 0
pnpm check-types # next typegen + tsc --noEmit
pnpm generate-types # regenerate packages/types/src/payload.ts from Payload schema
Branch model
develop— default branch + staging. CMS-generated content PRs target thismaster— production (created when production deploys spin up)
Direct pushes to either are blocked by branch protection.
Documentation
- AGENTS.md — conventions and rules for AI agents working in this repo
- docs/deployment.md — env vars, Vercel dev/staging, self-hosted production
- docs/cms-github-content-plan.md — schema + GitHub workflow design
- docs/web-pages.md — per-page web requirements (Figma references)
- docs/components.md — shared component specs
- docs/seo.md — SEO and metadata expectations
- docs/code-quality-followups.md — known gaps awaiting decisions