PRODUCT.md
Strategic context for design work on the Twenty marketing site (
packages/twenty-website). Loaded by everyimpeccableinvocation.
Brand. The marketing site is a public-facing surface where the design itself is part of the credibility argument. Prospects evaluate Twenty partly by how the site feels. The product app (packages/twenty-front) is a separate product-register surface, governed elsewhere.
The primary audience varies by route, but the working assumption for partner-related pages is:
What the partner pages must do, in priority order:
The redesign should make /partners/profile/[slug] feel like a thoughtfully curated profile of a top-tier partner, not a generic templated card. A visitor should leave thinking "this firm is serious" even if they don't book a call this session.
Specifically:
Editorial · Founder-led · Considered.
The site reads like a thoughtful indie publication, not a SaaS landing page. Serif headlines, plenty of whitespace, deliberate typographic rhythm. Quietly opinionated — Twenty has a point of view about CRM (open-source, customizable, well-designed) and the site reflects that without shouting.
Tonal anchors:
Reject these patterns. They make the work read as generic AI / generic SaaS:
WCAG AA + keyboard + screen reader baseline:
outline: 2px solid, not just color shift).<header>, <main>, <nav>, <section aria-labelledby=…>, headings in order.aria-hidden="true".prefers-reduced-motion. Animations stop, don't slow.'use client' for interactivity).@linaria/react) for zero-runtime CSS-in-JS.@lingui/react) for i18n; never hardcode user-visible strings.packages/twenty-website/src/theme/. Colors are CSS variables resolved to OKLCH-tinted neutrals.@tabler/icons-react for iconography (no Heroicons, no custom SVGs unless purposeful).@radix-ui/react-* for primitives (Popover etc) where headless behavior is needed.DESIGN.md.docs/superpowers/specs/).