diff --git a/packages/twenty-website-new/package.json b/packages/twenty-website-new/package.json index 82526dead1..8e5ddc718a 100644 --- a/packages/twenty-website-new/package.json +++ b/packages/twenty-website-new/package.json @@ -5,7 +5,8 @@ "nx": "NX_DEFAULT_PROJECT=twenty-website-new node ../../node_modules/nx/bin/nx.js", "dev": "npx next dev", "build": "npx next build", - "start": "npx next start" + "start": "npx next start", + "convert-images": "node ./scripts/convert-png-to-webp.mjs" }, "dependencies": { "@base-ui/react": "^1.3.0", @@ -35,6 +36,7 @@ "@types/react": "^19", "@types/react-dom": "^19", "@types/three": "^0.183.1", - "babel-plugin-react-compiler": "1.0.0" + "babel-plugin-react-compiler": "1.0.0", + "sharp": "^0.33.5" } } diff --git a/packages/twenty-website-new/public/images/home/hero/background.png b/packages/twenty-website-new/public/images/home/hero/background.png deleted file mode 100644 index 2d5203cdee..0000000000 Binary files a/packages/twenty-website-new/public/images/home/hero/background.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/hero/background.webp b/packages/twenty-website-new/public/images/home/hero/background.webp new file mode 100644 index 0000000000..11b42b867b Binary files /dev/null and b/packages/twenty-website-new/public/images/home/hero/background.webp differ diff --git a/packages/twenty-website-new/public/images/home/hero/foreground.png b/packages/twenty-website-new/public/images/home/hero/foreground.png deleted file mode 100644 index 3b9d55d84a..0000000000 Binary files a/packages/twenty-website-new/public/images/home/hero/foreground.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/hero/foreground.webp b/packages/twenty-website-new/public/images/home/hero/foreground.webp new file mode 100644 index 0000000000..65e9028b33 Binary files /dev/null and b/packages/twenty-website-new/public/images/home/hero/foreground.webp differ diff --git a/packages/twenty-website-new/public/images/home/hero/sales-dashboard/distribution.png b/packages/twenty-website-new/public/images/home/hero/sales-dashboard/distribution.png deleted file mode 100644 index b456bde12b..0000000000 Binary files a/packages/twenty-website-new/public/images/home/hero/sales-dashboard/distribution.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/hero/sales-dashboard/distribution.webp b/packages/twenty-website-new/public/images/home/hero/sales-dashboard/distribution.webp new file mode 100644 index 0000000000..3d628345e6 Binary files /dev/null and b/packages/twenty-website-new/public/images/home/hero/sales-dashboard/distribution.webp differ diff --git a/packages/twenty-website-new/public/images/home/hero/sales-dashboard/revenue.png b/packages/twenty-website-new/public/images/home/hero/sales-dashboard/revenue.png deleted file mode 100644 index 7fced1141c..0000000000 Binary files a/packages/twenty-website-new/public/images/home/hero/sales-dashboard/revenue.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/hero/sales-dashboard/revenue.webp b/packages/twenty-website-new/public/images/home/hero/sales-dashboard/revenue.webp new file mode 100644 index 0000000000..1d05c250b8 Binary files /dev/null and b/packages/twenty-website-new/public/images/home/hero/sales-dashboard/revenue.webp differ diff --git a/packages/twenty-website-new/public/images/home/hero/sales-dashboard/visits.png b/packages/twenty-website-new/public/images/home/hero/sales-dashboard/visits.png deleted file mode 100644 index b5822a6f71..0000000000 Binary files a/packages/twenty-website-new/public/images/home/hero/sales-dashboard/visits.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/hero/sales-dashboard/visits.webp b/packages/twenty-website-new/public/images/home/hero/sales-dashboard/visits.webp new file mode 100644 index 0000000000..c0a2ca4a0d Binary files /dev/null and b/packages/twenty-website-new/public/images/home/hero/sales-dashboard/visits.webp differ diff --git a/packages/twenty-website-new/public/images/home/hero/twenty-demo-logo.png b/packages/twenty-website-new/public/images/home/hero/twenty-demo-logo.png deleted file mode 100644 index aac50ec94c..0000000000 Binary files a/packages/twenty-website-new/public/images/home/hero/twenty-demo-logo.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/hero/twenty-demo-logo.webp b/packages/twenty-website-new/public/images/home/hero/twenty-demo-logo.webp new file mode 100644 index 0000000000..436618eb97 Binary files /dev/null and b/packages/twenty-website-new/public/images/home/hero/twenty-demo-logo.webp differ diff --git a/packages/twenty-website-new/public/images/home/logo-bar/bayer.png b/packages/twenty-website-new/public/images/home/logo-bar/bayer.png deleted file mode 100644 index 29ed956a1a..0000000000 Binary files a/packages/twenty-website-new/public/images/home/logo-bar/bayer.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/logo-bar/bayer.webp b/packages/twenty-website-new/public/images/home/logo-bar/bayer.webp new file mode 100644 index 0000000000..55258e6542 Binary files /dev/null and b/packages/twenty-website-new/public/images/home/logo-bar/bayer.webp differ diff --git a/packages/twenty-website-new/public/images/home/logo-bar/french-republic.png b/packages/twenty-website-new/public/images/home/logo-bar/french-republic.png deleted file mode 100644 index b02fae1db7..0000000000 Binary files a/packages/twenty-website-new/public/images/home/logo-bar/french-republic.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/logo-bar/french-republic.webp b/packages/twenty-website-new/public/images/home/logo-bar/french-republic.webp new file mode 100644 index 0000000000..fade8f19fa Binary files /dev/null and b/packages/twenty-website-new/public/images/home/logo-bar/french-republic.webp differ diff --git a/packages/twenty-website-new/public/images/home/logo-bar/pwc.png b/packages/twenty-website-new/public/images/home/logo-bar/pwc.png deleted file mode 100644 index e69ba0f751..0000000000 Binary files a/packages/twenty-website-new/public/images/home/logo-bar/pwc.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/logo-bar/pwc.webp b/packages/twenty-website-new/public/images/home/logo-bar/pwc.webp new file mode 100644 index 0000000000..3dff470e82 Binary files /dev/null and b/packages/twenty-website-new/public/images/home/logo-bar/pwc.webp differ diff --git a/packages/twenty-website-new/public/images/home/logo-bar/xero.png b/packages/twenty-website-new/public/images/home/logo-bar/xero.png deleted file mode 100644 index 600d95b388..0000000000 Binary files a/packages/twenty-website-new/public/images/home/logo-bar/xero.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/logo-bar/xero.webp b/packages/twenty-website-new/public/images/home/logo-bar/xero.webp new file mode 100644 index 0000000000..75e39b2a74 Binary files /dev/null and b/packages/twenty-website-new/public/images/home/logo-bar/xero.webp differ diff --git a/packages/twenty-website-new/public/images/home/stepper/background-shape.png b/packages/twenty-website-new/public/images/home/stepper/background-shape.png deleted file mode 100644 index bc06894a5a..0000000000 Binary files a/packages/twenty-website-new/public/images/home/stepper/background-shape.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/stepper/background-shape.webp b/packages/twenty-website-new/public/images/home/stepper/background-shape.webp new file mode 100644 index 0000000000..266656cc92 Binary files /dev/null and b/packages/twenty-website-new/public/images/home/stepper/background-shape.webp differ diff --git a/packages/twenty-website-new/public/images/home/stepper/background.png b/packages/twenty-website-new/public/images/home/stepper/background.png deleted file mode 100644 index 822dfe28fb..0000000000 Binary files a/packages/twenty-website-new/public/images/home/stepper/background.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/stepper/background.webp b/packages/twenty-website-new/public/images/home/stepper/background.webp new file mode 100644 index 0000000000..02520a1911 Binary files /dev/null and b/packages/twenty-website-new/public/images/home/stepper/background.webp differ diff --git a/packages/twenty-website-new/public/images/home/testimonials/avatar-one.png b/packages/twenty-website-new/public/images/home/testimonials/avatar-one.png deleted file mode 100644 index a99a999769..0000000000 Binary files a/packages/twenty-website-new/public/images/home/testimonials/avatar-one.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/testimonials/avatar-three.png b/packages/twenty-website-new/public/images/home/testimonials/avatar-three.png deleted file mode 100644 index a99a999769..0000000000 Binary files a/packages/twenty-website-new/public/images/home/testimonials/avatar-three.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/testimonials/avatar-two.png b/packages/twenty-website-new/public/images/home/testimonials/avatar-two.png deleted file mode 100644 index a99a999769..0000000000 Binary files a/packages/twenty-website-new/public/images/home/testimonials/avatar-two.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/testimonials/background-shape.webp b/packages/twenty-website-new/public/images/home/testimonials/background-shape.webp new file mode 100644 index 0000000000..0e85b2351e Binary files /dev/null and b/packages/twenty-website-new/public/images/home/testimonials/background-shape.webp differ diff --git a/packages/twenty-website-new/public/images/home/three-cards-feature/familiar-interface.png b/packages/twenty-website-new/public/images/home/three-cards-feature/familiar-interface.png deleted file mode 100644 index 00fb1b0231..0000000000 Binary files a/packages/twenty-website-new/public/images/home/three-cards-feature/familiar-interface.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/three-cards-feature/familiar-interface.webp b/packages/twenty-website-new/public/images/home/three-cards-feature/familiar-interface.webp new file mode 100644 index 0000000000..b6a15307b9 Binary files /dev/null and b/packages/twenty-website-new/public/images/home/three-cards-feature/familiar-interface.webp differ diff --git a/packages/twenty-website-new/public/images/home/three-cards-feature/fast-path.png b/packages/twenty-website-new/public/images/home/three-cards-feature/fast-path.png deleted file mode 100644 index 00fb1b0231..0000000000 Binary files a/packages/twenty-website-new/public/images/home/three-cards-feature/fast-path.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/three-cards-feature/fast-path.webp b/packages/twenty-website-new/public/images/home/three-cards-feature/fast-path.webp new file mode 100644 index 0000000000..8d98dc9dc3 Binary files /dev/null and b/packages/twenty-website-new/public/images/home/three-cards-feature/fast-path.webp differ diff --git a/packages/twenty-website-new/public/images/home/three-cards-feature/live-data.png b/packages/twenty-website-new/public/images/home/three-cards-feature/live-data.png deleted file mode 100644 index 00fb1b0231..0000000000 Binary files a/packages/twenty-website-new/public/images/home/three-cards-feature/live-data.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/home/three-cards-feature/live-data.webp b/packages/twenty-website-new/public/images/home/three-cards-feature/live-data.webp new file mode 100644 index 0000000000..78171f1ad5 Binary files /dev/null and b/packages/twenty-website-new/public/images/home/three-cards-feature/live-data.webp differ diff --git a/packages/twenty-website-new/public/images/partner/hero/hero.png b/packages/twenty-website-new/public/images/partner/hero/hero.png deleted file mode 100644 index e3f4e26118..0000000000 Binary files a/packages/twenty-website-new/public/images/partner/hero/hero.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/partner/hero/hero.webp b/packages/twenty-website-new/public/images/partner/hero/hero.webp new file mode 100644 index 0000000000..2b4aa73dd3 Binary files /dev/null and b/packages/twenty-website-new/public/images/partner/hero/hero.webp differ diff --git a/packages/twenty-website-new/public/images/partner/testimonials/avatar-five.png b/packages/twenty-website-new/public/images/partner/testimonials/avatar-five.png deleted file mode 100644 index a99a999769..0000000000 Binary files a/packages/twenty-website-new/public/images/partner/testimonials/avatar-five.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/partner/testimonials/avatar-four.png b/packages/twenty-website-new/public/images/partner/testimonials/avatar-four.png deleted file mode 100644 index a99a999769..0000000000 Binary files a/packages/twenty-website-new/public/images/partner/testimonials/avatar-four.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/partner/testimonials/avatar-one.png b/packages/twenty-website-new/public/images/partner/testimonials/avatar-one.png deleted file mode 100644 index a99a999769..0000000000 Binary files a/packages/twenty-website-new/public/images/partner/testimonials/avatar-one.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/partner/testimonials/avatar-three.png b/packages/twenty-website-new/public/images/partner/testimonials/avatar-three.png deleted file mode 100644 index a99a999769..0000000000 Binary files a/packages/twenty-website-new/public/images/partner/testimonials/avatar-three.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/partner/testimonials/avatar-two.png b/packages/twenty-website-new/public/images/partner/testimonials/avatar-two.png deleted file mode 100644 index a99a999769..0000000000 Binary files a/packages/twenty-website-new/public/images/partner/testimonials/avatar-two.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/partner/testimonials/background-shape.webp b/packages/twenty-website-new/public/images/partner/testimonials/background-shape.webp new file mode 100644 index 0000000000..10a44697d2 Binary files /dev/null and b/packages/twenty-website-new/public/images/partner/testimonials/background-shape.webp differ diff --git a/packages/twenty-website-new/public/images/pricing/engagement-band/overlay.png b/packages/twenty-website-new/public/images/pricing/engagement-band/overlay.png deleted file mode 100644 index 4304b15fb4..0000000000 Binary files a/packages/twenty-website-new/public/images/pricing/engagement-band/overlay.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/pricing/engagement-band/overlay.webp b/packages/twenty-website-new/public/images/pricing/engagement-band/overlay.webp new file mode 100644 index 0000000000..10491bba48 Binary files /dev/null and b/packages/twenty-website-new/public/images/pricing/engagement-band/overlay.webp differ diff --git a/packages/twenty-website-new/public/images/pricing/salesforce/help-icon.png b/packages/twenty-website-new/public/images/pricing/salesforce/help-icon.png deleted file mode 100644 index 4befdf9b08..0000000000 Binary files a/packages/twenty-website-new/public/images/pricing/salesforce/help-icon.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/pricing/salesforce/help-icon.webp b/packages/twenty-website-new/public/images/pricing/salesforce/help-icon.webp new file mode 100644 index 0000000000..e17531138c Binary files /dev/null and b/packages/twenty-website-new/public/images/pricing/salesforce/help-icon.webp differ diff --git a/packages/twenty-website-new/public/images/product/demo/background.png b/packages/twenty-website-new/public/images/product/demo/background.png deleted file mode 100644 index 62075b9bc3..0000000000 Binary files a/packages/twenty-website-new/public/images/product/demo/background.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/demo/background.webp b/packages/twenty-website-new/public/images/product/demo/background.webp new file mode 100644 index 0000000000..30e570a1c9 Binary files /dev/null and b/packages/twenty-website-new/public/images/product/demo/background.webp differ diff --git a/packages/twenty-website-new/public/images/product/demo/kanban.png b/packages/twenty-website-new/public/images/product/demo/kanban.png deleted file mode 100644 index aaf81353a3..0000000000 Binary files a/packages/twenty-website-new/public/images/product/demo/kanban.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/demo/kanban.webp b/packages/twenty-website-new/public/images/product/demo/kanban.webp new file mode 100644 index 0000000000..a3abd42f3b Binary files /dev/null and b/packages/twenty-website-new/public/images/product/demo/kanban.webp differ diff --git a/packages/twenty-website-new/public/images/product/feature/contacts.png b/packages/twenty-website-new/public/images/product/feature/contacts.png deleted file mode 100644 index aba4db30a9..0000000000 Binary files a/packages/twenty-website-new/public/images/product/feature/contacts.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/feature/contacts.webp b/packages/twenty-website-new/public/images/product/feature/contacts.webp new file mode 100644 index 0000000000..0d0354cde2 Binary files /dev/null and b/packages/twenty-website-new/public/images/product/feature/contacts.webp differ diff --git a/packages/twenty-website-new/public/images/product/feature/dashboards.png b/packages/twenty-website-new/public/images/product/feature/dashboards.png deleted file mode 100644 index ab2aa00921..0000000000 Binary files a/packages/twenty-website-new/public/images/product/feature/dashboards.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/feature/dashboards.webp b/packages/twenty-website-new/public/images/product/feature/dashboards.webp new file mode 100644 index 0000000000..4dde64df2b Binary files /dev/null and b/packages/twenty-website-new/public/images/product/feature/dashboards.webp differ diff --git a/packages/twenty-website-new/public/images/product/feature/data.png b/packages/twenty-website-new/public/images/product/feature/data.png deleted file mode 100644 index acd056e784..0000000000 Binary files a/packages/twenty-website-new/public/images/product/feature/data.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/feature/data.webp b/packages/twenty-website-new/public/images/product/feature/data.webp new file mode 100644 index 0000000000..3d04524bd7 Binary files /dev/null and b/packages/twenty-website-new/public/images/product/feature/data.webp differ diff --git a/packages/twenty-website-new/public/images/product/feature/emails.png b/packages/twenty-website-new/public/images/product/feature/emails.png deleted file mode 100644 index d22f8fb1d6..0000000000 Binary files a/packages/twenty-website-new/public/images/product/feature/emails.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/feature/emails.webp b/packages/twenty-website-new/public/images/product/feature/emails.webp new file mode 100644 index 0000000000..a5d7d54e7e Binary files /dev/null and b/packages/twenty-website-new/public/images/product/feature/emails.webp differ diff --git a/packages/twenty-website-new/public/images/product/feature/files.png b/packages/twenty-website-new/public/images/product/feature/files.png deleted file mode 100644 index 1375b6ca13..0000000000 Binary files a/packages/twenty-website-new/public/images/product/feature/files.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/feature/files.webp b/packages/twenty-website-new/public/images/product/feature/files.webp new file mode 100644 index 0000000000..0387c7ff4d Binary files /dev/null and b/packages/twenty-website-new/public/images/product/feature/files.webp differ diff --git a/packages/twenty-website-new/public/images/product/feature/mask.png b/packages/twenty-website-new/public/images/product/feature/mask.png deleted file mode 100644 index e5686762f3..0000000000 Binary files a/packages/twenty-website-new/public/images/product/feature/mask.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/feature/mask.webp b/packages/twenty-website-new/public/images/product/feature/mask.webp new file mode 100644 index 0000000000..695fed9031 Binary files /dev/null and b/packages/twenty-website-new/public/images/product/feature/mask.webp differ diff --git a/packages/twenty-website-new/public/images/product/feature/pipeline.png b/packages/twenty-website-new/public/images/product/feature/pipeline.png deleted file mode 100644 index 9a46f57d47..0000000000 Binary files a/packages/twenty-website-new/public/images/product/feature/pipeline.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/feature/pipeline.webp b/packages/twenty-website-new/public/images/product/feature/pipeline.webp new file mode 100644 index 0000000000..1fce777682 Binary files /dev/null and b/packages/twenty-website-new/public/images/product/feature/pipeline.webp differ diff --git a/packages/twenty-website-new/public/images/product/feature/tasks.png b/packages/twenty-website-new/public/images/product/feature/tasks.png deleted file mode 100644 index 3e3c00cc0a..0000000000 Binary files a/packages/twenty-website-new/public/images/product/feature/tasks.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/feature/tasks.webp b/packages/twenty-website-new/public/images/product/feature/tasks.webp new file mode 100644 index 0000000000..499b5d3d37 Binary files /dev/null and b/packages/twenty-website-new/public/images/product/feature/tasks.webp differ diff --git a/packages/twenty-website-new/public/images/product/stepper/background-shape.png b/packages/twenty-website-new/public/images/product/stepper/background-shape.png deleted file mode 100644 index efd5b78f2c..0000000000 Binary files a/packages/twenty-website-new/public/images/product/stepper/background-shape.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/stepper/background-shape.webp b/packages/twenty-website-new/public/images/product/stepper/background-shape.webp new file mode 100644 index 0000000000..aa4d04393a Binary files /dev/null and b/packages/twenty-website-new/public/images/product/stepper/background-shape.webp differ diff --git a/packages/twenty-website-new/public/images/product/stepper/background.png b/packages/twenty-website-new/public/images/product/stepper/background.png deleted file mode 100644 index 846ada6b20..0000000000 Binary files a/packages/twenty-website-new/public/images/product/stepper/background.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/stepper/background.webp b/packages/twenty-website-new/public/images/product/stepper/background.webp new file mode 100644 index 0000000000..f2c4b16be9 Binary files /dev/null and b/packages/twenty-website-new/public/images/product/stepper/background.webp differ diff --git a/packages/twenty-website-new/public/images/product/stepper/step-one.png b/packages/twenty-website-new/public/images/product/stepper/step-one.png deleted file mode 100644 index f3b737fde9..0000000000 Binary files a/packages/twenty-website-new/public/images/product/stepper/step-one.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/stepper/step-one.webp b/packages/twenty-website-new/public/images/product/stepper/step-one.webp new file mode 100644 index 0000000000..a4df8bae13 Binary files /dev/null and b/packages/twenty-website-new/public/images/product/stepper/step-one.webp differ diff --git a/packages/twenty-website-new/public/images/product/stepper/step-three.png b/packages/twenty-website-new/public/images/product/stepper/step-three.png deleted file mode 100644 index 44ecba1bc8..0000000000 Binary files a/packages/twenty-website-new/public/images/product/stepper/step-three.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/stepper/step-three.webp b/packages/twenty-website-new/public/images/product/stepper/step-three.webp new file mode 100644 index 0000000000..037eb1d62d Binary files /dev/null and b/packages/twenty-website-new/public/images/product/stepper/step-three.webp differ diff --git a/packages/twenty-website-new/public/images/product/stepper/step-two.png b/packages/twenty-website-new/public/images/product/stepper/step-two.png deleted file mode 100644 index faff8d7671..0000000000 Binary files a/packages/twenty-website-new/public/images/product/stepper/step-two.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/stepper/step-two.webp b/packages/twenty-website-new/public/images/product/stepper/step-two.webp new file mode 100644 index 0000000000..b7b9ab0454 Binary files /dev/null and b/packages/twenty-website-new/public/images/product/stepper/step-two.webp differ diff --git a/packages/twenty-website-new/public/images/product/tabs/background-shape.png b/packages/twenty-website-new/public/images/product/tabs/background-shape.png deleted file mode 100644 index dac49f263a..0000000000 Binary files a/packages/twenty-website-new/public/images/product/tabs/background-shape.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/tabs/background-shape.webp b/packages/twenty-website-new/public/images/product/tabs/background-shape.webp new file mode 100644 index 0000000000..865e2d5220 Binary files /dev/null and b/packages/twenty-website-new/public/images/product/tabs/background-shape.webp differ diff --git a/packages/twenty-website-new/public/images/product/tabs/background.png b/packages/twenty-website-new/public/images/product/tabs/background.png deleted file mode 100644 index cc903b05b2..0000000000 Binary files a/packages/twenty-website-new/public/images/product/tabs/background.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/tabs/background.webp b/packages/twenty-website-new/public/images/product/tabs/background.webp new file mode 100644 index 0000000000..8bfe23e5cf Binary files /dev/null and b/packages/twenty-website-new/public/images/product/tabs/background.webp differ diff --git a/packages/twenty-website-new/public/images/product/tabs/deals.png b/packages/twenty-website-new/public/images/product/tabs/deals.png deleted file mode 100644 index 248883a37e..0000000000 Binary files a/packages/twenty-website-new/public/images/product/tabs/deals.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/tabs/deals.webp b/packages/twenty-website-new/public/images/product/tabs/deals.webp new file mode 100644 index 0000000000..7133a975b7 Binary files /dev/null and b/packages/twenty-website-new/public/images/product/tabs/deals.webp differ diff --git a/packages/twenty-website-new/public/images/product/tabs/history.png b/packages/twenty-website-new/public/images/product/tabs/history.png deleted file mode 100644 index 57332618a6..0000000000 Binary files a/packages/twenty-website-new/public/images/product/tabs/history.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/tabs/history.webp b/packages/twenty-website-new/public/images/product/tabs/history.webp new file mode 100644 index 0000000000..f2f938bb86 Binary files /dev/null and b/packages/twenty-website-new/public/images/product/tabs/history.webp differ diff --git a/packages/twenty-website-new/public/images/product/tabs/tasks.png b/packages/twenty-website-new/public/images/product/tabs/tasks.png deleted file mode 100644 index 8155e441fd..0000000000 Binary files a/packages/twenty-website-new/public/images/product/tabs/tasks.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/tabs/tasks.webp b/packages/twenty-website-new/public/images/product/tabs/tasks.webp new file mode 100644 index 0000000000..b5c567054f Binary files /dev/null and b/packages/twenty-website-new/public/images/product/tabs/tasks.webp differ diff --git a/packages/twenty-website-new/public/images/product/tabs/workflow.png b/packages/twenty-website-new/public/images/product/tabs/workflow.png deleted file mode 100644 index ea28fbb379..0000000000 Binary files a/packages/twenty-website-new/public/images/product/tabs/workflow.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/product/tabs/workflow.webp b/packages/twenty-website-new/public/images/product/tabs/workflow.webp new file mode 100644 index 0000000000..6969d5cad0 Binary files /dev/null and b/packages/twenty-website-new/public/images/product/tabs/workflow.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.10/0.10-currency.webp b/packages/twenty-website-new/public/images/releases/0.10/0.10-currency.webp new file mode 100644 index 0000000000..f844ceefb9 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.10/0.10-currency.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.10/0.10-datetime.webp b/packages/twenty-website-new/public/images/releases/0.10/0.10-datetime.webp new file mode 100644 index 0000000000..0d9a91d706 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.10/0.10-datetime.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.10/0.10-json.webp b/packages/twenty-website-new/public/images/releases/0.10/0.10-json.webp new file mode 100644 index 0000000000..77b7b416e8 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.10/0.10-json.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.10/0.10-multi-select.webp b/packages/twenty-website-new/public/images/releases/0.10/0.10-multi-select.webp new file mode 100644 index 0000000000..2f143f224b Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.10/0.10-multi-select.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.10/0.10-remote.webp b/packages/twenty-website-new/public/images/releases/0.10/0.10-remote.webp new file mode 100644 index 0000000000..5ec62732fd Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.10/0.10-remote.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.11/0.11-calendar.webp b/packages/twenty-website-new/public/images/releases/0.11/0.11-calendar.webp new file mode 100644 index 0000000000..e94ff9e3c9 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.11/0.11-calendar.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.11/0.11-speed.webp b/packages/twenty-website-new/public/images/releases/0.11/0.11-speed.webp new file mode 100644 index 0000000000..ba50807898 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.11/0.11-speed.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.12/0.12-database-diagram.webp b/packages/twenty-website-new/public/images/releases/0.12/0.12-database-diagram.webp new file mode 100644 index 0000000000..9e122faee4 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.12/0.12-database-diagram.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.12/0.12-link-field.webp b/packages/twenty-website-new/public/images/releases/0.12/0.12-link-field.webp new file mode 100644 index 0000000000..17f9beb220 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.12/0.12-link-field.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.12/0.12-loader.webp b/packages/twenty-website-new/public/images/releases/0.12/0.12-loader.webp new file mode 100644 index 0000000000..bf16273f51 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.12/0.12-loader.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.12/0.12-notifications.webp b/packages/twenty-website-new/public/images/releases/0.12/0.12-notifications.webp new file mode 100644 index 0000000000..c9986e9c86 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.12/0.12-notifications.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.2.3_relations.webp b/packages/twenty-website-new/public/images/releases/0.2.3_relations.webp new file mode 100644 index 0000000000..f0ed2e4fe5 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.2.3_relations.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.2.3_webhooks.webp b/packages/twenty-website-new/public/images/releases/0.2.3_webhooks.webp new file mode 100644 index 0000000000..9573a4a007 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.2.3_webhooks.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.20/0.20-blocklist.webp b/packages/twenty-website-new/public/images/releases/0.20/0.20-blocklist.webp new file mode 100644 index 0000000000..02f9400ae0 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.20/0.20-blocklist.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.20/0.20-onboarding.webp b/packages/twenty-website-new/public/images/releases/0.20/0.20-onboarding.webp new file mode 100644 index 0000000000..43bc536e20 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.20/0.20-onboarding.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.20/0.20-timeline.webp b/packages/twenty-website-new/public/images/releases/0.20/0.20-timeline.webp new file mode 100644 index 0000000000..95cd555e3a Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.20/0.20-timeline.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.21/0.21-advanced-email-settings.webp b/packages/twenty-website-new/public/images/releases/0.21/0.21-advanced-email-settings.webp new file mode 100644 index 0000000000..c87e6eaf94 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.21/0.21-advanced-email-settings.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.21/0.21-many-many.webp b/packages/twenty-website-new/public/images/releases/0.21/0.21-many-many.webp new file mode 100644 index 0000000000..7200508a47 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.21/0.21-many-many.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.22/0.22-kanban-improvements.webp b/packages/twenty-website-new/public/images/releases/0.22/0.22-kanban-improvements.webp new file mode 100644 index 0000000000..5ab574d7ba Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.22/0.22-kanban-improvements.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.22/0.22-mass-deletion.webp b/packages/twenty-website-new/public/images/releases/0.22/0.22-mass-deletion.webp new file mode 100644 index 0000000000..0923d79934 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.22/0.22-mass-deletion.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.22/0.22-navbar.webp b/packages/twenty-website-new/public/images/releases/0.22/0.22-navbar.webp new file mode 100644 index 0000000000..45ff9b809d Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.22/0.22-navbar.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.23/0.23-created-by.webp b/packages/twenty-website-new/public/images/releases/0.23/0.23-created-by.webp new file mode 100644 index 0000000000..0054b6dbaa Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.23/0.23-created-by.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.23/0.23-filter-webhooks.webp b/packages/twenty-website-new/public/images/releases/0.23/0.23-filter-webhooks.webp new file mode 100644 index 0000000000..4b7327124e Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.23/0.23-filter-webhooks.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.23/0.23-notes-tasks.webp b/packages/twenty-website-new/public/images/releases/0.23/0.23-notes-tasks.webp new file mode 100644 index 0000000000..d0df8d8e9a Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.23/0.23-notes-tasks.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.24/0.24-soft-delete.webp b/packages/twenty-website-new/public/images/releases/0.24/0.24-soft-delete.webp new file mode 100644 index 0000000000..5c3087a3bb Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.24/0.24-soft-delete.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.3.0_rating.webp b/packages/twenty-website-new/public/images/releases/0.3.0_rating.webp new file mode 100644 index 0000000000..2d7e610e1f Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.3.0_rating.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.3.1_contributors.webp b/packages/twenty-website-new/public/images/releases/0.3.1_contributors.webp new file mode 100644 index 0000000000..fbf77fbdb5 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.3.1_contributors.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.3.2_new_layout.webp b/packages/twenty-website-new/public/images/releases/0.3.2_new_layout.webp new file mode 100644 index 0000000000..865e6a2341 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.3.2_new_layout.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.3.3_emails.webp b/packages/twenty-website-new/public/images/releases/0.3.3_emails.webp new file mode 100644 index 0000000000..4b4efe9eeb Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.3.3_emails.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.3.3_kanban.webp b/packages/twenty-website-new/public/images/releases/0.3.3_kanban.webp new file mode 100644 index 0000000000..4b1de10ba1 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.3.3_kanban.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.3.3_sign_up.webp b/packages/twenty-website-new/public/images/releases/0.3.3_sign_up.webp new file mode 100644 index 0000000000..b7a0b37793 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.3.3_sign_up.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.30/0.30-array-field.webp b/packages/twenty-website-new/public/images/releases/0.30/0.30-array-field.webp new file mode 100644 index 0000000000..db9ad9d8b8 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.30/0.30-array-field.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.30/0.30-emails.webp b/packages/twenty-website-new/public/images/releases/0.30/0.30-emails.webp new file mode 100644 index 0000000000..51fffd30b3 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.30/0.30-emails.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.30/0.30-new-settings.webp b/packages/twenty-website-new/public/images/releases/0.30/0.30-new-settings.webp new file mode 100644 index 0000000000..4529459509 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.30/0.30-new-settings.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.31/0.31-advanced-settings.webp b/packages/twenty-website-new/public/images/releases/0.31/0.31-advanced-settings.webp new file mode 100644 index 0000000000..d3b72ae731 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.31/0.31-advanced-settings.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.31/0.31-search.webp b/packages/twenty-website-new/public/images/releases/0.31/0.31-search.webp new file mode 100644 index 0000000000..9bd451f23d Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.31/0.31-search.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.32/0.32-improved-cmdk.webp b/packages/twenty-website-new/public/images/releases/0.32/0.32-improved-cmdk.webp new file mode 100644 index 0000000000..ada0f4dea3 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.32/0.32-improved-cmdk.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.32/0.32-webhooks.webp b/packages/twenty-website-new/public/images/releases/0.32/0.32-webhooks.webp new file mode 100644 index 0000000000..9b7303c6dd Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.32/0.32-webhooks.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.33/0.33-multiselect-filter.webp b/packages/twenty-website-new/public/images/releases/0.33/0.33-multiselect-filter.webp new file mode 100644 index 0000000000..0bb4bdaf06 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.33/0.33-multiselect-filter.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.33/0.33-percentage-number.webp b/packages/twenty-website-new/public/images/releases/0.33/0.33-percentage-number.webp new file mode 100644 index 0000000000..a34fd338dd Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.33/0.33-percentage-number.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.34/0.34-subdomains.webp b/packages/twenty-website-new/public/images/releases/0.34/0.34-subdomains.webp new file mode 100644 index 0000000000..85aa3602f8 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.34/0.34-subdomains.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.35/0.35-Favorites.webp b/packages/twenty-website-new/public/images/releases/0.35/0.35-Favorites.webp new file mode 100644 index 0000000000..283626a5ed Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.35/0.35-Favorites.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.4/0.4-address-field-type.webp b/packages/twenty-website-new/public/images/releases/0.4/0.4-address-field-type.webp new file mode 100644 index 0000000000..688268f252 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.4/0.4-address-field-type.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.4/0.4-expand-relation-card.webp b/packages/twenty-website-new/public/images/releases/0.4/0.4-expand-relation-card.webp new file mode 100644 index 0000000000..34f831a842 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.4/0.4-expand-relation-card.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.4/0.4-multi-workspace.webp b/packages/twenty-website-new/public/images/releases/0.4/0.4-multi-workspace.webp new file mode 100644 index 0000000000..c7f72a2706 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.4/0.4-multi-workspace.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.40/0.40-aggregates.webp b/packages/twenty-website-new/public/images/releases/0.40/0.40-aggregates.webp new file mode 100644 index 0000000000..75b6accfd6 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.40/0.40-aggregates.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.40/0.40-group-by.webp b/packages/twenty-website-new/public/images/releases/0.40/0.40-group-by.webp new file mode 100644 index 0000000000..6bad36ac83 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.40/0.40-group-by.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.41/0.41-labs.webp b/packages/twenty-website-new/public/images/releases/0.41/0.41-labs.webp new file mode 100644 index 0000000000..3c2fc9d44f Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.41/0.41-labs.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.42/0.42-document-viewer.webp b/packages/twenty-website-new/public/images/releases/0.42/0.42-document-viewer.webp new file mode 100644 index 0000000000..afc91bc33b Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.42/0.42-document-viewer.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.42/0.42-microsoft.webp b/packages/twenty-website-new/public/images/releases/0.42/0.42-microsoft.webp new file mode 100644 index 0000000000..c328bac5b9 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.42/0.42-microsoft.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.42/0.42-translation.webp b/packages/twenty-website-new/public/images/releases/0.42/0.42-translation.webp new file mode 100644 index 0000000000..0446f1d0b5 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.42/0.42-translation.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.43.0/email-privacy.webp b/packages/twenty-website-new/public/images/releases/0.43.0/email-privacy.webp new file mode 100644 index 0000000000..28df356938 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.43.0/email-privacy.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.43.0/search-upgrade.webp b/packages/twenty-website-new/public/images/releases/0.43.0/search-upgrade.webp new file mode 100644 index 0000000000..73efac4432 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.43.0/search-upgrade.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.44/0.44-admin-panel.webp b/packages/twenty-website-new/public/images/releases/0.44/0.44-admin-panel.webp new file mode 100644 index 0000000000..fd964efb5d Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.44/0.44-admin-panel.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.44/0.44-side-panel.webp b/packages/twenty-website-new/public/images/releases/0.44/0.44-side-panel.webp new file mode 100644 index 0000000000..8994228076 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.44/0.44-side-panel.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.50/0.50-advanced-filters.webp b/packages/twenty-website-new/public/images/releases/0.50/0.50-advanced-filters.webp new file mode 100644 index 0000000000..67d622f2cb Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.50/0.50-advanced-filters.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.50/0.50-permissions.webp b/packages/twenty-website-new/public/images/releases/0.50/0.50-permissions.webp new file mode 100644 index 0000000000..436c258837 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.50/0.50-permissions.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.51.0/0.51-options-menu.webp b/packages/twenty-website-new/public/images/releases/0.51.0/0.51-options-menu.webp new file mode 100644 index 0000000000..85e240ad63 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.51.0/0.51-options-menu.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.52.0/0.52-custom-date-format.webp b/packages/twenty-website-new/public/images/releases/0.52.0/0.52-custom-date-format.webp new file mode 100644 index 0000000000..0451626c76 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.52.0/0.52-custom-date-format.webp differ diff --git a/packages/twenty-website-new/public/images/releases/0.52.0/0.52-filtered-views-records.webp b/packages/twenty-website-new/public/images/releases/0.52.0/0.52-filtered-views-records.webp new file mode 100644 index 0000000000..a4b76a3cab Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/0.52.0/0.52-filtered-views-records.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.00/1.00-import-update.webp b/packages/twenty-website-new/public/images/releases/1.00/1.00-import-update.webp new file mode 100644 index 0000000000..7669c53ddb Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.00/1.00-import-update.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.00/1.00-performance-improvement.webp b/packages/twenty-website-new/public/images/releases/1.00/1.00-performance-improvement.webp new file mode 100644 index 0000000000..6b632bb856 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.00/1.00-performance-improvement.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.00/1.00-permissions.webp b/packages/twenty-website-new/public/images/releases/1.00/1.00-permissions.webp new file mode 100644 index 0000000000..a3e0f21c8c Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.00/1.00-permissions.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.00/1.00-subfield-filtering.webp b/packages/twenty-website-new/public/images/releases/1.00/1.00-subfield-filtering.webp new file mode 100644 index 0000000000..0c4e33988c Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.00/1.00-subfield-filtering.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.00/1.00-workflow.webp b/packages/twenty-website-new/public/images/releases/1.00/1.00-workflow.webp new file mode 100644 index 0000000000..7bec4bda48 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.00/1.00-workflow.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.1/1.1-multi-manual-trigger.webp b/packages/twenty-website-new/public/images/releases/1.1/1.1-multi-manual-trigger.webp new file mode 100644 index 0000000000..4bf13fe68e Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.1/1.1-multi-manual-trigger.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.10/1.10.0-calendar.webp b/packages/twenty-website-new/public/images/releases/1.10/1.10.0-calendar.webp new file mode 100644 index 0000000000..be7afd9863 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.10/1.10.0-calendar.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.10/1.10.0-dashboards.webp b/packages/twenty-website-new/public/images/releases/1.10/1.10.0-dashboards.webp new file mode 100644 index 0000000000..caf52b8982 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.10/1.10.0-dashboards.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.11/1.11.0-morph-relations.webp b/packages/twenty-website-new/public/images/releases/1.11/1.11.0-morph-relations.webp new file mode 100644 index 0000000000..4578f8275e Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.11/1.11.0-morph-relations.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.11/1.11.0-unlisted-views.webp b/packages/twenty-website-new/public/images/releases/1.11/1.11.0-unlisted-views.webp new file mode 100644 index 0000000000..c3da1776b0 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.11/1.11.0-unlisted-views.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.12/1.12.0-folder-sync.webp b/packages/twenty-website-new/public/images/releases/1.12/1.12.0-folder-sync.webp new file mode 100644 index 0000000000..db9270d7c5 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.12/1.12.0-folder-sync.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.12/1.12.0-side-panel.webp b/packages/twenty-website-new/public/images/releases/1.12/1.12.0-side-panel.webp new file mode 100644 index 0000000000..d63c574a01 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.12/1.12.0-side-panel.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.2/1.2-any-fields.webp b/packages/twenty-website-new/public/images/releases/1.2/1.2-any-fields.webp new file mode 100644 index 0000000000..6d6ffaee2e Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.2/1.2-any-fields.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.2/1.2-import-relations.webp b/packages/twenty-website-new/public/images/releases/1.2/1.2-import-relations.webp new file mode 100644 index 0000000000..686533f1da Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.2/1.2-import-relations.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.3/1.3-IMAP.webp b/packages/twenty-website-new/public/images/releases/1.3/1.3-IMAP.webp new file mode 100644 index 0000000000..6263a77305 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.3/1.3-IMAP.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.3/1.3-merge.webp b/packages/twenty-website-new/public/images/releases/1.3/1.3-merge.webp new file mode 100644 index 0000000000..529721c1ac Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.3/1.3-merge.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.4/1.4-field-permissions.webp b/packages/twenty-website-new/public/images/releases/1.4/1.4-field-permissions.webp new file mode 100644 index 0000000000..75da4606a0 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.4/1.4-field-permissions.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.4/1.4-two-factor-auth.webp b/packages/twenty-website-new/public/images/releases/1.4/1.4-two-factor-auth.webp new file mode 100644 index 0000000000..89c9704d65 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.4/1.4-two-factor-auth.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.4/1.4-workflow-filters.webp b/packages/twenty-website-new/public/images/releases/1.4/1.4-workflow-filters.webp new file mode 100644 index 0000000000..ae4e2f4942 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.4/1.4-workflow-filters.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.5/1.5-workflow-branches.webp b/packages/twenty-website-new/public/images/releases/1.5/1.5-workflow-branches.webp new file mode 100644 index 0000000000..f2e0b81446 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.5/1.5-workflow-branches.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.6/1.6-workflows-improvements.webp b/packages/twenty-website-new/public/images/releases/1.6/1.6-workflows-improvements.webp new file mode 100644 index 0000000000..77a2d64d93 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.6/1.6-workflows-improvements.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.7/1.7-impersonating.webp b/packages/twenty-website-new/public/images/releases/1.7/1.7-impersonating.webp new file mode 100644 index 0000000000..e6b3c23905 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.7/1.7-impersonating.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.7/1.7-upsert.webp b/packages/twenty-website-new/public/images/releases/1.7/1.7-upsert.webp new file mode 100644 index 0000000000..7594e7eb6e Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.7/1.7-upsert.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.8/1.8-bulk-select.webp b/packages/twenty-website-new/public/images/releases/1.8/1.8-bulk-select.webp new file mode 100644 index 0000000000..0d714fd21c Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.8/1.8-bulk-select.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.8/1.8-search-limit.webp b/packages/twenty-website-new/public/images/releases/1.8/1.8-search-limit.webp new file mode 100644 index 0000000000..1d7359918e Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.8/1.8-search-limit.webp differ diff --git a/packages/twenty-website-new/public/images/releases/1.8/1.8-workflow-iterator.webp b/packages/twenty-website-new/public/images/releases/1.8/1.8-workflow-iterator.webp new file mode 100644 index 0000000000..b2d64a112e Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/1.8/1.8-workflow-iterator.webp differ diff --git a/packages/twenty-website-new/public/images/releases/labs/translation.webp b/packages/twenty-website-new/public/images/releases/labs/translation.webp new file mode 100644 index 0000000000..4541612e43 Binary files /dev/null and b/packages/twenty-website-new/public/images/releases/labs/translation.webp differ diff --git a/packages/twenty-website-new/public/images/shared/light-noise.png b/packages/twenty-website-new/public/images/shared/light-noise.png deleted file mode 100644 index d7b3bc2c06..0000000000 Binary files a/packages/twenty-website-new/public/images/shared/light-noise.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/shared/light-noise.webp b/packages/twenty-website-new/public/images/shared/light-noise.webp new file mode 100644 index 0000000000..566a5da51b Binary files /dev/null and b/packages/twenty-website-new/public/images/shared/light-noise.webp differ diff --git a/packages/twenty-website-new/public/images/why-twenty/hero/background.png b/packages/twenty-website-new/public/images/why-twenty/hero/background.png deleted file mode 100644 index b0a7e6a575..0000000000 Binary files a/packages/twenty-website-new/public/images/why-twenty/hero/background.png and /dev/null differ diff --git a/packages/twenty-website-new/public/images/why-twenty/hero/background.webp b/packages/twenty-website-new/public/images/why-twenty/hero/background.webp new file mode 100644 index 0000000000..58fda20d4e Binary files /dev/null and b/packages/twenty-website-new/public/images/why-twenty/hero/background.webp differ diff --git a/packages/twenty-website-new/scripts/convert-png-to-webp.mjs b/packages/twenty-website-new/scripts/convert-png-to-webp.mjs new file mode 100644 index 0000000000..227fbab23d --- /dev/null +++ b/packages/twenty-website-new/scripts/convert-png-to-webp.mjs @@ -0,0 +1,54 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +import sharp from 'sharp'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const imagesRoot = path.join(__dirname, '..', 'public', 'images'); + +let totalBefore = 0; +let totalAfter = 0; +let count = 0; + +async function walkAndConvert(directoryPath) { + for (const entry of fs.readdirSync(directoryPath, { withFileTypes: true })) { + const fullPath = path.join(directoryPath, entry.name); + + if (entry.isDirectory()) { + await walkAndConvert(fullPath); + continue; + } + + if (!entry.name.toLowerCase().endsWith('.png')) { + continue; + } + + const outputPath = fullPath.replace(/\.png$/i, '.webp'); + const beforeSize = fs.statSync(fullPath).size; + + await sharp(fullPath).webp({ quality: 92 }).toFile(outputPath); + + const afterSize = fs.statSync(outputPath).size; + + fs.unlinkSync(fullPath); + + totalBefore += beforeSize; + totalAfter += afterSize; + count++; + + const saved = (((beforeSize - afterSize) / beforeSize) * 100).toFixed(1); + const rel = path.relative(imagesRoot, outputPath); + console.log( + `${rel} ${(beforeSize / 1024).toFixed(0)} KB -> ${(afterSize / 1024).toFixed(0)} KB (${saved}% saved)`, + ); + } +} + +await walkAndConvert(imagesRoot); + +console.log(''); +console.log(`Converted ${count} files`); +console.log( + `Total: ${(totalBefore / 1048576).toFixed(2)} MiB -> ${(totalAfter / 1048576).toFixed(2)} MiB (${(((totalBefore - totalAfter) / totalBefore) * 100).toFixed(1)}% saved)`, +); diff --git a/packages/twenty-website-new/src/app/(home)/_constants/hero.ts b/packages/twenty-website-new/src/app/(home)/_constants/hero.ts index 32625a25d8..c079c3e2d9 100644 --- a/packages/twenty-website-new/src/app/(home)/_constants/hero.ts +++ b/packages/twenty-website-new/src/app/(home)/_constants/hero.ts @@ -39,19 +39,19 @@ const SALES_DASHBOARD_DATA: HeroDashboardDataType = { visitsChart: { alt: 'Visits bar chart comparing this year and last year', height: 1116, - src: '/images/home/hero/sales-dashboard/visits.png', + src: '/images/home/hero/sales-dashboard/visits.webp', width: 2316, }, revenueChart: { alt: 'Revenue line chart by month', height: 1116, - src: '/images/home/hero/sales-dashboard/revenue.png', + src: '/images/home/hero/sales-dashboard/revenue.webp', width: 2316, }, distributionChart: { alt: 'Ultra versus Plus donut chart distribution', height: 1116, - src: '/images/home/hero/sales-dashboard/distribution.png', + src: '/images/home/hero/sales-dashboard/distribution.webp', width: 756, }, }; @@ -1518,7 +1518,7 @@ export const HERO_DATA: HeroHomeDataType = { icon: { kind: 'brand', brand: 'twenty', - imageSrc: '/images/home/hero/twenty-demo-logo.png', + imageSrc: '/images/home/hero/twenty-demo-logo.webp', overlay: 'link', }, }, diff --git a/packages/twenty-website-new/src/app/(home)/_constants/three-cards-feature.ts b/packages/twenty-website-new/src/app/(home)/_constants/three-cards-feature.ts index d07f52fecf..52c653c71b 100644 --- a/packages/twenty-website-new/src/app/(home)/_constants/three-cards-feature.ts +++ b/packages/twenty-website-new/src/app/(home)/_constants/three-cards-feature.ts @@ -18,7 +18,7 @@ export const THREE_CARDS_FEATURE_DATA: ThreeCardsFeatureCardsDataType = { text: "Twenty makes it simple. It's clean, intuitive, and built to feel like Notion.", }, image: { - src: '/images/home/three-cards-feature/familiar-interface.png', + src: '/images/home/three-cards-feature/familiar-interface.webp', alt: 'Familiar interface', }, }, @@ -28,7 +28,7 @@ export const THREE_CARDS_FEATURE_DATA: ThreeCardsFeatureCardsDataType = { text: 'Smart patterns, shortcuts, and layouts make everyday tasks faster and easier to execute.', }, image: { - src: '/images/home/three-cards-feature/fast-path.png', + src: '/images/home/three-cards-feature/fast-path.webp', alt: 'Fast path', }, }, @@ -38,7 +38,7 @@ export const THREE_CARDS_FEATURE_DATA: ThreeCardsFeatureCardsDataType = { text: 'Everything updates in real time, with AI chat always ready to help you move faster.', }, image: { - src: '/images/home/three-cards-feature/live-data.png', + src: '/images/home/three-cards-feature/live-data.webp', alt: 'Live data', }, }, diff --git a/packages/twenty-website-new/src/app/(home)/page.tsx b/packages/twenty-website-new/src/app/(home)/page.tsx index f6c4ae5a43..009e033554 100644 --- a/packages/twenty-website-new/src/app/(home)/page.tsx +++ b/packages/twenty-website-new/src/app/(home)/page.tsx @@ -183,8 +183,8 @@ export default async function HomePage() { { + if (block.type === 'text') { + const sectionId = `case-study-section-${storySectionIndex}`; + storySectionIndex += 1; + return ( + + ); + } + return ; + }); + return ( <> - {CASE_STUDY.sections.map((block, index) => { - if (block.type === 'text') { - return ; - } - return ; - })} + {sectionBlocks} - - - - - - - - - - - - - - - + ); } diff --git a/packages/twenty-website-new/src/app/case-studies/_constants/types.ts b/packages/twenty-website-new/src/app/case-studies/_constants/types.ts index d61d76269e..329dc95fc8 100644 --- a/packages/twenty-website-new/src/app/case-studies/_constants/types.ts +++ b/packages/twenty-website-new/src/app/case-studies/_constants/types.ts @@ -16,13 +16,6 @@ export type CaseStudyVisualBlock = { export type CaseStudyContentBlock = CaseStudyTextBlock | CaseStudyVisualBlock; -export type CaseStudyTestimonialAuthor = { - name: string; - handle: string; - date: string; - avatarSrc: string; -}; - export type CaseStudyData = { meta: { title: string; description: string }; hero: { @@ -33,11 +26,6 @@ export type CaseStudyData = { heroImageSrc: string; }; sections: CaseStudyContentBlock[]; - testimonial: { - eyebrow: string; - quote: string; - author: CaseStudyTestimonialAuthor; - }; tableOfContents: string[]; catalogCard: { summary: string; diff --git a/packages/twenty-website-new/src/app/case-studies/act-education/page.tsx b/packages/twenty-website-new/src/app/case-studies/act-education/page.tsx index 31d0f29756..2008647e85 100644 --- a/packages/twenty-website-new/src/app/case-studies/act-education/page.tsx +++ b/packages/twenty-website-new/src/app/case-studies/act-education/page.tsx @@ -1,11 +1,8 @@ -import { FAQ_DATA, MENU_DATA } from '@/app/_constants'; -import { TalkToUsButton } from '@/app/components/ContactCalModal'; +import { MENU_DATA } from '@/app/_constants'; import type { CaseStudyData } from '@/app/case-studies/_constants/types'; -import { Eyebrow, LinkButton } from '@/design-system/components'; import { fetchCommunityStats } from '@/lib/community/fetch-community-stats'; import { mergeSocialLinkLabels } from '@/lib/community/merge-social-link-labels'; import { CaseStudy } from '@/sections/CaseStudy/components'; -import { Faq } from '@/sections/Faq/components'; import { Menu } from '@/sections/Menu/components'; import { theme } from '@/theme'; import type { Metadata } from 'next'; @@ -49,7 +46,7 @@ const CASE_STUDY: CaseStudyData = { eyebrow: 'Implementation', heading: [ { text: 'No more renting ', fontFamily: 'serif' }, - { text: 'someone else\'s structure', fontFamily: 'sans' }, + { text: "someone else's structure", fontFamily: 'sans' }, ], paragraphs: [ 'They evaluated Salesforce, Zoho, Pipedrive, and SuiteCRM. Each came with the same tradeoffs: too expensive, too rigid, or too generic — and none fixed the underlying problem. They were still renting a structure they did not control.', @@ -66,7 +63,7 @@ const CASE_STUDY: CaseStudyData = { ], paragraphs: [ 'Self-hosted means AC&T carries no vendor risk: no pricing model that can change, no platform that can disappear, no forced migration. The system is theirs.', - 'Because everything is built on Twenty\'s open foundation, Flycoder could wire the exact logic AC&T needed without fighting the platform.', + "Because everything is built on Twenty's open foundation, Flycoder could wire the exact logic AC&T needed without fighting the platform.", ], }, { @@ -82,20 +79,9 @@ const CASE_STUDY: CaseStudyData = { ], }, ], - testimonial: { - eyebrow: 'What they say', - quote: - 'They did not want to learn someone else\'s system. They wanted to keep working the way they already did and make it smoother.', - author: { - name: 'Joseph Chiang', - handle: 'CRM Engineer, AC&T Education Migration', - date: '2025', - avatarSrc: PLACEHOLDER_HERO, - }, - }, tableOfContents: [ 'When the vendor pulled the plug', - 'No more renting someone else\'s structure', + "No more renting someone else's structure", 'Control without the overhead', 'The result', ], @@ -115,6 +101,18 @@ export default async function ActEducationCaseStudyPage() { const stats = await fetchCommunityStats(); const menuSocialLinks = mergeSocialLinkLabels(MENU_DATA.socialLinks, stats); + let storySectionIndex = 0; + const sectionBlocks = CASE_STUDY.sections.map((block, index) => { + if (block.type === 'text') { + const sectionId = `case-study-section-${storySectionIndex}`; + storySectionIndex += 1; + return ( + + ); + } + return ; + }); + return ( <> - {CASE_STUDY.sections.map((block, index) => { - if (block.type === 'text') { - return ; - } - return ; - })} + {sectionBlocks} - - - - - - - - - - - - - - - + ); } diff --git a/packages/twenty-website-new/src/app/case-studies/alternative-partners/page.tsx b/packages/twenty-website-new/src/app/case-studies/alternative-partners/page.tsx index ffdb3e5104..f328b5bb55 100644 --- a/packages/twenty-website-new/src/app/case-studies/alternative-partners/page.tsx +++ b/packages/twenty-website-new/src/app/case-studies/alternative-partners/page.tsx @@ -1,11 +1,8 @@ -import { FAQ_DATA, MENU_DATA } from '@/app/_constants'; -import { TalkToUsButton } from '@/app/components/ContactCalModal'; +import { MENU_DATA } from '@/app/_constants'; import type { CaseStudyData } from '@/app/case-studies/_constants/types'; -import { Eyebrow, LinkButton } from '@/design-system/components'; import { fetchCommunityStats } from '@/lib/community/fetch-community-stats'; import { mergeSocialLinkLabels } from '@/lib/community/merge-social-link-labels'; import { CaseStudy } from '@/sections/CaseStudy/components'; -import { Faq } from '@/sections/Faq/components'; import { Menu } from '@/sections/Menu/components'; import { theme } from '@/theme'; import type { Metadata } from 'next'; @@ -38,7 +35,7 @@ const CASE_STUDY: CaseStudyData = { { text: 'migration workflow', fontFamily: 'sans' }, ], paragraphs: [ - 'Alternative Partners is a consulting firm that moved from Salesforce to a self-hosted Twenty instance. Benjamin Reynolds led the migration — he had already become a Twenty expert implementing Twenty for one of Twenty\'s first cloud customers.', + "Alternative Partners is a consulting firm that moved from Salesforce to a self-hosted Twenty instance. Benjamin Reynolds led the migration — he had already become a Twenty expert implementing Twenty for one of Twenty's first cloud customers.", 'His approach was unconventional. Instead of mapping fields manually, scripting transforms, and validating data step by step, he handed the job to agentic AI tools with a brief: where the data lives, the GitHub repo for the target platform, the Railway deployment — start, and only return if something breaks beyond a 70% confidence fix.', 'It worked. This is AI-assisted iteration in practice: not AI as a product feature, but as part of implementation work, compressing what would typically be weeks into something one person can oversee without being the bottleneck.', ], @@ -55,18 +52,10 @@ const CASE_STUDY: CaseStudyData = { ], }, ], - testimonial: { - eyebrow: 'What they say', - quote: - 'Agentic AI let us migrate faster than a traditional playbook, and self-hosted Twenty means we own where our CRM data lives.', - author: { - name: 'Benjamin Reynolds', - handle: 'Alternative Partners', - date: '2025', - avatarSrc: PLACEHOLDER_HERO, - }, - }, - tableOfContents: ['AI in the migration workflow', 'Self-hosted means control'], + tableOfContents: [ + 'AI in the migration workflow', + 'Self-hosted means control', + ], catalogCard: { summary: 'Alternative Partners replaced Salesforce with self-hosted Twenty, using agentic AI to compress migration work.', @@ -83,6 +72,18 @@ export default async function AlternativePartnersCaseStudyPage() { const stats = await fetchCommunityStats(); const menuSocialLinks = mergeSocialLinkLabels(MENU_DATA.socialLinks, stats); + let storySectionIndex = 0; + const sectionBlocks = CASE_STUDY.sections.map((block, index) => { + if (block.type === 'text') { + const sectionId = `case-study-section-${storySectionIndex}`; + storySectionIndex += 1; + return ( + + ); + } + return ; + }); + return ( <> - {CASE_STUDY.sections.map((block, index) => { - if (block.type === 'text') { - return ; - } - return ; - })} + {sectionBlocks} - - - - - - - - - - - - - - - + ); } diff --git a/packages/twenty-website-new/src/app/case-studies/elevate-consulting/page.tsx b/packages/twenty-website-new/src/app/case-studies/elevate-consulting/page.tsx index 58f51ac564..cd940f40cc 100644 --- a/packages/twenty-website-new/src/app/case-studies/elevate-consulting/page.tsx +++ b/packages/twenty-website-new/src/app/case-studies/elevate-consulting/page.tsx @@ -1,11 +1,8 @@ -import { FAQ_DATA, MENU_DATA } from '@/app/_constants'; -import { TalkToUsButton } from '@/app/components/ContactCalModal'; +import { MENU_DATA } from '@/app/_constants'; import type { CaseStudyData } from '@/app/case-studies/_constants/types'; -import { Eyebrow, LinkButton } from '@/design-system/components'; import { fetchCommunityStats } from '@/lib/community/fetch-community-stats'; import { mergeSocialLinkLabels } from '@/lib/community/merge-social-link-labels'; import { CaseStudy } from '@/sections/CaseStudy/components'; -import { Faq } from '@/sections/Faq/components'; import { Menu } from '@/sections/Menu/components'; import { theme } from '@/theme'; import type { Metadata } from 'next'; @@ -53,7 +50,7 @@ const CASE_STUDY: CaseStudyData = { { text: 'to rule them all', fontFamily: 'sans' }, ], paragraphs: [ - 'Justin\'s broader mission at Elevate has been to move the company off static documents and onto tools with API access. By the end of 2025, that was in place: time billing, resource planning, Microsoft Teams, and project management were all accessible via API, with Twenty at the center holding client and opportunity data. Team members could use that information strategically instead of re-keying it.', + "Justin's broader mission at Elevate has been to move the company off static documents and onto tools with API access. By the end of 2025, that was in place: time billing, resource planning, Microsoft Teams, and project management were all accessible via API, with Twenty at the center holding client and opportunity data. Team members could use that information strategically instead of re-keying it.", 'That opened the door to something more powerful. Justin built a custom front end that pulls live data from those systems into a single view, tailored to each role. When a proposal is won, what used to require four separate people manually setting up instances across four different tools now happens in a single click, drawing on data collected in Twenty across the full opportunity lifecycle — another shift toward higher-value work for clients.', 'Twenty is not only where CRM data lives. It is the API backbone that makes the rest of the stack possible.', ], @@ -81,22 +78,11 @@ const CASE_STUDY: CaseStudyData = { { text: 'internal rollout', fontFamily: 'sans' }, ], paragraphs: [ - 'Elevate\'s CEO was so impressed with Twenty he started recommending it to clients before the internal setup was even complete. The team is exploring bringing Twenty to client projects as part of their consulting practice, including as the backend for custom-built products tailored to specific operational needs.', + "Elevate's CEO was so impressed with Twenty he started recommending it to clients before the internal setup was even complete. The team is exploring bringing Twenty to client projects as part of their consulting practice, including as the backend for custom-built products tailored to specific operational needs.", 'For a firm that once ran on sticky notes, this is more than an upgrade — it is a complete transformation.', ], }, ], - testimonial: { - eyebrow: 'What they say', - quote: - 'Because Twenty\'s API is fully open, I could connect it to every other tool in our stack. When a proposal is won, what used to take four people across four tools now happens in a single click.', - author: { - name: 'Justin Beadle', - handle: 'Director of Digital and Information, Elevate Consulting', - date: 'June 2025', - avatarSrc: PLACEHOLDER_HERO, - }, - }, tableOfContents: [ 'From documents to open APIs', 'One API to rule them all', @@ -119,6 +105,18 @@ export default async function ElevateConsultingCaseStudyPage() { const stats = await fetchCommunityStats(); const menuSocialLinks = mergeSocialLinkLabels(MENU_DATA.socialLinks, stats); + let storySectionIndex = 0; + const sectionBlocks = CASE_STUDY.sections.map((block, index) => { + if (block.type === 'text') { + const sectionId = `case-study-section-${storySectionIndex}`; + storySectionIndex += 1; + return ( + + ); + } + return ; + }); + return ( <> - {CASE_STUDY.sections.map((block, index) => { - if (block.type === 'text') { - return ; - } - return ; - })} + {sectionBlocks} - - - - - - - - - - - - - - - + ); } diff --git a/packages/twenty-website-new/src/app/case-studies/netzero/page.tsx b/packages/twenty-website-new/src/app/case-studies/netzero/page.tsx index 752f25266d..90c0ea27b6 100644 --- a/packages/twenty-website-new/src/app/case-studies/netzero/page.tsx +++ b/packages/twenty-website-new/src/app/case-studies/netzero/page.tsx @@ -1,11 +1,8 @@ -import { FAQ_DATA, MENU_DATA } from '@/app/_constants'; -import { TalkToUsButton } from '@/app/components/ContactCalModal'; +import { MENU_DATA } from '@/app/_constants'; import type { CaseStudyData } from '@/app/case-studies/_constants/types'; -import { Eyebrow, LinkButton } from '@/design-system/components'; import { fetchCommunityStats } from '@/lib/community/fetch-community-stats'; import { mergeSocialLinkLabels } from '@/lib/community/merge-social-link-labels'; import { CaseStudy } from '@/sections/CaseStudy/components'; -import { Faq } from '@/sections/Faq/components'; import { Menu } from '@/sections/Menu/components'; import { theme } from '@/theme'; import type { Metadata } from 'next'; @@ -64,7 +61,7 @@ const CASE_STUDY: CaseStudyData = { { text: 'to advanced', fontFamily: 'sans' }, ], paragraphs: [ - 'Olivier recognizes that NetZero\'s current use of Twenty is still relatively simple: workflows and integrations are not yet as deep as he eventually wants, because he prioritized getting foundations right first.', + "Olivier recognizes that NetZero's current use of Twenty is still relatively simple: workflows and integrations are not yet as deep as he eventually wants, because he prioritized getting foundations right first.", 'What is planned is significant. NetZero has a data lake, online forms, and multiple internal systems that he wants to connect to Twenty. The pipes are there; the next step is automations that tie them together.', 'What is coming in April 2026 is what he has been waiting for: AI-assisted workflow creation — describing what he needs and iterating from there instead of building complex logic from scratch. For a founder who runs the CRM himself, that changes what is realistically possible.', ], @@ -82,17 +79,6 @@ const CASE_STUDY: CaseStudyData = { ], }, ], - testimonial: { - eyebrow: 'What they say', - quote: - 'The flexibility is really what made the difference. Our needs evolve very fast. I discover a new need and in two clicks I can address it.', - author: { - name: 'Olivier Reinaud', - handle: 'Co-founder, NetZero', - date: '2025', - avatarSrc: PLACEHOLDER_HERO, - }, - }, tableOfContents: [ 'The right foundation', 'A business that does not fit a template', @@ -115,6 +101,18 @@ export default async function NetZeroCaseStudyPage() { const stats = await fetchCommunityStats(); const menuSocialLinks = mergeSocialLinkLabels(MENU_DATA.socialLinks, stats); + let storySectionIndex = 0; + const sectionBlocks = CASE_STUDY.sections.map((block, index) => { + if (block.type === 'text') { + const sectionId = `case-study-section-${storySectionIndex}`; + storySectionIndex += 1; + return ( + + ); + } + return ; + }); + return ( <> - {CASE_STUDY.sections.map((block, index) => { - if (block.type === 'text') { - return ; - } - return ; - })} + {sectionBlocks} - - - - - - - - - - - - - - - + ); } diff --git a/packages/twenty-website-new/src/app/case-studies/page.tsx b/packages/twenty-website-new/src/app/case-studies/page.tsx index 3ed8e5321e..56f9c83fb4 100644 --- a/packages/twenty-website-new/src/app/case-studies/page.tsx +++ b/packages/twenty-website-new/src/app/case-studies/page.tsx @@ -1,12 +1,11 @@ -import { FAQ_DATA, MENU_DATA } from '@/app/_constants'; +import { MENU_DATA } from '@/app/_constants'; import { TalkToUsButton } from '@/app/components/ContactCalModal'; import type { CaseStudyCatalogEntry } from '@/app/case-studies/_constants/types'; -import { Eyebrow, LinkButton } from '@/design-system/components'; +import { LinkButton } from '@/design-system/components'; import { Pages } from '@/enums/pages'; import { fetchCommunityStats } from '@/lib/community/fetch-community-stats'; import { mergeSocialLinkLabels } from '@/lib/community/merge-social-link-labels'; import { CaseStudyCatalog } from '@/sections/CaseStudyCatalog/components'; -import { Faq } from '@/sections/Faq/components'; import { Hero } from '@/sections/Hero/components'; import { Menu } from '@/sections/Menu/components'; import { Signoff } from '@/sections/Signoff/components'; @@ -72,7 +71,7 @@ const CASE_STUDY_CATALOG_ENTRIES: CaseStudyCatalogEntry[] = [ }, catalogCard: { summary: - 'Nine Dots put Twenty at the center of Homeseller\'s stack with APIs, automation, and AI on top of WhatsApp-heavy operations.', + "Nine Dots put Twenty at the center of Homeseller's stack with APIs, automation, and AI on top of WhatsApp-heavy operations.", date: 'Jul 2025', }, }, @@ -196,28 +195,6 @@ export default async function CaseStudiesCatalogPage() { /> - - - - - - - - - - - - ); } diff --git a/packages/twenty-website-new/src/app/case-studies/w3villa/page.tsx b/packages/twenty-website-new/src/app/case-studies/w3villa/page.tsx index 38db0420b3..8efb84b431 100644 --- a/packages/twenty-website-new/src/app/case-studies/w3villa/page.tsx +++ b/packages/twenty-website-new/src/app/case-studies/w3villa/page.tsx @@ -1,11 +1,8 @@ -import { FAQ_DATA, MENU_DATA } from '@/app/_constants'; -import { TalkToUsButton } from '@/app/components/ContactCalModal'; +import { MENU_DATA } from '@/app/_constants'; import type { CaseStudyData } from '@/app/case-studies/_constants/types'; -import { Eyebrow, LinkButton } from '@/design-system/components'; import { fetchCommunityStats } from '@/lib/community/fetch-community-stats'; import { mergeSocialLinkLabels } from '@/lib/community/merge-social-link-labels'; import { CaseStudy } from '@/sections/CaseStudy/components'; -import { Faq } from '@/sections/Faq/components'; import { Menu } from '@/sections/Menu/components'; import { theme } from '@/theme'; import type { Metadata } from 'next'; @@ -83,17 +80,6 @@ const CASE_STUDY: CaseStudyData = { ], }, ], - testimonial: { - eyebrow: 'What they say', - quote: - 'Twenty gave us the flexibility to model the entire interview lifecycle as custom objects and workflows.', - author: { - name: 'Piyush Khandelwal', - handle: 'Director, W3villa Technologies', - date: '2025', - avatarSrc: PLACEHOLDER_HERO, - }, - }, tableOfContents: [ 'Scale without breaking operations', 'Focus on the use case, not the plumbing', @@ -116,6 +102,18 @@ export default async function W3villaCaseStudyPage() { const stats = await fetchCommunityStats(); const menuSocialLinks = mergeSocialLinkLabels(MENU_DATA.socialLinks, stats); + let storySectionIndex = 0; + const sectionBlocks = CASE_STUDY.sections.map((block, index) => { + if (block.type === 'text') { + const sectionId = `case-study-section-${storySectionIndex}`; + storySectionIndex += 1; + return ( + + ); + } + return ; + }); + return ( <> - {CASE_STUDY.sections.map((block, index) => { - if (block.type === 'text') { - return ; - } - return ; - })} + {sectionBlocks} - - - - - - - - - - - - - - - + ); } diff --git a/packages/twenty-website-new/src/app/partner/page.tsx b/packages/twenty-website-new/src/app/partner/page.tsx index 9278a1825f..24ebfbbfc4 100644 --- a/packages/twenty-website-new/src/app/partner/page.tsx +++ b/packages/twenty-website-new/src/app/partner/page.tsx @@ -111,10 +111,9 @@ export default async function PartnerPage() { {allNotes.length === 0 ? ( - Release notes were not found. This app reads release MDX from{' '} - packages/twenty-website/src/content/releases in the - monorepo. Ensure that folder is present when building or running - locally. + Release notes were not found. Add MDX under{' '} + packages/twenty-website-new/src/content/releases{' '} + and images under{' '} + packages/twenty-website-new/public/images/releases. ) : visibleNotes.length === 0 ? ( diff --git a/packages/twenty-website-new/src/content/releases/0.10.0.mdx b/packages/twenty-website-new/src/content/releases/0.10.0.mdx new file mode 100644 index 0000000000..07b84ad4d3 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.10.0.mdx @@ -0,0 +1,40 @@ +--- +release: 0.10.0 +Date: 2024-04-15 +--- + +# More Field Types, More Power + +Enhance your data handling capabilities with the addition of four new field types: + +## Multi-Select Field + +The `Multi-Select Field` allows for tagging a record with multiple attributes, providing a flexible way to classify and filter data. + +**Example Use Case**: Tag a company record with multiple industries such as "Retail," "Technology," and "Finance," enabling more nuanced segmentation and analysis. + +![](/images/releases/0.10/0.10-multi-select.webp) + +## Currency Field + +Designed specifically for financial data, the `Currency Field` ensures correct calculation and standard formatting for monetary figures. + +**Example Use Case**: Record and manage global transactions in their original currencies while maintaining precision in financial reporting. + +![](/images/releases/0.10/0.10-currency.webp) + +## Datetime Field + +With the `Datetime Field`, you can effectively track events, deadlines, and activities with enhanced accuracy, improving time management and scheduling. + +**Example Use Case**: Precisely track and set reminders for project milestones and deadlines. + +![](/images/releases/0.10/0.10-datetime.webp) + +## JSON Field + +The `JSON Field` allows for the storage of complex, structured data within a single field, thus expanding the capabilities for data customisation and integration. + +**Example Use Case**: Store configurable data for a product, such as feature flags or customization options, directly within a CRM record. + +![](/images/releases/0.10/0.10-json.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.11.0.mdx b/packages/twenty-website-new/src/content/releases/0.11.0.mdx new file mode 100644 index 0000000000..2b28ce5816 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.11.0.mdx @@ -0,0 +1,16 @@ +--- +release: 0.11.0 +Date: 2024-05-06 +--- + +# Google Calendar Integration + +With Google Calendar integration, you can track all your team's events with a company or person in your CRM. Choose the information level visible to your teammates for better control. + +![](/images/releases/0.11/0.11-calendar.webp) + +# Improved Performance + +We have improved app performance, shaving off over 500ms on each page. + +![](/images/releases/0.11/0.11-speed.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.12.0.mdx b/packages/twenty-website-new/src/content/releases/0.12.0.mdx new file mode 100644 index 0000000000..97bdfc901e --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.12.0.mdx @@ -0,0 +1,28 @@ +--- +release: 0.12.0 +Date: 2024-05-24 +--- + +# Notifications + +Introduced a new design for notifications featuring lighter colors. + +![](/images/releases/0.12/0.12-notifications.webp) + +# Skeleton Loading + +Implemented skeleton loading to improve user experience by displaying placeholder content while data is being fetched. + +![](/images/releases/0.12/0.12-loader.webp) + +# Link field + +Introduced a new Link Field type to add and manage one or several external URLs on any object. Available in custom objects starting today. + +![](/images/releases/0.12/0.12-link-field.webp) + +# Data Model Diagram + +Introduced a "Data Model Diagram" feature that allows users to visualize the relationships between different objects within the CRM. + +![](/images/releases/0.12/0.12-database-diagram.webp) diff --git a/packages/twenty-website-new/src/content/releases/0.2.3.mdx b/packages/twenty-website-new/src/content/releases/0.2.3.mdx new file mode 100644 index 0000000000..e620520a2e --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.2.3.mdx @@ -0,0 +1,16 @@ +--- +release: 0.2.3 +Date: 2024-01-17 +--- + +# Webhooks + +Developers can now use webhooks to synchronize customer data updates in real-time across applications. + +![Webhooks](/images/releases/0.2.3_webhooks.webp) + +# Relations on Record Pages + +You can now navigate from one object to another directly from the record detail page. + +![Webhooks](/images/releases/0.2.3_relations.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.20.0.mdx b/packages/twenty-website-new/src/content/releases/0.20.0.mdx new file mode 100644 index 0000000000..3c01d2de21 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.20.0.mdx @@ -0,0 +1,30 @@ +--- +release: 0.20.0 +Date: 2024-06-14 +--- + +# Enhanced Timeline + +The timeline on every record page has been significantly improved. It now provides detailed updates for: + +Record creations + +Field updates + +Received emails + +Created calendar events + +![](/images/releases/0.20/0.20-timeline.webp) + +# Improved Onboarding Experience + +Our onboarding process has been streamlined to let you import your calendar and emails seamlessly. You can now also configure your privacy settings directly during onboarding, allowing you to choose between sharing content with your team or keeping it hidden. + +![](/images/releases/0.20/0.20-onboarding.webp) + +# Email and calendar Blocklist + +To enhance privacy, you can now add specific email addresses to a blocklist within the "Accounts" settings. This feature prevents sensitive content from being synced to the CRM when corresponding with certain individuals. This can be particularly useful when managing sensitive deals. + +![](/images/releases/0.20/0.20-blocklist.webp) diff --git a/packages/twenty-website-new/src/content/releases/0.21.0.mdx b/packages/twenty-website-new/src/content/releases/0.21.0.mdx new file mode 100644 index 0000000000..ed94a1e2a5 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.21.0.mdx @@ -0,0 +1,29 @@ +--- +release: 0.21.0 +Date: 2024-06-28 +--- + +# Enhanced One-to-Many Relations Editing + +You can now edit one-to-many relations directly from the "many side". This means you can assign people to a company directly from the company list view, instead of having to navigate to each individual person's profile to assign them a company. + +![](/images/releases/0.21/0.21-many-many.webp) + + +# Advanced Email and Calendar Settings + +We've introduced advanced settings for email and calendar management: + +**Auto-Create Contact Options:** Choose when an email interaction should automatically create a contact. Options include: + +People I've sent emails to and received emails from + +People I've sent emails to + +Don't auto create contact + +**Email Exclusions:** Ability to exclude non-professional emails (e.g., Gmail, Outlook) and team emails (e.g., support@, team@) from being synced to the CRM. + +**Calendar Events:** Auto-contact creation settings are now available for calendar events as well. + +![](/images/releases/0.21/0.21-advanced-email-settings.webp) diff --git a/packages/twenty-website-new/src/content/releases/0.22.0.mdx b/packages/twenty-website-new/src/content/releases/0.22.0.mdx new file mode 100644 index 0000000000..d59063dc24 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.22.0.mdx @@ -0,0 +1,30 @@ +--- +release: 0.22.0 +Date: 2024-07-11 +--- + +# Enhanced Kanban Board + +**Edit Kanban Stages:** You can now edit Kanban stages directly from the app, not just from the settings. This makes it easier to manage and customize your workflow on the fly. + +**"No Value" Column:** Cards that are not assigned to a specific value will now appear in a "No Value" column. This column can be shown or hidden as needed, ensuring no cards are overlooked. + +![](/images/releases/0.22/0.22-kanban-improvements.webp) + +# Revamped Navigation Bar + +Navigate more quickly with our revamped record page navbar: + +Navigate directly from one record page to another. + +View the total number of records within a view. + +Easily return to the corresponding index view with a new "Close" button. + +![](/images/releases/0.22/0.22-navbar.webp) + +# Bulk Deletion + +You can now delete up to 10,000 records at once. (For when you want to Marie Kondo your database! 🧹) + +![](/images/releases/0.22/0.22-mass-deletion.webp) diff --git a/packages/twenty-website-new/src/content/releases/0.23.0.mdx b/packages/twenty-website-new/src/content/releases/0.23.0.mdx new file mode 100644 index 0000000000..af1a0e7683 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.23.0.mdx @@ -0,0 +1,22 @@ +--- +release: 0.23.0 +Date: 2024-08-01 +--- + +# Notes and Tasks standard objects + +Like any regular object, add some custom fields to your tasks and companies or create some custom views to better organize your content. + +![](/images/releases/0.23/0.23-notes-tasks.webp) + +# Created By + +Quickly identify who created a given record and what was the origin of the creation, whether it was through a CSV import, an API, or manual input. + +![](/images/releases/0.23/0.23-created-by.webp) + +# Webhooks filter + +Filter the content a webhook is returning so it only pings your URL when a specific action occurs, such as on creating a company. + +![](/images/releases/0.23/0.23-filter-webhooks.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.24.0.mdx b/packages/twenty-website-new/src/content/releases/0.24.0.mdx new file mode 100644 index 0000000000..12e45c5d76 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.24.0.mdx @@ -0,0 +1,10 @@ +--- +release: 0.24.0 +Date: 2024-08-29 +--- + +# Soft Delete + +Soft delete feature added: Deleted records are now hidden from view but recoverable from the "Deleted record" option in any object options menu. No more drama! + +![](/images/releases/0.24/0.24-soft-delete.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.3.0.mdx b/packages/twenty-website-new/src/content/releases/0.3.0.mdx new file mode 100644 index 0000000000..6c51311977 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.3.0.mdx @@ -0,0 +1,10 @@ +--- +release: 0.3.0 +Date: 2024-02-03 +--- + +# Rating field + +The new Rating field represents a numeric value from zero to five, it can be useful for various use-cases such as scoring leads. + +![rating](/images/releases/0.3.0_rating.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.3.1.mdx b/packages/twenty-website-new/src/content/releases/0.3.1.mdx new file mode 100644 index 0000000000..afd382e831 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.3.1.mdx @@ -0,0 +1,11 @@ +--- +release: 0.3.1 +Date: 2024-02-16 +--- + +# Contributors page + +Contributors now have their very own [hall of fame](https://twenty.com/contributors). + +![rating](/images/releases/0.3.1_contributors.webp) + diff --git a/packages/twenty-website-new/src/content/releases/0.3.2.mdx b/packages/twenty-website-new/src/content/releases/0.3.2.mdx new file mode 100644 index 0000000000..b07baae396 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.3.2.mdx @@ -0,0 +1,10 @@ +--- +release: 0.3.2 +Date: 2024-02-29 +--- + +# New record page + +The record page now features a clearer layout with increased space for content + +![](/images/releases/0.3.2_new_layout.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.3.3.mdx b/packages/twenty-website-new/src/content/releases/0.3.3.mdx new file mode 100644 index 0000000000..6d53333c21 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.3.3.mdx @@ -0,0 +1,23 @@ +--- +release: 0.3.3 +Date: 2024-03-19 +--- + +# Gmail integration + +Connect your Gmail account to automatically associate emails with relevant 'People' and 'Companies'. Contacts you've emailed will be automatically added to 'People', excluding non-personal emails like support@ and team@. Control your privacy by selecting the information you share with your team. + +![](/images/releases/0.3.3_emails.webp) + + +# Kanbans on any object + +Create a Kanban view on any object and streamline processes like recruitment or onboarding. + +![](/images/releases/0.3.3_kanban.webp) + +# Self-Onboarding + +We are pleased to reopen the cloud subscription to everyone. No more waiting! + +![](/images/releases/0.3.3_sign_up.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.30.0.mdx b/packages/twenty-website-new/src/content/releases/0.30.0.mdx new file mode 100644 index 0000000000..c66d3d61d2 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.30.0.mdx @@ -0,0 +1,22 @@ +--- +release: 0.30.0 +Date: 2024-09-18 +--- + +# New Settings layout + +Experience a more compact and intuitive settings layout, now featuring a breadcrumb navigation for easier access and better organization. + +![](/images/releases/0.30/0.30-new-settings.webp) + +# Add Several emails for one contact + +Enhance your contact management by adding many email addresses for a single contact. All emails sent to these addresses will be automatically synced with the contact, ensuring you never miss an important communication. + +![](/images/releases/0.30/0.30-emails.webp) + +# New Array field type + +Developers can now take advantage of the new array field type to store non-predefined values. + +![](/images/releases/0.30/0.30-array-field.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.31.0.mdx b/packages/twenty-website-new/src/content/releases/0.31.0.mdx new file mode 100644 index 0000000000..74a272bb28 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.31.0.mdx @@ -0,0 +1,16 @@ +--- +release: 0.31.0 +Date: 2024-10-07 +--- + +# Advanced Settings + +To maintain the simplicity of Twenty, we are introducing "Advanced Settings." This option consolidates all settings intended for advanced use cases, often preferred by developers, such as API and function settings or security settings. + +![](/images/releases/0.31/0.31-advanced-settings.webp) + +# More powerful search + +We have significantly enhanced our search performance, making it feel instantaneous when searching for records such as people, companies, or tasks. + +![](/images/releases/0.31/0.31-search.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.32.0.mdx b/packages/twenty-website-new/src/content/releases/0.32.0.mdx new file mode 100644 index 0000000000..97f63226fa --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.32.0.mdx @@ -0,0 +1,16 @@ +--- +release: 0.32.0 +Date: 2024-11-12 +--- + +# Smart ⌘K + +We started a major ⌘K revamp that now understands the context to display appropriate actions. For example, on a record page, you can add the record as a favorite, or if you select multiple records on an index, you can export them as a CSV. + +![](/images/releases/0.32/0.32-improved-cmdk.webp) + +# Webhooks multi-object filtering + +You can now filter multiple actions simultaneously with a single webhook. For example, you can create a webhook that triggers only when a person or company is updated or created. + +![](/images/releases/0.32/0.32-webhooks.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.33.0.mdx b/packages/twenty-website-new/src/content/releases/0.33.0.mdx new file mode 100644 index 0000000000..2fd90a349a --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.33.0.mdx @@ -0,0 +1,16 @@ +--- +release: 0.33.0 +Date: 2024-11-21 +--- + +# Filter by Multi-Select + +You can now filter an object (People, Companies, Opportunities, etc.) using any multiselect field. + +![](/images/releases/0.33/0.33-multiselect-filter.webp) + +# Percentage in number fields + +You can now create number fields that display a percentage instead of a regular number. + +![](/images/releases/0.33/0.33-percentage-number.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.34.0.mdx b/packages/twenty-website-new/src/content/releases/0.34.0.mdx new file mode 100644 index 0000000000..9ee4b65e89 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.34.0.mdx @@ -0,0 +1,10 @@ +--- +release: 0.34.0 +Date: 2024-12-12 +--- + +# Customize your sub-domain + +Each workspace now gets a dedicated sub-domain for a more secure experience. And soon you will be able to set your own domain. + +![](/images/releases/0.34/0.34-subdomains.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.35.0.mdx b/packages/twenty-website-new/src/content/releases/0.35.0.mdx new file mode 100644 index 0000000000..34df93c6d5 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.35.0.mdx @@ -0,0 +1,10 @@ +--- +release: 0.35.0 +Date: 2024-12-20 +--- + +# Favorites Views and Favorites Folders + +You can now add your views to favorites for quick access and organize your favorites into folders for better management. + +![](/images/releases/0.35/0.35-Favorites.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.4.0.mdx b/packages/twenty-website-new/src/content/releases/0.4.0.mdx new file mode 100644 index 0000000000..09fbcadf56 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.4.0.mdx @@ -0,0 +1,23 @@ +--- +release: 0.4.0 +Date: 2024-04-01 +--- + +# Relation Fields on Record Page + +On record pages, you can now expand relation cards to view their fields without navigating to their individual record pages. For example, on a Company record page, you can expand an employee card to view their job title. This feature applies to all types of objects, including custom ones. + +![](/images/releases/0.4/0.4-expand-relation-card.webp) + + +# Address Field Type + +The new `Address Field` Type enables entry of a full address in one field, while structurally storing each address part - such as street name and number - in separate subfields. + +![](/images/releases/0.4/0.4-address-field-type.webp) + +# Multi-Workspace + +You can now switch between workspaces by clicking your workspace name at the top left of the screen. This feature will only appear if you have been invited to join another workspace. + +![](/images/releases/0.4/0.4-multi-workspace.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.40.0.mdx b/packages/twenty-website-new/src/content/releases/0.40.0.mdx new file mode 100644 index 0000000000..fbc0820a20 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.40.0.mdx @@ -0,0 +1,17 @@ +--- +release: 0.40.0 +Date: 2025-01-17 +--- + +# View Groups + +Added "Group By" in tables to better organize entries, like grouping companies by industry for clearer data visualization. This feature is available in the table Options menu. + +![](/images/releases/0.40/0.40-group-by.webp) + + +# Aggregates + +Introduced a feature to calculate and display data summaries, such as sums and latest entries, for quick insights and streamlined data analysis. + +![](/images/releases/0.40/0.40-aggregates.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.41.0.mdx b/packages/twenty-website-new/src/content/releases/0.41.0.mdx new file mode 100644 index 0000000000..65007dcd66 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.41.0.mdx @@ -0,0 +1,10 @@ +--- +release: 0.41.0 +Date: 2025-02-04 +--- + +# Labs + +Enable beta features using the new Labs tab in settings. The first beta release introduces our workflow engine. Enjoy! + +![](/images/releases/0.41/0.41-labs.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.42.0.mdx b/packages/twenty-website-new/src/content/releases/0.42.0.mdx new file mode 100644 index 0000000000..35202c377c --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.42.0.mdx @@ -0,0 +1,22 @@ +--- +release: 0.42.0 +Date: 2025-02-18 +--- + +# Microsoft o365 Integration + +You can now link your Microsoft account to easily manage your messages and events right within your workspace. + +![](/images/releases/0.42/0.42-microsoft.webp) + +# Translation in 30+ Languages + +Expanded support for 30+ languages, so users can navigate and use the software in their preferred language. + +![](/images/releases/0.42/0.42-translation.webp) + +# Attachment Visualizer + +You can now preview file attachments without downloading them. + +![](/images/releases/0.42/0.42-document-viewer.webp) diff --git a/packages/twenty-website-new/src/content/releases/0.43.0.mdx b/packages/twenty-website-new/src/content/releases/0.43.0.mdx new file mode 100644 index 0000000000..f49cba854b --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.43.0.mdx @@ -0,0 +1,16 @@ +--- +release: 0.43.0 +Date: 2025-03-04 +--- + +# Upgraded Search + +The search feature now includes ranking scores. This helps you find the most relevant results faster. + +![](/images/releases/0.43.0/search-upgrade.webp) + +# Internal Email Privacy + +Internal team emails won't sync, protecting privacy by preventing access to internal discussions. + +![](/images/releases/0.43.0/email-privacy.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/0.44.0.mdx b/packages/twenty-website-new/src/content/releases/0.44.0.mdx new file mode 100644 index 0000000000..b062adaaa4 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.44.0.mdx @@ -0,0 +1,24 @@ +--- +release: 0.44.0 +Date: 2025-03-17 +--- + +# New Side Panel + +**Quick Access to Records**: Side panel lets you view and edit records without leaving your current page. + +**Keyboard Navigation**: Navigate the side panel with keyboard for better accessibility and faster workflows. + +**Pinned Actions**: More actions now displayed directly in the navbar for easier access. + +![](/images/releases/0.44/0.44-side-panel.webp) + +# Admin Panel + +**App Health Check**: Added a health check feature to the admin panel. Now shows real-time status and key metrics. + +**Environment Variables**: Admin panel now has read-only access to environment variables. Better transparency, easier config management. + +![](/images/releases/0.44/0.44-admin-panel.webp) + + diff --git a/packages/twenty-website-new/src/content/releases/0.50.0.mdx b/packages/twenty-website-new/src/content/releases/0.50.0.mdx new file mode 100644 index 0000000000..f614959adc --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.50.0.mdx @@ -0,0 +1,18 @@ +--- +release: 0.50.0 +Date: 2025-03-27 +--- + +# Permissions V1 + +Ability to set User and Admin permissions for each user. Admins can edit workspace settings, while Users can only edit records. Custom permission creation will be available in a future update. + +![](/images/releases/0.50/0.50-permissions.webp) + +# Advanced filters + +Advanced filter enables precise database content filtering through nested conditional operators (AND/OR), multiple field filters, and customizable filter groups for complex query construction. + +![](/images/releases/0.50/0.50-advanced-filters.webp) + + diff --git a/packages/twenty-website-new/src/content/releases/0.51.0.mdx b/packages/twenty-website-new/src/content/releases/0.51.0.mdx new file mode 100644 index 0000000000..5db7d696c1 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.51.0.mdx @@ -0,0 +1,10 @@ +--- +release: 0.51.0 +Date: 2025-03-27 +--- + +# Revamp View Options Menu + +You can now rename a view and change its type between kanban or table directly from the view options menu located to the right of the filter and sort buttons. + +![](/images/releases/0.51.0/0.51-options-menu.webp) diff --git a/packages/twenty-website-new/src/content/releases/0.52.0.mdx b/packages/twenty-website-new/src/content/releases/0.52.0.mdx new file mode 100644 index 0000000000..86a222d035 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/0.52.0.mdx @@ -0,0 +1,20 @@ +--- +release: 0.52.0 +Date: 2025-04-25 +--- + +# Add records to filtered views + +Creating records on filtered views now applies the view filter to the newly created record. This feature is compatible with Text, Date\_Time, Date, Number, Select, Rating, Multi\_Select, Array, and Boolean fields. + +![](/images/releases/0.52.0/0.52-filtered-views-records.webp) + +# Custom date formats + +Choose how to display dates in any field using a universal Unicode date format that best suits your use case. + +![](/images/releases/0.52.0/0.52-custom-date-format.webp) + +# Other improvements + +A new breadcrumb navigation across the app, improved keyboard menu navigation, and a new focus state for table views. diff --git a/packages/twenty-website-new/src/content/releases/1.00.0.mdx b/packages/twenty-website-new/src/content/releases/1.00.0.mdx new file mode 100644 index 0000000000..f365e905c9 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/1.00.0.mdx @@ -0,0 +1,37 @@ +--- +release: 1.00.0 +Date: 2025-06-25 +--- + +# Permissions V2 + +Create and manage custom roles. Grant or revoke access for each object to Read/Create/Edit/Delete records. Give granular access to settings like the ability to manage users, data models or APIs. + +![](/images/releases/1.00/1.00-permissions.webp) + +# Workflows + +Introducing workflows, a powerful way to let you automate actions with form triggers, conditions, HTTP requests, webhooks, and serverless functions! + +![](/images/releases/1.00/1.00-workflow.webp) + +# Import V2 + +CSV import now supports 2,000+ rows, sub-fields such as labels and secondary phone numbers, and automatic field matching. Validations, layout, and upserts are improved for smoother, more accurate imports. + +![](/images/releases/1.00/1.00-import-update.webp) + +# Sub-field Filtering + +Sub-field filtering is now supported for currency, address, name, email, link, phone, and actor fields. For example, you can filter by the amount in a currency without needing the full field. + +![](/images/releases/1.00/1.00-subfield-filtering.webp) + +# Performance Improvements + +We’ve cut key load and interaction times by over 3,000ms, which means pages now load 2x faster! + +![](/images/releases/1.00/1.00-performance-improvement.webp) + + + diff --git a/packages/twenty-website-new/src/content/releases/1.1.0.mdx b/packages/twenty-website-new/src/content/releases/1.1.0.mdx new file mode 100644 index 0000000000..f10dabc3d4 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/1.1.0.mdx @@ -0,0 +1,18 @@ +--- +release: 1.1.0 +Date: 2025-07-10 +--- + +# Multi-Record Workflow Triggers + +You can now run workflows on many records at once. Previously, manual workflows could only be triggered one record at a time. This change improves productivity for bulk operations. + +With the ability to trigger workflows on many records, you can now: + +Send bulk emails to selected contacts + +Update many records with the same workflow logic + +Process batches of data more efficiently + +![](/images/releases/1.1/1.1-multi-manual-trigger.webp) diff --git a/packages/twenty-website-new/src/content/releases/1.10.0.mdx b/packages/twenty-website-new/src/content/releases/1.10.0.mdx new file mode 100644 index 0000000000..64b4d93f31 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/1.10.0.mdx @@ -0,0 +1,17 @@ +--- +release: 1.10.0 +Date: 2025-11-11 +--- + +# Calendar View for Objects + +You can now visualize your records in a monthly calendar view. This new view type makes it easy to track time-based data like events, deadlines, and scheduled activities directly within any object. + +![](/images/releases/1.10/1.10.0-calendar.webp) + +# Dashboards in Labs (Beta) + +Create custom charts and visualizations using your workspace data with the new Dashboards feature. Available in Labs, this beta feature lets you build powerful analytics and insights to monitor your business metrics. + +![](/images/releases/1.10/1.10.0-dashboards.webp) + diff --git a/packages/twenty-website-new/src/content/releases/1.11.0.mdx b/packages/twenty-website-new/src/content/releases/1.11.0.mdx new file mode 100644 index 0000000000..980b051593 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/1.11.0.mdx @@ -0,0 +1,18 @@ +--- +release: 1.11.0 +Date: 2025-11-18 +--- + +# Unlisted Views + +You can now create personal views that stay out of the shared Workspace section and appear instead under a separate **My unlisted views** section in the view picker. These unlisted views are only listed for their creator, but can still be opened by teammates via direct link. + +![](/images/releases/1.11/1.11.0-unlisted-views.webp) + +# Morph Many Relationships + +Create flexible relationships where a single field can connect to multiple different object types. For example, an Opportunity can now relate to either a Person or a Company, giving you more versatile data modeling capabilities. + +![](/images/releases/1.11/1.11.0-morph-relations.webp) + + diff --git a/packages/twenty-website-new/src/content/releases/1.12.0.mdx b/packages/twenty-website-new/src/content/releases/1.12.0.mdx new file mode 100644 index 0000000000..76da3c8cfe --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/1.12.0.mdx @@ -0,0 +1,17 @@ +--- +release: 1.12.0 +Date: 2025-12-02 +--- + +# Revamped Side Panel + +The side panel now opens next to your content rather than above it, giving you a better overview while configuring workflows or viewing record details. This new layout is especially handy for workflows and the upcoming dashboards feature. + +![](/images/releases/1.12/1.12.0-side-panel.webp) + +# Granular Email Folder Sync + +Choose exactly which Gmail labels or Outlook folders to sync on your workspace. This gives you more control over your email data and better privacy by importing only the folders you need. + +![](/images/releases/1.12/1.12.0-folder-sync.webp) + diff --git a/packages/twenty-website-new/src/content/releases/1.2.0.mdx b/packages/twenty-website-new/src/content/releases/1.2.0.mdx new file mode 100644 index 0000000000..4682bfab88 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/1.2.0.mdx @@ -0,0 +1,15 @@ +--- +release: 1.2.0 +Date: 2025-07-25 +--- + +# Import Relations + +When importing records, you can now import relations between records. For example, you can import a CSV file that includes a column for related records, such as linking contacts to companies or tasks to projects. +![](/images/releases/1.2/1.2-import-relations.webp) + +# Any Field filter + +We’ve added an "any field search" filter that lets you search across all fields at once. For example, it can allow you to locate a customer by their phone number, whether it's stored in the "Mobile," "Office," or "Direct Line" field. + +![](/images/releases/1.2/1.2-any-fields.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/1.3.0.mdx b/packages/twenty-website-new/src/content/releases/1.3.0.mdx new file mode 100644 index 0000000000..373cc0869d --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/1.3.0.mdx @@ -0,0 +1,16 @@ +--- +release: 1.3.0 +Date: 2025-08-11 +--- + +# IMAP + +We’ve added IMAP support to let you connect email accounts for receiving messages. You can also set up SMTP to send emails and CalDAV to sync calendars. + +![](/images/releases/1.3/1.3-IMAP.webp) + +# Merge Records + +This feature gives you the ability to merge two records into one. This combines their information and keeps linked data, helping you remove duplicates and keep records accurate. + +![](/images/releases/1.3/1.3-merge.webp) diff --git a/packages/twenty-website-new/src/content/releases/1.4.0.mdx b/packages/twenty-website-new/src/content/releases/1.4.0.mdx new file mode 100644 index 0000000000..92f897ae23 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/1.4.0.mdx @@ -0,0 +1,22 @@ +--- +release: 1.4.0 +Date: 2025-08-29 +--- + +# Field Level Permission + +You can now control which fields a role can view or edit. This adds more granular access control on top of existing object-level permissions. + +![](/images/releases/1.4/1.4-field-permissions.webp) + +# Workflow Filters + +Add filters between workflow steps with conditions and only let data continue if it meets the criteria you define. + +![](/images/releases/1.4/1.4-workflow-filters.webp) + +# Two Factor Authentication + +Enabled two-factor authentication with authenticator apps like 1Password, Authy, or Microsoft Authenticator to add an extra layer of security at sign-in. + +![](/images/releases/1.4/1.4-two-factor-auth.webp) diff --git a/packages/twenty-website-new/src/content/releases/1.5.0.mdx b/packages/twenty-website-new/src/content/releases/1.5.0.mdx new file mode 100644 index 0000000000..94d2fda38e --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/1.5.0.mdx @@ -0,0 +1,10 @@ +--- +release: 1.5.0 +Date: 2025-09-11 +--- + +# Workflow branches + +Workflow branches allow workflows to split paths, enabling conditional logic and multiple outcome flows in automation. + +![](/images/releases/1.5/1.5-workflow-branches.webp) \ No newline at end of file diff --git a/packages/twenty-website-new/src/content/releases/1.6.0.mdx b/packages/twenty-website-new/src/content/releases/1.6.0.mdx new file mode 100644 index 0000000000..3f93da9397 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/1.6.0.mdx @@ -0,0 +1,10 @@ +--- +release: 1.6.0 +Date: 2025-09-19 +--- + +# Workflow improvements + +You now have the ability to duplicate nodes, change node types, and use a streamlined filter design in your workflows. + +![](/images/releases/1.6/1.6-workflows-improvements.webp) diff --git a/packages/twenty-website-new/src/content/releases/1.7.0.mdx b/packages/twenty-website-new/src/content/releases/1.7.0.mdx new file mode 100644 index 0000000000..8e7f0a1a50 --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/1.7.0.mdx @@ -0,0 +1,16 @@ +--- +release: 1.7.0 +Date: 2025-10-02 +--- + +# User impersonation + +You can now impersonate a workspace user as an admin. This allows you to see the workspace as that user would, which is useful for troubleshooting issues or understanding user experience. + +![](/images/releases/1.7/1.7-impersonating.webp) + +# Record is created or updated trigger + +You can now trigger workflows when a record is created or updated. + +![](/images/releases/1.7/1.7-upsert.webp) diff --git a/packages/twenty-website-new/src/content/releases/1.8.0.mdx b/packages/twenty-website-new/src/content/releases/1.8.0.mdx new file mode 100644 index 0000000000..c4a759615c --- /dev/null +++ b/packages/twenty-website-new/src/content/releases/1.8.0.mdx @@ -0,0 +1,23 @@ +--- +release: 1.8.0 +Date: 2025-10-16 +--- + +# Workflow Iterator Node + +You can now loop through items in your workflows using the new iterator node. This powerful feature allows you to process multiple records sequentially, performing actions on each item in a collection. + +![](/images/releases/1.8/1.8-workflow-iterator.webp) + +# Workflow Bulk Select + +Manual trigger workflows now support bulk selection, allowing you to select multiple records at once to pass into your workflow. This is particularly useful when combined with the iterator node to process several records in one workflow run. + +![](/images/releases/1.8/1.8-bulk-select.webp) + +# Workflow Search Node Limit + +The search node now lets you customize the result limit above 1, enabling you to retrieve multiple records in a single search operation. This enhancement works seamlessly with the iterator node for processing search results. + +![](/images/releases/1.8/1.8-search-limit.webp) + diff --git a/packages/twenty-website-new/src/lib/releases/load-local-release-notes.ts b/packages/twenty-website-new/src/lib/releases/load-local-release-notes.ts index 84331ed9e1..cfc0084e29 100644 --- a/packages/twenty-website-new/src/lib/releases/load-local-release-notes.ts +++ b/packages/twenty-website-new/src/lib/releases/load-local-release-notes.ts @@ -8,13 +8,11 @@ import { compareSemanticVersions } from '@/lib/semver/compare-semantic-versions' function resolveReleasesDirectory(): string | null { const candidates = [ - path.join(process.cwd(), '..', 'twenty-website', 'src', 'content', 'releases'), + path.join(process.cwd(), 'src', 'content', 'releases'), path.join( process.cwd(), - '..', - '..', 'packages', - 'twenty-website', + 'twenty-website-new', 'src', 'content', 'releases', diff --git a/packages/twenty-website-new/src/sections/CaseStudy/components/CaseStudySectionNav.tsx b/packages/twenty-website-new/src/sections/CaseStudy/components/CaseStudySectionNav.tsx new file mode 100644 index 0000000000..e0b3abccd7 --- /dev/null +++ b/packages/twenty-website-new/src/sections/CaseStudy/components/CaseStudySectionNav.tsx @@ -0,0 +1,234 @@ +'use client'; + +import { theme } from '@/theme'; +import { styled } from '@linaria/react'; +import { + IconBrandDiscord, + IconBrandLinkedin, + IconBrandThreads, + IconBrandX, +} from '@tabler/icons-react'; +import { useCallback, useEffect, useState, type MouseEvent } from 'react'; + +const HERO_ANCHOR_ID = 'case-study-hero'; +const SECTION_ID_PREFIX = 'case-study-section'; + +const Shell = styled.aside<{ $visible: boolean }>` + display: none; + flex-direction: column; + gap: ${theme.spacing(10)}; + opacity: ${({ $visible }) => ($visible ? 1 : 0)}; + pointer-events: ${({ $visible }) => ($visible ? 'auto' : 'none')}; + position: fixed; + right: ${theme.spacing(10)}; + top: 50%; + transform: translateY(-50%); + transition: opacity 0.25s ease; + width: 213px; + z-index: 10; + + @media (min-width: ${theme.breakpoints.lg}px) { + display: flex; + } +`; + +const Panel = styled.div` + background-color: ${theme.colors.secondary.background[100]}; + box-sizing: border-box; + display: flex; + gap: ${theme.spacing(4)}; + overflow: hidden; + padding: ${theme.spacing(4)}; + width: 100%; +`; + +const RailTrack = styled.div` + align-self: stretch; + background-color: ${theme.colors.secondary.border[20]}; + flex-shrink: 0; + position: relative; + width: 2px; +`; + +const RailFill = styled.div<{ $percent: number }>` + background-color: ${theme.colors.highlight[100]}; + height: ${({ $percent }) => $percent}%; + left: 0; + position: absolute; + top: 0; + transition: height 0.2s ease; + width: 100%; +`; + +const NavList = styled.nav` + display: flex; + flex: 1; + flex-direction: column; + gap: 22px; + min-height: 0; + min-width: 0; +`; + +const NavLink = styled.a<{ $active: boolean }>` + color: ${({ $active }) => + $active + ? theme.colors.secondary.text[100] + : theme.colors.secondary.text[60]}; + cursor: pointer; + font-family: ${theme.font.family.sans}; + font-size: ${theme.font.size(3)}; + font-weight: ${({ $active }) => + $active ? theme.font.weight.medium : theme.font.weight.regular}; + line-height: ${theme.lineHeight(3.5)}; + overflow-wrap: anywhere; + text-decoration: none; + transition: + color 0.15s ease, + font-weight 0.15s ease; + + &:hover { + color: ${theme.colors.secondary.text[100]}; + } +`; + +const SocialRow = styled.div` + align-items: center; + display: flex; + gap: ${theme.spacing(6)}; +`; + +const SocialLink = styled.a` + color: ${theme.colors.secondary.text[60]}; + display: flex; + + &:hover { + color: ${theme.colors.secondary.text[100]}; + } +`; + +type CaseStudySectionNavProps = { + items: string[]; +}; + +export function CaseStudySectionNav({ items }: CaseStudySectionNavProps) { + const [visible, setVisible] = useState(false); + const [activeIndex, setActiveIndex] = useState(0); + + const updateFromScroll = useCallback(() => { + const hero = document.getElementById(HERO_ANCHOR_ID); + const viewportHeight = window.innerHeight; + + const heroRect = hero?.getBoundingClientRect(); + + const pastHero = heroRect ? heroRect.bottom < viewportHeight * 0.42 : true; + + const lastSectionIndex = items.length - 1; + const lastSection = + items.length > 0 + ? document.getElementById(`${SECTION_ID_PREFIX}-${lastSectionIndex}`) + : null; + const lastSectionRect = lastSection?.getBoundingClientRect(); + const withinArticle = lastSectionRect + ? lastSectionRect.bottom > viewportHeight * 0.42 + : true; + + setVisible(pastHero && withinArticle); + + let nextActive = 0; + for (let index = items.length - 1; index >= 0; index -= 1) { + const element = document.getElementById(`${SECTION_ID_PREFIX}-${index}`); + if (!element) { + continue; + } + const { top } = element.getBoundingClientRect(); + if (top <= 120) { + nextActive = index; + break; + } + } + setActiveIndex(nextActive); + }, [items.length]); + + useEffect(() => { + updateFromScroll(); + window.addEventListener('scroll', updateFromScroll, { passive: true }); + window.addEventListener('resize', updateFromScroll); + return () => { + window.removeEventListener('scroll', updateFromScroll); + window.removeEventListener('resize', updateFromScroll); + }; + }, [updateFromScroll]); + + const progressPercent = + items.length === 0 ? 0 : ((activeIndex + 1) / items.length) * 100; + + const handleNavClick = ( + event: MouseEvent, + targetId: string, + ) => { + event.preventDefault(); + document.getElementById(targetId)?.scrollIntoView({ + behavior: 'smooth', + block: 'start', + }); + }; + + return ( + + + + + + + {items.map((item, index) => ( + + handleNavClick(event, `${SECTION_ID_PREFIX}-${index}`) + } + > + {index + 1} — {item} + + ))} + + + + + + + + + + + + + + + + + + + ); +} diff --git a/packages/twenty-website-new/src/sections/CaseStudy/components/Hero/Hero.tsx b/packages/twenty-website-new/src/sections/CaseStudy/components/Hero/Hero.tsx index 3dd75111b6..24d46fa2e4 100644 --- a/packages/twenty-website-new/src/sections/CaseStudy/components/Hero/Hero.tsx +++ b/packages/twenty-website-new/src/sections/CaseStudy/components/Hero/Hero.tsx @@ -194,7 +194,7 @@ export function Hero({ hero }: HeroProps) { const ClientIcon = CLIENT_ICONS[hero.clientIcon]; return ( -
+
@@ -208,12 +208,7 @@ export function Hero({ hero }: HeroProps) { - + @@ -236,7 +231,7 @@ export function Hero({ hero }: HeroProps) { T - + {hero.heroImageSrc && ( - - - - {items.map((item, index) => ( - - {index + 1} — {item} - - ))} - - - - - - - - - - - - - - - - - - - ); -} diff --git a/packages/twenty-website-new/src/sections/CaseStudy/components/Testimonial/Testimonial.tsx b/packages/twenty-website-new/src/sections/CaseStudy/components/Testimonial/Testimonial.tsx deleted file mode 100644 index f65b535231..0000000000 --- a/packages/twenty-website-new/src/sections/CaseStudy/components/Testimonial/Testimonial.tsx +++ /dev/null @@ -1,161 +0,0 @@ -import type { CaseStudyData } from '@/app/case-studies/_constants/types'; -import { Container, Eyebrow } from '@/design-system/components'; -import { theme } from '@/theme'; -import { styled } from '@linaria/react'; -import Image from 'next/image'; - -const Section = styled.section` - background-color: ${theme.colors.secondary.background[5]}; - color: ${theme.colors.primary.text[100]}; - min-width: 0; - width: 100%; -`; - -const StyledContainer = styled(Container)` - display: flex; - flex-direction: column; - gap: ${theme.spacing(10)}; - padding-bottom: ${theme.spacing(16)}; - padding-left: ${theme.spacing(4)}; - padding-right: ${theme.spacing(4)}; - padding-top: ${theme.spacing(16)}; - - @media (min-width: ${theme.breakpoints.md}px) { - flex-direction: row; - gap: ${theme.spacing(15)}; - padding-bottom: ${theme.spacing(25)}; - padding-left: ${theme.spacing(10)}; - padding-right: ${theme.spacing(10)}; - padding-top: ${theme.spacing(25)}; - } -`; - -const QuoteColumn = styled.div` - display: flex; - flex-direction: column; - gap: ${theme.spacing(14)}; - margin: 0 auto; - max-width: 900px; - width: 100%; -`; - -const QuoteText = styled.p` - font-family: ${theme.font.family.sans}; - font-size: ${theme.font.size(8)}; - font-weight: ${theme.font.weight.light}; - line-height: ${theme.lineHeight(10)}; - margin: 0; - - @media (min-width: ${theme.breakpoints.md}px) { - font-size: ${theme.font.size(12)}; - line-height: ${theme.lineHeight(14)}; - } -`; - -const Attribution = styled.div` - align-items: center; - display: flex; - gap: ${theme.spacing(4)}; -`; - -const Avatar = styled.div` - border-radius: ${theme.radius(1)}; - flex-shrink: 0; - height: 48px; - overflow: hidden; - position: relative; - width: 48px; -`; - -const AvatarFallback = styled.div` - align-items: center; - background-color: ${theme.colors.highlight[100]}; - color: ${theme.colors.primary.text[100]}; - display: flex; - font-family: ${theme.font.family.sans}; - font-size: ${theme.font.size(5)}; - font-weight: ${theme.font.weight.medium}; - height: 100%; - justify-content: center; - width: 100%; -`; - -const AuthorInfo = styled.div` - display: flex; - flex-direction: column; - gap: ${theme.spacing(2)}; -`; - -const AuthorNameRow = styled.div` - align-items: center; - display: flex; - font-family: ${theme.font.family.sans}; - font-size: ${theme.font.size(4)}; - gap: ${theme.spacing(2)}; - line-height: ${theme.lineHeight(5.5)}; -`; - -const AuthorName = styled.span` - font-weight: ${theme.font.weight.medium}; -`; - -const AuthorHandle = styled.span` - font-weight: ${theme.font.weight.regular}; -`; - -const AuthorDate = styled.span` - color: ${theme.colors.primary.text[80]}; - font-family: ${theme.font.family.sans}; - font-size: ${theme.font.size(3)}; - font-weight: ${theme.font.weight.regular}; - line-height: ${theme.lineHeight(3.5)}; -`; - -type TestimonialProps = { - testimonial: CaseStudyData['testimonial']; -}; - -export function Testimonial({ testimonial }: TestimonialProps) { - const initials = testimonial.author.name - .split(' ') - .map((word) => word[0]) - .join(''); - - return ( -
- - - - - {testimonial.quote} - - - - {testimonial.author.avatarSrc ? ( - {testimonial.author.name} - ) : ( - {initials} - )} - - - - {testimonial.author.name} - {testimonial.author.handle} - - {testimonial.author.date} - - - - -
- ); -} diff --git a/packages/twenty-website-new/src/sections/CaseStudy/components/TextBlock/TextBlock.tsx b/packages/twenty-website-new/src/sections/CaseStudy/components/TextBlock/TextBlock.tsx index 00ab314b7b..669346bd35 100644 --- a/packages/twenty-website-new/src/sections/CaseStudy/components/TextBlock/TextBlock.tsx +++ b/packages/twenty-website-new/src/sections/CaseStudy/components/TextBlock/TextBlock.tsx @@ -7,6 +7,7 @@ const Section = styled.section` background-color: ${theme.colors.primary.background[100]}; color: ${theme.colors.primary.text[100]}; min-width: 0; + scroll-margin-top: ${theme.spacing(22)}; width: 100%; `; @@ -70,11 +71,12 @@ const Callout = styled.p` type TextBlockProps = { block: CaseStudyTextBlock; + sectionId?: string; }; -export function TextBlock({ block }: TextBlockProps) { +export function TextBlock({ block, sectionId }: TextBlockProps) { return ( -
+
{block.eyebrow && ( @@ -84,12 +86,7 @@ export function TextBlock({ block }: TextBlockProps) { /> )} - + {block.paragraphs.map((paragraph, index) => ( diff --git a/packages/twenty-website-new/src/sections/CaseStudy/components/index.ts b/packages/twenty-website-new/src/sections/CaseStudy/components/index.ts index 04bbc1eb6b..42c684cfb1 100644 --- a/packages/twenty-website-new/src/sections/CaseStudy/components/index.ts +++ b/packages/twenty-website-new/src/sections/CaseStudy/components/index.ts @@ -1,13 +1,11 @@ +import { CaseStudySectionNav } from './CaseStudySectionNav'; import { Hero } from './Hero/Hero'; -import { TableOfContents } from './TableOfContents/TableOfContents'; -import { Testimonial } from './Testimonial/Testimonial'; import { TextBlock } from './TextBlock/TextBlock'; import { VisualBlock } from './VisualBlock/VisualBlock'; export const CaseStudy = { + SectionNav: CaseStudySectionNav, Hero, - TableOfContents, - Testimonial, TextBlock, VisualBlock, }; diff --git a/packages/twenty-website-new/src/sections/Demo/components/Root/Root.tsx b/packages/twenty-website-new/src/sections/Demo/components/Root/Root.tsx index d0d26c5892..61abc60c16 100644 --- a/packages/twenty-website-new/src/sections/Demo/components/Root/Root.tsx +++ b/packages/twenty-website-new/src/sections/Demo/components/Root/Root.tsx @@ -77,7 +77,7 @@ export function Root({ children }: RootProps) { className={patternImageClassName} fill sizes="(min-width: 921px) 100vw" - src="/images/product/demo/background.png" + src="/images/product/demo/background.webp" /> diff --git a/packages/twenty-website-new/src/sections/EngagementBand/components/Strip/Strip.tsx b/packages/twenty-website-new/src/sections/EngagementBand/components/Strip/Strip.tsx index 002678345a..db5c37cfd6 100644 --- a/packages/twenty-website-new/src/sections/EngagementBand/components/Strip/Strip.tsx +++ b/packages/twenty-website-new/src/sections/EngagementBand/components/Strip/Strip.tsx @@ -6,7 +6,7 @@ import NextImage from 'next/image'; import type { ReactNode } from 'react'; const ENGAGEMENT_BAND_OVERLAY_SRC = - '/images/pricing/engagement-band/overlay.png'; + '/images/pricing/engagement-band/overlay.webp'; const OverlayLayer = styled.div` bottom: 0; diff --git a/packages/twenty-website-new/src/sections/Faq/components/Item/Item.tsx b/packages/twenty-website-new/src/sections/Faq/components/Item/Item.tsx index 6ab2221ce0..833df68ee3 100644 --- a/packages/twenty-website-new/src/sections/Faq/components/Item/Item.tsx +++ b/packages/twenty-website-new/src/sections/Faq/components/Item/Item.tsx @@ -1,6 +1,5 @@ 'use client'; -import { IconButton } from '@/design-system/components'; import { MinusIcon, PlusIcon, @@ -47,14 +46,60 @@ const QuestionIconLayer = styled.span` const ToggleContainer = styled.div` grid-column: 5; margin-top: ${theme.spacing(0.5)}; +`; - button::after { - bottom: 0; - content: ''; - left: 0; - position: absolute; - right: 0; - top: 0; +const ToggleVisual = styled.span` + align-items: center; + border: 1px solid ${theme.colors.secondary.border[40]}; + border-radius: ${theme.radius(2)}; + display: inline-flex; + height: 36px; + justify-content: center; + transition: + border-color 0.2s ease, + transform 0.2s cubic-bezier(0.2, 0.8, 0.2, 1); + width: 36px; +`; + +const RowTrigger = styled.button` + background: transparent; + border: none; + color: inherit; + cursor: pointer; + display: grid; + font: inherit; + grid-column: 1 / -1; + grid-template-columns: subgrid; + margin: 0; + padding: 0; + position: relative; + text-align: left; + width: 100%; + + &:focus-visible { + outline: 1px solid ${theme.colors.highlight[100]}; + outline-offset: 1px; + } + + &:hover ${QuestionText} { + color: #ffffff; + } + + &:hover ${QuestionIconLayer}[data-layer='outline'] { + opacity: 0; + } + + &:hover ${QuestionIconLayer}[data-layer='fill'] { + opacity: 1; + } + + &:hover ${ToggleVisual} { + border-color: ${theme.colors.secondary.text[100]}; + transform: scale(1.08); + } + + &:active ${ToggleVisual} { + transform: scale(0.96); } `; @@ -93,22 +138,6 @@ const Header = styled.h3` margin-right: 0; margin-top: 0; position: relative; - - &:hover ${QuestionText} { - color: #ffffff; - } - - &:hover ${QuestionIconLayer}[data-layer='outline'] { - opacity: 0; - } - - &:hover ${QuestionIconLayer}[data-layer='fill'] { - opacity: 1; - } - - &:hover ${ToggleContainer} button { - border-color: ${theme.colors.secondary.text[100]}; - } `; const QuestionIconContainer = styled.span` @@ -157,43 +186,42 @@ export function Item({ question, value }: ItemProps) { return ( }> }> - - - - - - - - + { + const isOpen = state.open; + const ToggleIcon = isOpen ? MinusIcon : PlusIcon; + return ( + // oxlint-disable-next-line react/jsx-props-no-spreading -- Accordion.Trigger host props + + + + + + + + + - {question.question.text} + {question.question.text} - - { - const isOpen = state.open; - return ( - - ); - }} - /> - + + + + + + + ); + }} + /> } keepMounted> diff --git a/packages/twenty-website-new/src/sections/Hero/components/HomeVisual/homeVisualTokens.ts b/packages/twenty-website-new/src/sections/Hero/components/HomeVisual/homeVisualTokens.ts index 93eff83151..b7c51a19fe 100644 --- a/packages/twenty-website-new/src/sections/Hero/components/HomeVisual/homeVisualTokens.ts +++ b/packages/twenty-website-new/src/sections/Hero/components/HomeVisual/homeVisualTokens.ts @@ -35,7 +35,7 @@ export const VISUAL_TOKENS = { }, }, background: { - noisy: 'url("/images/shared/light-noise.png")', + noisy: 'url("/images/shared/light-noise.webp")', primary: '#ffffff', secondary: '#fcfcfc', transparent: { @@ -52,8 +52,7 @@ export const VISUAL_TOKENS = { primary: '#d9e2fc', }, boxShadow: { - light: - '0px 2px 4px rgba(0, 0, 0, 0.04), 0px 0px 4px rgba(0, 0, 0, 0.08)', + light: '0px 2px 4px rgba(0, 0, 0, 0.04), 0px 0px 4px rgba(0, 0, 0, 0.08)', }, icon: { size: { diff --git a/packages/twenty-website-new/src/sections/Hero/components/WhyTwentyVisual/WhyTwentyVisual.tsx b/packages/twenty-website-new/src/sections/Hero/components/WhyTwentyVisual/WhyTwentyVisual.tsx index 7d89cdc072..9a69257e3f 100644 --- a/packages/twenty-website-new/src/sections/Hero/components/WhyTwentyVisual/WhyTwentyVisual.tsx +++ b/packages/twenty-website-new/src/sections/Hero/components/WhyTwentyVisual/WhyTwentyVisual.tsx @@ -35,7 +35,7 @@ export function WhyTwentyVisual() { fill priority sizes="100vw" - src="/images/why-twenty/hero/background.png" + src="/images/why-twenty/hero/background.webp" /> diff --git a/packages/twenty-website-new/src/sections/HomeStepper/components/Visual/Visual.tsx b/packages/twenty-website-new/src/sections/HomeStepper/components/Visual/Visual.tsx index 8e9a1aef76..3bf39cac76 100644 --- a/packages/twenty-website-new/src/sections/HomeStepper/components/Visual/Visual.tsx +++ b/packages/twenty-website-new/src/sections/HomeStepper/components/Visual/Visual.tsx @@ -3,8 +3,8 @@ import { StepperVisualFrame } from '../StepperVisualFrame/StepperVisualFrame'; import { StepperLottie } from './StepperLottie'; -const HOME_STEPPER_BACKGROUND = '/images/home/stepper/background.png'; -const HOME_STEPPER_SHAPE = '/images/home/stepper/background-shape.png'; +const HOME_STEPPER_BACKGROUND = '/images/home/stepper/background.webp'; +const HOME_STEPPER_SHAPE = '/images/home/stepper/background-shape.webp'; type VisualProps = { scrollProgress: number; diff --git a/packages/twenty-website-new/src/sections/ProductStepper/components/Visual/Visual.tsx b/packages/twenty-website-new/src/sections/ProductStepper/components/Visual/Visual.tsx index f8c4df9a4b..667a164293 100644 --- a/packages/twenty-website-new/src/sections/ProductStepper/components/Visual/Visual.tsx +++ b/packages/twenty-website-new/src/sections/ProductStepper/components/Visual/Visual.tsx @@ -5,8 +5,8 @@ import { styled } from '@linaria/react'; import NextImage from 'next/image'; import { StepperVisualFrame } from '../StepperVisualFrame/StepperVisualFrame'; -const PRODUCT_STEPPER_BACKGROUND = '/images/product/stepper/background.png'; -const PRODUCT_STEPPER_SHAPE = '/images/product/stepper/background-shape.png'; +const PRODUCT_STEPPER_BACKGROUND = '/images/product/stepper/background.webp'; +const PRODUCT_STEPPER_SHAPE = '/images/product/stepper/background-shape.webp'; const VisualColumn = styled.div` min-width: 0; diff --git a/packages/twenty-website-new/src/sections/ReleaseNotes/components/ReleaseMarkdown/ReleaseMarkdown.tsx b/packages/twenty-website-new/src/sections/ReleaseNotes/components/ReleaseMarkdown/ReleaseMarkdown.tsx index ad45d713c0..2284840f37 100644 --- a/packages/twenty-website-new/src/sections/ReleaseNotes/components/ReleaseMarkdown/ReleaseMarkdown.tsx +++ b/packages/twenty-website-new/src/sections/ReleaseNotes/components/ReleaseMarkdown/ReleaseMarkdown.tsx @@ -5,15 +5,12 @@ import { styled } from '@linaria/react'; import ReactMarkdown from 'react-markdown'; import remarkGfm from 'remark-gfm'; -const MARKETING_ORIGIN = - process.env.NEXT_PUBLIC_MARKETING_ASSET_ORIGIN ?? 'https://twenty.com'; - function resolveAssetUrl(url: string | undefined): string { if (!url) { return ''; } if (url.startsWith('/')) { - return `${MARKETING_ORIGIN}${url}`; + return url; } return url; } @@ -110,7 +107,8 @@ const Prose = styled.div` display: block; height: auto; margin-top: ${theme.spacing(6)}; - max-width: 100%; + max-width: min(100%, 720px); + width: auto; } hr { @@ -137,12 +135,24 @@ export function ReleaseMarkdown({ markdown }: ReleaseMarkdownProps) { ( - + {children} ), img: ({ alt, src, ...props }) => ( - {alt + {alt ), }} remarkPlugins={[remarkGfm]} diff --git a/packages/twenty-website-new/src/sections/Tabs/components/Root/Root.tsx b/packages/twenty-website-new/src/sections/Tabs/components/Root/Root.tsx index c80c2bbe89..cee2170e9b 100644 --- a/packages/twenty-website-new/src/sections/Tabs/components/Root/Root.tsx +++ b/packages/twenty-website-new/src/sections/Tabs/components/Root/Root.tsx @@ -109,7 +109,7 @@ export function Root({ children }: RootProps) { fill priority sizes="100vw" - src="/images/product/tabs/background-shape.png" + src="/images/product/tabs/background-shape.webp" /> @@ -118,7 +118,7 @@ export function Root({ children }: RootProps) { className={patternImageClassName} fill sizes="100vw" - src="/images/product/tabs/background.png" + src="/images/product/tabs/background.webp" /> diff --git a/packages/twenty-website-new/src/sections/Testimonials/TestimonialsShape.tsx b/packages/twenty-website-new/src/sections/Testimonials/TestimonialsShape.tsx deleted file mode 100644 index 6f9dd71911..0000000000 --- a/packages/twenty-website-new/src/sections/Testimonials/TestimonialsShape.tsx +++ /dev/null @@ -1,51 +0,0 @@ -const TESTIMONIALS_SHAPE_CLIP_PATH = - 'polygon(0% 20%, 0.294% 0%, 25.318% 0%, 31.069% 100%, 69.135% 100%, 74.507% 0%, 99.706% 0%, 100% 20%, 100% 100%, 0% 100%)'; - -interface TestimonialsShapeProps { - bodyFillColor?: string; - fillColor: string; -} - -export function TestimonialsShape({ - bodyFillColor, - fillColor, -}: TestimonialsShapeProps) { - return ( -
-
-
-
- ); -} diff --git a/packages/twenty-website-new/src/sections/Testimonials/components/PartnerCarousel/PartnerCarousel.tsx b/packages/twenty-website-new/src/sections/Testimonials/components/PartnerCarousel/PartnerCarousel.tsx index 9f077db638..af2abaa1a0 100644 --- a/packages/twenty-website-new/src/sections/Testimonials/components/PartnerCarousel/PartnerCarousel.tsx +++ b/packages/twenty-website-new/src/sections/Testimonials/components/PartnerCarousel/PartnerCarousel.tsx @@ -76,6 +76,20 @@ const PortraitFrame = styled.div` width: 100%; `; +const PortraitPlaceholder = styled.div` + align-items: center; + background-color: ${theme.colors.secondary.border[10]}; + color: ${theme.colors.secondary.text[60]}; + display: flex; + font-family: ${theme.font.family.sans}; + font-size: ${theme.font.size(12)}; + font-weight: ${theme.font.weight.medium}; + height: 100%; + justify-content: center; + letter-spacing: -0.02em; + width: 100%; +`; + const AuthorMeta = styled.div` display: grid; max-width: 253px; @@ -128,6 +142,7 @@ const RightColumn = styled.div` `; const QuoteArea = styled.div` + isolation: isolate; min-width: 0; position: relative; @@ -139,6 +154,8 @@ const QuoteArea = styled.div` const QuoteStack = styled.div` display: grid; min-width: 0; + position: relative; + z-index: 1; `; const QuoteWrapper = styled.div` @@ -169,7 +186,7 @@ const QuoteDecoration = styled.div` overflow: hidden; pointer-events: none; position: absolute; - right: 48px; + right: 0; top: 56px; width: 646px; z-index: 0; @@ -179,7 +196,7 @@ const QuoteDecoration = styled.div` const QuoteDecorationVisual = styled.div` @media (min-width: ${theme.breakpoints.md}px) { position: absolute; - right: 36px; + right: 0; top: -112px; transform: scale(1.9); transform-origin: top right; @@ -226,6 +243,15 @@ export function PartnerCarousel({ if (hasNext) setIndex(index + 1); }; + const avatar = current.author.avatar; + const authorInitials = current.author.name.text + .split(/\s+/) + .map((word) => word[0]) + .filter(Boolean) + .slice(0, 2) + .join('') + .toUpperCase(); + return ( - + {avatar ? ( + + ) : ( + + {authorInitials} + + )} @@ -260,19 +292,23 @@ export function PartnerCarousel({ - + {current.author.date ? ( + + ) : null} diff --git a/packages/twenty-website-new/src/sections/Testimonials/components/Root/Root.tsx b/packages/twenty-website-new/src/sections/Testimonials/components/Root/Root.tsx index a21edd5331..de1bc37eaa 100644 --- a/packages/twenty-website-new/src/sections/Testimonials/components/Root/Root.tsx +++ b/packages/twenty-website-new/src/sections/Testimonials/components/Root/Root.tsx @@ -1,21 +1,32 @@ import { Container } from '@/design-system/components'; import { theme } from '@/theme'; import { styled } from '@linaria/react'; +import NextImage from 'next/image'; import type { ReactNode } from 'react'; -import { TestimonialsShape } from '@/sections/Testimonials/TestimonialsShape'; const StyledSection = styled.section` - isolation: isolate; + min-width: 0; overflow: hidden; position: relative; width: 100%; `; +const BackgroundShape = styled.div` + left: 0; + pointer-events: none; + position: absolute; + right: 0; + top: 0; + z-index: 0; +`; + const StyledContainer = styled(Container)` padding-bottom: ${theme.spacing(22)}; padding-left: ${theme.spacing(4)}; padding-right: ${theme.spacing(4)}; padding-top: ${theme.spacing(22)}; + position: relative; + z-index: 1; @media (min-width: ${theme.breakpoints.md}px) { padding-left: ${theme.spacing(10)}; @@ -27,27 +38,31 @@ const StyledContainer = styled(Container)` type RootProps = { backgroundColor: string; + backgroundShapeSrc?: string; children: ReactNode; color: string; - shapeBodyFillColor?: string; - shapeFillColor?: string; }; export function Root({ backgroundColor, + backgroundShapeSrc, children, color, - shapeBodyFillColor, - shapeFillColor, }: RootProps) { return ( - {shapeFillColor && ( - - )} + {backgroundShapeSrc ? ( + + + + ) : null} {children} ); diff --git a/packages/twenty-website-new/src/sections/Testimonials/types/TestimonialAuthor.ts b/packages/twenty-website-new/src/sections/Testimonials/types/TestimonialAuthor.ts index b53b50b545..05436ff128 100644 --- a/packages/twenty-website-new/src/sections/Testimonials/types/TestimonialAuthor.ts +++ b/packages/twenty-website-new/src/sections/Testimonials/types/TestimonialAuthor.ts @@ -3,4 +3,9 @@ import type { BodyType } from '@/design-system/components/Body/types/Body'; export type TestimonialAuthorType = { name: BodyType; designation: BodyType; + avatar?: { + src: string; + alt?: string; + }; + date?: Date; }; diff --git a/yarn.lock b/yarn.lock index e87ca28922..f7910191a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -57014,7 +57014,7 @@ __metadata: languageName: node linkType: hard -"sharp@npm:^0.33.1": +"sharp@npm:^0.33.1, sharp@npm:^0.33.5": version: 0.33.5 resolution: "sharp@npm:0.33.5" dependencies: @@ -60944,6 +60944,7 @@ __metadata: react-dom: "npm:19.2.3" react-markdown: "npm:^10.1.0" remark-gfm: "npm:^4.0.1" + sharp: "npm:^0.33.5" three: "npm:^0.183.2" languageName: unknown linkType: soft