Rebuild the About page from the current marketing frames, and leave the unapproved sentences off the page.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
adilalloandCursor committed 2026-11-03 16:59:36 -07:00
1 parent 3dee3a587b
commit 2101676429
56 files changed
+1515 -238

No files matched your search

@@ -0,0 +1,37 @@
"use client";
/**
* Figma: "Section / Narrative Block" (24237:1241)
*/
import { memo, useCallback, useState } from "react";
import { useMessages } from "../../../contexts/MessagesContext";
import AskOrganizerInquiryModal from "../../modals/AskOrganizerInquiry";
import NarrativeBlockView from "./NarrativeBlock.view";
const NarrativeBlockContainer = memo(() => {
const copy = useMessages().pages.about.narrativeBlock;
const [inquiryOpen, setInquiryOpen] = useState(false);
const openInquiry = useCallback(() => setInquiryOpen(true), []);
const closeInquiry = useCallback(() => setInquiryOpen(false), []);
return (
<>
<NarrativeBlockView
heading={copy.heading}
paragraphs={copy.paragraphs}
addHeading={copy.addHeading}
addLine={copy.addLine}
shareExperiences={copy.shareExperiences}
helpBuild={copy.helpBuild}
helpBuildHref={copy.helpBuildHref}
onShareExperiences={openInquiry}
/>
<AskOrganizerInquiryModal isOpen={inquiryOpen} onClose={closeInquiry} />
</>
);
});
NarrativeBlockContainer.displayName = "NarrativeBlock";
export default NarrativeBlockContainer;
@@ -0,0 +1,10 @@
export interface NarrativeBlockViewProps {
heading: string;
paragraphs: string[];
addHeading: string;
addLine: string;
shareExperiences: string;
helpBuild: string;
helpBuildHref: string;
onShareExperiences: () => void;
}
@@ -0,0 +1,77 @@
"use client";
import { memo } from "react";
import Button from "../../buttons/Button";
import type { NarrativeBlockViewProps } from "./NarrativeBlock.types";
function NarrativeBlockView({
heading,
paragraphs,
addHeading,
addLine,
shareExperiences,
helpBuild,
helpBuildHref,
onShareExperiences,
}: NarrativeBlockViewProps) {
return (
<section
data-figma-node="24237:1241"
className="flex flex-col items-center gap-10 border-b border-[var(--color-border-default-secondary)] bg-black px-[var(--space-400)] py-16 lg:gap-14 lg:px-[var(--space-2400)] lg:py-[var(--space-3000)]"
aria-labelledby="about-narrative-heading"
>
<div className="flex w-full max-w-[800px] flex-col gap-8 lg:gap-10">
<h2
id="about-narrative-heading"
className="font-bricolage-grotesque text-heading-l text-[var(--color-content-default-primary)] lg:text-heading-xxl"
>
{heading}
</h2>
<div className="flex flex-col gap-8">
{paragraphs.map((paragraph) => (
<p
key={paragraph}
className="font-inter text-paragraph-l text-[var(--color-content-default-secondary)] lg:text-paragraph-xl"
>
{paragraph}
</p>
))}
</div>
<div className="flex flex-col gap-6">
<div className="flex flex-col gap-2">
<h3 className="font-bricolage-grotesque text-display-xs text-[var(--color-content-default-primary)]">
{addHeading}
</h3>
<p className="font-inter text-paragraph-s text-[var(--color-content-default-secondary)]">
{addLine}
</p>
</div>
<div className="flex flex-wrap gap-4">
<Button
buttonType="filled"
palette="default"
size="medium"
onClick={onShareExperiences}
>
{shareExperiences}
</Button>
<Button
buttonType="filled"
palette="default"
size="medium"
href={helpBuildHref}
target="_blank"
rel="noopener noreferrer"
>
{helpBuild}
</Button>
</div>
</div>
</div>
</section>
);
}
NarrativeBlockView.displayName = "NarrativeBlockView";
export default memo(NarrativeBlockView);
@@ -0,0 +1,2 @@
export { default } from "./NarrativeBlock.container";
export type { NarrativeBlockViewProps } from "./NarrativeBlock.types";