Move the hero and choose-your-path card sections out of sections/home so
pages other than the homepage can compose them, extract the two-line
statement heading, and lift CenterCtaSection out of the Movement page's
private atoms module.
The hero now takes an optional `background` node, defaulting to the same
Logos background video the homepage has always rendered.
Rendered output is unchanged: the homepage's hero, social proof, and
choose-your-path markup and the Movement page body are byte-identical to
develop, and the generated stylesheet loses no rules.
* 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
- Drop the hero 'Join a circle'/'Start a new circle' CTAs and the
'Local action' kicker; the CTAs are already covered by the blocks below.
- Use the single merged hero paragraph and tighten desktop spacing to
70px (title to body) and 108px (body to the next-section divider).
- Render the intro description at its 456px max-width by widening its grid
column (cn-merged descriptionClassName) so the line breaks match the design.
- Drop the now-unused movement.hero primaryCta/secondaryCta/kicker keys.
Clicking a marker now shows a popup with the soonest upcoming event for
that city (cover image, name, date/time, location) linked to the Luma
event page. Markers with no upcoming event fall back to a placeholder.
- Fetch all upcoming events at build time (EventsSection keeps its 3-item cap)
- Build a city+country lookup in CirclesWorldMap for O(1) event resolution
- Home-page map unaffected (upcomingEvents prop is optional)
* 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
The fixed-width 440px activism cards sat in an overflow-hidden row, so
between the md breakpoint and ~1360px the third card was clipped with no
way to reach it. Switch the container to overflow-x-auto and add scroll
snapping so the cards scroll into view instead of being hidden.
The movement Circles Resources was a hardcoded placeholder. Extract the circles
resources section into a shared CircleResourcesSection and render it on both
pages with the same real resource data and copy.
- Add components/sections/shared/circle-resources-section.tsx (header + whole-row
resource links) — circles resources-section.tsx now delegates to it (output
unchanged)
- movement route fetches getCircleResources() and threads resources through
MovementPageView to its resources section
- movement resources now uses circlesSettings.resourcesSection copy + real rows
(drops placeholder rows / t(resources.*))
tsc + eslint + 61 tests clean.
The movement "Activism in Action" cards used i18n placeholders (4 cards, generic
body, not clickable). Drive them from the same circle initiatives as /circles.
- movement route fetches getCircleInitiatives() and threads initiatives through
MovementPageView to ActivismSection
- ActivismSection renders the 3 featured initiatives (LA / Benin / Lisbon) in the
existing card design: location, title, and real description (line-clamped to
fit); each card links to initiative.href (same GitHub winnable-issues anchor as
/circles, opens in a new tab)
- card background uses the initiative image; removed now-unused movement issue
images (issueLondon/issuePorto)
tsc + eslint + 61 tests clean.
- "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.
The movement Upcoming Events was a hardcoded placeholder. Extract the circles
events section into a shared UpcomingEventsSection and render it on both pages
with the same live event data and copy.
- Add components/sections/shared/upcoming-events-section.tsx (date grouping,
EventCard, header, empty state) — circles events-section.tsx now delegates to
it (output unchanged)
- movement route fetches getUpcomingCircleEvents() and threads upcomingEvents +
locale through MovementPageView to the events section
- movement events section now uses circlesSettings.eventsSection copy + real
events (drops placeholder rows / t(events.*) and unused movementImages.event)
tsc + eslint + 61 tests clean.
719-line movement-page.tsx held every section. Extract each section into its
own file under _sections/ (hero, action-cards, campaign, activism, events,
get-involved, builder, resources) with shared types.ts + atoms.tsx;
movement-page.tsx is now a thin orchestrator. Pure move/extract, no behavior
change. tsc + 61 tests + eslint clean.
- Updated padding and margin values in multiple sections including About, Builder Portal, Circles CTA, and more to use consistent spacing units.
- Adjusted button and footer styles for better alignment and visual hierarchy.
- Enhanced FAQ accordion component with smoother transitions and improved accessibility attributes.
- Refined Tech Stack and Technology Overview sections for better layout and spacing.
- Standardized gap and padding values in navigation and overlay components for a cohesive design.
- 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.
- 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.
* fix(builders-hub): align ideas page details to Figma
Match exact Figma specs for the Builder Ideas page (desktop 121:11657,
mobile 121:11581):
- idea-row: desktop index weight Regular (was medium); mobile title
width 179px; mobile Apply CTA square corners (drop rounded-[4px]) and
left-aligned at x=298 (right-[22px])
- bottom CTA: heading H3 (36px desktop / 30px mobile) instead of H2
(56px); restore text-h3-serif line-height 1 / -0.03em; gap 24px
* fix(builders-hub): align RFP page details to Figma
Match exact Figma specs for the Builder RFPs page (desktop 121:11577,
mobile 121:11489):
- rfp-card: title letter-spacing -0.01em (H4 Sans) instead of
tracking-tight (-0.025em)
- rfp-list-row: apply the same Row-entry corrections as the ideas row —
desktop index weight Regular (was medium), mobile title width 179px,
Learn More CTA square corners (drop rounded-[4px]) and left-aligned at
x=298 (right-[22px])
- listing grid (RFP branch only): desktop top margin 138px so the first
card lands at Figma y=374 (was 160px -> 396px, 22px too low); ideas
and list-view branches untouched
Text copy verified against Figma (titles/taglines match, British
spelling kept where Figma used American). Grid layout, card geometry
(345x317 desktop / 369x317 mobile), colours, borders, 96px images and
CTA positions confirmed matching.
* fix(get-started): align spacing, colours, and copy with Figma
- Correct 04 heading copy to "What you can build today"
- Swap community row alternating backgrounds (row 0 = grey-01)
- Restyle community row labels to 14px (sans-medium number + serif name)
- Underline community row "Learn more" CTA (border-b)
- Build card body: Public Sans 14px instead of mono 10px
- Fix install/docs section top padding (install pt-24, docs pt-40 on desktop)
- Add 6px gap between install card image and text panel
* fix(basecamp): align spacing, padding, and text gaps with Figma design
- Fixed HowItWorksSection: md:py-3 → md:py-10 (was reducing padding on desktop)
- Fixed LocalFirstSection: py-3 → py-10 for proper vertical spacing
- Increased gap spacing from 3 to 4 across card components and sections
- Added uppercase styling to LocalFirstSection eyebrow
- Added opacity-0 to footerLabel for layout consistency
- Adjusted ModularSection vertical padding: py-10 → py-12 mobile, py-10 desktop
- Added flex flex-col gap-4 to ModularSection body text
- CapabilitiesSection: py-6 → py-10 mobile for consistent spacing
- ResourcesSection: py-10 → py-12 mobile for alignment with other sections
- Improved internal spacing in ResourceCard (gap-3 → gap-4, mt-3 → mt-4)
All changes verified against Figma desktop design at node-id=146-15527
* refine(basecamp): fine-tune section spacing and padding alignment
- HeroSection: pb-12 mobile, pb-10 desktop (better spacing at section break)
- HowItWorks title gap: mb-6 → mb-8 (increased spacing to content)
- ModularSection: removed inconsistent py-12, standardized to py-10
- CapabilitiesSection heading: mb-10 → mb-12 (better visual hierarchy)
- ResourcesSection: removed inconsistent py-12, standardized to py-10
All sections now maintain consistent padding pattern: py-10 with device-specific overrides where needed
* fix(lambda-prize): align spacing, padding, and gap with design
- HowItWorks: gap-3 → gap-4 mobile, gap-6 desktop, added md:px-3 md:py-10
- HowItWorks titles: mb-6 → mb-8 for both sections
- FeaturedPrizes: mt-6 → mt-10 mobile, mt-12 desktop, gap-3 → gap-4, moved px-3 to section level
- AboutProgramme: gap-3 → gap-4 mobile, gap-6 desktop, added md:px-3 md:py-10
- Support: pt-10 → py-10 mobile, py-12 desktop, added px-3, removed redundant px-3 from grid
All sections now have consistent spacing patterns aligned with Figma design specifications
* fix(lambda-prize): precision spacing refinements - standardize padding and margins
- DataRows: increase py-1.5 → py-3 for better vertical spacing
- FeaturedPrizes: reduce excessive padding pt-[100px] → pt-10, md:pt-[200px] → md:pt-12
- Hero: standardize margins mb-[60px] → mb-12, mt-[60px] → mt-12
- Support: standardize margin-top mt-[35px] → mt-6, md:mt-[91px] → md:mt-8
* fix(research): align section heights with Figma design
- Change hero section from min-h-[447px] to h-[447px] (fixed height)
- Change overview section from min-h-[670px] to h-[670px] (desktop)
- Change resource rows from min-h-[50px] to h-[50px] (fixed height)
- Change contribute section from min-h-[262px] to h-[262px] (desktop)
These fixed heights match the Figma design specifications for precise
layout control across all breakpoints.
* fix(research): revert to min-h for responsive design
Responsive design requires minimum heights (min-h) instead of fixed
heights (h) to accommodate content overflow on various screen sizes.
Maintains Figma design intent while ensuring proper mobile/tablet
layout behavior.
* fix(press): align PressHero padding with Figma design
Change PressHero section padding from pt-6 (24px) to pt-10 (40px)
to match Figma design specifications where section starts at y=40.
All other spacing, margins, colors, and image ratios already aligned
with Figma design. Press page now 100% design-compliant.
* fix(podcast): add wrapper padding for consistent page layout spacing
* fix(podcast): align top padding with Figma design (pt-20/80px)
* fix(broadcast-network): align padding with Figma design specs
* fix(technology-stack): align hero padding with design specifications
* fix(technology-stack): center hero section on desktop to fix left alignment
* fix(technology-stack): make architecture image responsive and prevent clipping
* fix(technology-stack): constrain all sections to 1440px max-width on desktop
* refactor: centralize max-width layout at page level to eliminate duplication
- Add SectionLayout wrapper to all technology-stack pages (main, blockchain, networking, storage, messaging)
- Move 1440px max-width constraint from individual section components to page-level layout
- Remove mx-auto max-w-360/max-w-[1440px] from tech-stack sections and shared components
- Reduces code duplication and centralizes layout management
* refactor: simplify layout by inlining max-width constraint
- Remove SectionLayout function definitions from each page
- Use simple div wrapper at page return level
- Reduces code duplication and improves maintainability
* refactor: revert page-level layout constraint, keep section-level management
- Remove max-width wrapper from page returns
- Each section maintains full-width background
- Section components manage internal 1440px constraint
- Preserves visual hierarchy from Figma design
* refactor: centralize content width constraints with ContentWidth component
- Create ContentWidth component for 1440px max-width constraint
- Remove layout-level max-width from main element to allow full-width sections
- Apply ContentWidth to all home page sections for consistent layout
- Convert absolute positioning to flex/grid layouts in:
* Parallel Society (gallery display)
* Tech Stack (title and metadata centering)
* Feature Cards (3-column grid)
* Circles CTA (vertical layout)
* Press Section (flex grid)
* Social Proof (4-column grid)
* Start Building (2-column layout)
* About Section (centered closing text)
- Implement responsive sizing with Tailwind classes
- Update technology-stack page section for proper centering
This enables full-width background colors while constraining content to 1440px max-width, improving design system consistency across all pages.
* refactor: make social proof section full-width without 1440px constraint
Remove ContentWidth wrapper from the stat cards section to allow it to span full screen width while maintaining proper padding.
* fix: add line break in 'The Logos Technology Stack' title
Match Figma design by breaking 'The Logos' and 'Technology Stack' onto separate lines.
* fix: add line break in Basecamp title
Match Figma design by breaking 'Basecamp is our' and 'Exit Guide.' onto separate lines.
* fix: add line break to tech stack title on mobile view
Use <br /> instead of literal newline for proper HTML rendering of 'The ... Technology Stack' title.
* fix: add width constraints to AppInstall paragraph text
Match container width (260px mobile, 464px desktop) to ensure text wrapping aligns with Figma design.
* Revert "fix: add width constraints to AppInstall paragraph text"
This reverts commit 184efed9421b0b8c006d5121f26da72b7d015491.
* fix(tech-stack): constrain desktop title to 464px to match Figma
Desktop h2 used w-full, so 'The Logos Technology Stack' stayed on one
line at wide/4K viewports. Figma node 121:6875 sets it to 464px, which
wraps it to two lines. Parent is items-center so the fixed width centers.
* refacor: refactor layout components to use ContentWidth for consistent styling
- Updated various sections across the application to wrap content in the ContentWidth component for improved layout consistency.
- Adjusted padding and margin values in several sections to enhance visual alignment.
- Modified text content in the About section to reflect updated messaging.
- Improved accessibility and responsiveness by ensuring all sections utilize the ContentWidth component.
* feat: integrate ContentWidth component for layout consistency across various sections
* feat: update StorageAccess component with new card data and CTA buttons for improved user interaction
* feat: update MessagingIntro and related tests for improved layout and responsiveness based on Figma specifications
* Refactor code structure for improved readability and maintainability
* Refactor code structure for improved readability and maintainability
* Refactor technology stack detail layout and hero components
- Introduced `TechStackDetailPage` and `TechStackDetailSection` components for consistent layout across technology stack pages.
- Updated individual technology stack pages (blockchain, messaging, networking, storage) to utilize the new layout components.
- Refactored hero components (BlockchainHero, MessagingHero, NetworkingHero, StorageHero) to use `TechStackDetailHero` for improved structure and reusability.
- Adjusted spacing and margin classes to align with design specifications, removing redundant margin classes.
- Added `imageFit` property to builders hub settings schema to control image display behavior.
- Updated tests to ensure layout consistency and adherence to design specifications.
* feat: enhance layout and responsiveness of articles and podcasts sections based on Figma specifications
* fix: prevent messaging delivery image clipping
* feat: update article and podcast layouts for improved responsiveness and alignment with Figma designs
* test: remove ui implementation contracts
* 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
- 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.