Match Home, top nav, hero, and logo wall to the current marketing frames.

Puts Workshops in the header, pairs the hero with a static rule card and breakpoint CTAs, and shows the three pilot marks with no wall label.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
adilalloandCursor committed 2026-11-02 18:50:32 -07:00
1 parent e12e06f7ce
commit 33cdaf135c
47 files changed
+728 -527

No files matched your search

+22 -20
View File
@@ -7,40 +7,40 @@ test.describe("Critical User Journeys", () => {
test("complete user journey: learn about CommunityRule", async ({ page }) => {
// 1. User lands on homepage
await expect(page.locator("text=Collaborate")).toBeVisible();
await expect(page.locator("text=Build structure")).toBeVisible();
// 2. User reads hero section
await expect(
page.locator("text=Help your community make important decisions"),
page.locator("text=Strong communities agree on four things early"),
).toBeVisible();
// 3. User clicks CTA to learn more
const learnCta = page
.getByRole("link", { name: /Learn how CommunityRule works/i })
.or(page.getByRole("button", { name: /Learn how CommunityRule works/i }))
.getByRole("link", { name: /Talk to a facilitator/i })
.or(page.getByRole("button", { name: /Talk to a facilitator/i }))
.first();
if ((await learnCta.count()) > 0 && (await learnCta.isVisible())) {
await learnCta.click();
await expect(page).toHaveURL(/\/how-it-works/);
await expect(page).toHaveURL(/\/workshops/);
}
// 4. User scrolls to CardSteps section (home)
// Note: mobile title is one line; lg+ uses stacked "How / CommunityRule / helps" from home copy
const howItWorksHeading = page.locator(
'h2:has-text("How CommunityRule works"), h2:has-text("How"), h2:has-text("CommunityRule"), h2:has-text("helps")',
'h2:has-text("How CommunityRule helps"), h2:has-text("How"), h2:has-text("CommunityRule"), h2:has-text("helps")',
);
await expect(howItWorksHeading).toBeVisible();
// 5. User reads the process steps
await expect(
page.locator("text=Document how your community makes decisions"),
page.locator("text=See what has worked for other communities"),
).toBeVisible();
await expect(
page.locator("text=Build an operating manual for a successful community"),
page.locator("text=Decide how you will decide, while things are calm"),
).toBeVisible();
await expect(
page.locator(
"text=Get a link to your manual for your group to review and evolve",
"text=Invite your members and change it together as you grow",
),
).toBeVisible();
@@ -87,20 +87,22 @@ test.describe("Critical User Journeys", () => {
// Check main sections are present
await expect(
page.locator("h1, h2").filter({ hasText: "Collaborate" }),
page.locator("h1, h2").filter({ hasText: "Build structure" }),
).toBeVisible();
const howItWorksHeading = page.locator(
'h2:has-text("How CommunityRule works"), h2:has-text("How CommunityRule helps")',
'h2:has-text("How CommunityRule helps"), h2:has-text("How CommunityRule helps")',
);
await expect(howItWorksHeading).toBeVisible();
await expect(
page.locator("h1").filter({ hasText: "Tools for the parts that get hard" }),
page.locator("h2").filter({ hasText: "Tools for the parts that get hard" }),
).toBeVisible();
// Check key components are rendered
await expect(page.locator('img[alt="Hero illustration"]')).toBeVisible();
await expect(
page.getByRole("heading", { name: "CommunityRule Creative Team" }),
).toBeVisible();
await expect(page.locator('img[alt="Food Not Bombs"]')).toBeVisible();
await expect(page.locator("text=Jo Freeman")).toBeVisible();
});
@@ -108,11 +110,11 @@ test.describe("Critical User Journeys", () => {
test("feature grid section functionality", async ({ page }) => {
// Check section header
await expect(
page.locator('h1:has-text("Tools for the parts that get hard")'),
page.locator('h2:has-text("Tools for the parts that get hard")'),
).toBeVisible();
await expect(
page.locator(
"text=Every group runs into the same knots. CommunityRule gives you a way through",
"text=Every community runs into the same knots. CommunityRule gives you a way through",
),
).toBeVisible();
@@ -127,12 +129,12 @@ test.describe("Critical User Journeys", () => {
featureSection.locator("text=Plan for conflict"),
).toBeVisible();
// Feature tiles are presentational — only the lockup "Explore the toolkit" is a link
// Feature tiles are presentational — only the lockup "Explore the patterns" is a link
await expect(
featureSection.locator('a[href="#decision-making"]'),
).toHaveCount(0);
await expect(
featureSection.getByRole("link", { name: "Explore the toolkit" }),
featureSection.getByRole("link", { name: "Explore the patterns" }),
).toHaveAttribute("href", "/learn");
});
@@ -186,19 +188,19 @@ test.describe("Critical User Journeys", () => {
// Test mobile viewport
await page.setViewportSize({ width: 375, height: 667 });
await expect(
page.locator("h1, h2").filter({ hasText: "Collaborate" }),
page.locator("h1, h2").filter({ hasText: "Build structure" }),
).toBeVisible();
// Test tablet viewport
await page.setViewportSize({ width: 768, height: 1024 });
await expect(
page.locator("h1, h2").filter({ hasText: "Collaborate" }),
page.locator("h1, h2").filter({ hasText: "Build structure" }),
).toBeVisible();
// Test desktop viewport
await page.setViewportSize({ width: 1440, height: 900 });
await expect(
page.locator("h1, h2").filter({ hasText: "Collaborate" }),
page.locator("h1, h2").filter({ hasText: "Build structure" }),
).toBeVisible();
});
});