* add forms for CRM funnels * a * feat(civi-crm): add notion-coalition-partner API route Accepts coalition-partner form submissions and writes them to a Notion DB. Resolves numeric IDs for country, skills and chat service to human-readable labels. Same hCaptcha guard pattern as afform-submit. Includes CORS headers for cross-origin requests from apps/web. * feat(web): wire coalition-partner form to Notion API route * fix(web): checkbox default value and broken checked visual state Checkboxes were initialising to true instead of false, causing unchecked submissions to send true to the API. peer-checked: on the Check icon also never fired because it is not a direct sibling of the peer input -- replaced with group-has-[input:checked]: which works via the label's group class. * chore(civir-crm-api): suppress unused variable warnings in coalition-partner route * fix(civi-crm): set CORS headers for public API routes via next.config * set profile and lead source - https://civicrm.logos.co/civicrm/admin/afform/submissions#/?name=afformActivistBuilder - https://civicrm.logos.co/civicrm/contact/view?reset=1&cid=1000 - https://civicrm.logos.co/civicrm/contact/view?reset=1&cid=1000 - https://civicrm.logos.co/civicrm/contact/view/case?reset=1&id=388&cid=1000&action=view&context=case&selectedChild=case&key=CRMCaseFormSearch3vjNUK027Z0YMdmpnTbHyNePydwogixSnFN3Z2YluYYR4_8939 * default checkboxes to true * remove titles * u * add policy * t * fix(civi-crm): avoid readonly env writes in CORS test Use a keyed env helper in the public CORS test so cleanup and setup no longer rely on delete or readonly typed env properties. * fix(web): align node programme route keys Rename node program route/message keys to node programme and update links, metadata, sitemap entries, and contract tests. * chore(civi-crm): lint:fix * docs(funnel): document Notion intake CRM setup Add funnel docs covering goals, property mapping, completed schema DDL, Hide-when-empty limitations, manual UI checklist, and implementation roadmap. * feat(civi-crm): add Notion lib for funnel intake submissions Self-contained maps, property builder, and submitToNotion with Organization option matching and Notion-Version 2026-03-11. * docs(funnel): add implementation guide and sync status Document phased steps, Notion lib layout, and refresh README/roadmap for completed schema and submitToNotion work still pending wiring. * docs(funnel): expand implementation steps and Notion lib notes Document goals per phase, legacy route vs src/lib/notion/, and link schema mapping to the code. * refactor(civi-crm): extract Afform submit into submit-afform lib Decouple CiviCRM writes from the afform-submit route for upcoming Notion + CiviCRM orchestration. * feat(civi-crm): add funnel intake submit disable flags FUNNEL_INTAKE_NOTION_DISABLED and FUNNEL_INTAKE_CIVICRM_DISABLED opt out per destination; unset means submit (default). * feat(civi-crm): orchestrate afform-submit with Notion and CiviCRM Verify hCaptcha once; Notion required when enabled, CiviCRM best-effort. Point coalition partner at the shared endpoint; add CORS for public web. * feat(civi-crm): set Notion BU to Movement on funnel intake * chore(civi-crm): remove notion coalition partner route * docs(civi-crm): document funnel intake endpoint and env * docs(funnel): document orchestrator, env flags, and BU default * docs(funnel): document cleanup completion and deploy checklist Record removal of notion-coalition-partner, single afform-submit path, and non-local Notion env requirements for operators. * docs(funnel): replace per-phase docs with consolidated AGENTS.md Merge README, implementation, and notion-database into a single agent-targeted reference covering request flow, code layout, env vars, and the full IFT BD CRM schema (all 32 properties, funnel relevance annotated). * refactor(civi-crm): rename NOTION_COALITION_PARTNER_DB_ID to NOTION_DB_ID * docs: rename NOTION_COALITION_PARTNER_DB_ID to NOTION_DB_ID * feat(notion): add scorecard page content to funnel form submissions heading_2, four bulleted_list_item blocks, and a paragraph for the overall fit line using proper Notion block types. * refactor(civi-crm): drop wildcard CORS from afform-submit Rely on the public-cors middleware for origin allowlisting instead of emitting Access-Control-Allow-Origin: * and a redundant OPTIONS handler. --------- Co-authored-by: Felicio <felicio@users.noreply.github.com>
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 this.master— 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