JulesandFelicio 77d83d2f1e feat: route all three intake forms to Notion & CiviCRM
* 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>
2026-06-02 16:09:03 +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-01 17:59:37 +09:00
2026-04-20 22:24:39 +09:00
2026-05-27 04:11:06 +09: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%