Thomas des Francs
8dd0aa46e3
Update OAuth consent modal design ( #20540 )
...
## Summary
Updates the OAuth consent screen to match the provided modal treatment,
including the header artwork, app-to-Twenty logo layout, scope icons,
and a content-hugging title that stays on one line until its max width.
Also preserves `returnToPath` through Google and Microsoft social SSO so
users who sign in from `/authorize` return to the OAuth consent flow
with the original OAuth query parameters intact.
## Reference

## Validation
- `yarn nx test twenty-front
--testFile=src/modules/auth/hooks/__tests__/useAuth.test.tsx
--coverage=false`
- `yarn nx test twenty-server
--testFile=src/engine/core-modules/auth/services/auth.service.spec.ts
--coverage=false`
- `yarn nx typecheck twenty-front`
- `yarn nx typecheck twenty-server`
- `git diff --check`
## Notes
The reference screenshot is linked from a separate branch-hosted image
commit so it renders in the PR body without adding that screenshot to
the product diff.
Co-authored-by: Charles Bochet <charles@twenty.com >
2026-05-14 07:15:11 +00:00
nitin
3c067f072c
[AI] Improve tools tab ( #19221 )
2026-04-02 13:36:33 +00:00
nitin
08f019e9c9
[AI] More tab new design ( #19165 )
...
closes
https://discord.com/channels/1130383047699738754/1480981616666087687
<img width="1596" height="1318" alt="CleanShot 2026-03-31 at 18 06 37"
src="https://github.com/user-attachments/assets/0d87610e-e4ce-4f3d-8047-97d242f230c5 "
/>
2026-03-31 16:26:40 +02:00
Etienne
d2cf05f4f4
Fix - Not shared message on record index ( #19103 )
...
quality-feedbacks :
https://discord.com/channels/1130383047699738754/1486711185436053514/1486711185436053514
<img width="1000" height="500" alt="Screenshot 2026-03-30 at 09 42 48"
src="https://github.com/user-attachments/assets/fe9027fe-0056-4fec-af51-5b39bb467bb5 "
/>
<img width="1000" height="500" alt="Screenshot 2026-03-30 at 09 42 34"
src="https://github.com/user-attachments/assets/8cd05ea0-7eb2-4490-b87e-3a7dcd57add2 "
/>
---------
Co-authored-by: Weiko <corentin@twenty.com >
2026-03-30 13:53:35 +00:00
nitin
4985270e69
[AI] Refactor settings search to use SearchInput and restructure Skills tab ( #18876 )
...
closes -
https://discord.com/channels/1130383047699738754/1480980523315626178
2026-03-26 05:57:41 +00:00
Charles Bochet
9d57bc39e5
Migrate from ESLint to OxLint ( #18443 )
...
## Summary
Fully replaces ESLint with OxLint across the entire monorepo:
- **Replaced all ESLint configs** (`eslint.config.mjs`) with OxLint
configs (`.oxlintrc.json`) for every package: `twenty-front`,
`twenty-server`, `twenty-emails`, `twenty-ui`, `twenty-shared`,
`twenty-sdk`, `twenty-zapier`, `twenty-docs`, `twenty-website`,
`twenty-apps/*`, `create-twenty-app`
- **Migrated custom lint rules** from ESLint plugin format to OxLint JS
plugin system (`@oxlint/plugins`), including
`styled-components-prefixed-with-styled`, `no-hardcoded-colors`,
`sort-css-properties-alphabetically`,
`graphql-resolvers-should-be-guarded`,
`rest-api-methods-should-be-guarded`, `max-consts-per-file`, and
Jotai-related rules
- **Migrated custom rule tests** from ESLint `RuleTester` + Jest to
`oxlint/plugins-dev` `RuleTester` + Vitest
- **Removed all ESLint dependencies** from `package.json` files and
regenerated lockfiles
- **Updated Nx targets** (`lint`, `lint:diff-with-main`, `fmt`) in
`nx.json` and per-project `project.json` to use `oxlint` commands with
proper `dependsOn` for plugin builds
- **Updated CI workflows** (`.github/workflows/ci-*.yaml`) — no more
ESLint executor
- **Updated IDE setup**: replaced `dbaeumer.vscode-eslint` with
`oxc.oxc-vscode` extension, configured `source.fixAll.oxc` and
format-on-save with Prettier
- **Replaced all `eslint-disable` comments** with `oxlint-disable`
equivalents across the codebase
- **Updated docs** (`twenty-docs`) to reference OxLint instead of ESLint
- **Renamed** `twenty-eslint-rules` package to `twenty-oxlint-rules`
### Temporarily disabled rules (tracked in `OXLINT_MIGRATION_TODO.md`)
| Rule | Package | Violations | Auto-fixable |
|------|---------|-----------|-------------|
| `twenty/sort-css-properties-alphabetically` | twenty-front | 578 | Yes
|
| `typescript/consistent-type-imports` | twenty-server | 3814 | Yes |
| `twenty/max-consts-per-file` | twenty-server | 94 | No |
### Dropped plugins (no OxLint equivalent)
`eslint-plugin-project-structure`, `lingui/*`, `@stylistic/*`,
`import/order`, `prefer-arrow/prefer-arrow-functions`,
`eslint-plugin-mdx`, `@next/eslint-plugin-next`,
`eslint-plugin-storybook`, `eslint-plugin-react-refresh`. Partial
coverage for `jsx-a11y` and `unused-imports`.
### Additional fixes (pre-existing issues exposed by merge)
- Fixed `EmailThreadPreview.tsx` broken import from main rename
(`useOpenEmailThreadInSidePanel`)
- Restored truthiness guard in `getActivityTargetObjectRecords.ts`
- Fixed `AgentTurnResolver` return types to match entity (virtual
`fileMediaType`/`fileUrl` are resolved via `@ResolveField()`)
## Test plan
- [x] `npx nx lint twenty-front` passes
- [x] `npx nx lint twenty-server` passes
- [x] `npx nx lint twenty-docs` passes
- [x] Custom oxlint rules validated with Vitest: `npx nx test
twenty-oxlint-rules`
- [x] `npx nx typecheck twenty-front` passes
- [x] `npx nx typecheck twenty-server` passes
- [x] CI workflows trigger correctly with `dependsOn:
["twenty-oxlint-rules:build"]`
- [x] IDE linting works with `oxc.oxc-vscode` extension
2026-03-06 01:03:50 +01:00
Abdullah.
92eff62523
Replace test-runner with vitest for storybook ( #17187 )
2026-01-18 03:25:45 +00:00
nitin
1b2f079359
Page Layout - Addition of widgets ( #14184 )
...
https://github.com/user-attachments/assets/130f12d7-5cef-4b83-912f-a9d42241f69f
~~This could be considered a POC 😅 ~~
addressing -
https://github.com/twentyhq/core-team-issues/issues/1400
https://github.com/twentyhq/core-team-issues/issues/1403
2025-09-02 10:20:28 +00:00
Antoine Moreaux
11abe5440b
feat(ai): add mcp-metadata ( #13150 )
...
Co-authored-by: Félix Malfait <felix@twenty.com >
2025-07-16 21:32:32 +02:00
Antoine Moreaux
e5522c8efe
feat(ai): add mcp integration ( #13004 )
2025-07-03 21:23:58 +02:00
nitin
a8fb039e65
poc - cal.com integration in onboarding flow ( #12530 )
2025-06-19 15:27:38 +05:30
Félix Malfait
5343dd62d6
Update readme with partner logos ( #11722 )
...
Recognize the role of Greptile/Sentry/Crowdin/Chromatic which give
generous open source plans + some cleanup
2025-04-24 16:09:43 +02:00
Félix Malfait
e5754d2152
Remove env-config.js ( #9331 )
...
Fixes #5340 which had been open for a long time
2025-01-03 15:18:02 +01:00
nitin
8d469b9bc3
Swap dark placeholders ( #8956 )
...
closes #8853
2024-12-09 14:21:10 +01:00
Prashant Acharya
29f903a83b
Added new logo images ( #7840 )
...
**Added new logo in different png format**
Fixed Issue:
Design a new logo for Twenty (300 points) #**7834**
What tool did I used?
I used logo.com as a design tool to design the logo.
Logo I made:




2024-10-19 10:58:20 +02:00
Baptiste Devessier
729c990546
Activate/Deactivate workflow and Discard Draft ( #7022 )
...
## Setup
This PR can be tested only if some feature flags have specific values:
- `IsWorkflowEnabled` equals `true`
- `IsQueryRunnerTwentyORMEnabled` equals `false`
These feature flags weren't committed to don't break other branches.
## What this PR brings
- Display buttons to activate and deactivate a workflow version and a
button to discard the current draft version. I also scaffolded a "Test"
button, which doesn't do anything for now.
- Wired the activate, deactivate and discard draft buttons to the
backend.
- Made it possible to "edit" active and deactivated versions by
automatically creating a new draft version when the user tries to edit
the version.
- Hide the "Discard Draft", button if the current version is not a draft
or is the first version ever created.
- On the backend, don't consider discarded drafts when checking if a new
draft version can be created.
- On the backend, disallow deleting the first created workflow version.
Otherwise, we will end up with a blank canvas in the front end, and it
will be impossible to recover from it.
- On the backend, disallow running deactivation steps if the workflow
version is not currently active. Previously, we were throwing, which is
unnecessary as it's a valid case.
## Spotted bugs that we must dive into
### Duplicate workflow versions in Apollo cache
https://github.com/user-attachments/assets/7cfffd06-11e0-417a-8da0-f9a5f43b84e2
---------
Co-authored-by: Charles Bochet <charles@twenty.com >
2024-09-25 18:09:31 +02:00
Pacifique LINJANJA
601e15f028
Feat(frontend): improve the soft delete empty state ( #6877 )
...
# This PR
- Fix #6834
## Demo
https://www.loom.com/share/235c4425f3264f429e2064a9d1604a90?sid=02a815c9-3b1a-45e6-b5ce-d5eb3b40e10e
## Notes
- There is a missing icon in Figma corresponding to the
`noDeletedRecordFound` in the dark mode, thus I used the same icon
(different background because we have the correct background image) for
both dark / light modes
<img width="625" alt="Screenshot 2024-09-03 at 15 04 57"
src="https://github.com/user-attachments/assets/cbc0c3dd-a1ee-49a5-be9a-36450e78a992 ">
cc: @Bonapara
---------
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com >
2024-09-18 09:39:39 +02:00
martmull
00fea17920
Serverless function UI ( #6388 )
...
https://www.figma.com/design/xt8O9mFeLl46C5InWwoMrN/Twenty?node-id=36235-120877
Did not do the file manager part. A Function is defined using one unique
file at the moment
Feature protected by featureFlag `IS_FUNCTION_SETTINGS_ENABLED`
## Demo
https://github.com/user-attachments/assets/0acb8291-47b4-4521-a6fa-a88b9198609b
2024-07-29 13:03:09 +02:00
Jeet Desai
e00b19e4cc
Change email tab placeholder illustration ( #5550 )
...
Fixes #5502


2024-05-23 18:26:08 +02:00
Thomas Trompette
de438b0171
Add stripe connection option ( #5372 )
...
- Refactor creation and edition form so it handles stripe integration
and not only postgres
- Add a hook `useIsSettingsIntegrationEnabled` to avoid checking feature
flags everywhere
- Add zod schema for stripe
<img width="250" alt="Capture d’écran 2024-05-13 à 12 41 52"
src="https://github.com/twentyhq/twenty/assets/22936103/a77e7278-5d79-4f95-bddb-ae9ddd1426eb ">
<img width="250" alt="Capture d’écran 2024-05-13 à 12 41 59"
src="https://github.com/twentyhq/twenty/assets/22936103/d617dc6a-31a4-43c8-8192-dbfb7157de1c ">
<img width="250" alt="Capture d’écran 2024-05-13 à 12 42 08"
src="https://github.com/twentyhq/twenty/assets/22936103/c4e2d0e4-f826-436d-89be-4d1679a27861 ">
---------
Co-authored-by: Thomas Trompette <thomast@twenty.com >
2024-05-13 18:00:13 +02:00
Thaïs
bf8ee99ebb
chore: use common eslint config for most packages ( #4705 )
...
Split from https://github.com/twentyhq/twenty/pull/4518
Related to #4766
Mutualizes eslint config between projects.
I didn't include `twenty-server` in this PR as this was causing too many
lint errors.
2024-04-04 12:05:26 +02:00
Aditya Pimpalkar
d24d5a9a2e
feat: authorize screen ( #4687 )
...
* authorize screen
* lint fix
* add BlankLayout on Authorize route
* typo fix
* route decorator fix
* Unrelated fix
---------
Co-authored-by: Félix Malfait <felix.malfait@gmail.com >
2024-03-31 12:23:56 +02:00
Thaïs
6ab43c608f
feat: create Integrations/IntegrationDetail page ( #4574 )
...
* feat: create Integrations/IntegrationDetail page
Closes #4546
* docs: add Settings/Integrations/Integration Detail page stories
* docs: add Settings/Billing page stories
* refactor: move some Settings components to @/settings
* refactor: move some Settings integrations components to @/settings/integrations
2024-03-25 18:06:46 +01:00
Charles Bochet
a5ecbf7df5
Integrations: design fixes and remove feature flag ( #4003 )
...
* Integrations: design fixes and remove feature flag
* Fix
2024-02-16 13:35:45 +01:00
Jeet Desai
2a45aa9e0d
Update loading image ( #3929 )
...
#3833 update loading image
2024-02-13 23:18:42 +01:00
Kanav Arora
7b88e5bdaf
3865-Add-Integrations ( #3870 )
...
* initial commit setup
* ui done
* added links
* changed brand logos
* Twenty logo fix
* Windmill logo fix
* Fix typo
* Add feature flag
---------
Co-authored-by: Charles Bochet <charles@twenty.com >
2024-02-13 23:11:05 +01:00
Jeet Desai
b286232ea7
Added the dark mode version of empty states ( #3906 )
...
* #3898 added empty states in dark mode version
* resolved eslint issue
2024-02-13 12:31:26 +01:00
bosiraphael
917fc5bd4d
3811 add accounts loader ( #3829 )
...
* rename exports
* rename exports
* fix css
* done
* updating image
2024-02-09 15:29:11 +01:00
bosiraphael
bd5d930be2
3706 add email loader ( #3731 )
...
* add images
* update component
* wip
* add loader cntainer
* wip
* Loader is working
* fix color and keyframes
* change loading message for threads
2024-02-01 10:15:41 +01:00
bosiraphael
7d898f89a9
3696 add emails tab empty state on shows ( #3702 )
...
* empty inbox
* fix No Files alignment
* add animation when exiting the screen
* update calendar settings to be singular
2024-01-31 12:18:47 +01:00
Kanav Arora
b07d67c624
New Empty States ( #3465 )
...
New empty states
---------
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com >
2024-01-30 11:01:56 +01:00
Thaïs
8483cf0b4b
POC: chore: use Nx workspace lint rules ( #3163 )
...
* chore: use Nx workspace lint rules
Closes #3162
* Fix lint
* Fix lint on BE
* Fix tests
---------
Co-authored-by: Charles Bochet <charles@twenty.com >
2024-01-03 23:07:25 +01:00
Charles Bochet
9182efc57a
Fix MSW and storybook setup ( #2976 )
...
* Fix MSW and storybook setup
* Fix
* Fix
* Fixes
* Fix
* Fix
* Fix
2023-12-13 14:37:55 +01:00
Charles Bochet
5bdca9de6c
Migrate to a monorepo structure ( #2909 )
2023-12-10 18:10:54 +01:00