Renames the route from /catch-no-one to /chatcontrol, the slug the page will ship on.
The rename runs through everything that referenced it: the route constant becomes `chatControl`, the directory and its contract test are renamed, the page component follows, and so do the typewriter's arming class and the global its inline script sets — leaving those on the old name would have been a stale reference to a page that no longer exists.
Verified against the static export: canonical, og:url, and the Article JSON-LD `url` and `@id` all resolve to logos.co/chatcontrol, the sitemap carries the new path and not the old one, and the arming class still matches the Tailwind variants that key off it.
Implements the campaign landing page at /catch-no-one from Figma: a hero with a one-shot typewriter headline, five content bands, the search-demand bar chart, two CTA cards, and the source list.
Copy lives in a colocated _content.ts, transcribed verbatim from the design. Styling is Tailwind over the logos-tokens design system, falling back to Figma's exact values only where the token ramp has no match: the #2f2f2f CTA cards, the neutral chart greys, and the #fafaf7 dark-panel ink.
Text primitives carry text-box-trim so the 18/60/112px rhythm is measured cap-to-cap the way Figma measures it, rather than line-box to line-box.
The headline types itself in once per browser session, is skipped under prefers-reduced-motion, and is armed by a pre-paint script so the server-rendered text never flashes before the animation starts.
Also adds Fira Code 700, which the exhibit labels need and which the browser was previously synthesising.
* 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.
Compose the Figma landing page entirely from existing sections: the
shared hero (still image + its own copy), the statement heading with two
CTAs, the Movement page's centred lead-in above the Circles map, and the
choose-your-path cards.
Copy lives in content/pages/en/build-the-parallel.json using existing
section schemas, so no schema changes were needed. British spelling
follows the rest of the site rather than the mixed spelling in Figma.
* fix: increase small text to 12px
* fix: use initiative CTA label
* refactor: use Tailwind text-xs utility
* fix: make homepage banner dismissible
* fix: update Discord links and banner text
* fix: refresh Discord invite links
* 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
Port the 16-chapter Logos Field Guide from the standalone reference site
into logos.co as content-driven pages, discoverable from the footer and
the global nav.
- content/field-guide/en: manifest (TOC) + chapter Markdown bodies
- @repo/content: fieldGuide schema + loaders, readText fs helper
- /field-guide index + /field-guide/[slug] routes (static export)
- FieldGuideShell (sidebar, pager, keyboard nav) + FieldGuideContent
(react-markdown to design tokens); light theme, site header retained
- Footer "Brand Guidelines" group and nav Explore > Resources links
- sitemap, routes constant, i18n metadata, loader/integrity tests
Closes#65
* fix(content): update description for storage overview section
* fix(content): update references from "The Logos Blog" to "Logos Media" across multiple files
* feat: Refactor blog section to media section
- Created new components for articles and podcasts under the media section.
- Updated routing constants to replace blog with media.
- Adjusted all references in the codebase from blog to media, including links, buttons, and navigation.
- Implemented new layout and design for articles and podcasts to enhance user experience.
- Updated translations and content references to align with the new media section.
* feat(about): replace h1 with AnimatedHeading component in AboutHero section
* fix: update import paths for PodcastsSection and adjust LambdaBadge properties in multiple components
* fix: adjust hover translation values for desktop stack items
feat(blog): add hero tagline to blog copy and update BlogHero component
fix(calendar): enhance event selection logic and improve calendar navigation
fix(footer): rename "Research Hub" to "Research Overview" for clarity
fix(navigation): update "Research Hub" label to "Research Overview" for consistency
fix(technology-stack): correct GitHub link formatting in blockchain technology stack
* 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
- "Propose a new circle" now links to the forum meetups category
(EXTERNAL_URLS.forumMeetups = https://forum.logos.co/c/meetups/6) instead of
routing to /circles
- The Find-a-Circle map was rendered twice (mobile + desktop variants), which
left the visible Leaflet instance stuck on "Loading map…". Render a single
CirclesMap and swap the find-CTA/map order responsively via flex order, so it
matches the working home/circles map.
Every "View Prizes" CTA (hero, evaluation, about sections) now opens the
lambda-prize prizes directory on GitHub instead of routing to /builders-hub/rfps.
- Add EXTERNAL_URLS.lambdaPrizes
- Hero/HowItWorks/AboutProgramme primary CTA -> EXTERNAL_URLS.lambdaPrizes (new tab)
* feat(funnel): route connect through afform-submit
Send /connect submissions to the shared afform-submit endpoint and allowlist afformCircleContactForm.
* fix(civi-crm): make connect civi-only intake
Gate Notion to movement forms, add connect case defaults, and allow missing Notion profile mappings for non-Notion intake forms.
* chore(civi-crm): remove legacy contact endpoint
Drop the old public contact submission route after connect migrated to afform-submit.
* test(civi-crm): cover connect afform-submit path
Assert connect case defaults, Note joins, and CiviCRM-required behaviour when Notion is skipped.
* docs(funnel): add connect to intake flow
Document the fourth form and its CiviCRM-only routing contract in the funnel intake guide.
* fix(web): update afform circle contact form question field
* 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.
* feat(web): rename /connect route to /contact
Updates the ROUTES constant and moves the app directory from
[locale]/connect to [locale]/contact.
* chore(web): exclude /contact from sitemap
Page currently redirects to the homepage, so it should not be indexed.
* docs(funnel): note /connect renamed to /contact and form removed
- Updated hero-section, mountain-section, and parallel-society-section to use min-[1025px] for responsive design.
- Adjusted press-section and social-proof-section for better mobile and desktop handling.
- Enhanced start-building-section and tech-stack-section with new responsive classes.
- Modified use-cases-section to improve scrolling behavior based on breakpoints.
- Refined tech-overview-use-cases and footer components for consistent styling.
* Refactor technology stack integration and update documentation links
- Updated the technology stack links in various components to point to the new GitHub documentation repository.
- Refactored the Lambda Prize page to utilize a shared TechStackSection instead of local tech cards.
- Removed redundant tech stack message copies from the storage and technology stack pages.
- Enhanced the home feature cards section to use Link components for navigation.
- Added tests to ensure the integrity of the new tech stack structure and documentation links.
* feat: integrate social proof stats into home page and update related components
* fix: update Discord URLs to point to the new logosnetwork link
* fix: update navigation links to point to external resources and improve backdrop click handling
* feat: implement Node Programme signup form and update related page content
- Introduced new Basecamp page at `/basecamp` with detailed sections on its features, capabilities, and installation.
- Updated multiple references across the site to link to the new Basecamp page instead of the old technology stack anchor.
- Added new images for Basecamp to the public images directory.
- Modified existing JSON files to reflect the new structure and content for Basecamp.
- Enhanced the navigation to direct users to the Basecamp installation page.
- Added new collections for site settings, navigation, and footer with pull request hooks for saving changes.
- Introduced media collection for managing uploaded assets.
- Updated page management to include route validation and JSON schema compliance.
- Refactored existing code to accommodate new site content structure and ensure proper data handling.
- Enhanced link policy tests to prevent shipping of placeholder or broken links.
- Updated London and Porto circle configurations to use new forum and join URLs.
- Changed initiative hrefs to point to the resources section.
- Modified resource links in the English resources file to point to the new structure.
- Introduced new collections for Builder Hub settings and resources with appropriate hooks for saving changes as pull requests.
- Added tests for saving builder resources as pull requests.
- Updated the technology stack pages to reflect new link structures and improved SEO keywords.