Files
clawmates/frontend/tests/e2e/p7-marketing.spec.ts
T
Omar SobhandClaude Opus 4.8 4b55c4d81e
ci / gates (push) Has been cancelled
ci / rust (push) Has been cancelled
ci / sandbox-k8s (push) Has been cancelled
ci / frontend (push) Has been cancelled
ci / e2e (push) Has been cancelled
feat(marketing): new hero copy + single CTA
- Headline → "Scale your Large World" (coral on "Large World").
- Subtext → "Building safe and scalable systems of claws for any domain of work."
- Drop the "Get started for free" hero button; keep "Book a demo".
- Remove the three hero trust pills (free credits / no card / self-hostable).
- Point the p7 hero CTA assertion at "Book a demo"; refresh the @visual baseline.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-15 14:30:05 -07:00

43 lines
1.5 KiB
TypeScript

import AxeBuilder from "@axe-core/playwright";
import { expect, test } from "@playwright/test";
// R5: the public marketing landing serves at "/" for logged-out visitors
// (middleware rewrite → /marketing), with our brand and honest claims.
test("the marketing landing renders for logged-out visitors @marketing", async ({
page,
context,
}) => {
await context.clearCookies();
await page.goto("/");
// Hero + nav + our wordmark.
await expect(
page.getByRole("heading", { name: /AI coworkers/ }),
).toBeVisible();
await expect(
page.getByRole("link", { name: "Book a demo" }).first(),
).toBeVisible();
// FAQ accordion: the first item is open by default; expand another.
await expect(page.getByText(/A claw is an AI coworker/)).toBeVisible();
await page.getByRole("button", { name: /run it on my own/i }).click();
await expect(page.getByText(/air-gapped/i).first()).toBeVisible();
// No SOC 2 / compliance claims (we don't make them).
await expect(page.getByText(/SOC 2/i)).toHaveCount(0);
});
test("the marketing landing is accessible @marketing", async ({
page,
context,
}) => {
await context.clearCookies();
await page.goto("/");
await page.evaluate(() =>
Promise.allSettled(document.getAnimations().map((a) => a.finished)),
);
const results = await new AxeBuilder({ page }).analyze();
const blocking = results.violations.filter(
(v) => v.impact === "serious" || v.impact === "critical",
);
expect(blocking.map((v) => v.id)).toEqual([]);
});