chore(website): rename twenty-website-new → twenty-website (#20745)

## Summary
Follow-up to the Cloudflare/OpenNext migration (#20741). Now that the
legacy `twenty-website` package was already removed in #20270, the
`-new` suffix on the marketing site package is no longer meaningful.

## What changes
- **Directory rename**: `git mv packages/twenty-website-new
packages/twenty-website` (1213 files moved, no content change)
- **Package + nx config**: `package.json` and `project.json` name fields
updated, `sourceRoot` repointed
- **Source refs**: `load-local-articles.ts` and
`load-local-release-notes.ts` had a hardcoded `'twenty-website-new'`
segment in their monorepo-root fallback path;
`app/[locale]/releases/page.tsx` had display strings showing where to
add content
- **External refs**: root `package.json` workspaces, root `CLAUDE.md` /
`README.md`, `twenty-sdk` + `create-twenty-app` READMEs,
`.vscode/twenty.code-workspace`, `.cursor/rules/changelog-process.mdc`,
Crowdin config + the three `website-i18n-*` CI workflows +
`ci-website.yaml`
- **Docker cleanup**:
`packages/twenty-docker/twenty-website-new/Dockerfile` deleted; the two
Makefile targets (`prod-website-new-build` / `prod-website-new-run`)
that referenced it removed — EKS deploy was retired in the Cloudflare
migration
- **`yarn.lock`** regenerated against the new workspace path

## What's deliberately not in this PR
The dev hostname `website-new.twenty-main.com` in `wrangler.jsonc` stays
for now. Migrating it to `website.twenty-main.com` needs coordinated DNS
deletion (current CNAME points at the legacy Docusaurus NLB and serves
503s) and removal of the matching legacy `website` Helm chart in
`twenty-infra`. Flagged as a separate cleanup.

Companion infra PR: https://github.com/twentyhq/twenty-infra/pull/682
(workflow paths + Terraform ECR + docs)

## Test plan
- [x] `yarn install --immutable` resolves clean against the new path
- [x] `npx nx typecheck twenty-website` passes
- [x] `npx nx lint twenty-website` passes
- [ ] CI on this PR confirms the same on a fresh checkout
- [ ] After merge: trigger `Deploy Website` workflow against
`environment=dev` to confirm the renamed working-directory deploys
correctly
This commit is contained in:
Félix Malfait
2026-05-19 23:42:09 +02:00
committed by GitHub
parent 24a836cc7d
commit 658bdf3e57
1228 changed files with 106 additions and 151 deletions
@@ -0,0 +1,32 @@
import { theme } from '@/theme';
import { styled } from '@linaria/react';
const DividerOuter = styled.div`
margin: ${theme.spacing(10)} 0;
width: 100%;
@media (min-width: ${theme.breakpoints.md}px) {
display: flex;
justify-content: flex-end;
}
`;
const DividerLine = styled.div`
background-color: ${theme.colors.primary.border[20]};
height: 1px;
width: 100%;
@media (min-width: ${theme.breakpoints.md}px) {
margin-left: calc(132px + ${theme.spacing(10)});
width: auto;
flex: 1 1 0;
}
`;
export function Divider() {
return (
<DividerOuter aria-hidden>
<DividerLine />
</DividerOuter>
);
}
@@ -0,0 +1,69 @@
import { formatReleaseDisplayDate } from '@/lib/releases/format-release-display-date';
import { theme } from '@/theme';
import { styled } from '@linaria/react';
import { ReleaseMarkdown } from './ReleaseMarkdown';
const ArticleRow = styled.article`
column-gap: ${theme.spacing(6)};
display: grid;
grid-template-columns: minmax(0, 1fr);
min-width: 0;
row-gap: ${theme.spacing(4)};
@media (min-width: ${theme.breakpoints.md}px) {
column-gap: ${theme.spacing(10)};
grid-template-columns: minmax(96px, 132px) minmax(0, 1fr);
row-gap: 0;
}
`;
const MetaColumn = styled.div`
align-items: flex-start;
display: flex;
flex-direction: column;
min-width: 0;
row-gap: ${theme.spacing(1)};
@media (min-width: ${theme.breakpoints.md}px) {
padding-top: ${theme.spacing(2)};
}
`;
const Version = styled.span`
color: ${theme.colors.primary.text[80]};
font-size: ${theme.font.size(5)};
font-weight: ${theme.font.weight.medium};
line-height: 1.3;
`;
const DateText = styled.span`
color: ${theme.colors.primary.text[60]};
font-size: ${theme.font.size(3)};
white-space: nowrap;
`;
const ContentColumn = styled.div`
min-width: 0;
`;
type ReleaseEntryProps = {
content: string;
date: string;
release: string;
};
export function ReleaseEntry({ content, date, release }: ReleaseEntryProps) {
const displayDate = formatReleaseDisplayDate(date);
return (
<ArticleRow id={release}>
<MetaColumn>
<Version>{release}</Version>
<DateText>{displayDate || 'TBD'}</DateText>
</MetaColumn>
<ContentColumn>
<ReleaseMarkdown markdown={content} />
</ContentColumn>
</ArticleRow>
);
}
@@ -0,0 +1,9 @@
import { MarkdownProse } from '@/design-system/components/MarkdownProse';
type ReleaseMarkdownProps = {
markdown: string;
};
export function ReleaseMarkdown({ markdown }: ReleaseMarkdownProps) {
return <MarkdownProse markdown={markdown} />;
}
@@ -0,0 +1,54 @@
import { Container } from '@/design-system/components';
import { theme } from '@/theme';
import { styled } from '@linaria/react';
import type { ReactNode } from 'react';
const StyledSection = styled.section`
background-color: ${theme.colors.primary.background[100]};
min-width: 0;
width: 100%;
`;
const StyledContainer = styled(Container)`
max-width: ${theme.layout.readingWide};
padding-bottom: ${theme.spacing(20)};
padding-left: ${theme.spacing(4)};
padding-right: ${theme.spacing(4)};
padding-top: ${theme.spacing(8)};
@media (min-width: ${theme.breakpoints.md}px) {
padding-bottom: ${theme.spacing(28)};
padding-left: ${theme.spacing(10)};
padding-right: ${theme.spacing(10)};
padding-top: ${theme.spacing(10)};
}
`;
const EmptyMessage = styled.p`
color: ${theme.colors.primary.text[60]};
font-size: ${theme.font.size(4)};
line-height: 1.65;
margin: 0;
max-width: 40rem;
strong {
color: ${theme.colors.primary.text[80]};
font-family: ${theme.font.family.mono};
font-size: ${theme.font.size(3)};
font-weight: ${theme.font.weight.medium};
}
`;
type RootProps = {
children: ReactNode;
};
export function Root({ children }: RootProps) {
return (
<StyledSection aria-label="Releases">
<StyledContainer>{children}</StyledContainer>
</StyledSection>
);
}
export { EmptyMessage };
@@ -0,0 +1,10 @@
import { Divider } from './Divider';
import { EmptyMessage, Root } from './Root';
import { ReleaseEntry } from './ReleaseEntry';
export const ReleaseNotes = {
Divider,
EmptyMessage,
ReleaseEntry,
Root,
};
@@ -0,0 +1 @@
export { ReleaseNotes } from './components';