* fix(web): build through turbo instead of rebuilding shared deps
The app build re-ran the logos-ui build, whose `tsup --clean` wiped
packages/ui/dist while logos-crm compiled against it in parallel. The deploy
now runs the same turbo build as CI, so only the ui task writes that dist.
`out/**` joins the build outputs since turbo owns the export now.
* docs(web): build the app through turbo
* fix(web): build on Vercel through turbo
Vercel ran the app build directly, which no longer builds
@acid-info/logos-ui and failed to resolve it. vercel.json pins the deploy to
the same turbo command Jenkins runs.
* refactor(civi-crm): remove case management pages and API
The Circle Case UI, its API routes and the CiviCRM query layer they used
are gone. Keeps the app shell out entirely: no pages remain, so the
layout, styles and UI dependencies go with them.
* refactor(civi-crm): drop CiviCRM write from the intake endpoint
Submissions now go to Notion and, for the steward form, n8n. The legacy
afformCircleContactForm name was CiviCRM-only and is no longer accepted;
the fields[] payload is ignored.
* chore(web): remove CiviCRM afform generator scripts
They fetched form definitions from the CiviCRM API, which is gone. The
generated files under lib/civicrm are hand-maintained from now on.
* refactor(web): trim funnel form definitions and move to lib/funnel-forms
Fields keep only what renders the form: formKey, label, inputType,
required, repeatable. The CiviCRM entity/join/fieldName plumbing and the
fields[] POST payload are gone, along with the unused circle contact
form.
country was marked required but exempt from validation through its
CiviCRM Address join, so it is now enforced like every other required
select.
* docs: rewrite civi-crm and funnel docs for the intake-only app
Drops the CiviCRM API guide and the case management architecture, and
updates the funnel reference to the Notion + n8n flow.
* feat: add @repo/funnel package for shared hear-about constants
Single source of truth for the "How did you first hear about Logos?"
question, options, and id -> label map used by apps/web and apps/civi-crm.
* feat: map hear-about answer to a Notion select on intake
Unknown option ids are dropped so tampering cannot create new select
options; field defs without a CiviCRM fieldName are skipped in
buildAfformValues so the Afform payload is unchanged.
* feat: add required hear-about field to the three funnel forms
Injected below the chat name/service row on coalition-partner,
activist-builder and activist-leader-steward. Web/Notion-only: defs
without a fieldName are filtered out of the CiviCRM fields payload.
* docs: document hear-about field in funnel reference
* refactor: extract resolveHearAboutLabel from Notion builder
Share the option-id -> label resolution so the route can reuse the
builder's exact accept/write predicate.
* fix: enforce required hear-about field server-side
Reject funnel submissions whose hear-about answer is missing or not a
known option id, instead of relying on client-side validation alone.
Port the reference guide's chrome verbatim so /field-guide is visually
identical to logos-brand-protocol.vercel.app, including dark mode.
- field-guide.css: reference tokens + styles scoped under .fg-shell,
with the Paper/Ink dark theme on .fg-shell[data-theme="dark"]
- FieldGuideShell: reference DOM (lambda header, page reference, theme
toggle, GitHub, print, chapter sidebar, prev/next pager, mobile menu)
- render chapter Markdown into .fg-article via rehype-raw so headerless
tables, <kbd>, and <strong> render faithfully
- hide the global site header/footer on /field-guide so the guide owns
the full viewport (SiteHeaderGate + new SiteFooterGate)
- Public Sans / Fira Code via next/font; Times serif headings
Next.js 16 defaults to Safari 16.4+, emitting ES2022 class static
blocks that iOS 14/15/16.0-16.3 cannot parse, breaking all client JS.
Lower the target to safari/ios_saf 14 so Turbopack down-levels syntax.
* fix(sitemap): remove FAQ route from static indexable routes
* feat(web): markdown-managed legal pages + Testnet FAQ & Terms
Introduce a markdown-based system for legal/info documents and add the
two testnet pages on the same docs route pattern.
- Add getLegalDoc loader (gray-matter frontmatter + zod validation) and
LegalMarkdown renderer (react-markdown + remark-gfm) mapped to Logos
design tokens; render legal pages as a server component.
- Refactor docs-page-factory to source content from content/legal/<slug>.md
instead of next-intl namespaces; migrate terms, privacy, and security
from messages/en.json to markdown.
- Add /testnet-v01-faqs and /testnet-terms-and-conditions pages with
content mirrored from logos.co; link the FAQ's testnet-terms references
to the internal route.
- Add Testnet FAQ and Testnet Terms to the docs ToC (remove the dead FAQ
entry); register both routes in the sitemap.
- Align docs content to the standard page gutter by removing the
redundant px-3 on the docs page shell.
* chore: optimise page imagery
* feat(web): link Logos Devs X account in community section
* chore(web): hide 'What you can build today' section on get-started and builders-hub
* refactor: reuse builders hub start sections
* feat(builders-hub): source RFPs from GitHub API at build time
Fetch and parse RFPs from the logos-co/rfp repo (markdown + YAML
frontmatter) at build time instead of local content, so the /rfps
listing and [slug] detail pages render from a single live source.
- add rfps-github lib: GitHub contents fetch, gray-matter frontmatter
parse, stable slug from filename, draft/template exclusion
- detail page renders frontmatter-stripped markdown via LegalMarkdown,
with Apply + View on GitHub CTAs
- widen RFP card/row/listing props to RfpListItem so GitHub data
(no reward/image) and local Rfp both satisfy the UI
- add optional markdown body to BuildersHubDetailLayout
* refactor: share get started sections
- Introduced a new JSON snapshot for active circles, including details about events and statistics.
- Added a script to sync the active circles snapshot from the live Logos API.
- Updated package.json to include a new build step for syncing active circles.
- Modified footer component to include an interactive newsletter signup form.
- Adjusted various links in content to point to updated resources and initiatives.
- Enhanced link validation to support same-page anchors.
- apps/cms: auto-formatted prettier warnings in scripts and tests
(schema-push-prompts.test.ts, dev.ts, schema-push-prompts.ts).
- apps/web: auto-formatted prettier warnings in lib/press-engine.ts.
- apps/web/lib/__tests__/link-policy.test.ts: drop docs.logos.co
from the blocked-URL list — the live Get Started page now uses it
as the canonical docs entry point via EXTERNAL_URLS.docs.
- apps/cms/.../save-site-content-as-pr.test.ts: footerSchema now
requires a newsletter object; add it to the test fixture so the
builder passes Zod parsing.
- apps/web/package.json: declare tsx as an explicit devDependency so
test:perf / test:static find it under apps/web/node_modules/.bin
after the pnpm 11 lockfile regeneration changed hoisting.
- apps/web/test/performance/budgets.ts: bump maxHtmlBytes 325k -> 430k
to cover homepage growth from recent motion polish and Get Started.
- pnpm-lock.yaml: refresh after adding tsx to apps/web.
Verified: pnpm test:release passes locally end-to-end.