Jinho Jang 96be50d8d0 refactor: make @repo/content the single source for home, get-started & movement page copy (#62)
* 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
2026-07-06 19:09:02 +09:00
2026-05-19 17:57:00 +09:00
2026-04-20 22:24:39 +09:00
2026-05-19 17:57:00 +09:00
2026-06-02 09:13:55 +02:00
2026-06-04 13:56:30 +09:00
2026-06-04 13:56:30 +09:00
2026-04-20 22:24:39 +09:00
2026-06-26 18:01:11 +02:00

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 for content/**, GitHub mutation helpers
  • packages/ui — shared React primitives and SVG icons (<LogosMark />, etc.)
  • packages/tokens — design tokens
  • packages/types — shared types incl. Payload-generated
  • packages/config — shared ESLint / TypeScript / Prettier config
  • content/** — 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 this
  • master — production (created when production deploys spin up)

Direct pushes to either are blocked by branch protection.

Documentation

S
Description
No description provided
Readme
1.7 GiB
Languages
TypeScript 90.5%
CSS 5.3%
JavaScript 2.3%
HTML 1.5%
Dockerfile 0.2%
Other 0.2%